Flights are a single-product vertical (product_type 4) following the same
search → prebook → book rhythm, on a departure date for a charter flight.
The Partner API endpoints on this page sell contracted charter seat blocks. They do not search connected flight suppliers or issue, void or refund airline tickets.
Charter flights differ from the other verticals in how the party is expressed:
- The party uses typed counts, not ages:
adults,children, andinfants. There are no child ages or age brackets. - One offer is composed per flight by summing the per-passenger-type fares; each fare splits base + tax, and that breakdown survives onto the booking.
- Seats are a mandatory block: adults and children each occupy a seat; an infant occupies no seat (at most one lap-infant per adult).
- A round trip consists of two independent legs. Issue two separate queries.
All three endpoints require the distribution:booking scope.
Step 1: Search
POST /api/v1/flight/search
Composes the offer for the flight and the typed party. The offer is gated by
the flight's operating-days calendar and the per-departure seat surface.
currency_code is required and must be a three-letter uppercase ISO 4217
code. It is bound into the allocation_id and must be replayed unchanged at
prebook.
language is a BCP 47 tag such as tr-TR; the server canonicalizes its casing, a malformed tag answers 400, and a well-formed tag the catalogue does not carry falls back to the default language.
curl -s -X POST \
https://ari.console.adrasis.com/api/v1/flight/search \
-H 'Authorization: Bearer eyJ...' \
-H 'Content-Type: application/json' \
-d '{
"flight_public_id": "fl_IST_AYT_07",
"departure_date": "2026-07-04",
"adults": 2,
"children": 1,
"infants": 1,
"currency_code": "EUR",
"language": "en"
}'
{
"offers": [
{
"allocation_id": "alc_b685cab0e4d281a2397f46e85b30cf12",
"flight_public_id": "fl_IST_AYT_07",
"carrier": "XQ",
"flight_number": "XQ2204",
"cabin": 1,
"direction": 1,
"origin_zone_public_id": "zn_IST",
"dest_zone_public_id": "zn_AYT",
"departure_date": "2026-07-04",
"base_selling_rate": "450.00",
"tax_total": "90.00",
"total_selling_rate": "540.00",
"currency_id": 978,
"currency_code": "EUR",
"pax_breakdown": [
{
"pax_type": 1,
"count": 2,
"base_selling_rate": "180.00",
"tax": "36.00",
"subtotal": "432.00"
},
{
"pax_type": 2,
"count": 1,
"base_selling_rate": "90.00",
"tax": "18.00",
"subtotal": "108.00"
},
{
"pax_type": 3,
"count": 1,
"base_selling_rate": "0.00",
"tax": "0.00",
"subtotal": "0.00"
}
]
}
],
"dropped": [],
"trace_id": "0f2c9d6e-7b1a-4c3e-9a2f-1d6e7b1a4c3e"
}
pax_type is 1 adult, 2 child, 3 infant. Each line's
base_selling_rate and tax are per passenger; subtotal multiplies their
sum by count. Two adults at 180 EUR plus 36 EUR tax each total 432 EUR.
currency_code states the currency base_selling_rate, tax_total, total_selling_rate and
every pax_breakdown line are denominated in. Flight search does not convert:
it returns only fares already held in the currency you asked for, so
currency_code always equals the requested currency_code. A flight whose
fares are held solely in another currency returns no offers rather than a
converted amount; ask for that currency instead. Every fare on one offer is in
the same currency; a flight with fares split across currencies is refused as a
data error rather than composed.
Exact remaining seat counts are not part of the partner contract. A returned
offer has enough inventory for the requested party. When the flight cannot be
offered (non-operating weekday or seats exhausted), the reason is returned
under dropped rather than failing the request.
Step 2: Prebook
POST /api/v1/flight/prebook
Replays the exact flight search, resolves the chosen allocation, recomposes the
typed-pax fare, re-applies the operating-days and seat gates, and mints a
short-lived prebook token. A changed party or flight cannot fall through to
another offer; a withdrawn or sold-out allocation returns 410 Gone.
curl -s -X POST \
https://ari.console.adrasis.com/api/v1/flight/prebook \
-H 'Authorization: Bearer eyJ...' \
-H 'Content-Type: application/json' \
-d '{
"allocation_id": "alc_b685cab0e4d281a2397f46e85b30cf12",
"flight_public_id": "fl_IST_AYT_07",
"departure_date": "2026-07-04",
"adults": 2,
"children": 1,
"infants": 1,
"currency_code": "EUR",
"language": "en"
}'
{
"match_status": "MATCHED",
"prebook_token": "<PREBOOK_TOKEN>",
"prebook_expires_at": "2026-07-01T12:30:00Z",
"offer": {
"allocation_id": "alc_b685cab0e4d281a2397f46e85b30cf12",
"flight_public_id": "fl_IST_AYT_07",
"carrier": "XQ",
"flight_number": "XQ2204",
"cabin": 1,
"direction": 1,
"origin_zone_public_id": "zn_IST",
"dest_zone_public_id": "zn_AYT",
"departure_date": "2026-07-04",
"base_selling_rate": "450.00",
"tax_total": "90.00",
"total_selling_rate": "540.00",
"currency_id": 978,
"currency_code": "EUR",
"pax_breakdown": [
{
"pax_type": 1,
"count": 2,
"base_selling_rate": "180.00",
"tax": "36.00",
"subtotal": "432.00"
},
{
"pax_type": 2,
"count": 1,
"base_selling_rate": "90.00",
"tax": "18.00",
"subtotal": "108.00"
},
{
"pax_type": 3,
"count": 1,
"base_selling_rate": "0.00",
"tax": "0.00",
"subtotal": "0.00"
}
]
},
"trace_id": "0f2c9d6e-7b1a-4c3e-9a2f-1d6e7b1a4c3e"
}
Step 3: Book
Book requires your partner account to settle on account with the seller. Without
those terms it returns 422 PAYMENT_INTENT_NOT_SUPPORTED before writing the
booking. An optional payment_intent_kind may confirm the resolved INVOICE
intent; it cannot select different terms. Omit it to use your account's terms.
Search results and a prebook token do not replace this book-time check. See
Booking payment terms.
POST /api/v1/flight/book
Verifies the prebook token and writes a single-product flight booking. The
charter seat block decrements atomically (adults + children; infants take no
seat). A seat race between prebook and book returns 410 Gone. The
Idempotency-Key header is mandatory (replay → 200, conflict → 409;
see Idempotency).
curl -s -X POST \
https://ari.console.adrasis.com/api/v1/flight/book \
-H 'Authorization: Bearer eyJ...' \
-H 'Idempotency-Key: 9d8c7b6a-3e2f-4a8b-9c0d-1e2f3a4b5c6d' \
-H 'Content-Type: application/json' \
-d '{
"prebook_token": "<PREBOOK_TOKEN>",
"contact": {
"first_name": "Ada",
"last_name": "Lovelace",
"email": "ada@example.io"
},
"agency_reference": "your-ref-12345"
}'
{
"booking": {
"public_id": "bk_Fl63kZ0m",
"booking_number": 100755,
"status": "CONFIRMED",
"product_type": 4,
"total_amount": "540.00",
"currency_code": "EUR"
},
"trace_id": "0f2c9d6e-7b1a-4c3e-9a2f-1d6e7b1a4c3e"
}
Cancellation
A flight booking cancels through the canonical two-phase cancel on
/bookings/{public_id}. See
The booking flow. To group an
outbound and return leg (or a flight with a hotel + transfer) into one
itinerary, see Trip bundling.