GET /api/v0/pricing, which is free to call.
How a charge works
- Each charged item has a
priced_itemname and a price in US dollars, listed byGET /api/v0/pricing. - A request is charged all at once, after its data is loaded and before it is returned.
- When the charge is refused, the request returns
402or403, nothing is returned, and nothing is charged. See Refusals. - A request that fails for another reason, such as
400,404, or5xx, is not charged. - A charge is final once it is recorded. If the connection fails after that, the charge is not reversed, and retrying the request can be charged again.
- Every REST response carries
X-Charged-Usd, what the request actually cost in US dollars with three decimal places, e.g.0.030. Free routes, empty transcript or PIREP results, a flight status whosestatusisnull, and refused requests report0.000. - When a request was billed, its response also carries
X-Balance-Usd, the organization’s balance after the charge, in the same format, e.g.987.650. It is omitted when no balance was loaded.
Receipts on the live WebSocket and MCP
- Live WebSocket: each
updatemessage reportscharged_usd, what that message cost, and, when it was billed,balance_usd, the balance after it. Both are strings in US dollars with three decimal places, e.g."0.150". A firstflight_statusupdate whosestatusisnullreports"0.000"withoutbalance_usd. The WebSocket upgrade response does not report the cost of later updates. See Connect. - MCP: each tool result reports the same
charged_usdandbalance_usdfields in_meta.billingand in an additional JSON text content block. Free tools and failed tool calls reportcharged_usd"0.000"without a balance. See MCP server.
What is charged
These routes are free:
GET /health, GET /api/v0/docs, GET /api/v0/pricing, GET /api/v0/facilities, GET /api/v0/facilities/search, and GET /api/v0/airlines. Opening a live connection and subscribing are free, except for the first update of flight_status and airport_status.
Common cases
Empty results
Empty results
A transcript list or PIREP search that returns nothing costs nothing. An event search always costs one
event_query_page, even when no event matches. A flight status whose status is null is free: X-Charged-Usd is 0.000 and X-Balance-Usd is omitted.Requesting the same data again
Requesting the same data again
Every request is charged for what it returns, even if an earlier request returned the same transcript, event, or status. Store what you need instead of fetching it again.
Events with updates
Events with updates
GET /api/v0/events and GET /api/v0/events/{event_id} return an event with all its updates nested in it, charged as one event_pull. The live events topic sends the event again each time it is updated, and each message is charged as one event_push.First update of a subscription
First update of a subscription
Subscribing to
flight_status or airport_status sends the current status right away, and that first update is charged when you subscribe. For flight_status it is free when status is null. Other topics send nothing until new data arrives.Reconnecting
Reconnecting
Subscriptions end when the connection closes. Subscribing again after a reconnect sends, and charges, a new first update for
flight_status and airport_status.Audio links
Audio links
Each call to
GET /api/v0/transcripts/{audio_sample_id}/audio is charged, including a new link for a transmission whose earlier link expired. The rate per link depends on how many links the organization has been charged for this calendar month (UTC); see price_bands in the pricing response.Answers
Answers
An answer is charged for the records it reviewed, at least 300 and at most its
record_limit. A failed answer (502), including one whose client disconnected before the response, is not charged. Retrying a request starts a new answer and is charged again. See Create answer.Account tiers
Each organization is in an account tier chosen by the age of its account and the total it has paid. A tier can limit how many of an item the organization may be charged for, either in total over the life of the account or per calendar month (UTC).GET /api/v0/pricing lists the tiers, what qualifies an organization for each, and their limits.
Refusals
On the live WebSocket, a refused charge for an update ends that subscription. The server sends
unsubscribed with an error that says why, and no request_id. A refused charge for the first update of flight_status or airport_status is answered with an error message instead of subscribed. See Connect.
Add funds in the dashboard.