Price changed at reprice
DEL-BOM · one way · 1 adult, 1 child, 1 infant
The fare went up or down between search and reprice: reprice answers 200 with messages[] (type, option_id, old_value, new_value). Show the new price to the traveller before booking. Captured whenever it happens in a run.
▸1. SearchPOST /flights/search166 options
What this step returned: 166 options(click to expand)
- 166 options in 1 group(s): journey_indexes [0] has 166 options
- Options by number of flights: 1 flight: 43, 2 flights: 123
- Airlines in the reply: AI (95 flights), IX (67 flights), H1 (36 flights), SG (28 flights), EK (20 flights), SQ (18 flights), EY (16 flights), QP (6 flights), WY (2 flights), 9I (1 flights)
- 692 fare options in total; 37 distinct fare families (fare_ref)
- Cheapest adult total: 2,546 (Super Saver)
- Fares with a meal included (has_meal): 160; with a free seat: 184
- Fares with check-in baggage included: 670; hand baggage only: 14; no baggage stated: 8
- Fares whose attributes differ between flights (varies_by_segment): 372; ask detail=segment to see them per flight
- Refundability: PARTIALLY_REFUNDABLE 524, NON_REFUNDABLE 125, not stated 43
- 44 distinct fare rules in fare_rules; 327 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 · 10556 ms · complete request body (collapsible viewer)
{
"segments": [
{
"from": "DEL",
"to": "BOM",
"date": "2026-11-20"
}
],
"adult": 1,
"child": 1,
"infant": 1,
"cabin_class": 1
}Reply
HTTP 200 · 10556 ms · complete response body (collapsible viewer)
{
"search_id": "ab126567-6a63-48d4-a0b1-164b135999c2",
"status": "completed",
"valid_till": "2026-10-21T01:19:25+05:30",
"fare_rules": {
"fr_1": {
"cancellation": [
{
"allowed": true,
"amount": 4300,
"from": {
"value": 2,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — DELBOM - 2 hrs to 365 days Before departure"
}
],
"date_change": [
{
"allowed": true,
"amount": 3000,
"from": {
"value": 2,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — DELBOM - 2 hrs to 365 days Before departure"
}
]
},
"fr_3": {
"cancellation": [
{
"allowed": true,
"amount": 9477.77,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Non-Refundable"
}
],
"date_change": [
{
"allowed": true,
"amount": 0,
"from": {
"value": 0,
"unit": "HOURS"
},
"to": {
"value": 365,
"unit": "DAYS"
},
"text": "Before departure — Changeable"
}
]
},
"fr_4": {
"cancellation": [
{
"allowed": true,
"amount": 4738.89,
"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_5": {
"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_8": {
"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_25": {
"cancellation": [
{
"allowed": true,
"amount": 7108.33,
"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": "286452a6-b992-480e-932d-bdf3319fb43e",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_IXR_IX_2764",
"from": "DEL",
"to": "IXR",
"airline_code": "IX",
"airline_name": "Air India Express",
"flight_number": "2764",
"stops": 1,
"departure_time": "2026-11-20T12:25:00",
"arrival_time": "2026-11-20T14:15:00",
"duration": 110,
"connecting_time": 110
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "IXR_BOM_IX_1238",
"from": "IXR",
"to": "BOM",
"airline_code": "IX",
"airline_name": "Air India Express",
"flight_number": "1238",
"stops": 1,
"departure_time": "2026-11-20T16:05:00",
"arrival_time": "2026-11-20T18:50:00",
"duration": 165
}
],
"fare_options": [
{
"price_id": "84821085-3c43-475e-a1bd-054dda194868",
"fare_rules": {
"0": "fr_1"
},
"adult": {
"fare": {
"base_fare": 15092.2,
"booking_fee": 100,
"other_taxes": 1425.46,
"total_fare": 16792.6,
"net_fare": 16792.6,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"child": {
"fare": {
"base_fare": 15092.2,
"booking_fee": 100,
"other_taxes": 1425.46,
"total_fare": 16792.6,
"net_fare": 16792.6,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"hand": {
"kg": 7
},
"checkin": {
"kg": 15
}
}
},
"infant": {
"fare": {
"base_fare": 6397.93,
"total_fare": 6397.93,
"net_fare": 6397.93,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K"
},
"varies_by_segment": true
}
]
},
{
"option_id": "1116668b-1e33-43ca-9b1f-5bccf3dc779b",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_DXB_EK_517",
"from": "DEL",
"to": "DXB",
"airline_code": "EK",
"airline_name": "Emirates",
"aircraft_type": "Boeing 77W",
"flight_number": "517",
"stops": 1,
"departure_time": "2026-11-20T16:15:00",
"departure_terminal": "3",
"arrival_time": "2026-11-20T18:35:00",
"arrival_terminal": "3",
"duration": 230,
"connecting_time": 560
},
{
"segment_index": 1,
"journey_index": 0,
"segment_id": "DXB_BOM_EK_504",
"from": "DXB",
"to": "BOM",
"airline_code": "EK",
"airline_name": "Emirates",
"aircraft_type": "Boeing 77W",
"flight_number": "504",
"stops": 1,
"departure_time": "2026-11-21T03:55:00",
"departure_terminal": "3",
"arrival_time": "2026-11-21T08:30:00",
"arrival_terminal": "2",
"duration": 185
}
],
"fare_options": [
{
"price_id": "cf5ad766-4b93-47b2-98f9-108827b38afd",
"fare_rules": {
"0": "fr_3"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 21275.71,
"yq": 9667.34,
"other_taxes": 3923.81,
"total_fare": 38341.41,
"net_fare": 38341.41,
"pax_count": 1
},
"fare_ref": "Eco Saver",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "T",
"baggage": {
"checkin": {
"kg": 25
}
}
},
"child": {
"fare": {
"base_fare": 16131.17,
"yq": 9667.34,
"other_taxes": 3923.81,
"total_fare": 32978.88,
"net_fare": 32978.88,
"pax_count": 1
},
"fare_ref": "Eco Saver",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "T",
"baggage": {
"checkin": {
"kg": 25
}
}
},
"infant": {
"fare": {
"base_fare": 2598.81,
"total_fare": 2693.59,
"net_fare": 2693.59,
"pax_count": 1
},
"fare_ref": "Eco Saver",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "T",
"baggage": {
"checkin": {
"kg": 10
}
}
},
"varies_by_segment": true
},
{
"price_id": "dd89b301-0465-4138-ba24-d36340870028",
"fare_rules": {
"0": "fr_4"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 35255.43,
"yq": 9667.34,
"other_taxes": 3923.81,
"total_fare": 52918.23,
"net_fare": 52918.23,
"pax_count": 1
},
"fare_ref": "Eco Flex",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"kg": 30
}
}
},
"child": {
"fare": {
"base_fare": 26532.08,
"yq": 9667.34,
"other_taxes": 3923.81,
"total_fare": 43825.25,
"net_fare": 43825.25,
"pax_count": 1
},
"fare_ref": "Eco Flex",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"kg": 30
}
}
},
"infant": {
"fare": {
"base_fare": 3940.86,
"total_fare": 4092.5,
"net_fare": 4092.5,
"pax_count": 1
},
"fare_ref": "Eco Flex",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"kg": 10
}
}
},
"varies_by_segment": true
},
{
"price_id": "726b36c7-30a9-4c97-b96e-6e47ec26efef",
"fare_rules": {
"0": "fr_5"
},
"has_meal": true,
"adult": {
"fare": {
"base_fare": 62320.16,
"yq": 9667.34,
"other_taxes": 3923.81,
"total_fare": 81129.77,
"net_fare": 81129.77,
"pax_count": 1
},
"fare_ref": "Eco Special",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"baggage": {
"checkin": {
"kg": 35
}
}
},
"child": {
"fare": {
"base_fare": 46886.55,
"yq": 9667.34,
"other_taxes": 3923.81,
"total_fare": 65042.2,
"net_fare": 65042.2,
"pax_count": 1
},
"fare_ref": "Eco Special",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"baggage": {
"checkin": {
"kg": 35
}
}
},
"infant": {
"fare": {
"base_fare": 6624.96,
"total_fare": 6890.34,
"net_fare": 6890.34,
"pax_count": 1
},
"fare_ref": "Eco Special",
"refundable_type": "PARTIALLY_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "X",
"baggage": {
"checkin": {
"kg": 10
}
}
},
"varies_by_segment": true
}
]
},
{
"option_id": "12013107-8744-466f-8331-2c35c4873d3e",
"segments": [
{
"segment_index": 0,
"journey_index": 0,
"segment_id": "DEL_BOM_H1_1001",
"from": "DEL",
"to": "BOM",
"airline_code": "H1",
"airline_name": "Hahn Air",
"aircraft_type": "Boeing 737",
"flight_number": "1001",
"departure_time": "2026-11-20T05:45:00",
"arrival_time": "2026-11-20T08:05:00",
"arrival_terminal": "1",
"duration": 140
}
],
"fare_options": [
{
"price_id": "78539c4b-ed9b-4749-aab9-ef166af0747f",
"adult": {
"fare": {
"base_fare": 15124.63,
"yq": 3222.44,
"other_taxes": 4587.24,
"total_fare": 24337.01,
"net_fare": 24337.01,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"pieces": 1
}
}
},
"child": {
"fare": {
"base_fare": 15124.63,
"yq": 3222.44,
"other_taxes": 4587.24,
"total_fare": 24337.01,
"net_fare": 24337.01,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"pieces": 1
}
}
},
"infant": {
"fare": {
"base_fare": 2710.64,
"total_fare": 2805.42,
"net_fare": 2805.42,
"pax_count": 1
},
"fare_ref": "Economy",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"baggage": {
"checkin": {
"pieces": 0
}
}
},
"varies_by_segment": false
},
{
"price_id": "e05a4f92-2f24-4471-9376-0f362e893ed2",
"fare_rules": {
"0": "fr_8"
},
"adult": {
"fare": {
"base_fare": 12374,
"yq": 3244,
"yr": 4500,
"other_taxes": 1247,
"total_fare": 21601,
"net_fare": 21601,
"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": 12374,
"yq": 3244,
"yr": 4500,
"other_taxes": 1247,
"total_fare": 21601,
"net_fare": 21601,
"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": 1915,
"other_taxes": 96,
"total_fare": 2011,
"net_fare": 2011,
"pax_count": 1
},
"fare_ref": "Spicejet Economy Class",
"refundable_type": "NON_REFUNDABLE",
"cabin_class": "Economy",
"booking_class": "K",
"fare_basis": "KOWSG"
},
"varies_by_segment": false
}
]
},
"… 1 more (open the viewer)"
]
}
]
}This view shows 4 of the 166 options in the reply, chosen so that each of these is present. The fare_rules table shows the 6 rules these options point at, of 44 in the reply. For the entire JSON, open the raw record.
- An option with one flight (a direct flight). → group 0: option 4 (H1 1001 DEL-BOM)
- An option with two flights (a connection). → group 0: option 0 (IX 2764 DEL-IXR + IX 1238 IXR-BOM)
- An option where a flight is operated by another airline than the one selling it (operating_airline_code present). → group 0: option 17 (EK 511 DEL-DXB + EK 2136 DXB-BOM)
- An option with at least one fare that includes a meal (has_meal true). → group 0: option 2 (EK 517 DEL-DXB + EK 504 DXB-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 16560204… / price d2f877b1…
- 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)
- Price changed since search for option 16560204…: FARE_ALERT 6,004 → 9,004
- 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 9,004, net 9,004; itinerary_id expires at valid_till
- 0 fare rule(s) in the reply
Request body
HTTP 200 · 6840 ms · complete request body (collapsible viewer)
{
"items": [
{
"option_id": "16560204-43ef-4e6d-92d7-3c145126c052",
"price_id": "d2f877b1-3174-425a-9d67-1bf51fc04f48"
}
]
}Reply
HTTP 200 · 6840 ms · complete response body (collapsible viewer)
{
"itinerary_id": "4b9aeb17-3bcd-4b35-bdf2-90b041d6707f",
"valid_till": "2026-10-21T00:49:32+05:30",
"results": [
{
"journey_indexes": [
0
],
"option_id": "16560204-43ef-4e6d-92d7-3c145126c052",
"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": "d2f877b1-3174-425a-9d67-1bf51fc04f48",
"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
}
}
],
"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": 899,
"yq": 850,
"airline_gst": 96,
"booking_fee": 100,
"other_taxes": 319,
"total_fare": 3001.94,
"net_fare": 3001.94,
"pax_count": 1
},
"child": {
"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
},
"infant": {
"base_fare": 3000,
"total_fare": 3000,
"net_fare": 3000,
"pax_count": 1
},
"total": {
"base_fare": 4798,
"yq": 1700,
"airline_gst": 192,
"booking_fee": 200,
"other_taxes": 638,
"total_fare": 9003.88,
"net_fare": 9003.88,
"pax_count": 3
}
},
"messages": [
{
"type": "FARE_ALERT",
"option_id": "16560204-43ef-4e6d-92d7-3c145126c052",
"message": "Fare has changed: previous price 6003.88, current price 9003.88 (difference: 3000.00)",
"old_value": 6003.88,
"new_value": 9003.88
}
]
}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.