Business cabin (cabin_class: 3)
DEL-BOM · one way · 1 adult
cabin_class 3 asks for business fares. The fare's cabin_class says what was found.
▸1. SearchPOST /flights/search109 options
What this step returned: 109 options(click to expand)
- 109 options in 1 group(s): journey_indexes [0] has 109 options
- Options by number of flights: 1 flight: 21, 2 flights: 88
- Airlines in the reply: AI (111 flights), 6E (32 flights), EK (22 flights), EY (16 flights), SQ (14 flights), WY (2 flights)
- 388 fare options in total; 23 distinct fare families (fare_ref)
- Cheapest adult total: 25,096 (Business : Stretch)
- Fares with a meal included (has_meal): 110; with a free seat: 122
- Fares with check-in baggage included: 388; hand baggage only: 0; no baggage stated: 0
- Fares whose attributes differ between flights (varies_by_segment): 232; ask detail=segment to see them per flight
- Refundability: PARTIALLY_REFUNDABLE 304, NON_REFUNDABLE 82, not stated 2
- 22 distinct fare rules in fare_rules; 148 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 3
Request body
HTTP 200 · 8395 ms · complete request body (collapsible viewer)
{
"segments": [
{
"from": "DEL",
"to": "BOM",
"date": "2026-11-19"
}
],
"adult": 1,
"child": 0,
"infant": 0,
"cabin_class": 3
}Reply
HTTP 200 · 8395 ms · complete response body (collapsible viewer)
{
"search_id": "2389f87f-32ef-4cf8-b41d-42a6e072842a",
"status": "completed",
"valid_till": "2026-10-20T21:10:45+05:30",
"fare_rules": {
"fr_1": {
"cancellation": [
{
"allowed": true,
"amount": 12000,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 8000,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
},
"fr_12": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 2,
"unit": "HOURS"
},
"text": "Non refundable"
},
{
"allowed": true,
"amount": 7500,
"from": {
"value": 2,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
],
"date_change": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 2,
"unit": "HOURS"
},
"text": "Non changeable"
},
{
"allowed": true,
"amount": 3000,
"from": {
"value": 2,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
]
},
"fr_13": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 2,
"unit": "HOURS"
},
"text": "Non refundable"
},
{
"allowed": true,
"amount": 999,
"from": {
"value": 2,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
],
"date_change": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 2,
"unit": "HOURS"
},
"text": "Non changeable"
},
{
"allowed": true,
"amount": 0,
"from": {
"value": 2,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
]
},
"fr_14": {
"cancellation": [
{
"allowed": true,
"amount": 7500,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 3000,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
},
"fr_15": {
"cancellation": [
{
"allowed": true,
"amount": 999,
"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"
}
]
},
"fr_16": {
"cancellation": [
{
"allowed": true,
"amount": 7487.44,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 3032.89,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_17": {
"cancellation": [
{
"allowed": true,
"amount": 1042.56,
"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"
}
]
}
},
"results": [
{
"journey_indexes": [
0
],
"options": [
{
"option_id": "71d0ed6c-9ec3-46ea-af98-85dddca84e0d",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_AMD_AI_2545",
"from": "DEL",
"to": "AMD",
"airline_code": "AI",
"airline_name": "Air India",
"aircraft_type": "Airbus A32N",
"flight_number": "2545",
"stops": 1,
"departure_time": "2026-11-19T20:30:00",
"departure_terminal": "3",
"arrival_time": "2026-11-19T22:20:00",
"arrival_terminal": "1",
"duration": 110,
"connecting_time": 820
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "AMD_BOM_AI_2848",
"from": "AMD",
"to": "BOM",
"airline_code": "AI",
"airline_name": "Air India",
"aircraft_type": "Airbus A32N",
"flight_number": "2848",
"stops": 1,
"departure_time": "2026-11-20T12:00:00",
"departure_terminal": "1",
"arrival_time": "2026-11-20T13:20:00",
"arrival_terminal": "2",
"duration": 80,
"connecting_time": 820
}
],
"fare_options": [
{
"price_id": "f068b070-13c6-425c-9b86-5f8623dd9a6a",
"adult": {
"fare": {
"base_fare": 37118,
"yq": 1000,
"yr": 340,
"booking_fee": 100,
"other_taxes": 89,
"total_fare": 46132.94,
"net_fare": 46132.94,
"pax_count": 1
},
"fare_ref": "Busvalu",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Business",
"booking_class": "Z",
"fare_basis": "ZU1CWSII",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 30
}
}
},
"varies_by_segment": true
}
]
},
{
"option_id": "c79b9177-2070-4b4e-ae09-72c747a6f140",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_SIN_SQ_403",
"from": "DEL",
"to": "SIN",
"airline_code": "SQ",
"airline_name": "Singapore Airlines",
"aircraft_type": "Airbus A388",
"flight_number": "403",
"stops": 1,
"departure_time": "2026-11-19T21:45:00",
"departure_terminal": "3",
"arrival_time": "2026-11-20T05:55:00",
"arrival_terminal": "0",
"duration": 340,
"connecting_time": 775,
"next_day": 1
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "SIN_BOM_SQ_424",
"from": "SIN",
"to": "BOM",
"airline_code": "SQ",
"airline_name": "Singapore Airlines",
"aircraft_type": "Airbus A388",
"flight_number": "424",
"departure_time": "2026-11-20T18:50:00",
"departure_terminal": "3",
"arrival_time": "2026-11-20T21:50:00",
"arrival_terminal": "2",
"duration": 330,
"connecting_time": 775
}
],
"fare_options": [
{
"price_id": "365600e5-6469-472d-875f-5ab27ae2944f",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 60645,
"yq": 18192,
"total_fare": 78837,
"net_fare": 78837,
"pax_count": 1
},
"fare_ref": "Premium Economy Lite",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Business",
"booking_class": "R",
"fare_basis": "RNDIIRS",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 65
}
}
},
"varies_by_segment": true
},
{
"price_id": "045c7563-df5f-4afe-8f14-eab07a1fb3ae",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 63245,
"yq": 18660,
"total_fare": 81905,
"net_fare": 81905,
"pax_count": 1
},
"fare_ref": "Premium Economy Lite",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Business",
"booking_class": "R",
"fare_basis": "RNDIIRS",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 35
}
}
},
"varies_by_segment": true
},
{
"price_id": "52709d3e-1c8e-472e-8561-ea99797d9d3f",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 67700,
"yq": 19461,
"total_fare": 87161,
"net_fare": 87161,
"pax_count": 1
},
"fare_ref": "Premium Economy Standard",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Business",
"booking_class": "L",
"fare_basis": "LNBIIRS",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 35
}
}
},
"varies_by_segment": true
},
"… 12 more (open the viewer)"
]
},
{
"option_id": "9a8e9ff0-9a18-4725-ba3e-9b59d119df4d",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_SIN_SQ_4807",
"from": "DEL",
"to": "SIN",
"airline_code": "SQ",
"airline_name": "Singapore Airlines",
"operating_airline_code": "AI",
"operating_airline_name": "Air India",
"aircraft_type": "Airbus A321",
"flight_number": "4807",
"stops": 1,
"departure_time": "2026-11-19T03:35:00",
"departure_terminal": "3",
"arrival_time": "2026-11-19T12:10:00",
"arrival_terminal": "2",
"duration": 365,
"connecting_time": 400
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "SIN_BOM_SQ_424",
"from": "SIN",
"to": "BOM",
"airline_code": "SQ",
"airline_name": "Singapore Airlines",
"aircraft_type": "Airbus A388",
"flight_number": "424",
"departure_time": "2026-11-19T18:50:00",
"departure_terminal": "3",
"arrival_time": "2026-11-19T21:50:00",
"arrival_terminal": "2",
"duration": 330,
"connecting_time": 400
}
],
"fare_options": [
{
"price_id": "2a9f1c73-50a1-4eee-8e2e-4aacaa6cdb62",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 115020,
"yq": 28220,
"total_fare": 143240,
"net_fare": 143240,
"pax_count": 1
},
"fare_ref": "Business Standard",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Business",
"booking_class": "U",
"fare_basis": "UNBIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 2
},
"checkin": {
"kg": 40
}
}
},
"varies_by_segment": true
},
{
"price_id": "563ac74d-c622-4c8e-b0a9-cf7f084e2c55",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 142485,
"yq": 33164,
"total_fare": 175649,
"net_fare": 175649,
"pax_count": 1
},
"fare_ref": "Business Flexi",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Business",
"booking_class": "J",
"fare_basis": "JNBIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 2
},
"checkin": {
"kg": 40
}
}
},
"varies_by_segment": true
},
{
"price_id": "d430ad96-376b-4a00-9cc9-62ac5b221d45",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 115020,
"yq": 28220,
"total_fare": 143240,
"net_fare": 143240,
"pax_count": 1
},
"fare_ref": "Business Standard",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Business",
"booking_class": "U",
"fare_basis": "UNBIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 2
},
"checkin": {
"kg": 40
}
}
},
"varies_by_segment": true
},
"… 3 more (open the viewer)"
]
},
"… 1 more (open the viewer)"
]
}
]
}This view shows 4 of the 109 options in the reply, chosen so that each of these is present. The fare_rules table shows the 7 rules these options point at, of 22 in the reply. For the entire JSON, open the raw record.
- An option with one flight (a direct flight). → group 0: option 19 (AI 2678 DEL-BOM)
- An option with two flights (a connection). → group 0: option 0 (AI 2545 DEL-AMD + AI 2848 AMD-BOM)
- An option where a flight is operated by another airline than the one selling it (operating_airline_code present). → group 0: option 3 (SQ 4807 DEL-SIN + SQ 424 SIN-BOM)
- An option with at least one fare that includes a meal (has_meal true). → group 0: option 2 (SQ 403 DEL-SIN + SQ 424 SIN-BOM)
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 ea748fd6… / price df855794…
- Repriced option on journey_indexes [0]: 2 flights (6E 850 DEL-BLR, 6E 5031 BLR-BOM); multi-flight reprice: yes
- Fare Business : Stretch PARTIALLY_REFUNDABLE: adult total 25,096, net 25,096; segments[] in the reply: no (detail=journey)
- Price unchanged since search (no messages)
- Booking requirements: hold allowed True, passport mandatory False, GST mandatory False, PAN applicable False, DOB adult/child/infant False/True/True
- Price for the whole booking: total 25,096, net 25,096; itinerary_id expires at valid_till
- 0 fare rule(s) in the reply
Request body
HTTP 200 · 4786 ms · complete request body (collapsible viewer)
{
"items": [
{
"option_id": "ea748fd6-c182-4d07-bb5f-96ff6abcfa01",
"price_id": "df855794-c1e2-43af-a3b6-33869f226c8b"
}
]
}Reply
HTTP 200 · 4786 ms · complete response body (collapsible viewer)
{
"itinerary_id": "0fafbfa4-8216-4e91-9cab-4b7525e46ff5",
"valid_till": "2026-10-20T20:40:50+05:30",
"results": [
{
"journey_indexes": [
0
],
"option_id": "ea748fd6-c182-4d07-bb5f-96ff6abcfa01",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"from": "DEL",
"to": "BLR",
"airline_code": "6E",
"airline_name": "IndiGo Airlines",
"aircraft_type": "Airbus A321",
"flight_number": "850",
"departure_time": "2026-11-19T12:00:00",
"departure_terminal": "1",
"arrival_time": "2026-11-19T14:55:00",
"arrival_terminal": "1",
"duration": 175,
"connecting_time": 80
},
{
"segment_index": 1,
"journey_index": 0,
"from": "BLR",
"to": "BOM",
"airline_code": "6E",
"airline_name": "IndiGo Airlines",
"aircraft_type": "Airbus A321",
"flight_number": "5031",
"departure_time": "2026-11-19T16:15:00",
"departure_terminal": "1",
"arrival_time": "2026-11-19T18:10:00",
"arrival_terminal": "1",
"duration": 115,
"connecting_time": 80
}
],
"fare": {
"price_id": "df855794-c1e2-43af-a3b6-33869f226c8b",
"adult": {
"fare": {
"base_fare": 18000,
"yq": 1750,
"airline_gst": 3679,
"booking_fee": 200,
"other_taxes": 780,
"total_fare": 25096.14,
"net_fare": 25096.14,
"pax_count": 1
},
"fare_ref": "Business : Stretch",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Business",
"booking_class": "D2",
"fare_basis": "D2BC0IP",
"baggage": {
"hand": {
"kg": 12
},
"checkin": {
"kg": 30
}
}
},
"varies_by_segment": true
}
}
],
"booking_requirements": {
"is_gst_mandatory": false,
"pan_applicable": false,
"passport_mandatory": false,
"dob_applicable": {
"adt": false,
"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": 18000,
"yq": 1750,
"airline_gst": 3679,
"booking_fee": 200,
"other_taxes": 780,
"total_fare": 25096.14,
"net_fare": 25096.14,
"pax_count": 1
},
"total": {
"base_fare": 18000,
"yq": 1750,
"airline_gst": 3679,
"booking_fee": 200,
"other_taxes": 780,
"total_fare": 25096.14,
"net_fare": 25096.14,
"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.