Book after the itinerary expired
An itinerary_id is good until the reprice reply's valid_till. After it book refuses it: reprice again.
▸1. Book on holdPOST /flights/bookfailed 410
What this step returned(click to expand)
- Failed with HTTP 410: The itinerary has expired; reprice again
- This reply is the sample: later steps of the case were not called with it.
Request body
HTTP 410 · 3336 ms · complete request body (collapsible viewer)
{
"itinerary_id": "233264f3-dcf4-4a75-abaa-8e984592e324",
"is_hold": true,
"pax_details": [
{
"first_name": "Rohan",
"last_name": "Verma",
"pax_type": "ADULT",
"title": "Mr",
"gender": "male",
"dob": "1990-05-12",
"phone": "9876543210",
"email": "rohan.verma@example.com"
}
]
}Reply (failed, HTTP 410)
HTTP 410 · 3336 ms · complete response body (collapsible viewer)
{
"code": 3004,
"message": "The itinerary has expired; reprice again",
"traceId": "3089d1ebec1a0151d386bf1cde4c7252"
}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.