Three flights in one journey
DEL-YYZ · one way · 1 adult
A long-haul journey with two connections: one option, three flights, segment_index 0, 1 and 2 inside journey 0.
▸1. SearchPOST /flights/search349 options
What this step returned: 349 options(click to expand)
- 349 options in 1 group(s): journey_indexes [0] has 349 options
- Options by number of flights: 1 flight: 2, 2 flights: 116, 3 flights: 231
- Airlines in the reply: AC (214 flights), LH (130 flights), EK (118 flights), DL (112 flights), KL (69 flights), AF (47 flights), QR (47 flights), AA (28 flights), BA (28 flights), LX (20 flights), UA (20 flights), EY (16 flights), CX (15 flights), AI (14 flights), JL (8 flights), NH (6 flights), TK (6 flights), VS (5 flights), WY (4 flights), ET (4 flights), AM (3 flights), AZ (2 flights), MS (2 flights), BR (2 flights), LO (2 flights), KE (2 flights), WS (1 flights), 9B (1 flights), OS (1 flights)
- 1862 fare options in total; 135 distinct fare families (fare_ref)
- Cheapest adult total: 3,780 (Economy Classic)
- Fares with a meal included (has_meal): 1093; with a free seat: 236
- Fares with check-in baggage included: 1784; hand baggage only: 31; no baggage stated: 47
- Fares whose attributes differ between flights (varies_by_segment): 1679; ask detail=segment to see them per flight
- Refundability: PARTIALLY_REFUNDABLE 1235, NON_REFUNDABLE 627
- 107 distinct fare rules in fare_rules; 716 fares without a rule known at search
- Reply carries valid_till (option_id and price_id expire then); request: 1 adult, 0 child, 0 infant, cabin_class 1
Request body
HTTP 200 · 19342 ms · complete request body (collapsible viewer)
{
"segments": [
{
"from": "DEL",
"to": "YYZ",
"date": "2026-11-19"
}
],
"adult": 1,
"child": 0,
"infant": 0,
"cabin_class": 1
}Reply
HTTP 200 · 19342 ms · complete response body (collapsible viewer)
{
"search_id": "f9e82553-894e-428f-a702-a6e6074a79df",
"status": "completed",
"valid_till": "2026-10-20T21:11:09+05:30",
"fare_rules": {
"fr_1": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 28433.32,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_2": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 14216.66,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_3": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 0,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_4": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "NON REFUNDABLE"
}
],
"date_change": [
{
"allowed": true,
"amount": 14275,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
},
"fr_38": {
"cancellation": [
{
"allowed": true,
"amount": 22010,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
],
"date_change": [
{
"allowed": true,
"amount": 22010,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
]
},
"fr_39": {
"cancellation": [
{
"allowed": true,
"amount": 22010,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
],
"date_change": [
{
"allowed": true,
"amount": 16510,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
]
},
"fr_20": {
"cancellation": [
{
"allowed": true,
"amount": 0,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
],
"date_change": [
{
"allowed": true,
"amount": 0,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
]
},
"fr_12": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 21324.99,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_13": {
"cancellation": [
{
"allowed": true,
"amount": 21324.99,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 16017.44,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_7": {
"cancellation": [
{
"allowed": true,
"amount": 0,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 0,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_14": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "NON REFUNDABLE"
}
],
"date_change": [
{
"allowed": true,
"amount": 21385,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
},
"fr_15": {
"cancellation": [
{
"allowed": true,
"amount": 21385,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 16040,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
},
"fr_11": {
"cancellation": [
{
"allowed": true,
"amount": 0,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 0,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
}
},
"results": [
{
"journey_indexes": [
0
],
"options": [
{
"option_id": "90137e39-cb77-40fb-bcc4-8aa7a9ba2e5c",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_CDG_DL_8337",
"from": "DEL",
"to": "CDG",
"airline_code": "DL",
"airline_name": "Delta Air Lines",
"operating_airline_code": "AF",
"operating_airline_name": "Air France",
"aircraft_type": "Boeing 772",
"flight_number": "8337",
"stops": 2,
"departure_time": "2026-11-19T05:10:00",
"departure_terminal": "3",
"arrival_time": "2026-11-19T10:20:00",
"arrival_terminal": "2E",
"duration": 580,
"connecting_time": 320
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "CDG_ATL_DL_85",
"from": "CDG",
"to": "ATL",
"airline_code": "DL",
"airline_name": "Delta Air Lines",
"aircraft_type": "Airbus A330",
"flight_number": "85",
"stops": 2,
"departure_time": "2026-11-19T15:40:00",
"departure_terminal": "2E",
"arrival_time": "2026-11-19T19:40:00",
"arrival_terminal": "I",
"duration": 600,
"connecting_time": 121
},
{
"segment_index": 2,
"journey_index": 0,
"segment_id": "ATL_YYZ_DL_2422",
"from": "ATL",
"to": "YYZ",
"airline_code": "DL",
"airline_name": "Delta Air Lines",
"aircraft_type": "Airbus A320",
"flight_number": "2422",
"stops": 2,
"departure_time": "2026-11-19T21:41:00",
"departure_terminal": "I",
"arrival_time": "2026-11-19T23:59:00",
"arrival_terminal": "3",
"duration": 138
}
],
"fare_options": [
{
"price_id": "d2bd9e54-a789-4cca-9541-3879c3aa8b30",
"fare_rules": {
"0": "fr_1"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 585.73,
"other_taxes": 42478.45,
"total_fare": 47031.58,
"net_fare": 47031.58,
"pax_count": 1
},
"fare_ref": "Delta Main Basic",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "E",
"baggage": {
"checkin": {
"pieces": 1
}
}
},
"varies_by_segment": true
},
{
"price_id": "aff627ab-1796-4794-b74f-e55bef843b0c",
"fare_rules": {
"0": "fr_2"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 9980.1,
"other_taxes": 42478.45,
"total_fare": 56824.01,
"net_fare": 56824.01,
"pax_count": 1
},
"fare_ref": "Delta Main Classic",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"baggage": {
"checkin": {
"pieces": 2
}
}
},
"varies_by_segment": true
},
{
"price_id": "610556b5-acfe-4c09-908f-bd16c1334fc6",
"fare_rules": {
"0": "fr_3"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 21723.06,
"other_taxes": 42478.45,
"total_fare": 69059.82,
"net_fare": 69059.82,
"pax_count": 1
},
"fare_ref": "Delta Main Refundable",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"baggage": {
"checkin": {
"pieces": 2
}
}
},
"varies_by_segment": true
}
]
},
{
"option_id": "47f1da7b-3536-45c6-800d-0395b083e281",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_HND_NH_838",
"from": "DEL",
"to": "HND",
"airline_code": "NH",
"airline_name": "All Nippon Airways",
"aircraft_type": "Boeing 789",
"flight_number": "838",
"stops": 1,
"departure_time": "2026-11-19T18:55:00",
"departure_terminal": "3",
"arrival_time": "2026-11-20T05:55:00",
"arrival_terminal": "0",
"duration": 660,
"connecting_time": 770,
"next_day": 1
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "NRT_YYZ_AC_10",
"from": "NRT",
"to": "YYZ",
"airline_code": "AC",
"airline_name": "Air Canada",
"aircraft_type": "Boeing 77W",
"flight_number": "10",
"departure_time": "2026-11-20T18:45:00",
"departure_terminal": "1",
"arrival_time": "2026-11-20T16:45:00",
"arrival_terminal": "1",
"duration": 1940,
"connecting_time": 770
}
],
"fare_options": [
{
"price_id": "e9fd74ac-bcb8-419d-9926-866c550d94c2",
"fare_rules": {
"0": "fr_4"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 55085,
"yq": 30768,
"other_taxes": 8312,
"total_fare": 94165,
"net_fare": 94165,
"pax_count": 1
},
"fare_ref": "STANDARD",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"fare_basis": "KLUS82TG",
"baggage": {
"hand": {
"pieces": 1
},
"checkin": {
"pieces": 2
}
}
},
"varies_by_segment": true
}
]
},
{
"option_id": "243cf099-2302-4974-9a95-37730e73ff15",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_YYZ_AC_43",
"from": "DEL",
"to": "YYZ",
"airline_code": "AC",
"airline_name": "Air Canada",
"aircraft_type": "Boeing 77L",
"flight_number": "43",
"departure_time": "2026-11-19T23:50:00",
"departure_terminal": "3",
"arrival_time": "2026-11-20T05:45:00",
"arrival_terminal": "1",
"duration": 985,
"next_day": 1
}
],
"fare_options": [
{
"price_id": "cbfb417f-95ec-4c8a-963a-7402fa04393c",
"fare_rules": {
"0": "fr_38"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 36195,
"yq": 25312,
"other_taxes": 3843,
"total_fare": 66701,
"net_fare": 66701,
"pax_count": 1
},
"fare_ref": "Standard",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "T",
"fare_basis": "TXOYKYNC",
"baggage": {
"checkin": {
"kg": 23,
"pieces": 1
}
}
},
"varies_by_segment": false
},
{
"price_id": "21dead23-7b7b-4024-bab9-398dd4fdd236",
"fare_rules": {
"0": "fr_39"
},
"has_meal": true,
"has_free_seat": true,
"adult": {
"fare": {
"base_fare": 41115,
"yq": 25312,
"other_taxes": 4089,
"total_fare": 71867,
"net_fare": 71867,
"pax_count": 1
},
"fare_ref": "Flex",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "T",
"fare_basis": "TXOYKERC",
"baggage": {
"checkin": {
"kg": 92,
"pieces": 4
}
}
},
"varies_by_segment": false
},
{
"price_id": "d6726596-13bf-425b-b58e-f3bcf454af7c",
"fare_rules": {
"0": "fr_20"
},
"has_meal": true,
"has_free_seat": true,
"adult": {
"fare": {
"base_fare": 52660,
"yq": 25312,
"other_taxes": 4666,
"total_fare": 83989,
"net_fare": 83989,
"pax_count": 1
},
"fare_ref": "Comfort",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "T",
"fare_basis": "TXOYKWFF",
"baggage": {
"checkin": {
"kg": 92,
"pieces": 4
}
}
},
"varies_by_segment": false
},
"… 10 more (open the viewer)"
]
}
]
}
]
}This view shows 3 of the 349 options in the reply, chosen so that each of these is present. The fare_rules table shows the 13 rules these options point at, of 107 in the reply. For the entire JSON, open the raw record.
- An option with one flight (a direct flight). → group 0: option 112 (AC 43 DEL-YYZ)
- An option with two flights (a connection). → group 0: option 3 (NH 838 DEL-HND + AC 10 NRT-YYZ)
- An option where a flight is operated by another airline than the one selling it (operating_airline_code present). → group 0: option 0 (DL 8337 DEL-CDG + DL 85 CDG-ATL + DL 2422 ATL-YYZ)
- An option with at least one fare that includes a meal (has_meal true). → group 0: option 0 (DL 8337 DEL-CDG + DL 85 CDG-ATL + DL 2422 ATL-YYZ)
Keys and what they mean
Request
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| segments[] | array | required, 1 to 6 | must read | The legs you search: one for one way, two for a return (second from the destination back), up to six for a multi-city trip. |
| segments[].from | string | required | must read | Departure airport, IATA code. |
| segments[].to | string | required | must read | Arrival airport, IATA code. |
| segments[].date | date | required | must read | Departure date, YYYY-MM-DD, local to the departure airport. |
| adult | integer | required, 1 to 9 | must read | Adults travelling. child and infant default to 0; an infant needs an adult. |
| cabin_class | integer | optional | useful | 1 economy (default), 2 premium economy, 3 business, 4 first. |
| detail | string | optional | useful | journey (default) or segment. segment adds segments[] inside every fare option with the fare attributes per flight. |
| include_fare_rules | boolean | optional, default true | informational | false leaves fare_rules out of the reply and off every fare; smaller reply. |
| Total: 8 keys | ||||
Reply
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| search_id | string | always | informational | Id of this search, for support questions. |
| valid_till | datetime | always | must read | Until when an option_id and price_id of this reply can be sent to reprice. After it, search again. |
| fare_rules | object | unless include_fare_rules is false | useful | Every distinct fare rule of the reply keyed by id (fr_1, fr_2, …). Fares point at them; ids mean nothing outside this reply. |
| results[] | array | always | must read | One group per set of journeys the fares cover. Pick one option and one fare from each group until every journey of your request is covered. |
| results[].journey_indexes | array of integer | always | must read | Which journeys of your request this group's fares cover: [0] onward only, [1] return only, [0, 1] a combined fare for both. |
| results[].options[].option_id | string | always | must read | Names the flights of this option. Send it to reprice with the price_id of the chosen fare. |
| results[].options[].segments[] | array | always | must read | The flights of this option in order, each named by (journey_index, segment_index); segment_index restarts at 0 in every journey. |
| results[].options[].segments[].operating_airline_code | string | only on a codeshare | useful | The airline that flies the aircraft when it differs from airline_code, the airline selling the seat. Show it to the traveller. |
| results[].options[].fare_options[] | array | always | must read | The fares sold on exactly these flights. Each prices the whole option once; no amount appears anywhere else. |
| results[].options[].fare_options[].price_id | string | always | must read | Names this fare. Send it to reprice with the option_id. |
| results[].options[].fare_options[].adult | object | always | must read | What this fare gives an adult: fare (the price for the whole option), fare_ref, refundable_type, cabin_class, booking_class, fare_basis, baggage. child and infant appear only when requested. |
| results[].options[].fare_options[].adult.fare.total_fare | number | always | must read | What the traveller pays for one adult on this option, taxes included. |
| results[].options[].fare_options[].adult.fare.net_fare | number | always | must read | What you pay us for one adult: total_fare less your commission. |
| results[].options[].fare_options[].adult.baggage | object | when the airline states it | useful | Allowance included in the fare: hand and checkin, each {kg} and/or {pieces}. Absent = not stated. |
| results[].options[].fare_options[].fare_rules | object | when a rule is known at search | useful | Journey index → id in the top-level fare_rules. A missing index has no rule known at search; the reprice reply carries the final rules. |
| results[].options[].fare_options[].varies_by_segment | boolean | always | informational | true when a later flight of this fare differs from the first in cabin, meal, booking class, fare basis or baggage. Ask detail=segment to see them per flight. |
| Total: 16 keys | ||||
Errors this call answers with (3)
| HTTP | code | message | detail | when |
|---|---|---|---|---|
| 401 | 9001 | Authentication required | Invalid token | Missing, expired or foreign token; also when the API cannot be reached. |
| 400 | 5100 | Invalid search request | cabin_class must be 1 (economy), 2 (premium), 3 (business), or 4 (first) | errors[] has field cabin_class, rule one_of. Same for fare_types and the engine's own checks (dates, airport codes, pax counts). |
| 500 | 9000 | Something went wrong |
Questions developers ask (4)
- What do I send to reprice for a domestic return?
- Two items: one option and one fare from group [0] (onward) and one from group [1] (return). An international return has one group [0, 1] and one item.
- Why does commission not appear on my fares?
- Zero amounts are left out. commission appears only when a commission rule applies to your account; net_fare is then total_fare less it.
- How long can I use an option_id and price_id?
- Until valid_till of the search reply. After it, search again.
- What does varies_by_segment true mean?
- A later flight of the fare differs from the first in cabin, meal, booking class, fare basis or baggage. Send detail=segment to see every flight.
▸2. RepricePOST /flights/reprice1 items
What this step returned: 1 items(click to expand)
- 1 item(s) sent: option a1095f13… / price 12d9cfd9…
- Repriced option on journey_indexes [0]: 3 flights (QR 579 DEL-DOH, QR 725 DOH-ORD, QR 9524 ORD-YYZ); multi-flight reprice: yes
- Fare Economy Classic PARTIALLY_REFUNDABLE: adult total 54,696, net 54,696; segments[] in the reply: no (detail=journey)
- Price unchanged since search (no messages)
- Booking requirements: hold allowed True, passport mandatory True, GST mandatory False, PAN applicable False, DOB adult/child/infant True/True/True
- Price for the whole booking: total 54,696, net 54,696; itinerary_id expires at valid_till
- 1 fare rule(s) in the reply
Request body
HTTP 200 · 2270 ms · complete request body (collapsible viewer)
{
"items": [
{
"option_id": "a1095f13-202f-4861-9d5e-f14a84a888bc",
"price_id": "12d9cfd9-3769-4e41-8152-efe4f62d99d9"
}
]
}Reply
HTTP 200 · 2270 ms · complete response body (collapsible viewer)
{
"itinerary_id": "b925b499-b261-47e2-b644-fd0579170ee5",
"valid_till": "2026-10-20T20:56:12+05:30",
"fare_rules": {
"fr_1": {
"cancellation": [
{
"allowed": true,
"amount": 22840,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
}
}
],
"date_change": [
{
"allowed": true,
"amount": 12370,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
}
}
]
}
},
"results": [
{
"journey_indexes": [
0
],
"option_id": "a1095f13-202f-4861-9d5e-f14a84a888bc",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"from": "DEL",
"to": "DOH",
"airline_code": "QR",
"airline_name": "Qatar Airways",
"aircraft_type": "Airbus A359",
"flight_number": "579",
"departure_time": "2026-11-19T03:45:00",
"departure_terminal": "3",
"arrival_time": "2026-11-19T05:35:00",
"duration": 260,
"connecting_time": 145
},
{
"segment_index": 1,
"journey_index": 0,
"from": "DOH",
"to": "ORD",
"airline_code": "QR",
"airline_name": "Qatar Airways",
"aircraft_type": "Boeing 77W",
"flight_number": "725",
"departure_time": "2026-11-19T08:00:00",
"arrival_time": "2026-11-19T14:30:00",
"arrival_terminal": "5",
"duration": 930,
"connecting_time": 145
},
{
"segment_index": 2,
"journey_index": 0,
"from": "ORD",
"to": "YYZ",
"airline_code": "QR",
"airline_name": "Qatar Airways",
"operating_airline_code": "MQ",
"operating_airline_name": "Envoy Air as American Eagle",
"aircraft_type": "E70",
"flight_number": "9524",
"departure_time": "2026-11-19T18:33:00",
"departure_terminal": "3",
"arrival_time": "2026-11-19T21:29:00",
"arrival_terminal": "3",
"duration": 116,
"connecting_time": 243
}
],
"fare": {
"price_id": "12d9cfd9-3769-4e41-8152-efe4f62d99d9",
"fare_rules": {
"0": "fr_1"
},
"adult": {
"fare": {
"base_fare": 15270,
"yq": 25691,
"yr": 3141,
"airline_gst": 2206,
"other_taxes": 6273,
"total_fare": 54696,
"net_fare": 54696,
"pax_count": 1
},
"fare_ref": "Economy Classic",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "O",
"fare_basis": "OJINP3RI",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 25
}
}
},
"varies_by_segment": true
}
}
],
"booking_requirements": {
"is_gst_mandatory": false,
"pan_applicable": false,
"passport_mandatory": true,
"dob_applicable": {
"adt": true,
"chd": true,
"inf": true
},
"is_hold": true,
"firstname_length": 50,
"lastname_length": 50,
"firstname_min_length": 2,
"lastname_min_length": 2,
"seat_mandatory": false,
"meal_mandatory": false,
"baggage_mandatory": false
},
"price": {
"adult": {
"base_fare": 15270,
"yq": 25691,
"yr": 3141,
"airline_gst": 2206,
"other_taxes": 6273,
"total_fare": 54696,
"net_fare": 54696,
"pax_count": 1
},
"total": {
"base_fare": 15270,
"yq": 25691,
"yr": 3141,
"airline_gst": 2206,
"other_taxes": 6273,
"total_fare": 54696,
"net_fare": 54696,
"pax_count": 1
}
}
}Keys and what they mean
Request
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| items[] | array | required, one per group | must read | One item per search group you chose from: one for a one way or a combined return, two for a domestic return (one per direction). |
| items[].option_id | string | required | must read | The option_id from the search reply. |
| items[].price_id | string | required | must read | The price_id of the chosen fare of that option. An option_id or price_id not in a current search answers 400 with errors[] (search again). |
| Total: 3 keys | ||||
Reply
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| itinerary_id | string | always | must read | Names the repriced itinerary. Send it to ancillaries, seat map and book. |
| valid_till | datetime | always | must read | Until when the itinerary_id can be booked. After it, book answers 410: reprice again. |
| results[] | array | always | must read | One entry per item sent: journey_indexes, option_id, the flights (segments) and the one fare, priced again. |
| results[].segments[] | array | always | must read | The flights in order, each named by (journey_index, segment_index); segment_index restarts at 0 in every journey. |
| results[].fare | object | always | must read | The fare in the shape of search: price_id, per passenger type (adult, child, infant) the fare_ref, refundable_type, cabin_class, booking_class, fare_basis, baggage and fare, and fare_rules ids. |
| price.total | object | always | must read | The price in the components of search: base_fare, yq, yr, airline_gst, booking_fee, commission, other_taxes, total_fare (what the traveller pays), net_fare (what you pay us), pax_count, and the baggage stated in the fare. For the whole booking. |
| price.adult (child, infant) | object | always (child, infant when requested) | useful | The price in the components of search: base_fare, yq, yr, airline_gst, booking_fee, commission, other_taxes, total_fare (what the traveller pays), net_fare (what you pay us), pax_count, and the baggage stated in the fare. For one passenger of that type. |
| booking_requirements | object | always | must read | What book must carry: is_gst_mandatory, pan_applicable, passport_mandatory, dob_applicable (adt, chd, inf), name lengths, and whether a seat, meal or bag is mandatory. |
| booking_requirements.is_hold | boolean | always | must read | true when this fare may be booked on hold (book with is_hold true); false: book directly, paid at once. |
| fare_rules | object | when known | useful | The cancellation and date-change rules the fares point at, keyed by id (fr_1, …): bands with allowed, amount or percent, the window (from, to) and the airline's text. |
| messages[] | array | only when the price changed | must read | One entry per repriced option whose price changed since search: type FARE_ALERT, option_id, old_value, new_value. Show the new price before booking. |
| Total: 11 keys | ||||
Errors this call answers with (6)
| HTTP | code | message | detail | when |
|---|---|---|---|---|
| 401 | 9001 | Authentication required | Invalid token | |
| 400 | 5100 | Invalid search request | option_id and price_id are required | Also 'each review item needs option_id and price_id'. |
| 404 | 5103 | Flight not found | option_id or price_id not in a stored search. | |
| 410 | 5102 | Search results have expired | ||
| 502 | 5001 | The airline or supplier could not complete the request | Reprice failed at the airline. | |
| 504 | 5002 | A supplier or service did not answer in time |
Questions developers ask (2)
- The price changed. What now?
- messages has a FARE_ALERT with old_value and new_value for that option_id. Show the new price to the traveller before booking; the itinerary is priced at the new value.
- Until when can I book?
- valid_till of the reprice reply: the airline's session for this itinerary. Book before it or reprice again.