Domestic, return, 1 adult, 1 child, 1 infant
DEL-BOM · return · 1 adult, 1 child, 1 infant · booked on hold
Domestic return for 1 adult, 1 child, 1 infant: search, reprice the cheapest fare, then the ancillaries and the seat map of the itinerary, book it on hold (no payment), read the booking details and release the hold. Two search segments. Domestic fares are sold per direction: two groups, [0] and [1]; reprice takes two items.
- 1 Search: 333 options
- 2 Reprice: 2 items
- 3 Ancillaries: 42 items
- 4 Seat map: 354 seats
- 5 Book on hold: 3 passengers
- 6 Booking details: 3 passengers
- 7 Release the hold: failed 409
▸1. SearchPOST /flights/search333 options
What this step returned: 333 options(click to expand)
- 333 options in 2 group(s): journey_indexes [0] has 165 options; journey_indexes [1] has 168 options
- Options by number of flights: 1 flight: 77, 2 flights: 256
- Airlines in the reply: AI (212 flights), IX (145 flights), SG (60 flights), H1 (55 flights), EK (42 flights), SQ (34 flights), EY (32 flights), QP (6 flights), WY (2 flights), 9I (1 flights)
- 1187 fare options in total; 36 distinct fare families (fare_ref)
- Cheapest adult total: 2,546 (Super Saver)
- Fares with a meal included (has_meal): 317; with a free seat: 367
- Fares with check-in baggage included: 1138; hand baggage only: 33; no baggage stated: 16
- Fares whose attributes differ between flights (varies_by_segment): 670; ask detail=segment to see them per flight
- Refundability: PARTIALLY_REFUNDABLE 862, NON_REFUNDABLE 237, not stated 88
- 48 distinct fare rules in fare_rules; 480 fares without a rule known at search
- Reply carries valid_till (option_id and price_id expire then); request: 1 adult, 1 child, 1 infant, cabin_class 1
Request body
HTTP 200 · 31427 ms · complete request body (collapsible viewer)
{
"segments": [
{
"from": "DEL",
"to": "BOM",
"date": "2026-11-20"
},
{
"from": "BOM",
"to": "DEL",
"date": "2026-11-25"
}
],
"adult": 1,
"child": 1,
"infant": 1,
"cabin_class": 1
}Reply
HTTP 200 · 31427 ms · complete response body (collapsible viewer)
{
"search_id": "9a13e82d-3a98-4f43-8974-7edc5c84178e",
"status": "completed",
"valid_till": "2026-10-21T01:22:16+05:30",
"fare_rules": {
"fr_5": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Refundable"
}
],
"date_change": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Changeable"
}
]
},
"fr_6": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 7013.55,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_7": {
"cancellation": [
{
"allowed": true,
"amount": 6160.55,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 3032.89,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_8": {
"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_12": {
"cancellation": [
{
"allowed": true,
"amount": 10000,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 4000,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
},
"fr_1": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 1,
"unit": "HOURS"
},
"text": "Non refundable"
},
{
"allowed": true,
"amount": 0,
"from": {
"value": 1,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
],
"date_change": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 1,
"unit": "HOURS"
},
"text": "Non changeable"
},
{
"allowed": true,
"amount": 0,
"from": {
"value": 1,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "PerTicket"
}
]
},
"fr_16": {
"cancellation": [
{
"allowed": true,
"amount": 5000,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 3500,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
},
"fr_17": {
"cancellation": [
{
"allowed": true,
"amount": 3500,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 1000,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
},
"fr_18": {
"cancellation": [
{
"allowed": true,
"amount": 999,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 250,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Reissue"
}
]
}
},
"results": [
{
"journey_indexes": [
0
],
"options": [
{
"option_id": "8880d7a5-9d6d-4dc4-87f7-b90b1ff083ad",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_GOI_IX_1068",
"from": "DEL",
"to": "GOI",
"airline_code": "IX",
"airline_name": "Air India Express",
"aircraft_type": "Airbus A320neo",
"flight_number": "1068",
"stops": 1,
"departure_time": "2026-11-20T11:55:00",
"departure_terminal": "1",
"arrival_time": "2026-11-20T14:30:00",
"duration": 155,
"connecting_time": 285
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "GOI_BOM_IX_1241",
"from": "GOI",
"to": "BOM",
"airline_code": "IX",
"airline_name": "Air India Express",
"aircraft_type": "Boeing 7M8",
"flight_number": "1241",
"departure_time": "2026-11-20T19:15:00",
"arrival_time": "2026-11-20T20:45:00",
"arrival_terminal": "2",
"duration": 90,
"connecting_time": 285
}
],
"fare_options": [
{
"price_id": "e40f6bb2-bfcd-4893-801e-e0349027fb91",
"adult": {
"fare": {
"base_fare": 3224,
"yq": 850,
"booking_fee": 100,
"other_taxes": 307,
"total_fare": 5318.94,
"net_fare": 5318.94,
"pax_count": 1
},
"fare_ref": "Value",
"cabin_class": "Economy",
"booking_class": "EC",
"fare_basis": "KNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"child": {
"fare": {
"base_fare": 3224,
"yq": 850,
"booking_fee": 100,
"other_taxes": 307,
"total_fare": 5318.94,
"net_fare": 5318.94,
"pax_count": 1
},
"fare_ref": "Value",
"cabin_class": "Economy",
"booking_class": "EC",
"fare_basis": "KNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"infant": {
"fare": {
"base_fare": 2858,
"airline_gst": 142,
"total_fare": 3000,
"net_fare": 3000,
"pax_count": 1
},
"fare_ref": "Value",
"cabin_class": "Economy",
"booking_class": "EC",
"fare_basis": "KNRA015"
},
"varies_by_segment": false
},
{
"price_id": "c49bac16-98e3-43d4-907a-e5c471826108",
"adult": {
"fare": {
"base_fare": 3350,
"yq": 850,
"booking_fee": 100,
"other_taxes": 313,
"total_fare": 5450.94,
"net_fare": 5450.94,
"pax_count": 1
},
"fare_ref": "Promo",
"cabin_class": "Economy",
"booking_class": "BT",
"fare_basis": "XCBA000",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"child": {
"fare": {
"base_fare": 3350,
"yq": 850,
"booking_fee": 100,
"other_taxes": 313,
"total_fare": 5450.94,
"net_fare": 5450.94,
"pax_count": 1
},
"fare_ref": "Promo",
"cabin_class": "Economy",
"booking_class": "BT",
"fare_basis": "XCBA000",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"infant": {
"fare": {
"base_fare": 2858,
"airline_gst": 142,
"total_fare": 3000,
"net_fare": 3000,
"pax_count": 1
},
"fare_ref": "Promo",
"cabin_class": "Economy",
"booking_class": "BT",
"fare_basis": "XCBA000"
},
"varies_by_segment": false
},
{
"price_id": "57f30a9f-5ae0-4026-835f-e7e976b327d3",
"adult": {
"fare": {
"base_fare": 3750,
"yq": 850,
"booking_fee": 100,
"other_taxes": 333,
"total_fare": 5870.94,
"net_fare": 5870.94,
"pax_count": 1
},
"fare_ref": "Family",
"cabin_class": "Economy",
"booking_class": "FM",
"fare_basis": "XCFA000",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"child": {
"fare": {
"base_fare": 3750,
"yq": 850,
"booking_fee": 100,
"other_taxes": 333,
"total_fare": 5870.94,
"net_fare": 5870.94,
"pax_count": 1
},
"fare_ref": "Family",
"cabin_class": "Economy",
"booking_class": "FM",
"fare_basis": "XCFA000",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"infant": {
"fare": {
"base_fare": 2858,
"airline_gst": 142,
"total_fare": 3000,
"net_fare": 3000,
"pax_count": 1
},
"fare_ref": "Family",
"cabin_class": "Economy",
"booking_class": "FM",
"fare_basis": "XCFA000"
},
"varies_by_segment": false
},
"… 10 more (open the viewer)"
]
},
{
"option_id": "b8efb823-eefb-4f76-8910-b1c48f505cb0",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_AUH_EY_219",
"from": "DEL",
"to": "AUH",
"airline_code": "EY",
"airline_name": "Etihad Airways",
"aircraft_type": "Airbus A351",
"flight_number": "219",
"stops": 1,
"departure_time": "2026-11-20T04:35:00",
"departure_terminal": "3",
"arrival_time": "2026-11-20T06:55:00",
"arrival_terminal": "A",
"duration": 230,
"connecting_time": 445
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "AUH_BOM_EY_204",
"from": "AUH",
"to": "BOM",
"airline_code": "EY",
"airline_name": "Etihad Airways",
"aircraft_type": "Boeing 789",
"flight_number": "204",
"stops": 1,
"departure_time": "2026-11-20T14:20:00",
"departure_terminal": "A",
"arrival_time": "2026-11-20T19:00:00",
"arrival_terminal": "2",
"duration": 190
}
],
"fare_options": [
{
"price_id": "9492ea74-ed10-4792-b827-6fa581b1b942",
"fare_rules": {
"0": "fr_5"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 47445.74,
"other_taxes": 3923.81,
"total_fare": 55469.63,
"net_fare": 55469.63,
"pax_count": 1
},
"fare_ref": "Economy Basic",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q"
},
"child": {
"fare": {
"base_fare": 35814.61,
"other_taxes": 3923.81,
"total_fare": 43345.66,
"net_fare": 43345.66,
"pax_count": 1
},
"fare_ref": "Economy Basic",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q"
},
"infant": {
"fare": {
"base_fare": 7967.02,
"total_fare": 8289.26,
"net_fare": 8289.26,
"pax_count": 1
},
"fare_ref": "Economy Basic",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q"
},
"varies_by_segment": true
},
{
"price_id": "1cf85ba9-fbb9-49b6-a965-4336435b73cc",
"fare_rules": {
"0": "fr_6"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 50912.71,
"other_taxes": 3923.81,
"total_fare": 59088.25,
"net_fare": 59088.25,
"pax_count": 1
},
"fare_ref": "Economy Value",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q",
"baggage": {
"checkin": {
"kg": 25
}
}
},
"child": {
"fare": {
"base_fare": 38498.72,
"other_taxes": 3923.81,
"total_fare": 46143.5,
"net_fare": 46143.5,
"pax_count": 1
},
"fare_ref": "Economy Value",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q",
"baggage": {
"checkin": {
"kg": 25
}
}
},
"infant": {
"fare": {
"base_fare": 8526.21,
"total_fare": 8867.41,
"net_fare": 8867.41,
"pax_count": 1
},
"fare_ref": "Economy Value",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q",
"baggage": {
"checkin": {
"kg": 10
}
}
},
"varies_by_segment": true
},
{
"price_id": "94e913c0-5046-4b62-baa9-59363266bb57",
"fare_rules": {
"0": "fr_7"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 60195.24,
"other_taxes": 3923.81,
"total_fare": 68759.37,
"net_fare": 68759.37,
"pax_count": 1
},
"fare_ref": "Economy Comfort",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q",
"baggage": {
"checkin": {
"kg": 30
}
}
},
"child": {
"fare": {
"base_fare": 45432.66,
"other_taxes": 3923.81,
"total_fare": 53371.25,
"net_fare": 53371.25,
"pax_count": 1
},
"fare_ref": "Economy Comfort",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q",
"baggage": {
"checkin": {
"kg": 30
}
}
},
"infant": {
"fare": {
"base_fare": 9868.26,
"total_fare": 10266.33,
"net_fare": 10266.33,
"pax_count": 1
},
"fare_ref": "Economy Comfort",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "Q",
"baggage": {
"checkin": {
"kg": 10
}
}
},
"varies_by_segment": true
},
"… 1 more (open the viewer)"
]
},
{
"option_id": "5fb6bb68-741e-46a5-833a-8e96172065a2",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_SIN_SQ_4804",
"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": "4804",
"stops": 1,
"departure_time": "2026-11-20T00:40:00",
"departure_terminal": "3",
"arrival_time": "2026-11-20T09:15:00",
"arrival_terminal": "2",
"duration": 365,
"connecting_time": 575
},
{
"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": 575
}
],
"fare_options": [
{
"price_id": "ea583956-a524-445e-9662-9aec5b4427e7",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 64265,
"yq": 10469,
"total_fare": 74734,
"net_fare": 74734,
"pax_count": 1
},
"fare_ref": "Economy Flexi",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "E",
"fare_basis": "ENCIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 30
}
}
},
"child": {
"fare": {
"base_fare": 48015,
"yq": 9656,
"total_fare": 57671,
"net_fare": 57671,
"pax_count": 1
},
"fare_ref": "Economy Flexi",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "E",
"fare_basis": "ENCIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 30
}
}
},
"infant": {
"fare": {
"base_fare": 6405,
"yq": 321,
"total_fare": 6726,
"net_fare": 6726,
"pax_count": 1
},
"fare_ref": "Economy Flexi",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "E",
"fare_basis": "ENCIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 30
}
}
},
"varies_by_segment": true
},
{
"price_id": "c80dacd4-02aa-4ba2-bdab-e3d8753a162f",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 143485,
"yq": 33324,
"total_fare": 176809,
"net_fare": 176809,
"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
}
}
},
"child": {
"fare": {
"base_fare": 106865,
"yq": 26732,
"total_fare": 133597,
"net_fare": 133597,
"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
}
}
},
"infant": {
"fare": {
"base_fare": 14250,
"yq": 2565,
"total_fare": 16815,
"net_fare": 16815,
"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": "5acc8f4a-616e-42ab-8119-14158d74cbcf",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 64265,
"yq": 10469,
"total_fare": 74734,
"net_fare": 74734,
"pax_count": 1
},
"fare_ref": "Economy Flexi",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "E",
"fare_basis": "ENCIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 30
}
}
},
"child": {
"fare": {
"base_fare": 48015,
"yq": 9656,
"total_fare": 57671,
"net_fare": 57671,
"pax_count": 1
},
"fare_ref": "Economy Flexi",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "E",
"fare_basis": "ENCIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 30
}
}
},
"infant": {
"fare": {
"base_fare": 6405,
"yq": 321,
"total_fare": 6726,
"net_fare": 6726,
"pax_count": 1
},
"fare_ref": "Economy Flexi",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "E",
"fare_basis": "ENCIIRA",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 30
}
}
},
"varies_by_segment": true
},
"… 6 more (open the viewer)"
]
},
"… 1 more (open the viewer)"
]
},
{
"journey_indexes": [
1
],
"options": [
{
"option_id": "16f3ea09-3183-4a9a-abd0-75d0976d07c7",
"segments": [
{
"segment_index": 0,
"journey_index": 1,
"segment_id": "BOM_VNS_H1_2062",
"from": "BOM",
"to": "VNS",
"airline_code": "H1",
"airline_name": "Hahn Air",
"operating_airline_code": "SG",
"operating_airline_name": "Spicejet",
"aircraft_type": "Boeing 737",
"flight_number": "2062",
"stops": 1,
"departure_time": "2026-11-25T17:30:00",
"departure_terminal": "1",
"arrival_time": "2026-11-25T20:00:00",
"duration": 150,
"connecting_time": 70
},
{
"segment_index": 1,
"journey_index": 1,
"segment_id": "VNS_DEL_H1_937",
"from": "VNS",
"to": "DEL",
"airline_code": "H1",
"airline_name": "Hahn Air",
"operating_airline_code": "SG",
"operating_airline_name": "Spicejet",
"aircraft_type": "Boeing 737",
"flight_number": "937",
"departure_time": "2026-11-25T21:10:00",
"arrival_time": "2026-11-25T22:40:00",
"arrival_terminal": "1D",
"duration": 90
}
],
"fare_options": [
{
"price_id": "9cae93f8-bfbf-4d66-97d6-80e8397ffb65",
"fare_rules": {
"1": "fr_1"
},
"adult": {
"fare": {
"base_fare": 19004,
"yq": 6488,
"yr": 9000,
"other_taxes": 1998,
"total_fare": 36726,
"net_fare": 36726,
"pax_count": 1
},
"fare_ref": "Spicejet Economy Class",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"fare_basis": "KOWSG",
"baggage": {
"checkin": {
"kg": 50,
"pieces": 2
}
}
},
"child": {
"fare": {
"base_fare": 19004,
"yq": 6488,
"yr": 9000,
"other_taxes": 1998,
"total_fare": 36726,
"net_fare": 36726,
"pax_count": 1
},
"fare_ref": "Spicejet Economy Class",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"fare_basis": "KOWSG",
"baggage": {
"checkin": {
"kg": 50,
"pieces": 2
}
}
},
"infant": {
"fare": {
"base_fare": 3830,
"other_taxes": 192,
"total_fare": 4022,
"net_fare": 4022,
"pax_count": 1
},
"fare_ref": "Spicejet Economy Class",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"fare_basis": "KOWSG"
},
"varies_by_segment": true
},
{
"price_id": "3839bcfa-763d-443a-9e6d-28d0204c74f8",
"adult": {
"fare": {
"base_fare": 22953.27,
"yq": 6444.88,
"other_taxes": 9070.22,
"total_fare": 40648.26,
"net_fare": 40648.26,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"pieces": 1
}
}
},
"child": {
"fare": {
"base_fare": 22953.27,
"yq": 6444.88,
"other_taxes": 9070.22,
"total_fare": 40648.26,
"net_fare": 40648.26,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"pieces": 1
}
}
},
"infant": {
"fare": {
"base_fare": 4947.4,
"total_fare": 5136.96,
"net_fare": 5136.96,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"pieces": 0
}
}
},
"varies_by_segment": true
}
]
},
{
"option_id": "8cbe78f4-8bf5-4d5d-b5da-94e565aa2f53",
"segments": [
{
"segment_index": 0,
"journey_index": 1,
"segment_id": "BOM_AUH_EY_205",
"from": "BOM",
"to": "AUH",
"airline_code": "EY",
"airline_name": "Etihad Airways",
"aircraft_type": "Airbus A351",
"flight_number": "205",
"stops": 1,
"departure_time": "2026-11-25T23:00:00",
"departure_terminal": "2",
"arrival_time": "2026-11-26T00:50:00",
"arrival_terminal": "A",
"duration": 200,
"connecting_time": 120
},
{
"segment_index": 1,
"journey_index": 1,
"segment_id": "AUH_DEL_EY_212",
"from": "AUH",
"to": "DEL",
"airline_code": "EY",
"airline_name": "Etihad Airways",
"aircraft_type": "Airbus A321",
"flight_number": "212",
"stops": 1,
"departure_time": "2026-11-26T02:50:00",
"departure_terminal": "A",
"arrival_time": "2026-11-26T07:45:00",
"arrival_terminal": "3",
"duration": 205
}
],
"fare_options": [
{
"price_id": "1ee777f1-ae43-4d33-ab5b-dc9bde34c334",
"fare_rules": {
"1": "fr_5"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 48675.95,
"other_taxes": 3942.76,
"total_fare": 56737.75,
"net_fare": 56737.75,
"pax_count": 1
},
"fare_ref": "Economy Basic",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L"
},
"child": {
"fare": {
"base_fare": 37156.67,
"other_taxes": 3942.76,
"total_fare": 44725.63,
"net_fare": 44725.63,
"pax_count": 1
},
"fare_ref": "Economy Basic",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L"
},
"infant": {
"fare": {
"base_fare": 9644.58,
"total_fare": 10033.17,
"net_fare": 10033.17,
"pax_count": 1
},
"fare_ref": "Economy Basic",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L"
},
"varies_by_segment": true
},
{
"price_id": "e940100c-d427-4e7f-b236-ec183895d354",
"fare_rules": {
"1": "fr_6"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 52142.92,
"other_taxes": 3942.76,
"total_fare": 60346.89,
"net_fare": 60346.89,
"pax_count": 1
},
"fare_ref": "Economy Value",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"baggage": {
"checkin": {
"kg": 25
}
}
},
"child": {
"fare": {
"base_fare": 39728.94,
"other_taxes": 3942.76,
"total_fare": 47411.63,
"net_fare": 47411.63,
"pax_count": 1
},
"fare_ref": "Economy Value",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"baggage": {
"checkin": {
"kg": 25
}
}
},
"infant": {
"fare": {
"base_fare": 10091.93,
"total_fare": 10499.47,
"net_fare": 10499.47,
"pax_count": 1
},
"fare_ref": "Economy Value",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"baggage": {
"checkin": {
"kg": 10
}
}
},
"varies_by_segment": true
},
{
"price_id": "6778b4eb-7f49-4826-9add-d1dc9ad6363f",
"fare_rules": {
"1": "fr_7"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 61313.62,
"other_taxes": 3942.76,
"total_fare": 69906.17,
"net_fare": 69906.17,
"pax_count": 1
},
"fare_ref": "Economy Comfort",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"baggage": {
"checkin": {
"kg": 30
}
}
},
"child": {
"fare": {
"base_fare": 46662.88,
"other_taxes": 3942.76,
"total_fare": 54639.38,
"net_fare": 54639.38,
"pax_count": 1
},
"fare_ref": "Economy Comfort",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"baggage": {
"checkin": {
"kg": 30
}
}
},
"infant": {
"fare": {
"base_fare": 11545.83,
"total_fare": 12019.72,
"net_fare": 12019.72,
"pax_count": 1
},
"fare_ref": "Economy Comfort",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"baggage": {
"checkin": {
"kg": 10
}
}
},
"varies_by_segment": true
},
"… 1 more (open the viewer)"
]
},
{
"option_id": "642f69ad-1c8f-4b3e-a0a6-9da144a966f2",
"segments": [
{
"segment_index": 0,
"journey_index": 1,
"segment_id": "BOM_DEL_AI_1804",
"from": "BOM",
"to": "DEL",
"airline_code": "AI",
"airline_name": "Air India",
"aircraft_type": "Airbus A320neo",
"flight_number": "1804",
"departure_time": "2026-11-25T22:45:00",
"departure_terminal": "2",
"arrival_time": "2026-11-26T01:05:00",
"arrival_terminal": "2",
"duration": 140,
"next_day": 1
}
],
"fare_options": [
{
"price_id": "670e5df9-6cf3-440f-ba52-353fe71b8d55",
"has_meal": true,
"adult": {
"fare": {
"base_fare": 6456,
"yq": 1903,
"total_fare": 8359,
"net_fare": 8359,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YXSII",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 15
}
}
},
"child": {
"fare": {
"base_fare": 5811,
"yq": 1871,
"total_fare": 7682,
"net_fare": 7682,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YXSII",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 15
}
}
},
"infant": {
"fare": {
"base_fare": 3000,
"yq": 329,
"total_fare": 3329,
"net_fare": 3329,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YXSII",
"baggage": {
"hand": {
"kg": 7,
"pieces": 1
},
"checkin": {
"kg": 15
}
}
},
"varies_by_segment": false
},
{
"price_id": "c118d01e-9cf7-42f7-b458-d5fab91c59d7",
"fare_rules": {
"1": "fr_16"
},
"has_free_seat": true,
"adult": {
"fare": {
"base_fare": 7336,
"yq": 850,
"yr": 170,
"other_taxes": 927,
"total_fare": 9283,
"net_fare": 9283,
"pax_count": 1
},
"fare_ref": "ECO VALUE",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YXSII",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"child": {
"fare": {
"base_fare": 6602,
"yq": 850,
"yr": 170,
"other_taxes": 891,
"total_fare": 8513,
"net_fare": 8513,
"pax_count": 1
},
"fare_ref": "ECO VALUE",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YXSII",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"infant": {
"fare": {
"base_fare": 3000,
"yr": 170,
"other_taxes": 159,
"total_fare": 3329,
"net_fare": 3329,
"pax_count": 1
},
"fare_ref": "ECO VALUE",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YXSII",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"varies_by_segment": false
},
{
"price_id": "6d9bfdbe-8d20-4b8d-bdf6-eb674f0de4dc",
"fare_rules": {
"1": "fr_17"
},
"has_free_seat": true,
"adult": {
"fare": {
"base_fare": 7836,
"yq": 850,
"yr": 170,
"other_taxes": 952,
"total_fare": 9808,
"net_fare": 9808,
"pax_count": 1
},
"fare_ref": "ECO CLASSIC",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YWSII",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 20
}
}
},
"child": {
"fare": {
"base_fare": 7052,
"yq": 850,
"yr": 170,
"other_taxes": 913,
"total_fare": 8985,
"net_fare": 8985,
"pax_count": 1
},
"fare_ref": "ECO CLASSIC",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YWSII",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 20
}
}
},
"infant": {
"fare": {
"base_fare": 3000,
"yr": 170,
"other_taxes": 159,
"total_fare": 3329,
"net_fare": 3329,
"pax_count": 1
},
"fare_ref": "ECO CLASSIC",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "L",
"fare_basis": "LU1YWSII",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 20
}
}
},
"varies_by_segment": false
},
"… 1 more (open the viewer)"
]
}
]
}
]
}This view shows 7 of the 333 options in the reply, chosen so that each of these is present. The fare_rules table shows the 9 rules these options point at, of 48 in the reply. For the entire JSON, open the raw record.
- An option with one flight (a direct flight). → group 0: option 3 (H1 2038 DEL-BOM); group 1: option 19 (AI 1804 BOM-DEL)
- An option with two flights (a connection). → group 0: option 0 (IX 1068 DEL-GOI + IX 1241 GOI-BOM); group 1: option 0 (H1 2062 BOM-VNS + H1 937 VNS-DEL)
- An option where a flight is operated by another airline than the one selling it (operating_airline_code present). → group 0: option 2 (SQ 4804 DEL-SIN + SQ 424 SIN-BOM); group 1: option 0 (H1 2062 BOM-VNS + H1 937 VNS-DEL)
- An option with at least one fare that includes a meal (has_meal true). → group 0: option 1 (EY 219 DEL-AUH + EY 204 AUH-BOM); group 1: option 6 (EY 205 BOM-AUH + EY 212 AUH-DEL)
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/reprice2 items
What this step returned: 2 items(click to expand)
- 2 item(s) sent: option 348035e5… / price 70060236…; option a17d077f… / price d519d70c…
- Repriced option on journey_indexes [0]: 1 flight (IX 1038 DEL-NMI); multi-flight reprice: no
- Fare Value PARTIALLY_REFUNDABLE: adult total 3,002, net 3,002; segments[] in the reply: no (detail=journey)
- Repriced option on journey_indexes [1]: 1 flight (IX 8006 BOM-DEL); multi-flight reprice: no
- Fare Value PARTIALLY_REFUNDABLE: adult total 2,637, net 2,637; segments[] in the reply: no (detail=journey)
- Price changed since search for option 348035e5…: FARE_ALERT 6,004 → 9,004
- Price changed since search for option a17d077f…: FARE_ALERT 5,274 → 8,274
- 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 17,278, net 17,278; itinerary_id expires at valid_till
- 0 fare rule(s) in the reply
Request body
HTTP 200 · 14360 ms · complete request body (collapsible viewer)
{
"items": [
{
"option_id": "348035e5-4322-4044-8cdd-c23ff64b6624",
"price_id": "70060236-85cb-494f-b9b9-741c2dff9b82"
},
{
"option_id": "a17d077f-71de-4e3a-9dd7-fc73497dfaa4",
"price_id": "d519d70c-663a-4a90-8307-433fbb70c663"
}
]
}Reply
HTTP 200 · 14360 ms · complete response body (collapsible viewer)
{
"itinerary_id": "99cae871-4739-42be-aef1-98a2349c6190",
"valid_till": "2026-10-21T00:52:31+05:30",
"results": [
{
"journey_indexes": [
0
],
"option_id": "348035e5-4322-4044-8cdd-c23ff64b6624",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"from": "DEL",
"to": "NMI",
"airline_code": "IX",
"airline_name": "Air India Express",
"aircraft_type": "Boeing 7M8",
"flight_number": "1038",
"departure_time": "2026-11-20T17:40:00",
"departure_terminal": "1",
"arrival_time": "2026-11-20T19:45:00",
"duration": 125
}
],
"fare": {
"price_id": "70060236-85cb-494f-b9b9-741c2dff9b82",
"adult": {
"fare": {
"base_fare": 899,
"yq": 850,
"airline_gst": 96,
"booking_fee": 100,
"other_taxes": 319,
"total_fare": 3001.94,
"net_fare": 3001.94,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"child": {
"fare": {
"base_fare": 899,
"yq": 850,
"airline_gst": 96,
"booking_fee": 100,
"other_taxes": 319,
"total_fare": 3001.94,
"net_fare": 3001.94,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"infant": {
"fare": {
"base_fare": 3000,
"total_fare": 3000,
"net_fare": 3000,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015"
},
"varies_by_segment": false
}
},
{
"journey_indexes": [
1
],
"option_id": "a17d077f-71de-4e3a-9dd7-fc73497dfaa4",
"segments": [
{
"segment_index": 0,
"journey_index": 1,
"from": "BOM",
"to": "DEL",
"airline_code": "IX",
"airline_name": "Air India Express",
"aircraft_type": "Airbus A32N",
"flight_number": "8006",
"departure_time": "2026-11-25T11:30:00",
"departure_terminal": "2",
"arrival_time": "2026-11-25T14:00:00",
"arrival_terminal": "3",
"duration": 150
}
],
"fare": {
"price_id": "d519d70c-663a-4a90-8307-433fbb70c663",
"adult": {
"fare": {
"base_fare": 1001,
"yq": 850,
"airline_gst": 102,
"other_taxes": 66,
"total_fare": 2637,
"net_fare": 2637,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"child": {
"fare": {
"base_fare": 1001,
"yq": 850,
"airline_gst": 102,
"other_taxes": 66,
"total_fare": 2637,
"net_fare": 2637,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"infant": {
"fare": {
"base_fare": 3000,
"total_fare": 3000,
"net_fare": 3000,
"pax_count": 1
},
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015"
},
"varies_by_segment": false
}
}
],
"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": 1900,
"yq": 1700,
"airline_gst": 198,
"booking_fee": 100,
"other_taxes": 385,
"total_fare": 5638.94,
"net_fare": 5638.94,
"pax_count": 1
},
"child": {
"base_fare": 1900,
"yq": 1700,
"airline_gst": 198,
"booking_fee": 100,
"other_taxes": 385,
"total_fare": 5638.94,
"net_fare": 5638.94,
"pax_count": 1
},
"infant": {
"base_fare": 6000,
"total_fare": 6000,
"net_fare": 6000,
"pax_count": 1
},
"total": {
"base_fare": 9800,
"yq": 3400,
"airline_gst": 396,
"booking_fee": 200,
"other_taxes": 770,
"total_fare": 17277.88,
"net_fare": 17277.88,
"pax_count": 3
}
},
"messages": [
{
"type": "FARE_ALERT",
"option_id": "348035e5-4322-4044-8cdd-c23ff64b6624",
"message": "Fare has changed: previous price 6003.88, current price 9003.88 (difference: 3000.00)",
"old_value": 6003.88,
"new_value": 9003.88
},
{
"type": "FARE_ALERT",
"option_id": "a17d077f-71de-4e3a-9dd7-fc73497dfaa4",
"message": "Fare has changed: previous price 5274.00, current price 8274.00 (difference: 3000.00)",
"old_value": 5274,
"new_value": 8274
}
]
}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.
▸3. AncillariesPOST /flights/ancillaries42 items
What this step returned: 42 items(click to expand)
- 2 flight(s) in segments[]: (journey 0, segment 0) IX 1038 DEL-NMI; (journey 1, segment 0) IX 8006 BOM-DEL
- 20 bags (per journey): journey 0: 10 items; journey 1: 10 items
- bags: price from 2,100 to 18,750; free items: 0
- 22 meals (per flight): (journey 0, segment 0): 11 items; (journey 1, segment 0): 11 items
- meals: price from 100 to 600; free items: 0
- No other items offered on this itinerary
Request body
HTTP 200 · 149 ms · complete request body (collapsible viewer)
{
"itinerary_id": "99cae871-4739-42be-aef1-98a2349c6190"
}Reply
HTTP 200 · 149 ms · complete response body (collapsible viewer)
{
"itinerary_id": "99cae871-4739-42be-aef1-98a2349c6190",
"segments": [
{
"journey_index": 0,
"segment_index": 0,
"airline_code": "IX",
"flight_number": "1038",
"from": "DEL",
"to": "NMI"
},
{
"journey_index": 1,
"segment_index": 0,
"airline_code": "IX",
"flight_number": "8006",
"from": "BOM",
"to": "DEL"
}
],
"baggage": [
{
"journey_index": 0,
"items": [
{
"code": "1865",
"label": "CABIN BAGGAGE 5KGS",
"price": 3500
},
{
"code": "1866",
"label": "CABIN BAGGAGE 3KGS",
"price": 2100
},
{
"code": "1867",
"label": "XCESS BAGGAGE 25KG",
"price": 18750
},
"… 7 more (open the viewer)"
]
},
{
"journey_index": 1,
"items": [
{
"code": "5372",
"label": "CABIN BAGGAGE 5KGS",
"price": 3500
},
{
"code": "5373",
"label": "CABIN BAGGAGE 3KGS",
"price": 2100
},
{
"code": "5374",
"label": "XCESS BAGGAGE 25KG",
"price": 18750
},
"… 7 more (open the viewer)"
]
}
],
"meal": [
{
"journey_index": 0,
"segment_index": 0,
"items": [
{
"code": "3890",
"label": "Shondesh Tiramisu",
"price": 250
},
{
"code": "3891",
"label": "Paneer Makhani with Jeera Aloo Vegetable Pulao",
"price": 600
},
{
"code": "3892",
"label": "Vegetable Manchurian with Fried Rice",
"price": 600
},
"… 8 more (open the viewer)"
]
},
{
"journey_index": 1,
"segment_index": 0,
"items": [
{
"code": "9440",
"label": "Shondesh Tiramisu",
"price": 250
},
{
"code": "9441",
"label": "Paneer Makhani with Jeera Aloo Vegetable Pulao",
"price": 600
},
{
"code": "9442",
"label": "Vegetable Manchurian with Fried Rice",
"price": 600
},
"… 8 more (open the viewer)"
]
}
],
"other": []
}Keys and what they mean
Request
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| itinerary_id | string | required | must read | The itinerary_id from reprice. An expired one answers 404: reprice again. |
| Total: 1 keys | ||||
Reply
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| segments[] | array | always | useful | The flights of the itinerary, each named by (journey_index, segment_index), with airline_code, flight_number, from and to. |
| baggage[] | array | always (empty when none) | must read | Extra bags per journey: journey_index and items. A bag covers every flight of its journey, so it has no segment_index. |
| meal[] | array | always (empty when none) | must read | Meals per flight: journey_index, segment_index and items. |
| other[] | array | always (empty when none) | useful | Other items per flight (priority check-in, bundles): journey_index, segment_index and items. |
| <list>[].items[] | array | always | must read | What can be bought: code (send it to book), label (show it), price (per passenger, INR). |
| Total: 5 keys | ||||
Errors this call answers with (4)
| HTTP | code | message | detail | when |
|---|---|---|---|---|
| 401 | 9001 | Authentication required | Invalid token | |
| 400 | 5100 | Invalid search request | itinerary_id is required | errors[]: field itinerary_id, rule required. |
| 404 | 5104 | Itinerary not found or expired | Unknown or expired itinerary_id. | |
| 502 | 5001 | The airline or supplier could not complete the request |
Questions developers ask (1)
- How do I send a bag and a meal on book?
- A bag with its code and journey_index; a meal, seat or other item with its code, journey_index and segment_index, exactly as this reply gave them.
▸4. Seat mapPOST /flights/seat-map354 seats
What this step returned: 354 seats(click to expand)
- 2 flight(s) with a seat map of 2 in the itinerary: (journey 0, segment 0) Boeing 7M8, 168 seats; (journey 1, segment 0) Airbus A32N, 186 seats
- 327 seats available of 354; free: 24; paid: 303 (from 300 to 1,700)
- Window 107, aisle 107, middle 113; exit row 0; extra leg room 0; infant allowed 0
Request body
HTTP 200 · 5618 ms · complete request body (collapsible viewer)
{
"itinerary_id": "99cae871-4739-42be-aef1-98a2349c6190"
}Reply
HTTP 200 · 5618 ms · complete response body (collapsible viewer)
{
"itinerary_id": "99cae871-4739-42be-aef1-98a2349c6190",
"segments": [
{
"journey_index": 0,
"segment_index": 0,
"airline_code": "IX",
"flight_number": "1038",
"from": "DEL",
"to": "NMI"
},
{
"journey_index": 1,
"segment_index": 0,
"airline_code": "IX",
"flight_number": "8006",
"from": "BOM",
"to": "DEL"
}
],
"seats": [
{
"journey_index": 0,
"segment_index": 0,
"aircraft_type": "Boeing 7M8",
"seats": [
{
"aisle": false,
"amount": 1700,
"code": "RA0022320212078280300223447428165ABO1EI4HWT|8314",
"column": 1,
"desc": "3A",
"exit_row": false,
"infant": false,
"is_available": true,
"leg_room": false,
"middle": false,
"near_wings": false,
"reclining": false,
"row": 8,
"tax": 0,
"window": true
},
{
"aisle": false,
"amount": 1700,
"code": "RA0022320212078280300223447428165ABO1EI4HWT|8315",
"column": 2,
"desc": "3B",
"exit_row": false,
"infant": false,
"is_available": true,
"leg_room": false,
"middle": true,
"near_wings": false,
"reclining": false,
"row": 8,
"tax": 0,
"window": false
},
{
"aisle": true,
"amount": 1700,
"code": "RA0022320212078280300223447428165ABO1EI4HWT|8316",
"column": 3,
"desc": "3C",
"exit_row": false,
"infant": false,
"is_available": true,
"leg_room": false,
"middle": false,
"near_wings": false,
"reclining": false,
"row": 8,
"tax": 0,
"window": false
},
"… 165 more (open the viewer)"
],
"total_seats": 168
},
{
"journey_index": 1,
"segment_index": 0,
"aircraft_type": "Airbus A32N",
"seats": [
{
"aisle": false,
"amount": 1700,
"code": "RA002234994320715680022369122131WQGBSCULT20|6189",
"column": 1,
"desc": "1A",
"exit_row": false,
"infant": false,
"is_available": true,
"leg_room": false,
"middle": false,
"near_wings": false,
"reclining": false,
"row": 8,
"tax": 0,
"window": true
},
{
"aisle": false,
"amount": 1700,
"code": "RA002234994320715680022369122131WQGBSCULT20|6190",
"column": 2,
"desc": "1B",
"exit_row": false,
"infant": false,
"is_available": true,
"leg_room": false,
"middle": true,
"near_wings": false,
"reclining": false,
"row": 8,
"tax": 0,
"window": false
},
{
"aisle": true,
"amount": 1700,
"code": "RA002234994320715680022369122131WQGBSCULT20|6191",
"column": 3,
"desc": "1C",
"exit_row": false,
"infant": false,
"is_available": true,
"leg_room": false,
"middle": false,
"near_wings": false,
"reclining": false,
"row": 8,
"tax": 0,
"window": false
},
"… 183 more (open the viewer)"
],
"total_seats": 186
}
]
}Keys and what they mean
Request
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| itinerary_id | string | required | must read | The itinerary_id from reprice. |
| Total: 1 keys | ||||
Reply
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| segments[] | array | always | useful | The flights of the itinerary, each named by (journey_index, segment_index), with airline_code, flight_number, from and to. |
| seats[] | array | always (empty when the airline gives no map) | must read | One seat map per flight: journey_index, segment_index, aircraft_type, total_seats and seats. |
| seats[].seats[] | array | always | must read | Every seat: code (send it to book), desc (e.g. 3A, show it), row, column, amount (price; 0 = free), tax, is_available. |
| seats[].seats[].window / aisle / middle | boolean | always | useful | Where the seat is in its row. |
| seats[].seats[].exit_row / leg_room / infant / near_wings / reclining | boolean | always | useful | Seat features. A passenger with an infant needs a seat with infant true; exit rows have rules of their own. |
| Total: 5 keys | ||||
Errors this call answers with (4)
| HTTP | code | message | detail | when |
|---|---|---|---|---|
| 401 | 9001 | Authentication required | Invalid token | |
| 400 | 5100 | Invalid search request | itinerary_id is required | |
| 404 | 5104 | Itinerary not found or expired | ||
| 502 | 5001 | The airline or supplier could not complete the request |
▸5. Book on holdPOST /flights/book3 passengers
What this step returned: 3 passengers(click to expand)
- Booked on hold (is_hold True) with 3 passenger(s): ADULT 1, CHILD 1, INFANT 1
- Status ONHOLD, booking_id AIOR196466, amount 17,278, pay_till given
- GST details sent: no; ancillaries selected: 0
Request body
HTTP 200 · 16700 ms · complete request body (collapsible viewer)
{
"itinerary_id": "99cae871-4739-42be-aef1-98a2349c6190",
"is_hold": true,
"pax_details": [
{
"first_name": "Rohan",
"last_name": "Nair",
"pax_type": "ADULT",
"title": "Mr",
"gender": "male",
"dob": "1990-05-12",
"phone": "9876543210",
"email": "rohan.verma@example.com"
},
{
"first_name": "Anya",
"last_name": "Nair",
"pax_type": "CHILD",
"title": "Miss",
"gender": "female",
"dob": "2018-10-21",
"phone": "9876543210",
"email": "rohan.verma@example.com"
},
{
"first_name": "Vihaan",
"last_name": "Nair",
"pax_type": "INFANT",
"title": "Master",
"gender": "male",
"dob": "2026-02-23",
"phone": "9876543210",
"email": "rohan.verma@example.com"
}
]
}Reply
HTTP 200 · 16700 ms · complete response body (collapsible viewer)
{
"booking_id": "AIOR196466",
"itinerary_id": "99cae871-4739-42be-aef1-98a2349c6190",
"status": "ONHOLD",
"amount": 17277.88,
"pay_till": "2026-10-21T03:22:00Z"
}Keys and what they mean
Request
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| itinerary_id | string | required | must read | The itinerary_id from reprice, before its valid_till. |
| is_hold | boolean | optional, default false | must read | false: book directly, paid at once from your balance or credit and ticketed. true: hold the seats without payment until pay_till (only when reprice said booking_requirements.is_hold true); then confirm-hold or release. |
| pax_details[] | array | required, one per passenger | must read | Every passenger of the search, adults first: first_name, last_name, pax_type (ADULT, CHILD, INFANT), title, gender, dob, phone and email. |
| pax_details[].passport_details | object | when reprice says passport_mandatory | useful | passport_number, passport_issue_date, passport_expiry_date, passport_issue_country, nationality. |
| pax_details[].ancillaries | object | optional | useful | What this passenger buys: seat[], meal[], other[] (each with code, price, label, journey_index and segment_index) and baggage[] (code, price, label, journey_index; no segment_index). Codes come from ancillaries and seat map; an item on a flight not in the itinerary answers 400 with errors[] (rule scope). |
| gst_details | object | optional; required when reprice says is_gst_mandatory | useful | The company on the invoice: name, number (GSTIN), address, email, mobile. |
| Total: 6 keys | ||||
Reply
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| booking_id | string | always | must read | Your booking's id. Send it to booking details, confirm-hold and release. |
| status | string | always | must read | ONHOLD (held, pay before pay_till), SUCCESS (booked directly and paid), PENDING (the airline has not confirmed yet: read the booking details), or the booking's state. |
| pay_till | datetime | on a hold | must read | Until when the hold can be confirmed; after it the airline releases the seats. |
| amount | number | always | must read | What the booking costs (INR); taken at once for a direct booking, at confirm-hold for a hold. |
| itinerary_id | string | always | informational | The itinerary that was booked. |
| Total: 5 keys | ||||
Errors this call answers with (7)
| HTTP | code | message | detail | when |
|---|---|---|---|---|
| 401 | 9001 | Authentication required | Invalid token | |
| 403 | 9002 | You do not have permission for this action | Role without bookings.create (Finance, Operation, Tech). | |
| 400 | 3000 | Invalid request | (the API's detail text) | |
| 400 | 9003 | Some fields are missing or invalid | Schema validation of the body (required fields, formats); errors[] lists them. | |
| 503 | 3003 | A service the API depends on is unavailable | (the API's text) | the API answered 5xx or did not answer. |
| 409 | 3101 | Hold booking limit reached | ||
| 500 | 9000 | Something went wrong | Payment or order errors that no translator knows. |
Questions developers ask (2)
- Is gst_details required?
- Only when booking_requirements.is_gst_mandatory is true. When you send it, all five fields are required.
- What is the difference between is_hold true and false?
- false pays from your wallet and tickets at once. true holds the seats without payment until pay_till; confirm with confirm-hold or give them back with release.
▸6. Booking detailsPOST /flights/booking/details3 passengers
What this step returned: 3 passengers(click to expand)
- Status ONHOLD, payment PENDING, route DOMESTIC, pay_till given
- Journey 0 DEL-NMI: segment 0 IX 1038 DEL-NMI
- passenger 0 ADULT Rohan: CONFIRMED, PNR U68PXD, ticket BX21HJ00051-1, fare Value X/XNRA015, total 3,002, net 3,002, baggage hand 7kg, checkin 15kg
- passenger 1 CHILD Anya: CONFIRMED, PNR U68PXD, ticket BX21HJ00051-2, fare Value X/XNRA015, total 3,002, net 3,002, baggage hand 7kg, checkin 15kg
- passenger 2 INFANT Vihaan: CONFIRMED, PNR U68PXD, ticket BX21HJ00051-3, fare Value X/XNRA015, total 3,000, net 3,000, baggage not stated
- Journey 1 BOM-DEL: segment 0 IX 8006 BOM-DEL
- passenger 0 ADULT Rohan: CONFIRMED, PNR W8766K, ticket BX21HJ00061-1, fare Value X/XNRA015, total 2,637, net 2,637, baggage hand 7kg, checkin 15kg
- passenger 1 CHILD Anya: CONFIRMED, PNR W8766K, ticket BX21HJ00061-2, fare Value X/XNRA015, total 2,637, net 2,637, baggage hand 7kg, checkin 15kg
- passenger 2 INFANT Vihaan: CONFIRMED, PNR W8766K, ticket BX21HJ00061-3, fare Value X/XNRA015, total 3,000, net 3,000, baggage not stated
- PNR on 6 of 6 passenger-journeys; 3 passenger(s): ADULT Rohan Nair, CHILD Anya Nair, INFANT Vihaan Nair
- Booking price: base 9,800, yq 3,400, other taxes 770, total 17,278, net 17,278
Request body
HTTP 200 · 3178 ms · complete request body (collapsible viewer)
{
"booking_id": "AIOR196466"
}Reply
HTTP 200 · 3178 ms · complete response body (collapsible viewer)
{
"booking_id": "AIOR196466",
"status": "ONHOLD",
"payment_status": "PENDING",
"created_at": "2026-10-21T00:22:37Z",
"pay_till": "2026-10-21T03:22:00Z",
"route_type": "DOMESTIC",
"journeys": [
{
"journey_index": 0,
"from": "DEL",
"to": "NMI",
"departure_time": "2026-11-20T17:40",
"arrival_time": "2026-11-20T19:45",
"segments": [
{
"segment_index": 0,
"from": "DEL",
"to": "NMI",
"airline_code": "IX",
"airline_name": "Air India Express",
"flight_number": "1038",
"departure_time": "2026-11-20T17:40",
"arrival_time": "2026-11-20T19:45",
"departure_terminal": "1",
"duration": 125
}
],
"passengers": [
{
"passenger_index": 0,
"first_name": "Rohan",
"last_name": "Nair",
"pax_type": "ADULT",
"title": "Mr",
"gender": "male",
"dob": "1990-05-12",
"fare": {
"base_fare": 899,
"yq": 850,
"airline_gst": 96,
"booking_fee": 100,
"other_taxes": 319,
"total_fare": 3001.94,
"net_fare": 3001.94
},
"status": "CONFIRMED",
"pnr": "U68PXD",
"ticket_number": "BX21HJ00051-1",
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
{
"passenger_index": 1,
"first_name": "Anya",
"last_name": "Nair",
"pax_type": "CHILD",
"title": "Miss",
"gender": "female",
"dob": "2018-10-21",
"fare": {
"base_fare": 899,
"yq": 850,
"airline_gst": 96,
"booking_fee": 100,
"other_taxes": 319,
"total_fare": 3001.94,
"net_fare": 3001.94
},
"status": "CONFIRMED",
"pnr": "U68PXD",
"ticket_number": "BX21HJ00051-2",
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
{
"passenger_index": 2,
"first_name": "Vihaan",
"last_name": "Nair",
"pax_type": "INFANT",
"title": "Master",
"gender": "male",
"dob": "2026-02-23",
"fare": {
"base_fare": 3000,
"total_fare": 3000,
"net_fare": 3000
},
"status": "CONFIRMED",
"pnr": "U68PXD",
"ticket_number": "BX21HJ00051-3",
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015"
}
]
},
{
"journey_index": 1,
"from": "BOM",
"to": "DEL",
"departure_time": "2026-11-25T11:30",
"arrival_time": "2026-11-25T14:00",
"segments": [
{
"segment_index": 0,
"from": "BOM",
"to": "DEL",
"airline_code": "IX",
"airline_name": "Air India Express",
"flight_number": "8006",
"departure_time": "2026-11-25T11:30",
"arrival_time": "2026-11-25T14:00",
"departure_terminal": "2",
"arrival_terminal": "3",
"duration": 150
}
],
"passengers": [
{
"passenger_index": 0,
"first_name": "Rohan",
"last_name": "Nair",
"pax_type": "ADULT",
"title": "Mr",
"gender": "male",
"dob": "1990-05-12",
"fare": {
"base_fare": 1001,
"yq": 850,
"airline_gst": 102,
"booking_fee": 100,
"other_taxes": 66,
"total_fare": 2637,
"net_fare": 2637
},
"status": "CONFIRMED",
"pnr": "W8766K",
"ticket_number": "BX21HJ00061-1",
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
{
"passenger_index": 1,
"first_name": "Anya",
"last_name": "Nair",
"pax_type": "CHILD",
"title": "Miss",
"gender": "female",
"dob": "2018-10-21",
"fare": {
"base_fare": 1001,
"yq": 850,
"airline_gst": 102,
"booking_fee": 100,
"other_taxes": 66,
"total_fare": 2637,
"net_fare": 2637
},
"status": "CONFIRMED",
"pnr": "W8766K",
"ticket_number": "BX21HJ00061-2",
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
{
"passenger_index": 2,
"first_name": "Vihaan",
"last_name": "Nair",
"pax_type": "INFANT",
"title": "Master",
"gender": "male",
"dob": "2026-02-23",
"fare": {
"base_fare": 3000,
"total_fare": 3000,
"net_fare": 3000
},
"status": "CONFIRMED",
"pnr": "W8766K",
"ticket_number": "BX21HJ00061-3",
"fare_ref": "Value",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"fare_basis": "XNRA015"
}
]
}
],
"price": {
"base_fare": 9800,
"yq": 3400,
"airline_gst": 396,
"booking_fee": 400,
"other_taxes": 770,
"agent_markup": 200,
"total_fare": 17277.88,
"net_fare": 17277.88
}
}Keys and what they mean
Request
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| booking_id | string | required | must read | The id book returned. |
| Total: 1 keys | ||||
Reply
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| status | string | always | must read | The booking's state: CREATED, ONHOLD, SUCCESS, PNR_RELEASED, CANCELLED, FAILED. |
| payment_status | string | always | must read | PENDING until paid, then SUCCESS; FAILED or REFUNDED later. |
| pay_till | datetime | on a hold | must read | Until when a held booking can be confirmed; after it the airline releases the seats. |
| journeys[] | array | always | must read | The booking journey by journey: its dates, its flights and, for every passenger on it, who they are, their state, the PNR, the ticket, the fare paid for that journey and the add-ons. |
| journeys[].passengers[].pnr | string | once the airline confirmed | must read | The airline's record locator for this passenger on this journey. Empty until the hold or the ticket is confirmed. |
| journeys[].passengers[].status | string | always | must read | PENDING until confirmed, then CONFIRMED; CANCELLED, VOIDED or REISSUED when something happened to this passenger on this journey. |
| price | object | always | must read | The booking's price as a whole, in the components of the search price (base_fare, yq, yr, airline_gst, booking_fee, commission, other_taxes, total_fare, net_fare) plus ancillaries and fees. |
| journeys[].passengers[].fare | object | always | must read | What this passenger's journey cost, in the components of the search price plus ancillaries bought on it. |
| Total: 8 keys | ||||
Errors this call answers with (4)
| HTTP | code | message | detail | when |
|---|---|---|---|---|
| 401 | 9001 | Authentication required | Invalid token | |
| 403 | 9002 | You do not have permission for this action | Role without bookings.read. | |
| 400 | 3000 | Invalid request | Booking_id is required | |
| 404 | 9005 | Not found | Booking not found |
Questions developers ask (1)
- Why is pnr empty?
- The airline has not confirmed yet: the passenger reads PENDING. It appears once the hold or the ticket is confirmed.
▸7. Release the holdPOST /flights/booking/releasefailed 409
What this step returned(click to expand)
- Failed with HTTP 409: The hold could not be released; the PNR is still held
- This reply is the sample: later steps of the case were not called with it.
Request body
HTTP 409 · 3939 ms · complete request body (collapsible viewer)
{
"booking_id": "AIOR196466"
}Reply (failed, HTTP 409)
HTTP 409 · 3939 ms · complete response body (collapsible viewer)
{
"code": 3105,
"message": "The hold could not be released; the PNR is still held",
"traceId": "89666e303b0bc0e52097ada801513f66"
}Keys and what they mean
Request
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| booking_id | string | required | must read | A booking on hold. A booking that is not on hold answers an error. |
| Total: 1 keys | ||||
Reply
| key | type | when present | importance | meaning |
|---|---|---|---|---|
| status | string | always | must read | PNR_RELEASED when the airline freed the seats. A release the airline refuses answers 409 (code 3105): the PNR is still held, try again later. |
| pnr | string | always | useful | The record locator that was released. |
| booking_id | string | always | informational | The booking released. |
| Total: 3 keys | ||||
Errors this call answers with (5)
| HTTP | code | message | detail | when |
|---|---|---|---|---|
| 401 | 9001 | Authentication required | Invalid token | |
| 403 | 9002 | You do not have permission for this action | Role without bookings.cancel. | |
| 400 | 3000 | Invalid request | Booking_id is required | |
| 404 | 9005 | Not found | Booking not found | |
| 409 | 3102 | Booking is not pending | Ticketed or already released. |
Questions developers ask (1)
- Release answered 409 3105. Is the booking released?
- No. The airline did not give the PNR back; it stays held until pay_till. Try again later.