One airline only (preferred_airlines)
DEL-BOM · one way · 1 adult
preferred_airlines limits the reply to the airlines named (IATA codes).
▸1. SearchPOST /flights/search45 options
What this step returned: 45 options(click to expand)
- 45 options in 1 group(s): journey_indexes [0] has 45 options
- Options by number of flights: 1 flight: 25, 2 flights: 20
- Airlines in the reply: 6E (65 flights)
- 147 fare options in total; 6 distinct fare families (fare_ref)
- Cheapest adult total: 6,646 (Regular Fare)
- Fares with a meal included (has_meal): 0; with a free seat: 0
- Fares with check-in baggage included: 147; hand baggage only: 0; no baggage stated: 0
- Fares whose attributes differ between flights (varies_by_segment): 0; ask detail=segment to see them per flight
- Refundability: not stated 147
- 2 distinct fare rules in fare_rules; 63 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 · 1049 ms · complete request body (collapsible viewer)
{
"segments": [
{
"from": "DEL",
"to": "BOM",
"date": "2026-11-19"
}
],
"adult": 1,
"child": 0,
"infant": 0,
"cabin_class": 1,
"preferred_airlines": [
"6E"
]
}Reply
HTTP 200 · 1049 ms · complete response body (collapsible viewer)
{
"search_id": "e3d11317-5c47-40e6-9b11-88168b26826f",
"status": "completed",
"valid_till": "2026-10-20T21:10:36+05:30",
"fare_rules": {
"fr_1": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 3,
"unit": "HOURS"
},
"text": "NON-REFUNDABLE"
},
{
"allowed": true,
"amount": 4999,
"from": {
"value": 3,
"unit": "HOURS"
},
"to": {
"value": 24,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
{
"allowed": true,
"amount": 4999,
"from": {
"value": 24,
"unit": "HOURS"
},
"to": {
"value": 72,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
"… 1 more (open the viewer)"
],
"date_change": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 3,
"unit": "HOURS"
},
"text": "NON-REFUNDABLE"
},
{
"allowed": true,
"amount": 3499,
"from": {
"value": 3,
"unit": "HOURS"
},
"to": {
"value": 72,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
{
"allowed": true,
"amount": 3499,
"from": {
"value": 72,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
}
]
},
"fr_2": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 3,
"unit": "HOURS"
},
"text": "NON-REFUNDABLE"
},
{
"allowed": true,
"amount": 3499,
"from": {
"value": 3,
"unit": "HOURS"
},
"to": {
"value": 24,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
{
"allowed": true,
"amount": 3499,
"from": {
"value": 24,
"unit": "HOURS"
},
"to": {
"value": 72,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
"… 1 more (open the viewer)"
],
"date_change": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 3,
"unit": "HOURS"
},
"text": "NON-REFUNDABLE"
},
{
"allowed": true,
"amount": 999,
"from": {
"value": 3,
"unit": "HOURS"
},
"to": {
"value": 72,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
{
"allowed": true,
"amount": 299,
"from": {
"value": 72,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
}
]
}
},
"results": [
{
"journey_indexes": [
0
],
"options": [
{
"option_id": "858b1a12-496a-4a5d-8b48-e5b4ec018e08",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_BOM_6E_6218",
"from": "DEL",
"to": "BOM",
"airline_code": "6E",
"airline_name": "IndiGo Airlines",
"aircraft_type": "Airbus A321",
"flight_number": "6218",
"departure_time": "2026-11-19T06:05:00",
"departure_terminal": "1",
"arrival_time": "2026-11-19T08:25:00",
"arrival_terminal": "2",
"duration": 140
}
],
"fare_options": [
{
"price_id": "68fed934-924c-4d75-8e59-7cf33d73117a",
"fare_rules": {
"0": "fr_1"
},
"adult": {
"fare": {
"base_fare": 12900,
"booking_fee": 200,
"other_taxes": 2067,
"total_fare": 15466.14,
"net_fare": 15466.14,
"pax_count": 1
},
"fare_ref": "Regular Fare",
"cabin_class": "Economy",
"booking_class": "R",
"fare_basis": "C0IP",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"varies_by_segment": false
},
{
"price_id": "f57ae1c6-dd0d-4975-9789-7ca919870b26",
"fare_rules": {
"0": "fr_2"
},
"adult": {
"fare": {
"base_fare": 13200,
"booking_fee": 200,
"other_taxes": 2082,
"total_fare": 15781.14,
"net_fare": 15781.14,
"pax_count": 1
},
"fare_ref": "Flexi Fare",
"cabin_class": "Economy",
"booking_class": "J",
"fare_basis": "CUIP",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"varies_by_segment": false
},
{
"price_id": "741f0620-56a8-4d4c-b9bf-9072cfe2d019",
"adult": {
"fare": {
"base_fare": 14900,
"booking_fee": 200,
"other_taxes": 2167,
"total_fare": 17566.14,
"net_fare": 17566.14,
"pax_count": 1
},
"fare_ref": "Super 6E Fare",
"cabin_class": "Economy",
"booking_class": "O",
"fare_basis": "CLIP",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"varies_by_segment": false
}
]
},
{
"option_id": "5dd09143-d3c6-402d-868e-4151d9166e67",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_LKO_6E_6808",
"from": "DEL",
"to": "LKO",
"airline_code": "6E",
"airline_name": "IndiGo Airlines",
"aircraft_type": "Airbus A321",
"flight_number": "6808",
"stops": 1,
"departure_time": "2026-11-19T13:30:00",
"departure_terminal": "1",
"arrival_time": "2026-11-19T14:35:00",
"arrival_terminal": "3",
"duration": 65,
"connecting_time": 140
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "LKO_NMI_6E_2064",
"from": "LKO",
"to": "NMI",
"airline_code": "6E",
"airline_name": "IndiGo Airlines",
"aircraft_type": "Airbus A320",
"flight_number": "2064",
"departure_time": "2026-11-19T16:55:00",
"departure_terminal": "3",
"arrival_time": "2026-11-19T19:05:00",
"duration": 130,
"connecting_time": 140
}
],
"fare_options": [
{
"price_id": "7e66641c-6953-4ce2-abb9-6241c02756ac",
"fare_rules": {
"0": "fr_1"
},
"adult": {
"fare": {
"base_fare": 5400,
"booking_fee": 200,
"other_taxes": 2316,
"total_fare": 8215.14,
"net_fare": 8215.14,
"pax_count": 1
},
"fare_ref": "Regular Fare",
"cabin_class": "Economy",
"booking_class": "R",
"fare_basis": "QCIP",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"varies_by_segment": false
}
]
}
]
}
]
}This view shows 2 of the 45 options in the reply, chosen so that each of these is present. The fare_rules table shows the 2 rules these options point at, of 2 in the reply. For the entire JSON, open the raw record.
- An option with one flight (a direct flight). → group 0: option 0 (6E 6218 DEL-BOM)
- An option with two flights (a connection). → group 0: option 5 (6E 6808 DEL-LKO + 6E 2064 LKO-NMI)
- An option where a flight is operated by another airline than the one selling it (operating_airline_code present). → none in this reply
- An option with at least one fare that includes a meal (has_meal true). → none in this reply
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 fb24a386… / price a9539734…
- Repriced option on journey_indexes [0]: 1 flight (6E 354 DEL-BOM); multi-flight reprice: no
- Fare Regular Fare : adult total 6,646, net 6,646; 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/False/True
- Price for the whole booking: total 6,646, net 6,646; itinerary_id expires at valid_till
- 1 fare rule(s) in the reply
Request body
HTTP 200 · 759 ms · complete request body (collapsible viewer)
{
"items": [
{
"option_id": "fb24a386-a022-465c-a94e-94bd441b1650",
"price_id": "a9539734-2333-4b2e-9dc6-e86757e39b1d"
}
]
}Reply
HTTP 200 · 759 ms · complete response body (collapsible viewer)
{
"itinerary_id": "15f79043-0221-42d1-95dc-00b0eba2259c",
"valid_till": "2026-10-20T20:40:37+05:30",
"fare_rules": {
"fr_1": {
"cancellation": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 3,
"unit": "HOURS"
},
"text": "NON-REFUNDABLE"
},
{
"allowed": true,
"amount": 4999,
"from": {
"value": 3,
"unit": "HOURS"
},
"to": {
"value": 24,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
{
"allowed": true,
"amount": 4999,
"from": {
"value": 24,
"unit": "HOURS"
},
"to": {
"value": 72,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
"… 1 more (open the viewer)"
],
"date_change": [
{
"allowed": false,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 3,
"unit": "HOURS"
},
"text": "NON-REFUNDABLE"
},
{
"allowed": true,
"amount": 3499,
"from": {
"value": 3,
"unit": "HOURS"
},
"to": {
"value": 72,
"unit": "HOURS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
},
{
"allowed": true,
"amount": 3499,
"from": {
"value": 72,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "OR BASE FARE + FUEL SURCHARGE, WHICHEVER IS LOWER"
}
]
}
},
"results": [
{
"journey_indexes": [
0
],
"option_id": "fb24a386-a022-465c-a94e-94bd441b1650",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"from": "DEL",
"to": "BOM",
"airline_code": "6E",
"airline_name": "IndiGo Airlines",
"aircraft_type": "Airbus A321",
"flight_number": " 354",
"departure_time": "2026-11-19T19:15:00",
"departure_terminal": "1",
"arrival_time": "2026-11-19T21:40:00",
"arrival_terminal": "2",
"duration": 145
}
],
"fare": {
"price_id": "a9539734-2333-4b2e-9dc6-e86757e39b1d",
"fare_rules": {
"0": "fr_1"
},
"adult": {
"fare": {
"base_fare": 4500,
"yq": 900,
"airline_gst": 270,
"booking_fee": 200,
"other_taxes": 236,
"total_fare": 6646.14,
"net_fare": 6646.14,
"pax_count": 1
},
"fare_ref": "Regular Fare",
"cabin_class": "Economy",
"booking_class": "R",
"fare_basis": "R0IP",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"varies_by_segment": false
}
}
],
"booking_requirements": {
"is_gst_mandatory": false,
"pan_applicable": false,
"passport_mandatory": false,
"dob_applicable": {
"adt": false,
"chd": false,
"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": 4500,
"yq": 900,
"airline_gst": 270,
"booking_fee": 200,
"other_taxes": 236,
"total_fare": 6646.14,
"net_fare": 6646.14,
"pax_count": 1
},
"total": {
"base_fare": 4500,
"yq": 900,
"airline_gst": 270,
"booking_fee": 200,
"other_taxes": 236,
"total_fare": 6646.14,
"net_fare": 6646.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.