Download OpenAPI specification:
Our Flights API gives you a complete B2B gateway for searching, pricing, booking, and managing flight inventory with precision. It connects your system to real-time availability, rich flight content, multi-fare handling, instant confirmations, and full booking lifecycle controls.
Built for speed, stability, and clean integration, it lets your platform deliver consistent results, automate operations, and scale without friction. Whether you are powering a B2B portal, a mobile app, or a distribution engine, this API provides the structure you need to move fast, stay reliable, and serve your customers with confidence.
| Area | What it does | Endpoints |
|---|---|---|
| Airport Autocomplete | Find airports while the user types | Airports Autocomplete |
| Booking Flow | Search, price, book, hold, pay and issue tickets | Search, Collect Results, Fare Families, Check Availability, Fare Rules, Create Order, Hold, Pay and Issue Ticket, Booking Details |
| Balance | Check your agency balance before paying | Get Balance |
| Void Ticket | Cancel freshly issued tickets with a refund to your balance | Booking Details, Validate Void, Void Ticket |
Send what the user types (airport code, airport, city or country name) and show the matching airports. Use the selected airport's IATA_CODE as departure / arrival in Search. No token needed.
User types "cai" ──▶ Airports Autocomplete ──▶ CAI · Cairo International Airport
│
▼ IATA_CODE
Search Flights (departure: CAI)
Search returns priced offers (itineraries), either all at once or progressively with mode: poll and Collect Results. Pick one, optionally choose a branded fare and read its fare rules, confirm the price with Check Availability (its response has the exact trip that will be booked; use it instead of the search result for baggage, fare basis and fare type), then create the order with the passengers. Creating the order only saves it; the PNR and tickets come from the next step. Hold it without payment if the itinerary allows (can_hold), or pay and issue the tickets right away. Ticketing runs in the background, so poll Booking Details until the PNR and tickets appear.
┌─────────────────┐
│ Search Flights │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Fare Families │ (Optional - if has_fare_families=true)
└────────┬────────┘
│
▼
┌─────────────────┐
│Check Availability│
└────────┬────────┘
│
▼
┌─────────────────┐
│ Fare Rules │ (Optional)
└────────┬────────┘
│
▼
┌─────────────────┐
│ Create Order │
└────────┬────────┘
│
▼
┌─────────────────────────┐
│ Hold Booking (Optional) │
└────────┬────────────────┘
│
▼
┌─────────────────┐
│ Pay & Issue │
│ Ticket │
└────────┬────────┘
│
▼
┌─────────────────────────────────┐
│ Poll Booking Details │
│ (every 10 min for 2 hours) │
└────────┬────────────────────────┘
│
▼
┌─────────────────┐
│ PNR & Tickets │
│ Generated │
└─────────────────┘
After payment (Pay and Issue Ticket), you must poll the Booking Details endpoint to retrieve the final booking status:
┌──────────────┐ ┌─────────────────┐ ┌──────────────────┐
│ PayAndIssue │────▶│ Poll Booking │────▶│ Check Status │
│ Ticket │ │ Details │ │ │
└──────────────┘ └─────────────────┘ └────────┬─────────┘
│
┌────────────────────────────────┼────────────────────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ PNR & Ticket │ │ Processing │ │ No PNR/Ticket │
│ Generated │ │ (Continue │ │ after 2 hours │
│ (Confirmed) │ │ Polling) │ │ │
└──────────────┘ └──────────────┘ └────────┬─────────┘
│
▼
┌──────────────────┐
│ Mark unconfirmed │
│ Contact Supplier │
└──────────────────┘
Bookings are paid from your agency balance (in your agency currency). Check it before Pay and Issue Ticket to avoid a payment failure.
Get Balance ──▶ balance ≥ itinerary price? ──yes──▶ Pay and Issue Ticket
│
no ──▶ top up your balance first
A freshly issued ticket can be voided (cancelled as if never issued) within the airline's void window, usually the day of issue. The ticket amount is refunded to your balance minus the void fee and any airline penalties. Not every ticket can be voided through the API; Booking Details tells you which ones can.
Booking Details
│
▼
order.available_actions has { action: "void", product_id }?
│
├── no ──▶ the ticket can't be voided through the API
│
└── yes ─▶ Validate Void (optional, shows the void fee)
│
▼
Void Ticket (product_id) ──▶ refund to your balance
All API endpoints require Bearer Token authentication. Each request must include a valid token in the header to ensure secure and authorized access.
Example:
Authorization: Bearer 9f12c3ab-47c8-4e91-bd84-2c7a1f83b6d1
Endpoints are served by different services, so their paths carry different prefixes (/api/v1/agency/..., /api/v1/..., /api/v2/...). Use each path exactly as documented; the prefixes are not interchangeable.
Error responses are JSON with at least a message field. Validation errors (422) also include an errors object keyed by field name.
Get Balance, Validate Void and Void Ticket must be enabled for your account. If they return 403, contact your account manager.
live_booking: false in Create Order. Test bookings go through the full flow but are never booked with the airline; their PNR starts with TEST-.live_booking: true.Airport lookup for building the search form. Use the returned IATA_CODE as departure/arrival in Search Flights.
Searches airports by code, name, city or country. No authentication is required.
Typical use: send what the user typed as q and show the hits. Use IATA_CODE (also returned as code) in Search Flights.
filter examples:
country_code = "EG"IATA_CODE = "CAI"| q | string Text typed by the user (code, airport, city or country name) |
| filter | string Filter expression, e.g. |
| sort | Array of strings Sort rules, e.g. |
| limit | integer Default: 20 |
| offset | integer Default: 0 |
{- "q": "CAI",
- "sort": [
- "order:desc"
]
}{- "hits": [
- {
- "id": 16,
- "IATA_CODE": "GRU",
- "order": 0,
- "name": {
- "en": "Guarulhos - Governador Andre Franco Montoro International Airport",
- "ar": "مطار غوارولهوس - غوفرنادور أندريه فرانكو مونتورو الدولي"
}, - "city": {
- "code": "SAO",
- "name": {
- "en": "Sao Paulo",
- "ar": "ساو باولو"
}
}, - "country": {
- "code": "BR",
- "name": {
- "en": "Brazil",
- "ar": "البرازيل"
}
}, - "type": "airport",
- "state": "",
- "_geo": {
- "lat": -23.43194444,
- "lng": -46.46944444
}, - "code": "GRU",
- "name_en": "Guarulhos - Governador Andre Franco Montoro International Airport",
- "name_ar": "مطار غوارولهوس - غوفرنادور أندريه فرانكو مونتورو الدولي",
- "city_code": "SAO",
- "city_name_en": "Sao Paulo",
- "city_name_ar": "ساو باولو",
- "city_tier": "big",
- "city_tier_rank": 2,
- "city_touristic_score": 8,
- "country_code": "BR",
- "country_name_en": "Brazil",
- "country_name_ar": "البرازيل",
- "tier": "major",
- "tier_rank": 1
}, - {
- "id": 17,
- "IATA_CODE": "VCP",
- "order": 0,
- "name": {
- "en": "Viracopos International Airport",
- "ar": "مطار فيراكوبوس الدولي"
}, - "city": {
- "code": "CPQ",
- "name": {
- "en": "Campinas",
- "ar": "كامبيناس"
}
}, - "country": {
- "code": "BR",
- "name": {
- "en": "Brazil",
- "ar": "البرازيل"
}
}, - "type": "airport",
- "state": "",
- "_geo": {
- "lat": -23.00805556,
- "lng": -47.13472222
}, - "code": "VCP",
- "name_en": "Viracopos International Airport",
- "name_ar": "مطار فيراكوبوس الدولي",
- "city_code": "CPQ",
- "city_name_en": "Campinas",
- "city_name_ar": "كامبيناس",
- "city_tier": null,
- "city_tier_rank": null,
- "city_touristic_score": null,
- "country_code": "BR",
- "country_name_en": "Brazil",
- "country_name_ar": "البرازيل",
- "tier": "major",
- "tier_rank": 1
}
], - "query": "",
- "limit": 20,
- "offset": 0,
- "estimatedTotalHits": 1000,
- "processingTimeMs": 0
}Searches all airlines and suppliers enabled for your agency and returns every bookable offer for the requested route, dates and passengers. Supports one-way (O), round-trip (R) and multi-city (M) searches.
Set mode in the request:
search (default): the response arrives once every supplier has answered, with the full results.poll: the response arrives immediately with the search_id and no results yet. Call Collect Results with that search_id every 2-3 seconds; each call returns everything found so far (not just the new results), so replace what you show each time. Stop when status is completed (at the latest about 60 seconds after the search).Search (mode: poll) ──▶ search_id, status: progress
│
▼
Collect Results ──▶ status: progress ──▶ show results, wait 2-3 s, call again
│
└──────────▶ status: completed ──▶ final results, stop polling
Polling shows the first results within seconds instead of waiting for the slowest supplier.
Narrow the results with the optional filters object:
direct_only: true returns only non-stop itineraries (every trip is a single flight).airlines: ["SV", "MS"] returns only itineraries operated entirely by those airlines.Filters are applied to every supplier's results. Combine them as needed, e.g. direct flights on one airline.
The response is split into itineraries (the offers you show and sell) and aggregations (shared reference data). To keep the payload small, an itinerary does not repeat flight or rule details. It lists their ids, and you look them up in aggregations.
Search response
├── search_id ─────────────────────► pass as {search_id} to every next call
│
├── itineraries[] one bookable offer each
│ ├── id ────────────────────────► pass as {itinerary_id} to every next call
│ ├── prices total for all passengers
│ ├── passengers[] price per passenger type
│ ├── trips[] one per direction / leg
│ │ └── flights[] ──── ids ───┐
│ ├── rules[] ────────── ids ───┼──┐
│ ├── has_fare_families │ │ true → call Get Fare Families
│ └── can_hold │ │ true → Hold Booking is allowed
│ │ │
└── aggregations │ │ reference data shared by all itineraries
├── flights[] ◄─────────────┘ │ segment details, find by `id`
├── rules{} ◄────────────────┘ mini fare rules, keyed by id
├── passengers[] passenger types in this search
├── taxes[] tax lines (supplier dependent)
├── fares[] fare components (supplier dependent)
└── translations airport and airline names
Each itinerary is one priced, bookable combination of flights.
prices is the total for all passengers. passengers[].prices is the price for one passenger of that type.trips holds one entry per direction: 1 for one-way, 2 for round-trip, one per leg for multi-city. Each trip lists its flight segments in travel order, so a trip with several flight ids has connections.currency and already include your agency markup.bags_per_pax is the baggage breakdown per passenger type (adult, child, infant), each with check_in and cabin allowance.free_baggage and cabin_baggage are short codes for the adult (ADT) allowance only.type is REFUND, CHANGE, REVALIDATE, ...) for showing badges such as "Refundable" in results. Several itineraries can point to the same rule. When the airline gives no detail, the rule says to contact support. For the full conditions of one itinerary, call Get Fare Rules.ADT, CHI, INF).locale.has_fare_families is true, optionally call Get Fare Families to offer branded fares.| adults required | integer >= 1 Number of adult passengers (16+ years) |
| children | integer >= 0 Number of child passengers (2-16 years) |
| infants | integer >= 0 Number of infant passengers (0-2 years) |
required | Array of objects (Itinerary) |
| currency required | string Account currency code (e.g., USD) |
| locale required | string Enum: "en" "ar" Language preference (e.g., en, ar) |
| direction required | string Enum: "R" "O" "M" Flight type: R (Round Trip), O (One way), M (Multi destination) |
| cabin required | string Enum: "E" "PE" "B" "F" Cabin class: E (Economy), PE (Premium Economy), B (Business), F (First) |
object Optional filters. Omit them to get all results. | |
| mode | string Default: "search" Enum: "search" "poll"
|
{- "adults": 1,
- "infants": 0,
- "children": 0,
- "itineraries": [
- {
- "departure": "CAI",
- "arrival": "JED",
- "date": "2024-12-18"
}, - {
- "departure": "JED",
- "arrival": "CAI",
- "date": "2024-12-19"
}
], - "currency": "USD",
- "locale": "en",
- "direction": "R",
- "cabin": "E",
- "mode": "search",
- "filters": {
- "direct_only": false,
- "airlines": [
- "SV",
- "MS"
]
}
}{- "search_id": "2db5e697-0a85-4907-ba41-68de00ecec48",
- "aggregations": {
- "flights": [
- {
- "id": 900000,
- "cabin": "E",
- "departure": {
- "date": "18-12-2024",
- "time": "02:45",
- "airport": "CAI",
- "terminal": "2"
}, - "arrival": {
- "date": "18-12-2024",
- "time": "06:00",
- "airport": "JED",
- "terminal": "1"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "seats": "9",
- "meal_code": null,
- "free_baggage": "1PC",
- "flight_number": 308,
- "booking_class": "V",
- "equipment": "330",
- "fare_base": "VARTEGB4",
- "code_share": null,
- "fare_type": "PUB",
- "duration": 135,
- "fare_family_name": null,
- "fare_family_amenities": [
- {
- "type": "seat",
- "description": "BASIC SEAT",
- "free": false,
- "importance": 2
}, - {
- "type": "other",
- "description": "CHANGE FEE",
- "free": false,
- "importance": 10
}, - {
- "type": "refundable",
- "description": "REFUNDABLE FOR A FEE",
- "free": false,
- "importance": 2
}
], - "bags_per_pax": {
- "adult": {
- "check_in": {
- "quantity": 1,
- "weight": null,
- "weight_unit": null
}, - "cabin": {
- "quantity": 1,
- "weight": null,
- "weight_unit": null
}
}, - "child": {
- "check_in": {
- "quantity": null,
- "weight": null,
- "weight_unit": null
}, - "cabin": {
- "quantity": null,
- "weight": null,
- "weight_unit": null
}
}, - "infant": {
- "check_in": {
- "quantity": null,
- "weight": null,
- "weight_unit": null
}, - "cabin": {
- "quantity": null,
- "weight": null,
- "weight_unit": null
}
}
}
}
], - "taxes": [ ],
- "passengers": [
- {
- "id": 1,
- "type": "ADT"
}
], - "fares": [ ],
- "translations": {
- "airports": {
- "CAI": {
- "name": "Cairo International Airport",
- "code": "CAI",
- "city": {
- "name": "Cairo",
- "code": "CAI"
}
}, - "JED": {
- "name": "King Abdulaziz International Airport",
- "code": "JED",
- "city": {
- "name": "Jeddah",
- "code": "JED"
}
}
}, - "airlines": {
- "SV": {
- "name": "Saudia",
- "code": "SV"
}
}
}, - "rules": {
- "900000": {
- "id": 900000,
- "type": "REFUND",
- "title": "REFUND Policy",
- "description": "contact support for pricing",
- "applicable": true,
- "free": false,
- "price": null,
- "before_date": null,
- "price_description": "Please contact our support team for detailed pricing information"
}
}
}, - "itineraries": [
- {
- "id": 900000,
- "cabin_class": "E",
- "passengers": [
- {
- "id": 1,
- "prices": {
- "currency": "SAR",
- "total": 944.13,
- "base": 279.95,
- "taxes": 492.68,
- "total_currency": "SAR944.13"
}
}
], - "prices": {
- "currency": "SAR",
- "total": 1694.29,
- "base": 279.95,
- "taxes": 492.68,
- "total_currency": "SAR1,694.29"
}, - "trips": [
- {
- "id": 900000,
- "departure": "CAI",
- "arrival": "JED",
- "total_flight_time": 135,
- "flights": [
- 900000
]
}, - {
- "id": 900001,
- "departure": "JED",
- "arrival": "CAI",
- "total_flight_time": 435,
- "flights": [
- 900001,
- 900002
]
}
], - "has_fare_families": false,
- "can_hold": true,
- "last_ticketing_date": "16-12-2024 18:00",
- "last_ticketing_tz": "UTC",
- "is_refundable": false,
- "rules": [
- 900000
]
}
]
}Returns the results of a search made with mode: poll. Call it every 2-3 seconds with the search_id of the search.
Each call returns all results found so far, in the same structure as the Search response, so replace what you show each time. Keep calling while status is progress; stop when it is completed.
| search_id required | string
|
{- "search_id": "d5826b15-4ef0-45f4-80df-3b8d5f941dd6",
- "aggregations": {
- "flights": [
- {
- "id": 0,
- "cabin": "E",
- "departure": {
- "date": "string",
- "time": "string",
- "airport": "string",
- "terminal": "string"
}, - "arrival": {
- "date": "string",
- "time": "string",
- "airport": "string",
- "terminal": "string"
}, - "marketing_carrier": "string",
- "operating_carrier": "string",
- "seats": "string",
- "meal_code": "string",
- "free_baggage": "string",
- "flight_number": 0,
- "booking_class": "string",
- "equipment": "string",
- "fare_base": "string",
- "code_share": "string",
- "fare_type": "string",
- "duration": 0,
- "cabin_baggage": "string",
- "hand_baggage": "string",
- "operated_by_carrier": "string",
- "operated_flight_number": "string",
- "fare_family_name": "string",
- "fare_family_amenities": [
- {
- "type": "check_in_baggage",
- "description": "string",
- "free": true,
- "importance": 0
}
], - "bags_per_pax": {
- "adult": {
- "check_in": {
- "quantity": 0,
- "weight": 0,
- "weight_unit": "string",
- "policy": "string",
- "dimensions": "string"
}, - "cabin": {
- "quantity": 0,
- "weight": 0,
- "weight_unit": "string",
- "policy": "string",
- "dimensions": "string"
}
}, - "child": {
- "check_in": {
- "quantity": 0,
- "weight": 0,
- "weight_unit": "string",
- "policy": "string",
- "dimensions": "string"
}, - "cabin": {
- "quantity": 0,
- "weight": 0,
- "weight_unit": "string",
- "policy": "string",
- "dimensions": "string"
}
}, - "infant": {
- "check_in": {
- "quantity": 0,
- "weight": 0,
- "weight_unit": "string",
- "policy": "string",
- "dimensions": "string"
}, - "cabin": {
- "quantity": 0,
- "weight": 0,
- "weight_unit": "string",
- "policy": "string",
- "dimensions": "string"
}
}
}
}
], - "translations": {
- "airports": {
- "property1": {
- "name": "string",
- "code": "string",
- "city": {
- "name": "string",
- "code": "string"
}
}, - "property2": {
- "name": "string",
- "code": "string",
- "city": {
- "name": "string",
- "code": "string"
}
}
}, - "airlines": {
- "property1": {
- "name": "string",
- "code": "string"
}, - "property2": {
- "name": "string",
- "code": "string"
}
}
}, - "passengers": [
- {
- "id": 0,
- "type": "string"
}
], - "fares": [
- { }
], - "taxes": [
- {
- "id": 0,
- "code": "string",
- "currency": "string",
- "price": 0,
- "was": 0,
- "included": true
}
], - "rules": {
- "property1": {
- "id": 0,
- "type": "REFUND",
- "title": "string",
- "description": "string",
- "applicable": true,
- "free": true,
- "price": {
- "currency": "string",
- "total": 0,
- "base": 0,
- "taxes": 0
}, - "before_date": "2019-08-24T14:15:22Z",
- "price_description": "string"
}, - "property2": {
- "id": 0,
- "type": "REFUND",
- "title": "string",
- "description": "string",
- "applicable": true,
- "free": true,
- "price": {
- "currency": "string",
- "total": 0,
- "base": 0,
- "taxes": 0
}, - "before_date": "2019-08-24T14:15:22Z",
- "price_description": "string"
}
}
}, - "itineraries": [
- {
- "id": 0,
- "cabin_class": "string",
- "passengers": [
- {
- "id": 0,
- "prices": {
- "currency": "string",
- "total": 0.1,
- "base": 0.1,
- "taxes": 0.1,
- "total_currency": "string"
}, - "type": "string"
}
], - "prices": {
- "currency": "string",
- "total": 0.1,
- "base": 0.1,
- "taxes": 0.1,
- "total_currency": "string"
}, - "trips": [
- {
- "id": 0,
- "departure": "string",
- "arrival": "string",
- "total_flight_time": 0,
- "flights": [
- 0
]
}
], - "has_fare_families": true,
- "is_refundable": true,
- "can_hold": true,
- "last_ticketing_date": "string",
- "rules": [
- 0
], - "has_single_marketing_carrier": true,
- "has_single_operating_carrier": true,
- "last_ticketing_tz": "string",
- "is_id_optional": true
}
], - "is_cached": true,
- "status": "progress",
- "search_time": 0
}This step is optional. If the itinerary has has_fare_family set to true, you can use it to fetch the branded fare offers.
| itinerary_id required | string Unique identifier of the selected itinerary |
| search_id required | string Search session identifier from the search response |
[- {
- "id": 0,
- "itinerary": { },
- "brandedFare": [
- "string"
], - "prices": 0.1,
- "amenities": [
- {
- "flight_id": "string",
- "amenities": [
- {
- "type": "check_in_baggage",
- "description": "string",
- "free": true,
- "importance": 0,
- "price": 0.1,
- "obj": { }
}
]
}
]
}
]Confirms that the selected itinerary is still available, re-prices it, and returns the full details of the trip that will be booked. Call it before Create Order.
If you intend to book a specific branded fare (fare family), pass the corresponding fare_family_id.
The flights in order_details.data.flights are the trip that will actually be booked. Baggage (bags_per_pax, free_baggage), fare basis (fare_base), fare type, booking class and branded fare can differ from what Search returned, so replace the flight details you show with these before Create Order; don't rely on the search result.
Also check price_changed / price_change: if the price changed, show the new price to the customer before continuing.
| itinerary_id required | string Unique identifier of the selected itinerary |
| search_id required | string Search session identifier from the search response |
| fare_family_id | string Optional fare family ID to book a specific branded fare |
{- "available": true,
- "price_changed": false,
- "price_change": 0,
- "formatted_price_change": "SAR 0.00",
- "price": "SAR 854.49",
- "session_id": "46a7beae-b13b-4f36-811c-faaa5f919a59",
- "order_session_id": "8500000-46a7beae-b13b-4f36-811c-faaa5f919a59",
- "order_details": {
- "data": {
- "search_id": "46a7beae-b13b-4f36-811c-faaa5f919a59",
- "itinerary": {
- "id": "8500000",
- "trips": [
- {
- "id": "8500000",
- "departure": "CAI",
- "arrival": "JED",
- "total_flight_time": 330,
- "flights": [
- 8500000,
- 8500001
]
}, - {
- "id": "8500001",
- "departure": "JED",
- "arrival": "CAI",
- "total_flight_time": 80,
- "flights": [
- 8500002
]
}
], - "passengers": [
- {
- "id": 25660,
- "prices": {
- "currency": "SAR",
- "total": 854.49,
- "base": 424.34,
- "taxes": 430.14,
- "total_currency": "SAR 854.49"
}, - "ancillaries": [ ]
}
], - "prices": {
- "currency": "SAR",
- "total": 854.49,
- "base": 424.34,
- "taxes": 430.15,
- "total_currency": "SAR 854.49"
}, - "PaxNameCharacterLimit": null,
- "MiddleNameRequired": false,
- "can_hold": true,
- "last_ticketing_date": "18-12-2026 00:00",
- "last_ticketing_tz": null,
- "is_id_optional": false
}, - "taxes": [ ],
- "passengers": [
- {
- "id": 25660,
- "type": "ADT"
}
], - "fares": [ ],
- "search": {
- "meta": "b2b",
- "cabin": "E",
- "adults": 1,
- "children": 0,
- "infants": 0,
- "locale": "en",
- "currency": "SAR",
- "direction": "R",
- "created_at": "2026-10-07T17:13:37.300613",
- "itineraries": [
- {
- "date": "2026-12-18",
- "departure": "CAI",
- "arrival": "JED"
}, - {
- "date": "2026-12-19",
- "departure": "JED",
- "arrival": "CAI"
}
]
}, - "flights": [
- {
- "id": 8500000,
- "departure": {
- "date": "18-12-2026",
- "time": "10:40",
- "airport": "CAI",
- "terminal": "2"
}, - "arrival": {
- "date": "18-12-2026",
- "time": "14:15",
- "airport": "RUH",
- "terminal": "4"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "310",
- "seats": null,
- "cabin": "E",
- "bookingClass": "V",
- "duration": 215,
- "fare_type": "PUB",
- "fare_base": "VARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "330",
- "fare_family_name": "NBASICE",
- "fare_family_code": "",
- "fare_family_amenities": [ ],
- "bags_per_pax": {
- "adult": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": 1,
- "dimensions": null,
- "weight_unit": null
}
}, - "child": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}, - "infant": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}
}
}, - {
- "id": 8500001,
- "departure": {
- "date": "18-12-2026",
- "time": "16:00",
- "airport": "RUH",
- "terminal": "5"
}, - "arrival": {
- "date": "18-12-2026",
- "time": "17:55",
- "airport": "JED",
- "terminal": "1"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "1039",
- "seats": null,
- "cabin": "E",
- "bookingClass": "Y",
- "duration": 115,
- "fare_type": "PUB",
- "fare_base": "QARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "320",
- "fare_family_name": "NBASICE",
- "fare_family_code": "",
- "fare_family_amenities": [ ],
- "bags_per_pax": {
- "adult": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": 1,
- "dimensions": null,
- "weight_unit": null
}
}, - "child": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}, - "infant": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}
}
}, - {
- "id": 8500002,
- "departure": {
- "date": "19-12-2026",
- "time": "00:10",
- "airport": "JED",
- "terminal": "1"
}, - "arrival": {
- "date": "19-12-2026",
- "time": "01:30",
- "airport": "CAI",
- "terminal": "2"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "309",
- "seats": null,
- "cabin": "E",
- "bookingClass": "Q",
- "duration": 80,
- "fare_type": "PUB",
- "fare_base": "QARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "330",
- "fare_family_name": "NBASICE",
- "fare_family_code": "",
- "fare_family_amenities": [ ],
- "bags_per_pax": {
- "adult": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": 1,
- "dimensions": null,
- "weight_unit": null
}
}, - "child": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}, - "infant": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}
}
}
], - "price_changed": false,
- "price_change": "SAR 0.00",
- "isDomestic": false,
- "is_national_id_allowed": false
}, - "order": {
- "id": 17785,
- "name": "",
- "session_id": "8500000-46a7beae-b13b-4f36-811c-faaa5f919a59",
- "status": "shadow_order",
- "booking_status": "",
- "pnr": "",
- "supplier_reference": "",
- "order_number": "184939193",
- "email": "agent@example.com",
- "phone1": "+966565565655",
- "phone2": null,
- "ancillaries": [ ],
- "created_at": "2026-10-07T16:08:59.000000Z",
- "passengers": [
- {
- "id": 25660,
- "title": "",
- "first_name": "",
- "last_name": "",
- "identity_number": "",
- "identity_expire_at": null,
- "nationality": null,
- "birth_date": null,
- "tickets": null
}
]
}
}
}Returns the fare rules (cancellation, change and no-show conditions) for a selected itinerary.
This step is optional and informational — it does not affect pricing or booking. It can be called any time after search, within the same search session.
If the customer selected a branded fare (fare family), pass the same fare_family_id you use for Check Availability, so the returned rules match that fare.
If no rules are available for the itinerary, rules is an empty object and text is null.
| itinerary_id required | string Unique identifier of the selected itinerary |
| search_id required | string Search session identifier from the search response |
| fare_family_id | string Optional fare family ID, to get the rules of a specific branded fare |
{- "rule_level": "ITINERARY",
- "rules": {
- "10400000": {
- "id": 10400000,
- "title": "",
- "structured": true,
- "rules": [
- {
- "id": null,
- "type": "FULLTEXT",
- "title": "CANCELLATION",
- "description": "CAI -> JED:\n\nAFTER_DEP: INR 6720.00\nNO_SHOW: Not permitted (before 2026-11-26 07:25 UTC)\nPRIOR_TO_DEP: INR 6720.00\n\nJED -> CAI:\n\nAFTER_DEP: INR 6720.00\nNO_SHOW: Not permitted (before 2026-11-28 03:15 UTC)\nPRIOR_TO_DEP: INR 6720.00",
- "free": null,
- "price": null,
- "converted_price": null,
- "applicable": null,
- "before_date": null,
- "price_description": null
}, - {
- "id": null,
- "type": "FULLTEXT",
- "title": "CHANGE",
- "description": "CAI -> JED:\n\nAFTER_DEP: INR 3360.00\nNO_SHOW: INR 17760.00 (before 2026-11-26 07:25 UTC)\nPRIOR_TO_DEP: INR 3360.00\n\nJED -> CAI:\n\nAFTER_DEP: INR 3360.00\nNO_SHOW: INR 17760.00 (before 2026-11-28 03:15 UTC)\nPRIOR_TO_DEP: INR 3360.00",
- "free": null,
- "price": null,
- "converted_price": null,
- "applicable": null,
- "before_date": null,
- "price_description": null
}
]
}
}, - "text": "CAI -> JED:\n\nAFTER_DEP: INR 3360.00\nNO_SHOW: INR 17760.00 (before 2026-11-26 07:25 UTC)\nPRIOR_TO_DEP: INR 3360.00\n\nJED -> CAI:\n\nAFTER_DEP: INR 3360.00\nNO_SHOW: INR 17760.00 (before 2026-11-28 03:15 UTC)\nPRIOR_TO_DEP: INR 3360.00\n\nCAI -> JED:\n\nAFTER_DEP: INR 6720.00\nNO_SHOW: Not permitted (before 2026-11-26 07:25 UTC)\nPRIOR_TO_DEP: INR 6720.00\n\nJED -> CAI:\n\nAFTER_DEP: INR 6720.00\nNO_SHOW: Not permitted (before 2026-11-28 03:15 UTC)\nPRIOR_TO_DEP: INR 6720.00"
}Creates the order for the selected itinerary and saves the passengers and contact details.
This endpoint does not book with the airline. It doesn't create a PNR, take payment or issue tickets; it only saves the order so you can continue with one of the next steps:
- Hold Booking: creates the PNR without payment (only when the itinerary allows hold), then pay later with Pay and Issue Ticket.
- Pay and Issue Ticket: pays from your agency balance, creates the PNR and issues the tickets.
Call Check Availability before this endpoint to confirm the price.
| itinerary_id required | string |
| search_id required | string Search session identifier from the search response |
required | Array of objects (BookingPassenger) One entry per passenger. The count must match the adults + children + infants of the search. |
| mobile required | string <= 20 characters Contact mobile number with country code, digits only with optional leading |
| phone | string or null <= 20 characters Alternative contact number |
| email required | string <email> Contact email for booking confirmation |
| live_booking | boolean or null
|
{- "passengers": [
- {
- "identity_number": "A1231231312",
- "nationality_code": "EG",
- "last_name": "Doe",
- "first_name": "John",
- "title": "Mr",
- "type": "ADT",
- "birthDate": "1997-06-15",
- "IdentityExpireDate": "2038-05-14"
}
], - "mobile": "+966565565655",
- "phone": "",
- "email": "John.Doe@example.com",
- "live_booking": false
}{- "data": {
- "id": 2725,
- "name": "Mr John Doe",
- "session_id": "900000-57109609-f631-4999-b01a-6f856e52edea",
- "pnr": "",
- "supplier_reference": "",
- "order_number": "561230182",
- "email": "john.doe@example.com",
- "phone1": "+966565565655",
- "phone2": null,
- "passengers": [
- {
- "id": 3766,
- "title": "Mr",
- "first_name": "John",
- "last_name": "Doe",
- "identity_number": "A1231231312",
- "identity_expire_at": "2038-05-13T21:00:00.000000Z",
- "nationality": "Egypt",
- "birth_date": "1997-06-14T21:00:00.000000Z",
- "tickets": ""
}
], - "ancillaries": [ ],
- "created_at": "2024-12-03T10:49:31.000000Z"
}, - "message": "passenger information stored successfully"
}This endpoint retrieves comprehensive details of a specific flight booking, including:
This ensures timely and accurate updates to the booking status while minimizing manual intervention.
Baggage breakdown per passenger type (adult, child, infant), each with check_in and cabin allowance. Use this for the exact allowance of every passenger. free_baggage and cabin_baggage on the flight are short codes for the adult (ADT) allowance only.
order.available_actions lists what you can do on the booking now. Currently only void, and only when the ticket can be voided through the API; see Void Ticket.
| itinerary_id required | string The unique identifier of the itinerary |
| search_id required | string Search session identifier from the search response |
{- "data": {
- "search_id": "9db3b1de-7be1-4028-9b61-23f3624a1dcf",
- "itinerary": {
- "id": "10400003",
- "trips": [
- {
- "id": "10400008",
- "departure": "CAI",
- "arrival": "JED",
- "total_flight_time": 480,
- "flights": [
- 10400004,
- 10400005
]
}, - {
- "id": "10400009",
- "departure": "JED",
- "arrival": "CAI",
- "total_flight_time": 470,
- "flights": [
- 10400014,
- 10400015
]
}
], - "passengers": [
- {
- "id": 25418,
- "prices": {
- "currency": "USD",
- "total": 1619.14,
- "base": 1491.75,
- "taxes": 127.39,
- "total_currency": "$1,619.14"
}, - "ancillaries": [ ]
}
], - "prices": {
- "currency": "USD",
- "total": 1619.14,
- "base": 1491.75,
- "taxes": 127.39,
- "total_currency": "$1,619.14"
}, - "PaxNameCharacterLimit": null,
- "MiddleNameRequired": false,
- "can_hold": true,
- "last_ticketing_date": "08-10-2026 16:05",
- "last_ticketing_tz": "UTC",
- "is_id_optional": false
}, - "taxes": [ ],
- "passengers": [
- {
- "id": 25418,
- "type": "ADT"
}
], - "fares": [ ],
- "search": {
- "meta": "b2b",
- "cabin": "E",
- "adults": 1,
- "children": 0,
- "infants": 0,
- "locale": "en",
- "currency": "USD",
- "direction": "R",
- "created_at": "2026-10-01T16:11:22.633070",
- "itineraries": [
- {
- "date": "2026-11-26",
- "departure": "CAI",
- "arrival": "JED"
}, - {
- "date": "2026-11-28",
- "departure": "JED",
- "arrival": "CAI"
}
]
}, - "flights": [
- {
- "id": 10400004,
- "departure": {
- "date": "26-11-2026",
- "time": "07:25",
- "airport": "CAI",
- "terminal": "2"
}, - "arrival": {
- "date": "26-11-2026",
- "time": "12:45",
- "airport": "AUH",
- "terminal": "A"
}, - "marketing_carrier": "EY",
- "operating_carrier": "EY",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "712",
- "seats": null,
- "cabin": "E",
- "bookingClass": "B",
- "duration": 200,
- "fare_type": "PUB",
- "fare_base": "BNN05C3R",
- "free_baggage": "45.0 KG",
- "cabin_baggage": "7.0 KG",
- "code_share": null,
- "equipment": "321",
- "fare_family_name": "Economy Comfort",
- "fare_family_code": "EY-YCOMFORT",
- "fare_family_amenities": [
- {
- "type": "other",
- "description": "CHARGEABLE CANCELLATION / REFUND - EXTRA FEES APPLY FOR CANCELLATION. PLEASE REFER TO THE TERMS OF YOUR TICKET FOR MORE INFORMATION",
- "free": false,
- "importance": 10
}, - {
- "type": "mileage",
- "description": "MILES EARNED PER GUEST - 75%",
- "free": true,
- "importance": 2
}, - {
- "type": "cabin_baggage",
- "description": "FREE BAG 7.0 KG",
- "free": true,
- "importance": 1
}, - {
- "type": "check_in_baggage",
- "description": "FREE BAG 45.0 KG",
- "free": true,
- "importance": 1
}, - {
- "type": "seat_selection",
- "description": "SEAT SELECTION - STANDARD SEATS INCLUDED",
- "free": true,
- "importance": 2
}
], - "bags_per_pax": {
- "adult": {
- "cabin": {
- "policy": "Max width 56 cm, height 36 cm and depth 23 cm. One bag only. Charges apply if your baggage exceeds your allowance.",
- "weight": 7,
- "quantity": 1,
- "dimensions": null,
- "weight_unit": "KG"
}, - "check_in": {
- "policy": "Checked.",
- "weight": 45,
- "quantity": null,
- "dimensions": null,
- "weight_unit": "KG"
}
}, - "child": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}, - "infant": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}
}
}, - {
- "id": 10400005,
- "departure": {
- "date": "26-11-2026",
- "time": "14:15",
- "airport": "AUH",
- "terminal": "A"
}, - "arrival": {
- "date": "26-11-2026",
- "time": "16:25",
- "airport": "JED",
- "terminal": "1"
}, - "marketing_carrier": "EY",
- "operating_carrier": "EY",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "611",
- "seats": null,
- "cabin": "E",
- "bookingClass": "B",
- "duration": 190,
- "fare_type": "PUB",
- "fare_base": "BNN05C3R",
- "free_baggage": "45.0 KG",
- "cabin_baggage": "7.0 KG",
- "code_share": null,
- "equipment": "321",
- "fare_family_name": "Economy Comfort",
- "fare_family_code": "EY-YCOMFORT",
- "fare_family_amenities": [
- {
- "type": "other",
- "description": "CHARGEABLE CANCELLATION / REFUND - EXTRA FEES APPLY FOR CANCELLATION. PLEASE REFER TO THE TERMS OF YOUR TICKET FOR MORE INFORMATION",
- "free": false,
- "importance": 10
}, - {
- "type": "mileage",
- "description": "MILES EARNED PER GUEST - 75%",
- "free": true,
- "importance": 2
}, - {
- "type": "cabin_baggage",
- "description": "FREE BAG 7.0 KG",
- "free": true,
- "importance": 1
}, - {
- "type": "check_in_baggage",
- "description": "FREE BAG 45.0 KG",
- "free": true,
- "importance": 1
}, - {
- "type": "seat_selection",
- "description": "SEAT SELECTION - STANDARD SEATS INCLUDED",
- "free": true,
- "importance": 2
}
], - "bags_per_pax": {
- "adult": {
- "cabin": {
- "policy": "Max width 56 cm, height 36 cm and depth 23 cm. One bag only. Charges apply if your baggage exceeds your allowance.",
- "weight": 7,
- "quantity": 1,
- "dimensions": null,
- "weight_unit": "KG"
}, - "check_in": {
- "policy": "Checked.",
- "weight": 45,
- "quantity": null,
- "dimensions": null,
- "weight_unit": "KG"
}
}, - "child": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}, - "infant": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}
}
}, - {
- "id": 10400014,
- "departure": {
- "date": "28-11-2026",
- "time": "05:55",
- "airport": "JED",
- "terminal": "1"
}, - "arrival": {
- "date": "28-11-2026",
- "time": "09:20",
- "airport": "AUH",
- "terminal": "A"
}, - "marketing_carrier": "EY",
- "operating_carrier": "EY",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "604",
- "seats": null,
- "cabin": "E",
- "bookingClass": "B",
- "duration": 145,
- "fare_type": "PUB",
- "fare_base": "BNN05C3R",
- "free_baggage": "45.0 KG",
- "cabin_baggage": "7.0 KG",
- "code_share": null,
- "equipment": "321",
- "fare_family_name": "Economy Comfort",
- "fare_family_code": "EY-YCOMFORT",
- "fare_family_amenities": [
- {
- "type": "other",
- "description": "CHARGEABLE CANCELLATION / REFUND - EXTRA FEES APPLY FOR CANCELLATION. PLEASE REFER TO THE TERMS OF YOUR TICKET FOR MORE INFORMATION",
- "free": false,
- "importance": 10
}, - {
- "type": "mileage",
- "description": "MILES EARNED PER GUEST - 75%",
- "free": true,
- "importance": 2
}, - {
- "type": "cabin_baggage",
- "description": "FREE BAG 7.0 KG",
- "free": true,
- "importance": 1
}, - {
- "type": "check_in_baggage",
- "description": "FREE BAG 45.0 KG",
- "free": true,
- "importance": 1
}, - {
- "type": "seat_selection",
- "description": "SEAT SELECTION - STANDARD SEATS INCLUDED",
- "free": true,
- "importance": 2
}
], - "bags_per_pax": {
- "adult": {
- "cabin": {
- "policy": "Max width 56 cm, height 36 cm and depth 23 cm. One bag only. Charges apply if your baggage exceeds your allowance.",
- "weight": 7,
- "quantity": 1,
- "dimensions": null,
- "weight_unit": "KG"
}, - "check_in": {
- "policy": "Checked.",
- "weight": 45,
- "quantity": null,
- "dimensions": null,
- "weight_unit": "KG"
}
}, - "child": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}, - "infant": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}
}
}, - {
- "id": 10400015,
- "departure": {
- "date": "28-11-2026",
- "time": "10:25",
- "airport": "AUH",
- "terminal": "A"
}, - "arrival": {
- "date": "28-11-2026",
- "time": "12:45",
- "airport": "CAI",
- "terminal": "2"
}, - "marketing_carrier": "EY",
- "operating_carrier": "EY",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "713",
- "seats": null,
- "cabin": "E",
- "bookingClass": "B",
- "duration": 260,
- "fare_type": "PUB",
- "fare_base": "BNN05C3R",
- "free_baggage": "45.0 KG",
- "cabin_baggage": "7.0 KG",
- "code_share": null,
- "equipment": "321",
- "fare_family_name": "Economy Comfort",
- "fare_family_code": "EY-YCOMFORT",
- "fare_family_amenities": [
- {
- "type": "other",
- "description": "CHARGEABLE CANCELLATION / REFUND - EXTRA FEES APPLY FOR CANCELLATION. PLEASE REFER TO THE TERMS OF YOUR TICKET FOR MORE INFORMATION",
- "free": false,
- "importance": 10
}, - {
- "type": "mileage",
- "description": "MILES EARNED PER GUEST - 75%",
- "free": true,
- "importance": 2
}, - {
- "type": "cabin_baggage",
- "description": "FREE BAG 7.0 KG",
- "free": true,
- "importance": 1
}, - {
- "type": "check_in_baggage",
- "description": "FREE BAG 45.0 KG",
- "free": true,
- "importance": 1
}, - {
- "type": "seat_selection",
- "description": "SEAT SELECTION - STANDARD SEATS INCLUDED",
- "free": true,
- "importance": 2
}
], - "bags_per_pax": {
- "adult": {
- "cabin": {
- "policy": "Max width 56 cm, height 36 cm and depth 23 cm. One bag only. Charges apply if your baggage exceeds your allowance.",
- "weight": 7,
- "quantity": 1,
- "dimensions": null,
- "weight_unit": "KG"
}, - "check_in": {
- "policy": "Checked.",
- "weight": 45,
- "quantity": null,
- "dimensions": null,
- "weight_unit": "KG"
}
}, - "child": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}, - "infant": {
- "cabin": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}, - "check_in": {
- "policy": null,
- "weight": null,
- "quantity": null,
- "dimensions": null,
- "weight_unit": null
}
}
}
}
], - "price_changed": false,
- "price_change": "$0.00",
- "isDomestic": false,
- "is_national_id_allowed": false
}, - "order": {
- "id": 17687,
- "name": "Mr John Doe",
- "session_id": "10400003-9db3b1de-7be1-4028-9b61-23f3624a1dcf",
- "status": "confirmed",
- "booking_status": "",
- "pnr": "TGOA48",
- "supplier_reference": "",
- "order_number": "892892810",
- "email": "john.doe@example.com",
- "phone1": "+966565565655",
- "phone2": null,
- "ancillaries": [ ],
- "created_at": "2026-10-01T16:05:01.000000Z",
- "passengers": [
- {
- "id": 25418,
- "title": "Mr",
- "first_name": "John",
- "last_name": "Doe",
- "identity_number": "A1231231312",
- "identity_expire_at": "2028-07-04",
- "nationality": "Egypt",
- "birth_date": "1994-03-14",
- "tickets": ""
}
], - "available_actions": [
- {
- "action": "void",
- "product_id": 12001
}
]
}
}This endpoint allows placing a hold on a booking.
can_hold = true. (Needs to be activated on the account)| itinerary_id required | string The unique identifier of the itinerary |
| search_id required | string Search session identifier from the search response |
{- "order": {
- "id": 2725,
- "name": "Mr John Doe",
- "session_id": "900000-57109609-f631-4999-b01a-6f856e52edea",
- "pnr": "TGOA48",
- "supplier_reference": "",
- "order_number": "561230182",
- "email": "john.doe@example.com",
- "phone1": "+966565565655",
- "phone2": null,
- "passengers": [
- {
- "id": 3766,
- "title": "Mr",
- "first_name": "John",
- "last_name": "Doe",
- "identity_number": "A1231231312",
- "identity_expire_at": "2038-05-13T21:00:00.000000Z",
- "nationality": "Egypt",
- "birth_date": "1997-06-14T21:00:00.000000Z",
- "tickets": "SBN4BJK"
}
], - "ancillaries": [ ],
- "created_at": "2024-12-03T10:49:31.000000Z"
}, - "data": {
- "search_id": "57109609-f631-4999-b01a-6f856e52edea",
- "itinerary": {
- "id": "900000",
- "trips": [
- {
- "id": "900000",
- "departure": "CAI",
- "arrival": "JED",
- "total_flight_time": 415,
- "flights": [
- 900000,
- 900001
]
}, - {
- "id": "900001",
- "departure": "JED",
- "arrival": "CAI",
- "total_flight_time": 145,
- "flights": [
- 900002
]
}
], - "passengers": [
- {
- "id": 3766,
- "prices": {
- "currency": "SAR",
- "total": 884.57,
- "base": 224.98,
- "total_currency": "SAR 884.57",
- "taxes": 492.68
}, - "ancillaries": [ ]
}
], - "PaxNameCharacterLimit": null,
- "MiddleNameRequired": false,
- "prices": {
- "currency": "SAR",
- "total": 1663.57,
- "base": 1663.57,
- "total_currency": "SAR 1,663.57",
- "taxes": 0
}
}, - "taxes": [ ],
- "passengers": [
- {
- "id": 3766,
- "type": "ADT"
}
], - "fares": [ ],
- "search": {
- "meta": "b2b",
- "cabin": "E",
- "adults": 1,
- "locale": "en",
- "infants": 0,
- "children": 0,
- "currency": "SAR",
- "direction": "R",
- "created_at": "2024-12-03T09:31:33.574658",
- "itineraries": [
- {
- "date": "2024-12-18",
- "arrival": "JED",
- "departure": "CAI"
}, - {
- "date": "2024-12-19",
- "arrival": "CAI",
- "departure": "JED"
}
]
}, - "flights": [
- {
- "departure": {
- "date": "18-12-2024",
- "time": "15:00",
- "airport": "CAI",
- "terminal": "2"
}, - "arrival": {
- "date": "18-12-2024",
- "time": "18:45",
- "airport": "RUH",
- "terminal": "4"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "418",
- "seats": null,
- "cabin": "E",
- "bookingClass": "V",
- "duration": 165,
- "fare_type": "PUB",
- "fare_base": "VARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "330",
- "cabin_baggage": "1PC",
- "id": 900000
}, - {
- "departure": {
- "date": "18-12-2024",
- "time": "21:00",
- "airport": "RUH",
- "terminal": "5"
}, - "arrival": {
- "date": "18-12-2024",
- "time": "22:55",
- "airport": "JED",
- "terminal": "1"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "1049",
- "seats": null,
- "cabin": "E",
- "bookingClass": "E",
- "duration": 115,
- "fare_type": "PUB",
- "fare_base": "VARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "773",
- "cabin_baggage": "1PC",
- "id": 900001
}, - {
- "departure": {
- "date": "19-12-2024",
- "time": "03:20",
- "airport": "JED",
- "terminal": "1"
}, - "arrival": {
- "date": "19-12-2024",
- "time": "04:45",
- "airport": "CAI",
- "terminal": "2"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "383",
- "seats": null,
- "cabin": "E",
- "bookingClass": "V",
- "duration": 145,
- "fare_type": "PUB",
- "fare_base": "VARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "333",
- "cabin_baggage": "1PC",
- "id": 900002
}
]
}
}Pays for the booking from your agency balance and issues the tickets.
Previously named
payWallet. The old path/api/v2/orders/payWallet/{itinerary_id}-{search_id}still works, but is deprecated; use this one.
Important Notes:
This polling mechanism ensures accurate tracking of the booking lifecycle after payment.
| itinerary_id required | string The unique identifier of the itinerary |
| search_id required | string Search session identifier from the search response |
{- "order": {
- "id": 2725,
- "name": "Mr John Doe",
- "session_id": "900000-57109609-f631-4999-b01a-6f856e52edea",
- "pnr": "TGOA48",
- "supplier_reference": "",
- "order_number": "561230182",
- "email": "john.doe@example.com",
- "phone1": "+966565565655",
- "phone2": null,
- "passengers": [
- {
- "id": 3766,
- "title": "Mr",
- "first_name": "John",
- "last_name": "Doe",
- "identity_number": "A1231231312",
- "identity_expire_at": "2038-05-13T21:00:00.000000Z",
- "nationality": "Egypt",
- "birth_date": "1997-06-14T21:00:00.000000Z",
- "tickets": "SBN4BJK"
}
], - "ancillaries": [ ],
- "created_at": "2024-12-03T10:49:31.000000Z"
}, - "data": {
- "search_id": "57109609-f631-4999-b01a-6f856e52edea",
- "itinerary": {
- "id": "900000",
- "trips": [
- {
- "id": "900000",
- "departure": "CAI",
- "arrival": "JED",
- "total_flight_time": 415,
- "flights": [
- 900000,
- 900001
]
}, - {
- "id": "900001",
- "departure": "JED",
- "arrival": "CAI",
- "total_flight_time": 145,
- "flights": [
- 900002
]
}
], - "passengers": [
- {
- "id": 3766,
- "prices": {
- "currency": "SAR",
- "total": 884.57,
- "base": 224.98,
- "total_currency": "SAR 884.57",
- "taxes": 492.68
}, - "ancillaries": [ ]
}
], - "PaxNameCharacterLimit": null,
- "MiddleNameRequired": false,
- "prices": {
- "currency": "SAR",
- "total": 1663.57,
- "base": 1663.57,
- "total_currency": "SAR 1,663.57",
- "taxes": 0
}
}, - "taxes": [ ],
- "passengers": [
- {
- "id": 3766,
- "type": "ADT"
}
], - "fares": [ ],
- "search": {
- "meta": "b2b",
- "cabin": "E",
- "adults": 1,
- "locale": "en",
- "infants": 0,
- "children": 0,
- "currency": "SAR",
- "direction": "R",
- "created_at": "2024-12-03T09:31:33.574658",
- "itineraries": [
- {
- "date": "2024-12-18",
- "arrival": "JED",
- "departure": "CAI"
}, - {
- "date": "2024-12-19",
- "arrival": "CAI",
- "departure": "JED"
}
]
}, - "flights": [
- {
- "departure": {
- "date": "18-12-2024",
- "time": "15:00",
- "airport": "CAI",
- "terminal": "2"
}, - "arrival": {
- "date": "18-12-2024",
- "time": "18:45",
- "airport": "RUH",
- "terminal": "4"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "418",
- "seats": null,
- "cabin": "E",
- "bookingClass": "V",
- "duration": 165,
- "fare_type": "PUB",
- "fare_base": "VARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "330",
- "cabin_baggage": "1PC",
- "id": 900000
}, - {
- "departure": {
- "date": "18-12-2024",
- "time": "21:00",
- "airport": "RUH",
- "terminal": "5"
}, - "arrival": {
- "date": "18-12-2024",
- "time": "22:55",
- "airport": "JED",
- "terminal": "1"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "1049",
- "seats": null,
- "cabin": "E",
- "bookingClass": "E",
- "duration": 115,
- "fare_type": "PUB",
- "fare_base": "VARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "773",
- "cabin_baggage": "1PC",
- "id": 900001
}, - {
- "departure": {
- "date": "19-12-2024",
- "time": "03:20",
- "airport": "JED",
- "terminal": "1"
}, - "arrival": {
- "date": "19-12-2024",
- "time": "04:45",
- "airport": "CAI",
- "terminal": "2"
}, - "marketing_carrier": "SV",
- "operating_carrier": "SV",
- "operated_by_carrier": null,
- "operated_flight_number": null,
- "flight_number": "383",
- "seats": null,
- "cabin": "E",
- "bookingClass": "V",
- "duration": 145,
- "fare_type": "PUB",
- "fare_base": "VARTEGB4",
- "free_baggage": "1PC",
- "code_share": null,
- "equipment": "333",
- "cabin_baggage": "1PC",
- "id": 900002
}
]
}
}Cancel freshly issued tickets within the airline's void window; the ticket amount is refunded to your agency balance minus the void fee and any airline penalties.
Flow
action: void in order.available_actions. If it isn't there, the ticket can't be voided through the API.product_id to see the void fee.product_id.Returns the void fee for the product's tickets, in your agency currency, before voiding.
Only call it for a product listed with action: void in order.available_actions of Booking Details. This endpoint must be enabled for your account. If it returns 403, contact your account manager.
| session_id required | string Example: 10400003-9db3b1de-7be1-4028-9b61-23f3624a1dcf Order session, |
| product_id required | integer
|
{- "product_id": 12001
}{- "data": {
- "amount": 20,
- "currency": "USD",
- "per_ticket_amount": 10,
- "tickets": 2,
- "original_amount": 75,
- "original_currency": "SAR",
- "per_ticket_original_amount": 37.5,
- "airline": "SV",
- "pcc": "CAIEG2100",
- "configured": true
}, - "message": "Void Validation Result",
- "status": true
}Voids the product's tickets. The tickets are cancelled as if never issued, and the ticket amount minus the void fee and any airline penalties is returned to your agency balance.
Only products listed with action: void in order.available_actions of Booking Details can be voided; any other product is rejected. This endpoint must be enabled for your account. If it returns 403, contact your account manager.
| session_id required | string Example: 10400003-9db3b1de-7be1-4028-9b61-23f3624a1dcf Order session, |
| product_id required | integer
|
{- "product_id": 12001
}{- "data": [ ],
- "message": "Ticket Voided Successfully",
- "status": true
}