Account API overview
Agency balances, the financial ledger and cross-product booking history.
Read-only endpoints for the state of your account: the balance of each currency, the money movements of a balance, and the bookings of your agency across all products (flights, hotels, eSIMs and transfers).
Permission: Read (every endpoint in this section). Rate limit: the default group, 6,000 requests per minute per key (see Rate limits).
Endpoints
| Method | Path | Description |
|---|---|---|
GET | / | The balance of each currency your agency holds |
GET | / | The money movements of one balance |
GET | / | Booking summaries across all products |
GET | / | One booking in detail, by its reference |
Conventions of the account endpoints
- The agency comes from the key. Never send
agency_id: an API key that does is refused with400 agency_id_not_allowed. - Environment. A sandbox key reads sandbox data and a live key reads live data. Every body says which in
environment. - Pagination.
pagestarts at 1 (at most 10,000) andlimitis 1 to 100 (default 20); a largerlimitis refused with422 validation_error, and an emptypageorlimit(?page=) means not sent. The answer haspagination: { page, limit, total, total_pages, hasMore, has_more }.totalis the real number of entries that match andtotal_pagesistotaldivided bylimit, rounded up. Followhas_more, nottotal_pages: each page is served from the newest entries only (200 per product for the history, 500 per source for a balance history), so older entries are reached by narrowing the list withdate_fromanddate_to.hasMoreandhas_morecarry the same value. - Dates.
date_fromanddate_totake an ISO 8601 date or datetime in any common spelling:2026-10-01or20261001, a fraction of 1 to 9 digits, an offset writtenZ,+01:00or+0100(in a URL write the+as%2B). A bare date means 00:00:00 UTC fordate_fromand the end of the day (23:59:59.999999 UTC) fordate_to; a datetime without an offset is read as UTC. Years 1900 to 2200. Something that is not an ISO 8601 date (01/, an epoch number,10/ 2026 yesterday) is400 invalid_date, and adate_fromafterdate_tois400 invalid_date_range. Both bounds are inclusive. - Product and status.
producttakes any case and the singular names (flight,hotel,esim,transfer);statustakes any case and reads spaces and hyphens as underscores (On Holdison_hold). - Legacy names.
fromandfrom_dateare the previous names ofdate_from, andtoandto_dateofdate_to. They still work and the response carries adeprecated_fieldwarning; when both spellings are sent,date_fromanddate_towin. - Names in the answers. The booking summaries use camelCase keys for historical reasons (
bookingId,totalPrice...). Every key that matters has a snake_case twin with the same value (booking_id,total_price...), listed in the tables of each page, and?naming=snakereturns every key in snake_case. Therecordof a booking and the balance rows are snake_case already. See Conventions and naming. - Timestamps are ISO 8601 with a zone, in UTC.
- Amounts are in your agency currency, rounded to two decimals.
Sandbox behaviour
| Endpoint | In the sandbox |
|---|---|
GET / | An envelope with an empty data and a meta that says why: financialOperationsEnabled: false and a message. It is not a bare array |
GET / | Always empty (pagination.total is 0), for any balance_id of up to 64 characters |
GET / | Sandbox bookings only |
GET / | Sandbox bookings only. The balance operations of a flight or hotel are empty |
Sandbox bookings never touch the live ledger.
Error responses
Every error has a stable code in errors[0].code. The older detail.error carries the same code.
| HTTP | code | Cause |
|---|---|---|
400 | agency_id_not_allowed | An API key sent agency_id |
400 | invalid_date | date_from or date_to is not an ISO 8601 value, or is outside 1900 to 2200 |
400 | invalid_date_range | date_from is after date_to |
400 | invalid_product | product is not one of all, flights, hotels, esims, transfers (or their singular names). details.allowed lists them |
400 | invalid_status | status is not a plain status name: letters, digits, _, spaces or hyphens, at most 32 characters |
400 | invalid_booking_id | The booking reference has more than 100 characters or characters other than letters, digits and ._:=+~- |
401 | authentication_required, invalid_api_key | Missing or invalid API key |
404 | balance_not_found | The balance_id is not a balance of your agency (live) |
404 | booking_not_found | No booking matches in this environment |
422 | validation_error | page is below 1 or above 10,000, limit is above 100, or a value is too long |
429 | rate_limit_exceeded | Over 6,000 requests per minute for this key |
500 | internal_error | An error on our side. Retry; contact support if it persists |
503 | service_overloaded | The service is shedding load for a moment (its database pool is full). Nothing was read: retry after the seconds in Retry-After (2 to 5) |