{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/authentication/api-keys"
}
}
{
"error": {
"code": "PAYMENT_REQUIRED",
"message": "Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "GONE",
"message": "The resource no longer exists.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "BAD_REQUEST",
"message": "A required field is missing or invalid.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The request was declined for this offer. Try another offer.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The service is temporarily unavailable. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The request timed out before a result was available. Retry the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
Trip & Payment
get-booking
Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference
POST
/
v1
/
get_booking
Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference
{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/authentication/api-keys"
}
}
{
"error": {
"code": "PAYMENT_REQUIRED",
"message": "Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "GONE",
"message": "The resource no longer exists.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "BAD_REQUEST",
"message": "A required field is missing or invalid.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The request was declined for this offer. Try another offer.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The service is temporarily unavailable. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The request timed out before a result was available. Retry the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
Authenticated API lookup for a booking the user already made. Guest access verifies the booking reference and last name; the integrating application still supplies API credentials. Use it when the traveler has their Jinko booking reference and last name, for example to look up the itinerary days later without signing in. Returns the full booking envelope: status, travelers, and itinerary items, each with its booked_item_id and its supplier confirmations in supplier_references (the airline’s record locator per airline, the hotel’s confirmation number, the rental reservation number).The flight itinerary in items[].confirmation.details.flight.legs is the one booked and ticketed. It is not refreshed from the airline afterwards: a schedule change or a cancellation made by the airline doesn’t appear here, and no webhook reports it. The customer contact you send at checkout (an email and a phone number, not necessarily the traveler’s) is passed on with the flight booking. Depending on how the flight was booked, it is sent to the airline as part of the reservation, or it stays with an intermediary booking system and Jinko can’t confirm that it reaches the airline. Whether an airline that has the contact uses it to tell anyone about a change is up to the airline.
Whether to check now, with the airline or supplier, if each item can be voided, refunded or exchanged (items[].servicing). For a flight this asks the airline and can add several seconds. Send false to read the booking and its stored fare_conditions only; the eligibility fields are then left out of items[].servicing. Defaults to true; after a 180-day notice the default becomes false, so send true explicitly before cancelling or changing.
The booked trip. Minimally described — the platform sends more (items, per-item confirmations, provider state) and all of it reaches you. The two *_support_level fields are a SNAPSHOT: a fare’s void window closes with time, so before acting on a refund or exchange read the level from a live POST /v1/refund_check or POST /v1/exchange_shop rather than from here. The flight itinerary (items[].confirmation.details.flight.legs) is the one booked and ticketed. It is not refreshed from the airline, and no webhook reports an airline's schedule change or cancellation.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Jinko Platform","description":"Connect your AI agent to flights, hotels, car rentals, and bookings through MCP, REST API, TypeScript SDK, or CLI.","colors":{"primary":"#FF6363","light":"#FF807C","dark":"#BA4B4A"},"logo":{"light":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0","dark":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0"},"favicon":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/favicon.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=770e72a193924011a067dcacdcb654cf","navbar":{"links":[{"href":"https://dashboard.gojinko.com","label":"Dashboard"}],"primary":{"type":"button","label":"Get API Key","href":"https://dashboard.gojinko.com/developers/keys"}},"footer":{"socials":{"website":"https://gojinko.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"jinko-dev","hasAudioNarration":false,"actualSubdomain":"jinko-dev","customDomains":["docs.dev.gojinko.com"],"gitSource":{"type":"github","owner":"jinkoso","repo":"jinko-dev-platform","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6aeece39c11f500273ffd5ec","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":63},{"language":"default","tag":"CLI","count":49},{"language":"default","tag":"Flights","count":43},{"language":"default","tag":"Documentation","count":42},{"language":"default","tag":"MCP","count":23},{"language":"default","tag":"Manage","count":20},{"language":"default","tag":"Trip \u0026 Payment","count":19},{"language":"default","tag":"Discovery","count":17},{"language":"default","tag":"Hotels","count":16},{"language":"default","tag":"Travel Demand","count":14}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api/get-booking","slug":"/api/get-booking","pageMetadata":{"title":"get-booking","sidebarTitle":"/v1/get_booking","description":"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference","openapi":"api-reference/public-api.yaml POST /v1/get_booking","href":"/api/get-booking"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,..._provideComponents(),...props.components};return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Authenticated API lookup for a booking the user already made. Guest access verifies the booking reference and last name; the integrating application still supplies API credentials. Use it when the traveler has their Jinko booking reference and last name, for example to look up the itinerary days later without signing in. Returns the full booking envelope: status, travelers, and itinerary items, each with its `,_jsx(_components.code,{children:`booked_item_id`}),` and its supplier confirmations in `,_jsx(_components.code,{children:`supplier_references`}),` (the airline’s record locator per airline, the hotel’s confirmation number, the rental reservation number).`]}),`\n`,_jsxs(_components.p,{children:[`The flight itinerary in `,_jsx(_components.code,{children:`items[].confirmation.details.flight.legs`}),` is the one booked and ticketed. It is not refreshed from the airline afterwards: a schedule change or a cancellation made by the airline doesn’t appear here, and no webhook reports it. The customer contact you send at checkout (an email and a phone number, not necessarily the traveler’s) is passed on with the flight booking. Depending on how the flight was booked, it is sent to the airline as part of the reservation, or it stays with an intermediary booking system and Jinko can’t confirm that it reaches the airline. Whether an airline that has the contact uses it to tell anyone about a change is up to the airline.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"get-booking","sidebarTitle":"/v1/get_booking","description":"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference","openapi":"api-reference/public-api.yaml POST /v1/get_booking","href":"/api/get-booking"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Post-booking"],"summary":"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference","description":"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference","security":["83f1a6e4-8362-497d-a930-dd79161e16a6","d9e9376a-f45e-4147-a377-28a08687e133"],"requestBody":"b9868154-a569-4651-9fa6-3433f947e585","responses":{"200":"bb474418-c41d-40f3-adcb-040c7dc4b38e","400":"d9ddc473-602d-4a8b-b92b-2b94b5621050","401":"7cfcc916-ffc7-40b2-b6a2-3e2551d7e6c4","402":"732fb2f8-7e0d-41fa-b745-3486a485f905","404":"cc9ee5b5-47df-49ab-97ab-b2dd217bcaeb","409":"1dd2e0c1-cd1c-431b-8edf-6505e62315a3","410":"e58b2fa7-6118-4870-9ab4-3fe4ee0ad684","422":"8c5d1d62-1c9f-44bd-b2be-a04225df5721","429":"3bde8120-16fe-42cd-a93b-ed284094fc87","502":"d6710379-b198-480e-9d91-5d56a8e3d7c6","503":"10a47f18-a967-456b-9e7b-d0d86ab8b6cb","504":"1a800ff9-bc6e-4439-853f-d7e53606bb3f"},"method":"post","type":"path","servers":["6c2e2c14-8667-4ef1-a6c7-d1e7fb982378","0b2c8592-7b6b-4acc-9351-2a69f3e0f42a"],"path":"/v1/get_booking","baseUrlOptions":["https://api.gojinko.com","https://api.sandbox.gojinko.com"],"title":"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"booking_ref":{"type":"string","minLength":1,"description":"Jinko booking reference. Call get_booking first, then select its booked_item_id for servicing.","example":"JNK-A0AUR2","isRequired":true,"uniqueKey":"booking_ref","typeLabel":"string"},"last_name":{"type":"string","minLength":1,"description":"Required for guest lookup. A credential that owns the booking may omit it; ownership is checked by the platform.","example":"Doe","uniqueKey":"last_name","typeLabel":"string"},"check_eligibility":{"type":"boolean","description":"Whether to check now, with the airline or supplier, if each item can be voided, refunded or exchanged (`items[].servicing`). For a flight this asks the airline and can add several seconds. Send `false` to read the booking and its stored `fare_conditions` only; the eligibility fields are then left out of `items[].servicing`. Defaults to `true`; after a 180-day notice the default becomes `false`, so send `true` explicitly before cancelling or changing.","example":false,"uniqueKey":"check_eligibility","typeLabel":"boolean"},"intent":{"type":"object","properties":{"user_intent":{"oneOf":[{"type":"string","description":"The user's natural-language intent: the Alpic PII-stripped paraphrase when available, else a best-effort fallback to the client-provided NL query.","example":"find a cheap flight to Tokyo","uniqueKey":"intent.user_intent.oneOf.0","typeLabel":"string"},{"type":"null","description":"The user's natural-language intent: the Alpic PII-stripped paraphrase when available, else a best-effort fallback to the client-provided NL query.","example":"find a cheap flight to Tokyo","uniqueKey":"intent.user_intent.oneOf.1","typeLabel":"null"}],"uniqueKey":"intent.user_intent","typeLabel":"string | null"}},"uniqueKey":"intent","typeLabel":"object"}},"required":["booking_ref"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"booking_ref":"JNK-A0AUR2","last_name":"Doe","check_eligibility":false,"intent":{"user_intent":"find a cheap flight to Tokyo"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"bb474418-c41d-40f3-adcb-040c7dc4b38e":{"description":"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference","content":{"application/json":{"schema":{"type":"object","properties":{"booking":{"type":"object","properties":{"booking_ref":{"type":"string","description":"The Jinko booking reference of this booking. Looked up with the reference of one of its exchanges, it is still the booking’s own reference. Hand it to cancel, refund and exchange as `booking_ref`.","example":"JNK-XEVGW5","uniqueKey":"booking.booking_ref","typeLabel":"string"},"booking_reference":{"type":"string","description":"Deprecated: use `booking_ref` instead. The reference the booking was looked up with, which can be an exchange’s own reference.","example":"JNK-XEVGW5","deprecated":true,"uniqueKey":"booking.booking_reference","typeLabel":"string"},"booking_state":{"type":"string","enum":["awaiting_payment","processing","completed","partial","failed","cancelled","needs_review"],"description":"The booking’s progress once payment has started; absent before. `awaiting_payment`: waiting for the payment to be confirmed. `processing`: booking with the suppliers. Then one outcome: `completed` (every item booked), `partial` (some items booked), `failed` (nothing booked) or `cancelled`. `needs_review`: held for a person at Jinko to resolve; not final. `fulfillment.status` keeps the detailed status behind it.","example":"completed","uniqueKey":"booking.booking_state","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"The booking's state in Jinko's own booking and servicing flow. In progress: `pending`, `awaiting_payment`, `preparing`, `prepared`, `processing`, `confirming`. Final: `completed` (booked; for a flight, ticketed), `partial` (some items booked, others failed), `failed`, `cancelled` (nothing is booked any more: the checkout was never paid, or every item was cancelled), `expired_quote` (a quoted price, at checkout or for an exchange, expired before it was confirmed). Needing attention: `exchange_partial_failure`, `needs_review`. Treat the list as open: new values may be added. It changes only through Jinko's steps (payment, booking, ticketing, or a cancellation or exchange you request), never because an airline changed or cancelled a flight.","example":"completed","uniqueKey":"booking.status","typeLabel":"string"},"failure_reason":{"oneOf":[{"type":"string","description":"Why the booking failed, when it failed after payment and the cause is known: `offer_unavailable`, `price_changed`, `booking_not_created` (the supplier holds no booking; nothing was booked and no money was taken), `booking_cancelled_at_provider`, `ticketing_refused`. Null otherwise. For `offer_unavailable`, the supplier no longer sells the priced offer. Nothing was booked and the card authorisation was released. Search again and book a new offer. The `booking.failed` webhook carries the same reason with a sentence to show the traveller (`failure_message`).","example":"booking_not_created","uniqueKey":"booking.failure_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why the booking failed, when it failed after payment and the cause is known: `offer_unavailable`, `price_changed`, `booking_not_created` (the supplier holds no booking; nothing was booked and no money was taken), `booking_cancelled_at_provider`, `ticketing_refused`. Null otherwise. For `offer_unavailable`, the supplier no longer sells the priced offer. Nothing was booked and the card authorisation was released. Search again and book a new offer. The `booking.failed` webhook carries the same reason with a sentence to show the traveller (`failure_message`).","example":"booking_not_created","uniqueKey":"booking.failure_reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"booking.failure_reason","typeLabel":"string | null"},"type":{"type":"string","description":"What was booked — \"flight\" or \"hotel\".","example":"flight","uniqueKey":"booking.type","typeLabel":"string"},"last_name":{"type":"string","example":"Doe","uniqueKey":"booking.last_name","typeLabel":"string"},"total_paid":{"type":"object","description":"What was captured for this booking, gross: refunds are NOT subtracted (the same figure as `paid` in `servicing_summary`; `net_paid` there is the figure after refunds). Absent when the captured amount is unknown, and when the booking was charged in more than one currency — read `servicing_summary`, one row per currency, then.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.total_paid.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.total_paid.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.total_paid.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.total_paid.display","typeLabel":"string"}},"uniqueKey":"booking.total_paid","typeLabel":"object"},"refund_status":{"type":"object","properties":{"state":{"type":"string","description":"`in_progress`, `succeeded` or `failed`.","example":"succeeded","uniqueKey":"booking.refund_status.state","typeLabel":"string"},"initiated_at":{"type":"string","uniqueKey":"booking.refund_status.initiated_at","typeLabel":"string"},"completed_at":{"type":"string","uniqueKey":"booking.refund_status.completed_at","typeLabel":"string"},"refunded_amount":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.refund_status.refunded_amount.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.refund_status.refunded_amount.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.refund_status.refunded_amount.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.refund_status.refunded_amount.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.refund_status.refunded_amount.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.refund_status.refunded_amount","typeLabel":"object"}},"uniqueKey":"booking.refund_status","typeLabel":"object"},"servicing_summary":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","example":"USD","uniqueKey":"booking.servicing_summary.items.[INDEX].currency","typeLabel":"string"},"paid":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.servicing_summary.items.[INDEX].paid.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.servicing_summary.items.[INDEX].paid.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.servicing_summary.items.[INDEX].paid.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.servicing_summary.items.[INDEX].paid.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.servicing_summary.items.[INDEX].paid.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.servicing_summary.items.[INDEX].paid","typeLabel":"object"},"refunded":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.servicing_summary.items.[INDEX].refunded.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.servicing_summary.items.[INDEX].refunded.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.servicing_summary.items.[INDEX].refunded.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.servicing_summary.items.[INDEX].refunded.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.servicing_summary.items.[INDEX].refunded.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.servicing_summary.items.[INDEX].refunded","typeLabel":"object"},"net_paid":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.servicing_summary.items.[INDEX].net_paid.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.servicing_summary.items.[INDEX].net_paid.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.servicing_summary.items.[INDEX].net_paid.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.servicing_summary.items.[INDEX].net_paid.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.servicing_summary.items.[INDEX].net_paid.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.servicing_summary.items.[INDEX].net_paid","typeLabel":"object"},"attention_required":{"type":"boolean","uniqueKey":"booking.servicing_summary.items.[INDEX].attention_required","typeLabel":"boolean"}},"description":"One currency’s servicing totals. `paid` includes the original charge as well as money collected for exchanges (settled ADD_COLLECT collections). `attention_required` is true on the booking currency’s row while a manual exchange case is open.","uniqueKey":"booking.servicing_summary.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.servicing_summary","typeLabel":"object[]"},"items":{"type":"array","items":{"type":"object","properties":{"item_id":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991,"description":"Deprecated: use `booked_item_id` instead. The booked item as an integer.","example":42,"deprecated":true,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].item_id","typeLabel":"integer"},"domain":{"type":"string","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].domain","typeLabel":"string"},"booked_item_id":{"type":"string","description":"The item to name with `booked_item_id` on the next request.","example":"itm_aaaaaaaaaaaaafhuxsdxpbzrbfz5hm3a","uniqueKey":"booking.\\items.items.[INDEX].booked_item_id","typeLabel":"string"},"summary":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].summary","typeLabel":"string"},"status":{"type":"string","description":"This item's state in Jinko's own booking and servicing flow. In progress: `pending`, `awaiting_payment`, `preparing`, `prepared`, `processing`, `confirming`. Final: `completed` (booked; for a flight, ticketed), `failed`, `cancelled` (nothing is booked any more: the checkout was never paid, or a cancellation succeeded), `expired_quote` (a quoted price, at checkout or for an exchange, expired before it was confirmed). Needing attention: `exchange_partial_failure`, `needs_review`. Treat the list as open: new values may be added. It changes only through Jinko's steps (payment, booking, ticketing, or a cancellation or exchange you request), never because an airline changed or cancelled a flight.","example":"completed","uniqueKey":"booking.\\items.items.[INDEX].status","typeLabel":"string"},"booking_ref":{"type":"string","description":"The Jinko booking reference of the booking this item belongs to: the same value as the booking’s `booking_ref`, also after an exchange.","example":"JNK-XEVGW5","uniqueKey":"booking.\\items.items.[INDEX].booking_ref","typeLabel":"string"},"booking_reference":{"type":"string","description":"Deprecated: use `booking_ref` instead. The Jinko reference of the cart this item lives on: after an exchange, the exchange’s own reference.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].booking_reference","typeLabel":"string"},"servicing":{"type":"object","properties":{"can_refund":{"type":"boolean","uniqueKey":"booking.\\items.items.[INDEX].servicing.can_refund","typeLabel":"boolean"},"can_void":{"type":"boolean","uniqueKey":"booking.\\items.items.[INDEX].servicing.can_void","typeLabel":"boolean"},"can_exchange":{"type":"boolean","uniqueKey":"booking.\\items.items.[INDEX].servicing.can_exchange","typeLabel":"boolean"},"refund_support_level":{"type":"string","enum":["AUTO","MANUAL_REQUIRED","UNSUPPORTED"],"uniqueKey":"booking.\\items.items.[INDEX].servicing.refund_support_level","typeLabel":"enum\u003cstring>"},"exchange_support_level":{"type":"string","enum":["AUTO","MANUAL_REQUIRED","UNSUPPORTED"],"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange_support_level","typeLabel":"enum\u003cstring>"},"refund_unavailable_reason":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.refund_unavailable_reason","typeLabel":"string"},"exchange_unavailable_reason":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange_unavailable_reason","typeLabel":"string"},"refund_reason_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.refund_reason_code","typeLabel":"string"},"exchange_reason_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange_reason_code","typeLabel":"string"},"reason_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.reason_code","typeLabel":"string"},"support_level":{"type":"string","enum":["AUTO","MANUAL_REQUIRED","UNSUPPORTED"],"uniqueKey":"booking.\\items.items.[INDEX].servicing.support_level","typeLabel":"enum\u003cstring>"},"cancellation":{"type":"object","properties":{"state":{"type":"string","description":"`none` when nothing has cancelled the item; otherwise `in_progress`, `attention_required`, `succeeded` or `failed`.","example":"succeeded","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.state","typeLabel":"string"},"operation":{"type":"string","example":"svc_01J7ZR5Q2KME8V4T","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.operation","typeLabel":"string"},"reason":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.reason","typeLabel":"string"},"park_deadline":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.park_deadline","typeLabel":"string"},"next_run_at":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.next_run_at","typeLabel":"string"},"paid":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.paid.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.paid.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.paid.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.paid.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.paid.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.paid","typeLabel":"object"},"refund_due":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.amount","typeLabel":"number"},"value":{"type":"integer","description":"Deprecated: use `amount_money` instead. Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.value","typeLabel":"integer"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. ISO 4217 currency code.","example":"USD","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Deprecated: use `amount_money` instead. Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"Deprecated: use `amount_money` instead. The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.display","typeLabel":"string"},"amount_money":{"type":"object","description":"What the operation says the customer is owed.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.amount_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.amount_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.amount_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.amount_money","typeLabel":"object"},"penalty":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.penalty.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.penalty.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.penalty.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.penalty.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.penalty.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.penalty","typeLabel":"object"},"source":{"type":"string","description":"Where the figure came from: `quoted` (what the platform expects) or `provider_confirmed` (what the supplier agreed to).","example":"quoted","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due.source","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refund_due","typeLabel":"object"},"refunded":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.amount","typeLabel":"number"},"value":{"type":"integer","description":"Deprecated: use `amount_money` instead. Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.value","typeLabel":"integer"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. ISO 4217 currency code.","example":"USD","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Deprecated: use `amount_money` instead. Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"Deprecated: use `amount_money` instead. The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.display","typeLabel":"string"},"amount_money":{"type":"object","description":"What was refunded, as read back from the payment provider.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.amount_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.amount_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.amount_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.amount_money","typeLabel":"object"},"at":{"type":"string","example":"2026-09-03T12:30:00Z","uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.at","typeLabel":"string"},"stripe_reference":{"type":"string","description":"Deprecated. An internal payment reference.","example":"re_3UBIxK2eZvKYlo2C","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded.stripe_reference","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation.refunded","typeLabel":"object"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.cancellation","typeLabel":"object"},"exchange":{"type":"object","properties":{"state":{"type":"string","description":"`attention_required` when the request is with Jinko support; `in_progress` when support is completing it; `succeeded` when completed; `failed` when support closed it.","example":"attention_required","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.state","typeLabel":"string"},"operation":{"type":"string","description":"The operation is `exchange`.","example":"exchange","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.operation","typeLabel":"string"},"reason":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.reason","typeLabel":"string"},"park_deadline":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.park_deadline","typeLabel":"string"},"next_run_at":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.next_run_at","typeLabel":"string"},"paid":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.paid.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.paid.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.paid.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.paid.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.paid.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.paid","typeLabel":"object"},"refund_due":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.amount","typeLabel":"number"},"value":{"type":"integer","description":"Deprecated: use `amount_money` instead. Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.value","typeLabel":"integer"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. ISO 4217 currency code.","example":"USD","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Deprecated: use `amount_money` instead. Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"Deprecated: use `amount_money` instead. The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.display","typeLabel":"string"},"amount_money":{"type":"object","description":"What the operation says the customer is owed.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.amount_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.amount_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.amount_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.amount_money","typeLabel":"object"},"penalty":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.penalty.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.penalty.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.penalty.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.penalty.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.penalty.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.penalty","typeLabel":"object"},"source":{"type":"string","description":"Where the figure came from: `quoted` (what the platform expects) or `provider_confirmed` (what the supplier agreed to).","example":"quoted","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due.source","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refund_due","typeLabel":"object"},"refunded":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.amount","typeLabel":"number"},"value":{"type":"integer","description":"Deprecated: use `amount_money` instead. Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.value","typeLabel":"integer"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. ISO 4217 currency code.","example":"USD","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Deprecated: use `amount_money` instead. Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"Deprecated: use `amount_money` instead. The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.display","typeLabel":"string"},"amount_money":{"type":"object","description":"What was refunded, as read back from the payment provider.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.amount_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.amount_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.amount_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.amount_money","typeLabel":"object"},"at":{"type":"string","example":"2026-09-03T12:30:00Z","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.at","typeLabel":"string"},"stripe_reference":{"type":"string","description":"Deprecated. An internal payment reference.","example":"re_3UBIxK2eZvKYlo2C","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded.stripe_reference","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange.refunded","typeLabel":"object"}},"description":"An exchange Jinko support handles by hand. Present only when the item has such a request; absent otherwise. `operation` is `exchange`. State `attention_required` means the request is with Jinko support and `refund_due` is the quoted refund; `in_progress` means support is completing it; `succeeded` means completed and `refunded` says what was refunded and when; `failed` means support closed the request. Hidden while the item has a cancellation (`cancellation.state` other than `none`).","uniqueKey":"booking.\\items.items.[INDEX].servicing.exchange","typeLabel":"object"}},"description":"This item’s servicing: its cancellation and exchange progress and, when the request’s `check_eligibility` is `true` (the default), whether it can be refunded, voided or exchanged (`can_refund`, `can_void`, `can_exchange`, the support levels and reasons). With `check_eligibility: false` those eligibility fields are absent. Read the live refund or exchange check before committing.","uniqueKey":"booking.\\items.items.[INDEX].servicing","typeLabel":"object"},"supplier_references":{"type":"array","items":{"type":"object","properties":{"issuer":{"type":"string","description":"Who issued the reference: the airline’s IATA code, the hotel’s name, or the rental company’s name.","example":"AF","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].supplier_references.items.[INDEX].issuer","typeLabel":"string"},"reference":{"type":"string","description":"The reference itself.","example":"XM9L2K","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].supplier_references.items.[INDEX].reference","typeLabel":"string"}},"required":["issuer","reference"],"uniqueKey":"booking.\\items.items.[INDEX].supplier_references.items.[INDEX]","typeLabel":"object"},"description":"The confirmations the supplier itself issued for this item: one per airline record locator, the hotel’s confirmation number, the rental company’s confirmation. Empty when none is known yet.","uniqueKey":"booking.\\items.items.[INDEX].supplier_references","typeLabel":"object[]"},"failure_reason":{"oneOf":[{"type":"string","description":"Why the booking failed, when it failed after payment and the cause is known: `offer_unavailable`, `price_changed`, `booking_not_created` (the supplier holds no booking; nothing was booked and no money was taken), `booking_cancelled_at_provider`, `ticketing_refused`. Null otherwise. For `offer_unavailable`, the supplier no longer sells the priced offer. Nothing was booked and the card authorisation was released. Search again and book a new offer. The `booking.failed` webhook carries the same reason with a sentence to show the traveller (`failure_message`).","example":"booking_not_created","uniqueKey":"booking.\\items.items.[INDEX].failure_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why the booking failed, when it failed after payment and the cause is known: `offer_unavailable`, `price_changed`, `booking_not_created` (the supplier holds no booking; nothing was booked and no money was taken), `booking_cancelled_at_provider`, `ticketing_refused`. Null otherwise. For `offer_unavailable`, the supplier no longer sells the priced offer. Nothing was booked and the card authorisation was released. Search again and book a new offer. The `booking.failed` webhook carries the same reason with a sentence to show the traveller (`failure_message`).","example":"booking_not_created","uniqueKey":"booking.\\items.items.[INDEX].failure_reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"booking.\\items.items.[INDEX].failure_reason","typeLabel":"string | null"},"booked_ancillaries":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["seat","bag","meal","cabin_bag_upgrade","sports_equipment","priority_boarding","assistance","insurance","lounge","frequent_flyer","other"],"description":"What was booked: a seat, a bag, a meal or another service. Treat the list as open: new kinds may be added.","example":"seat","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["confirmed","pending","failed"],"description":"For seats, `pending` means the airline has not confirmed the seat yet. `confirmed` means booked with the airline. `failed` means not booked.","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"seat_number":{"type":"string","example":"12B","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].seat_number","typeLabel":"string"},"traveler_ref":{"type":"string","example":"pax_1","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].traveler_ref","typeLabel":"string"},"pax_ref_id":{"type":"string","description":"Deprecated: use `traveler_ref` instead. Same value.","example":"pax_1","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].pax_ref_id","typeLabel":"string"},"segment_ref_ids":{"type":"array","items":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].segment_ref_ids.items.[INDEX]","typeLabel":"string"},"example":["seg_1"],"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].segment_ref_ids","typeLabel":"string[]"},"not_charged":{"type":"boolean","description":"true when this seat is not charged to the traveler.","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].not_charged","typeLabel":"boolean"},"failure_reason":{"oneOf":[{"type":"string","description":"Public partner-facing explanation of a failed or unresolved outcome; never internal diagnostics.","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].failure_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Public partner-facing explanation of a failed or unresolved outcome; never internal diagnostics.","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].failure_reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].failure_reason","typeLabel":"string | null"},"price":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].price.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].price.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].price.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].price.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].price","typeLabel":"object"},"refund":{"type":"object","properties":{"offer_id":{"type":"string","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.offer_id","typeLabel":"string"},"seat_number":{"type":"string","example":"12B","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.seat_number","typeLabel":"string"},"status":{"type":"string","enum":["pending_airline_refund","refunded","not_refunded"],"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.status","typeLabel":"enum\u003cstring>"},"amount":{"type":"object","description":"The seat price while pending, then the actual customer refund amount (zero when not refunded). Not part of the separate quoted fare refund.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.amount.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.amount.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.amount.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.amount.display","typeLabel":"string"}},"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.amount","typeLabel":"object"},"carrier":{"type":"string","description":"Airline display name.","example":"United","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.carrier","typeLabel":"string"},"message":{"type":"string","description":"Customer-facing sentence explaining the seat refund.","example":"Your paid seat will be refunded once United refunds Jinko.","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.message","typeLabel":"string"},"airline_refund_registered":{"type":"boolean","description":"Whether the airline refund has been registered with the payment provider.","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.airline_refund_registered","typeLabel":"boolean"},"traveler_ref":{"type":"string","example":"pax_1","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.traveler_ref","typeLabel":"string"},"pax_ref_id":{"type":"string","description":"Deprecated: use `traveler_ref` instead. Same value.","example":"pax_1","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund.pax_ref_id","typeLabel":"string"}},"required":["offer_id","seat_number","status","amount","carrier","message","airline_refund_registered"],"description":"A carrier-settled paid seat is refunded once the airline refunds Jinko. It is not part of the quoted fare refund; track its separate status here.","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX].refund","typeLabel":"object"}},"required":["type","status"],"description":"An ancillary selected for this booked item: a seat, a bag, a meal or another service. `seat_number` is set on a seat. Price is omitted for an included or free ancillary; otherwise it uses the item confirmation’s total_paid money shape, in the trip currency. Booking payment totals are unchanged by this list.","uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].booked_ancillaries","typeLabel":"object[]"},"confirmation":{"type":"object","properties":{"confirmation_number":{"type":"string","description":"Deprecated: use `supplier_references` instead. A confirmation number for this item; when the airline’s own locator is not known it can hold an id only Jinko’s intermediary answers to.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.confirmation_number","typeLabel":"string"},"product_summary":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.product_summary","typeLabel":"string"},"total_paid":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.total_paid.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.total_paid.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].confirmation.total_paid.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.total_paid.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].confirmation.total_paid.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.total_paid","typeLabel":"object"},"details":{"type":"object","properties":{"flight":{"type":"object","properties":{"pnr":{"type":"string","description":"Deprecated: use `supplier_references` instead. The validating carrier’s record locator; when it is not known, an id only Jinko’s intermediary answers to.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.pnr","typeLabel":"string"},"ticket_numbers":{"type":"array","items":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.ticket_numbers.items.[INDEX]","typeLabel":"string"},"description":"The ticket numbers issued for this item. Absent when none is recorded.","example":["0010000000001","0010000000002"],"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.ticket_numbers","typeLabel":"string[]"},"airline_locators":{"type":"array","items":{"type":"object","properties":{"carrier_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.airline_locators.items.[INDEX].carrier_code","typeLabel":"string"},"carrier_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.airline_locators.items.[INDEX].carrier_name","typeLabel":"string"},"locator":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.airline_locators.items.[INDEX].locator","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.airline_locators.items.[INDEX]","typeLabel":"object"},"description":"Deprecated: use `supplier_references` instead. Each airline's own record locator, one per carrier; the item's `supplier_references` lists the same locators.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.airline_locators","typeLabel":"object[]"},"trip_type":{"type":"string","description":"The itinerary shape: `one_way`, `round_trip`, `open_jaw` or `multi_city`. Absent on a booking confirmed before it was recorded.","example":"round_trip","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.trip_type","typeLabel":"string"},"origin_city_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.origin_city_code","typeLabel":"string"},"destination_city_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.destination_city_code","typeLabel":"string"},"cabin_class":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.cabin_class","typeLabel":"string"},"validating_carrier":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.validating_carrier","typeLabel":"string"},"validating_carrier_info":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.validating_carrier_info.code","typeLabel":"string"},"name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.validating_carrier_info.name","typeLabel":"string"},"logo":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.validating_carrier_info.logo","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.validating_carrier_info","typeLabel":"object"},"legs":{"type":"array","items":{"type":"object","properties":{"origin":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].origin","typeLabel":"string"},"origin_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].origin_name","typeLabel":"string"},"origin_airport_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].origin_airport_name","typeLabel":"string"},"destination":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].destination","typeLabel":"string"},"destination_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].destination_name","typeLabel":"string"},"destination_airport_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].destination_airport_name","typeLabel":"string"},"departure_datetime":{"type":"string","description":"First departure of the journey. The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-27T18:05:00-05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].departure_datetime","typeLabel":"string"},"arrival_datetime":{"type":"string","description":"Final arrival of the journey. The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-28T07:25:00+01:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].arrival_datetime","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].duration_minutes","typeLabel":"integer"},"stops":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].stops","typeLabel":"integer"},"stop_infos":{"type":"array","items":{"type":"object","properties":{"airport_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].stop_infos.items.[INDEX].airport_code","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].stop_infos.items.[INDEX].duration_minutes","typeLabel":"integer"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].stop_infos.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].stop_infos","typeLabel":"object[]"},"airline":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].airline","typeLabel":"string"},"airline_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].airline_name","typeLabel":"string"},"airline_logo":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].airline_logo","typeLabel":"string"},"segments":{"type":"array","items":{"type":"object","properties":{"airline":{"type":"string","description":"Marketing carrier code.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].airline","typeLabel":"string"},"airline_name":{"type":"string","description":"Marketing carrier name.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].airline_name","typeLabel":"string"},"airline_logo":{"type":"string","description":"Marketing carrier logo URL.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].airline_logo","typeLabel":"string"},"flight_number":{"type":"string","description":"Flight number without the carrier code.","example":"57","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].flight_number","typeLabel":"string"},"operating_carrier":{"type":"string","description":"Operating carrier code.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].operating_carrier","typeLabel":"string"},"operating_carrier_info":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].operating_carrier_info.code","typeLabel":"string"},"name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].operating_carrier_info.name","typeLabel":"string"},"logo":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].operating_carrier_info.logo","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].operating_carrier_info","typeLabel":"object"},"aircraft":{"type":"string","example":"777","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].aircraft","typeLabel":"string"},"departure_airport":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].departure_airport","typeLabel":"string"},"departure_city":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].departure_city","typeLabel":"string"},"departure_city_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].departure_city_name","typeLabel":"string"},"arrival_airport":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].arrival_airport","typeLabel":"string"},"arrival_city":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].arrival_city","typeLabel":"string"},"arrival_city_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].arrival_city_name","typeLabel":"string"},"departure_time":{"type":"string","description":"The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-27T18:05:00-05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].departure_time","typeLabel":"string"},"arrival_time":{"type":"string","description":"The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-28T07:25:00+01:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].arrival_time","typeLabel":"string"},"departure_time_local":{"type":"string","description":"The same wall-clock time without an offset (`YYYY-MM-DDTHH:MM:SS`).","example":"2026-11-27T18:05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].departure_time_local","typeLabel":"string"},"arrival_time_local":{"type":"string","description":"The same wall-clock time without an offset (`YYYY-MM-DDTHH:MM:SS`).","example":"2026-11-28T07:25:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].arrival_time_local","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].duration_minutes","typeLabel":"integer"},"layover_minutes":{"type":"integer","description":"Minutes on the ground after this segment, before the next one departs; absent on the last segment of a journey.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX].layover_minutes","typeLabel":"integer"}},"description":"A flight segment as booked and ticketed. No terminal and no per-segment status are given.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX].segments","typeLabel":"object[]"}},"description":"One journey of the booked and ticketed itinerary, with its flight segments in flown order.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs.items.[INDEX]","typeLabel":"object"},"description":"Every journey of the itinerary in flown order, as booked and ticketed. It is not refreshed from the airline afterwards: a schedule change or cancellation made by the airline is not reflected here. Absent on a booking confirmed before legs were recorded. After an exchange that re-issued part of the itinerary it holds the re-issued journeys only, so read `trip_type` rather than counting legs.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.legs","typeLabel":"object[]"},"outbound_flight":{"type":"object","properties":{"origin":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.origin","typeLabel":"string"},"origin_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.origin_name","typeLabel":"string"},"origin_airport_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.origin_airport_name","typeLabel":"string"},"destination":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.destination","typeLabel":"string"},"destination_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.destination_name","typeLabel":"string"},"destination_airport_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.destination_airport_name","typeLabel":"string"},"departure_datetime":{"type":"string","description":"First departure of the journey. The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-27T18:05:00-05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.departure_datetime","typeLabel":"string"},"arrival_datetime":{"type":"string","description":"Final arrival of the journey. The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-28T07:25:00+01:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.arrival_datetime","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.duration_minutes","typeLabel":"integer"},"stops":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.stops","typeLabel":"integer"},"stop_infos":{"type":"array","items":{"type":"object","properties":{"airport_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.stop_infos.items.[INDEX].airport_code","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.stop_infos.items.[INDEX].duration_minutes","typeLabel":"integer"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.stop_infos.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.stop_infos","typeLabel":"object[]"},"airline":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.airline","typeLabel":"string"},"airline_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.airline_name","typeLabel":"string"},"airline_logo":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.airline_logo","typeLabel":"string"},"segments":{"type":"array","items":{"type":"object","properties":{"airline":{"type":"string","description":"Marketing carrier code.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].airline","typeLabel":"string"},"airline_name":{"type":"string","description":"Marketing carrier name.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].airline_name","typeLabel":"string"},"airline_logo":{"type":"string","description":"Marketing carrier logo URL.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].airline_logo","typeLabel":"string"},"flight_number":{"type":"string","description":"Flight number without the carrier code.","example":"57","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].flight_number","typeLabel":"string"},"operating_carrier":{"type":"string","description":"Operating carrier code.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].operating_carrier","typeLabel":"string"},"operating_carrier_info":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].operating_carrier_info.code","typeLabel":"string"},"name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].operating_carrier_info.name","typeLabel":"string"},"logo":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].operating_carrier_info.logo","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].operating_carrier_info","typeLabel":"object"},"aircraft":{"type":"string","example":"777","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].aircraft","typeLabel":"string"},"departure_airport":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].departure_airport","typeLabel":"string"},"departure_city":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].departure_city","typeLabel":"string"},"departure_city_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].departure_city_name","typeLabel":"string"},"arrival_airport":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].arrival_airport","typeLabel":"string"},"arrival_city":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].arrival_city","typeLabel":"string"},"arrival_city_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].arrival_city_name","typeLabel":"string"},"departure_time":{"type":"string","description":"The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-27T18:05:00-05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].departure_time","typeLabel":"string"},"arrival_time":{"type":"string","description":"The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-28T07:25:00+01:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].arrival_time","typeLabel":"string"},"departure_time_local":{"type":"string","description":"The same wall-clock time without an offset (`YYYY-MM-DDTHH:MM:SS`).","example":"2026-11-27T18:05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].departure_time_local","typeLabel":"string"},"arrival_time_local":{"type":"string","description":"The same wall-clock time without an offset (`YYYY-MM-DDTHH:MM:SS`).","example":"2026-11-28T07:25:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].arrival_time_local","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].duration_minutes","typeLabel":"integer"},"layover_minutes":{"type":"integer","description":"Minutes on the ground after this segment, before the next one departs; absent on the last segment of a journey.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX].layover_minutes","typeLabel":"integer"}},"description":"A flight segment as booked and ticketed. No terminal and no per-segment status are given.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight.segments","typeLabel":"object[]"}},"description":"One journey of the booked and ticketed itinerary, with its flight segments in flown order.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.outbound_flight","typeLabel":"object"},"inbound_flight":{"type":"object","properties":{"origin":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.origin","typeLabel":"string"},"origin_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.origin_name","typeLabel":"string"},"origin_airport_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.origin_airport_name","typeLabel":"string"},"destination":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.destination","typeLabel":"string"},"destination_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.destination_name","typeLabel":"string"},"destination_airport_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.destination_airport_name","typeLabel":"string"},"departure_datetime":{"type":"string","description":"First departure of the journey. The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-27T18:05:00-05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.departure_datetime","typeLabel":"string"},"arrival_datetime":{"type":"string","description":"Final arrival of the journey. The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-28T07:25:00+01:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.arrival_datetime","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.duration_minutes","typeLabel":"integer"},"stops":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.stops","typeLabel":"integer"},"stop_infos":{"type":"array","items":{"type":"object","properties":{"airport_code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.stop_infos.items.[INDEX].airport_code","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.stop_infos.items.[INDEX].duration_minutes","typeLabel":"integer"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.stop_infos.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.stop_infos","typeLabel":"object[]"},"airline":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.airline","typeLabel":"string"},"airline_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.airline_name","typeLabel":"string"},"airline_logo":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.airline_logo","typeLabel":"string"},"segments":{"type":"array","items":{"type":"object","properties":{"airline":{"type":"string","description":"Marketing carrier code.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].airline","typeLabel":"string"},"airline_name":{"type":"string","description":"Marketing carrier name.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].airline_name","typeLabel":"string"},"airline_logo":{"type":"string","description":"Marketing carrier logo URL.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].airline_logo","typeLabel":"string"},"flight_number":{"type":"string","description":"Flight number without the carrier code.","example":"57","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].flight_number","typeLabel":"string"},"operating_carrier":{"type":"string","description":"Operating carrier code.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].operating_carrier","typeLabel":"string"},"operating_carrier_info":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].operating_carrier_info.code","typeLabel":"string"},"name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].operating_carrier_info.name","typeLabel":"string"},"logo":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].operating_carrier_info.logo","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].operating_carrier_info","typeLabel":"object"},"aircraft":{"type":"string","example":"777","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].aircraft","typeLabel":"string"},"departure_airport":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].departure_airport","typeLabel":"string"},"departure_city":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].departure_city","typeLabel":"string"},"departure_city_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].departure_city_name","typeLabel":"string"},"arrival_airport":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].arrival_airport","typeLabel":"string"},"arrival_city":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].arrival_city","typeLabel":"string"},"arrival_city_name":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].arrival_city_name","typeLabel":"string"},"departure_time":{"type":"string","description":"The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-27T18:05:00-05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].departure_time","typeLabel":"string"},"arrival_time":{"type":"string","description":"The scheduled time as booked, in the airport's local time with its UTC offset (RFC 3339), e.g. `2026-11-27T18:05:00-05:00`. Without an offset when the airport's time zone is unknown.","example":"2026-11-28T07:25:00+01:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].arrival_time","typeLabel":"string"},"departure_time_local":{"type":"string","description":"The same wall-clock time without an offset (`YYYY-MM-DDTHH:MM:SS`).","example":"2026-11-27T18:05:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].departure_time_local","typeLabel":"string"},"arrival_time_local":{"type":"string","description":"The same wall-clock time without an offset (`YYYY-MM-DDTHH:MM:SS`).","example":"2026-11-28T07:25:00","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].arrival_time_local","typeLabel":"string"},"duration_minutes":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].duration_minutes","typeLabel":"integer"},"layover_minutes":{"type":"integer","description":"Minutes on the ground after this segment, before the next one departs; absent on the last segment of a journey.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX].layover_minutes","typeLabel":"integer"}},"description":"A flight segment as booked and ticketed. No terminal and no per-segment status are given.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight.segments","typeLabel":"object[]"}},"description":"One journey of the booked and ticketed itinerary, with its flight segments in flown order.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.inbound_flight","typeLabel":"object"},"is_refundable":{"type":"boolean","description":"Whether the fare allows a refund, from its rules: an estimate, like `fare_conditions`. Absent when the fare states nothing.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.is_refundable","typeLabel":"boolean"},"is_changeable":{"type":"boolean","description":"Whether the fare allows a change, from its rules: an estimate, like `fare_conditions`. Absent when the fare states nothing.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.is_changeable","typeLabel":"boolean"},"refund_policy":{"type":"string","description":"The fare’s refund rule in words: an estimate, like `fare_conditions`.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.refund_policy","typeLabel":"string"},"change_policy":{"type":"string","description":"The fare’s change rule in words: an estimate, like `fare_conditions`.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.change_policy","typeLabel":"string"},"carry_on_baggage":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.carry_on_baggage","typeLabel":"string"},"checked_baggage":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.checked_baggage","typeLabel":"string"},"fare_conditions":{"type":"object","properties":{"rules":{"type":"array","items":{"type":"object","properties":{"rule_type":{"type":"string","description":"What the rule governs: `CANCEL`, `CHANGE`, `CANCEL_AFTER_DEPARTURE`, `CHANGE_AFTER_DEPARTURE` or `NAME_CHANGE`. Treat the list as open.","example":"CHANGE","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].rule_type","typeLabel":"string"},"penalty":{"type":"string","description":"`NOT_ALLOWED`, `NO_PENALTY` or `ALLOWED_WITH_FEE`. Treat the list as open.","example":"ALLOWED_WITH_FEE","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].penalty","typeLabel":"string"},"penalty_fee":{"type":"object","description":"The fee when the airline states one, in the currency the airline states it in, which can differ from the fare’s.","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].penalty_fee.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].penalty_fee.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].penalty_fee.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].penalty_fee.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].penalty_fee.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].penalty_fee","typeLabel":"object"},"fee_unknown":{"type":"boolean","description":"The operation is allowed and the airline states nothing about a fee.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].fee_unknown","typeLabel":"boolean"},"min_minutes_before_departure":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].min_minutes_before_departure","typeLabel":"integer"},"max_minutes_before_departure":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].max_minutes_before_departure","typeLabel":"integer"},"max_minutes_after_departure":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].max_minutes_after_departure","typeLabel":"integer"},"channels":{"type":"array","items":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].channels.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].channels","typeLabel":"string[]"},"charge_model":{"type":"array","items":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].charge_model.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].charge_model","typeLabel":"string[]"},"direction":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX].direction","typeLabel":"string"}},"required":["rule_type","penalty"],"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions.rules","typeLabel":"object[]"}},"required":["rules"],"description":"The fare’s refund and change rules as kept with the booking, returned whatever `check_eligibility` says and read without asking the airline. An estimate: the airline can refund or void a ticket the rules call non-refundable (on the day of issue, for example) and the reverse. Whether a refund or change can be done is confirmed by `items[].servicing`, the refund check and the refund or exchange preview.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight.fare_conditions","typeLabel":"object"}},"description":"Flight confirmation details as booked and ticketed. `outbound_flight` and `inbound_flight` are `legs[0]` and `legs[1]` under older names; `inbound_flight` is the second journey, not necessarily a return.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.flight","typeLabel":"object"},"car":{"type":"object","properties":{"due_at_desk":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.due_at_desk.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.due_at_desk.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.due_at_desk.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.due_at_desk.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.due_at_desk.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.due_at_desk","typeLabel":"object"},"deposit":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.deposit.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.deposit.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.deposit.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.deposit.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.deposit.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.deposit","typeLabel":"object"},"estimated_total":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.estimated_total.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.estimated_total.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.estimated_total.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.estimated_total.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.estimated_total.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.estimated_total","typeLabel":"object"},"ancillaries":{"type":"array","items":{"type":"object","properties":{"offer_id":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].offer_id","typeLabel":"string"},"label":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].label","typeLabel":"string"},"quantity":{"type":"integer","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].quantity","typeLabel":"integer"},"paid_at":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].paid_at","typeLabel":"string"},"price":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].price.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].price.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].price.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].price.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX].price","typeLabel":"object"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.ancillaries","typeLabel":"object[]"},"cancellation_fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].type","typeLabel":"string"},"fee":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].fee.amount","typeLabel":"number"},"value":{"type":"integer","description":"Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.","example":41250,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].fee.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].fee.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].fee.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. \"USD 159.77\". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is \"JPY 15615.00\"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.","example":"USD 412.50","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].fee.display","typeLabel":"string"}},"description":"A money figure in one of two scales. New integrations read the `*_money` field beside it (a `MoneyValue`) where there is one, and `value` on objects that carry it; the rule below applies only to the deprecated forms. When `decimal_places` is present, `value` (or the deprecated `amount`) is an INTEGER in minor units: divide by 10 ** decimal_places. When it is absent, the deprecated `amount` is already in MAJOR units. Branch on whether decimal_places is present in the response you received, never on the currency code or the field name. `display` is the same figure as a string to show.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].fee","typeLabel":"object"},"non_refundable":{"type":"boolean","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].non_refundable","typeLabel":"boolean"},"applicable_from":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].applicable_from","typeLabel":"string"},"applicable_to":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX].applicable_to","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car.cancellation_fees","typeLabel":"object[]"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.car","typeLabel":"object"},"hotel":{"type":"object","properties":{"hotel_id":{"type":"string","example":"lp1d2c3","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.hotel_id","typeLabel":"string"},"hotel_name":{"type":"string","example":"NH Paris Opéra Faubourg","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.hotel_name","typeLabel":"string"},"address":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.address","typeLabel":"string"},"star_rating":{"type":"integer","example":4,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.star_rating","typeLabel":"integer"},"main_photo_url":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.main_photo_url","typeLabel":"string"},"check_in":{"type":"string","example":"2026-11-15","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.check_in","typeLabel":"string"},"check_out":{"type":"string","example":"2026-11-17","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.check_out","typeLabel":"string"},"num_nights":{"type":"integer","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.num_nights","typeLabel":"integer"},"room_name":{"type":"string","example":"Standard Double","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.room_name","typeLabel":"string"},"room_description":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.room_description","typeLabel":"string"},"max_occupancy":{"type":"integer","example":2,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.max_occupancy","typeLabel":"integer"},"board_type":{"type":"string","description":"The board code of the meal plan the guest bought, as the rate sold it — the same value the trip item’s `hotel_terms.board_type` stated at checkout (`RO` room only, `BB` bed and breakfast, `HB` half board, …; some suppliers use `BI` for breakfast included). On a multi-room booking, present only when every room is on the same board; read `rooms[].board_type` otherwise. Absent on bookings confirmed before the meal plan was recorded.","example":"BI","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.board_type","typeLabel":"string"},"board_name":{"type":"string","description":"The meal plan the guest bought, in words, as the rate sold it — the same value the trip item’s `hotel_terms.board_name` stated at checkout. On a multi-room booking the rooms’ distinct boards joined with \"; \". Absent on bookings confirmed before the meal plan was recorded.","example":"Breakfast Included","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.board_name","typeLabel":"string"},"is_refundable":{"type":"boolean","example":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.is_refundable","typeLabel":"boolean"},"cancellation_summary":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.cancellation_summary","typeLabel":"string"},"free_cancellation_until":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.free_cancellation_until","typeLabel":"string"},"hotel_confirmation_number":{"type":"string","description":"Deprecated: use `supplier_references` instead. The hotel’s own confirmation number, once the property issued one.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.hotel_confirmation_number","typeLabel":"string"},"rooms":{"type":"array","items":{"type":"object","properties":{"room_number":{"type":"integer","example":1,"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms.items.[INDEX].room_number","typeLabel":"integer"},"room_name":{"type":"string","example":"Twin Room","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms.items.[INDEX].room_name","typeLabel":"string"},"board_type":{"type":"string","example":"BB","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms.items.[INDEX].board_type","typeLabel":"string"},"board_name":{"type":"string","example":"BED AND BREAKFAST","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms.items.[INDEX].board_name","typeLabel":"string"},"is_refundable":{"type":"boolean","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms.items.[INDEX].is_refundable","typeLabel":"boolean"},"cancellation_summary":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms.items.[INDEX].cancellation_summary","typeLabel":"string"},"free_cancellation_until":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms.items.[INDEX].free_cancellation_until","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms.items.[INDEX]","typeLabel":"object"},"description":"Each room of a multi-room booking with its own meal plan and cancellation terms, in room order. Absent on a single-room booking.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel.rooms","typeLabel":"object[]"}},"description":"The stay a booked hotel item confirms: the property, the dates, the room, the meal plan the guest bought (`board_type`, `board_name`) and the cancellation terms read at checkout. The platform sends more and all of it reaches you.","uniqueKey":"booking.\\items.items.[INDEX].confirmation.details.hotel","typeLabel":"object"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation.details","typeLabel":"object"}},"uniqueKey":"booking.\\items.items.[INDEX].confirmation","typeLabel":"object"},"cancellation":{"type":"object","properties":{"state":{"type":"string","example":"confirmed","uniqueKey":"booking.\\items.items.[INDEX].cancellation.state","typeLabel":"string"},"refund_method":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].cancellation.refund_method","typeLabel":"string"},"monetary_refund_minor":{"type":"integer","description":"Deprecated: use `monetary_refund_money` instead. The money refund in minor units of `currency`, with no `decimal_places`.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.monetary_refund_minor","typeLabel":"integer"},"voucher_refund_minor":{"type":"integer","description":"Deprecated: use `voucher_refund_money` instead. The voucher refund in minor units of `currency`, with no `decimal_places`.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.voucher_refund_minor","typeLabel":"integer"},"fee_minor":{"type":"integer","description":"Deprecated: use `fee_money` instead. The cancellation fee in minor units of `currency`, with no `decimal_places`.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.fee_minor","typeLabel":"integer"},"currency":{"type":"string","description":"Deprecated: use `monetary_refund_money` instead. The currency of the three `*_minor` figures; each `*_money` field carries its own.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.currency","typeLabel":"string"},"monetary_refund_money":{"type":"object","description":"The refund paid back as money.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.monetary_refund_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.monetary_refund_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.monetary_refund_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.monetary_refund_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].cancellation.monetary_refund_money","typeLabel":"object"},"voucher_refund_money":{"type":"object","description":"The refund given as a supplier voucher.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.voucher_refund_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.voucher_refund_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.voucher_refund_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.voucher_refund_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].cancellation.voucher_refund_money","typeLabel":"object"},"fee_money":{"type":"object","description":"The cancellation fee.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.fee_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.fee_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.fee_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].cancellation.fee_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].cancellation.fee_money","typeLabel":"object"},"fee_known":{"type":"boolean","uniqueKey":"booking.\\items.items.[INDEX].cancellation.fee_known","typeLabel":"boolean"}},"uniqueKey":"booking.\\items.items.[INDEX].cancellation","typeLabel":"object"},"exchange":{"type":"object","properties":{"exchange_ref":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].exchange.exchange_ref","typeLabel":"string"},"state":{"type":"string","uniqueKey":"booking.\\items.items.[INDEX].exchange.state","typeLabel":"string"},"delta_direction":{"type":"string","description":"`add_collect`, `refund` or `even`: which way the difference moves.","example":"add_collect","uniqueKey":"booking.\\items.items.[INDEX].exchange.delta_direction","typeLabel":"string"},"delta_amount_minor":{"type":"integer","description":"Deprecated: use `delta_amount_money` instead. The absolute difference in minor units of `currency`, with no `decimal_places`.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.delta_amount_minor","typeLabel":"integer"},"new_total_minor":{"type":"integer","description":"Deprecated: use `new_total_money` instead. The replacement rental total in minor units of `currency`, with no `decimal_places`.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.new_total_minor","typeLabel":"integer"},"currency":{"type":"string","description":"Deprecated: use `delta_amount_money` instead. The currency of the two `*_minor` figures; each `*_money` field carries its own.","deprecated":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.currency","typeLabel":"string"},"delta_amount_money":{"type":"object","description":"The ABSOLUTE difference between the old and the new rental; `delta_direction` says which way it moves.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.delta_amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.delta_amount_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.delta_amount_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.delta_amount_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].exchange.delta_amount_money","typeLabel":"object"},"new_total_money":{"type":"object","description":"The replacement rental’s total.","required":["value","currency","decimal_places","display"],"properties":{"value":{"type":"integer","description":"Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).","example":41250,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.new_total_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.new_total_money.currency","typeLabel":"string"},"decimal_places":{"type":"integer","description":"The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.","example":2,"isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.new_total_money.decimal_places","typeLabel":"integer"},"display":{"type":"string","description":"The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. \"USD 412.50\". Show this; compute with `value`.","example":"USD 412.50","isRequired":true,"uniqueKey":"booking.\\items.items.[INDEX].exchange.new_total_money.display","typeLabel":"string"}},"uniqueKey":"booking.\\items.items.[INDEX].exchange.new_total_money","typeLabel":"object"}},"uniqueKey":"booking.\\items.items.[INDEX].exchange","typeLabel":"object"}},"required":["item_id","domain"],"uniqueKey":"booking.\\items.items.[INDEX]","typeLabel":"object"},"uniqueKey":"booking.\\items","typeLabel":"object[]"},"can_refund":{"type":"boolean","description":"OR aggregate over items[].servicing.can_refund; select an item before acting.","deprecated":true,"uniqueKey":"booking.can_refund","typeLabel":"boolean"},"can_void":{"type":"boolean","description":"OR aggregate over items[].servicing.can_void; select an item before acting.","deprecated":true,"uniqueKey":"booking.can_void","typeLabel":"boolean"},"can_exchange":{"type":"boolean","description":"OR aggregate over items[].servicing.can_exchange; select an item before acting.","deprecated":true,"uniqueKey":"booking.can_exchange","typeLabel":"boolean"},"refund_support_level":{"type":"string","enum":["AUTO","MANUAL_REQUIRED","UNSUPPORTED"],"description":"Use items[].servicing.refund_support_level.","deprecated":true,"uniqueKey":"booking.refund_support_level","typeLabel":"enum\u003cstring>"},"exchange_support_level":{"type":"string","enum":["AUTO","MANUAL_REQUIRED","UNSUPPORTED"],"description":"Use items[].servicing.exchange_support_level.","deprecated":true,"uniqueKey":"booking.exchange_support_level","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","example":"2026-05-20T09:14:00Z","uniqueKey":"booking.created_at","typeLabel":"string"},"calendar":{"type":"object","properties":{"files":{"type":"array","items":{"type":"object","properties":{"method":{"type":"string","description":"The iTIP method (RFC 5546) this file carries: `REQUEST` for the events the booking still holds, `CANCEL` for the ones it no longer does. One file carries exactly one method — a booking that both retires and confirms flights, which is what an exchange does, comes back as two files rather than one mixed one.","example":"REQUEST","uniqueKey":"booking.calendar.files.items.[INDEX].method","typeLabel":"string"},"filename":{"type":"string","description":"The name the confirmation or cancellation email attached this same file under.","example":"jinko-JNK-A0AUR2.ics","uniqueKey":"booking.calendar.files.items.[INDEX].filename","typeLabel":"string"},"content_type":{"type":"string","description":"The media type, including the `method` parameter. Attach or serve the file under this exact value: the method parameter is what makes a mail client act on the file instead of storing it as a plain attachment.","example":"text/calendar; charset=utf-8; method=REQUEST","uniqueKey":"booking.calendar.files.items.[INDEX].content_type","typeLabel":"string"},"content":{"type":"string","description":"The iCalendar file itself. Real CRLF line endings, as iCalendar requires — the example escapes them only so it can be read here. Byte-identical to what the email carried for the current state of this booking.","example":"BEGIN:VCALENDAR\\r\\nVERSION:2.0\\r\\n…\\r\\nEND:VCALENDAR\\r\\n","uniqueKey":"booking.calendar.files.items.[INDEX].content","typeLabel":"string"}},"uniqueKey":"booking.calendar.files.items.[INDEX]","typeLabel":"object"},"description":"The iCalendar files this booking is carried in, cancellation first and then invitation — the order the emails attach them in. Never empty: a booking with nothing to put in a calendar omits `calendar` altogether.","uniqueKey":"booking.calendar.files","typeLabel":"object[]"}},"description":"The calendar entries for this booking, as iCalendar files. Absent — not null, and never an empty list — when the booking holds no flight and no hotel, and whenever the files could not be built.","uniqueKey":"booking.calendar","typeLabel":"object"}},"description":"The booked trip. Minimally described — the platform sends more (items, per-item confirmations, provider state) and all of it reaches you. The two `*_support_level` fields are a SNAPSHOT: a fare’s void window closes with time, so before acting on a refund or exchange read the level from a live POST /v1/refund_check or POST /v1/exchange_shop rather than from here. The flight itinerary (`items[].confirmation.details.flight.legs`) is the one booked and ticketed. It is not refreshed from the airline, and no webhook reports an airline's schedule change or cancellation.","uniqueKey":"booking","typeLabel":"object"}},"example":{"booking":{"booking_ref":"JNK-A0AUR2","booking_reference":"JNK-A0AUR2","status":"completed","type":"flight","last_name":"Doe","total_paid":{"value":31840,"currency":"USD","decimal_places":2,"display":"USD 318.40"},"created_at":"2026-05-20T09:14:00Z","calendar":{"files":[{"method":"REQUEST","filename":"jinko-JNK-A0AUR2.ics","content_type":"text/calendar; charset=utf-8; method=REQUEST","content":"BEGIN:VCALENDAR\\r\\nVERSION:2.0\\r\\n…\\r\\nEND:VCALENDAR\\r\\n"}]}}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"booking":{"booking_ref":"JNK-A0AUR2","booking_reference":"JNK-A0AUR2","status":"completed","type":"flight","last_name":"Doe","total_paid":{"value":31840,"currency":"USD","decimal_places":2,"display":"USD 318.40"},"created_at":"2026-05-20T09:14:00Z","calendar":{"files":[{"method":"REQUEST","filename":"jinko-JNK-A0AUR2.ics","content_type":"text/calendar; charset=utf-8; method=REQUEST","content":"BEGIN:VCALENDAR\\r\\nVERSION:2.0\\r\\n…\\r\\nEND:VCALENDAR\\r\\n"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"d9ddc473-602d-4a8b-b92b-2b94b5621050":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"BAD_REQUEST","message":"Malformed JSON in request body.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"BAD_REQUEST","message":"Malformed JSON in request body.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"7cfcc916-ffc7-40b2-b6a2-3e2551d7e6c4":{"description":"Authentication required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"AUTH_REQUIRED","message":"Invalid or expired API key.","doc_url":"https://docs.gojinko.com/authentication/api-keys"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"AUTH_REQUIRED","message":"Invalid or expired API key.","doc_url":"https://docs.gojinko.com/authentication/api-keys"}}}},"exampleType":"examples"}},"exampleType":"examples"},"732fb2f8-7e0d-41fa-b745-3486a485f905":{"description":"Payment required — organization balance exhausted","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"PAYMENT_REQUIRED","message":"Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"PAYMENT_REQUIRED","message":"Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"cc9ee5b5-47df-49ab-97ab-b2dd217bcaeb":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"NOT_FOUND","message":"Resource not found.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"1dd2e0c1-cd1c-431b-8edf-6505e62315a3":{"description":"Choose booked_item_id when several booked items match; other conflicts report the current resource state.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"oneOf.0.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"oneOf.0.error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"oneOf.0.error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"oneOf.0.error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Several items match the requested domain. Choose a booked_item_id from items (the same safe projection as get_booking) and repeat the request with booking_ref and booked_item_id.","required":["error","code","items"],"properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["CONFLICT"],"isRequired":true,"uniqueKey":"oneOf.1.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"object"},"code":{"type":"string","enum":["item_selection_required"],"isRequired":true,"uniqueKey":"oneOf.1.code","typeLabel":"enum\u003cstring>"},"items":{"type":"array","items":{"type":"object","properties":{"item_id":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991,"description":"Deprecated: use `booked_item_id` instead. The booked item as an integer.","example":42,"deprecated":true,"isRequired":true,"uniqueKey":"oneOf.1.\\items.items.[INDEX].item_id","typeLabel":"integer"},"domain":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.\\items.items.[INDEX].domain","typeLabel":"string"},"booked_item_id":{"type":"string","description":"The item to name with `booked_item_id` on the next request.","example":"itm_aaaaaaaaaaaaafhuxsdxpbzrbfz5hm3a","uniqueKey":"oneOf.1.\\items.items.[INDEX].booked_item_id","typeLabel":"string"},"summary":{"type":"string","uniqueKey":"oneOf.1.\\items.items.[INDEX].summary","typeLabel":"string"},"status":{"type":"string","description":"This item's state in Jinko's own booking and servicing flow. In progress: `pending`, `awaiting_payment`, `preparing`, `prepared`, `processing`, `confirming`. Final: `completed` (booked; for a flight, ticketed), `failed`, `cancelled` (nothing is booked any more: the checkout was never paid, or a cancellation succeeded), `expired_quote` (a quoted price, at checkout or for an exchange, expired before it was confirmed). Needing attention: `exchange_partial_failure`, `needs_review`. Treat the list as open: new values may be added. It changes only through Jinko's steps (payment, booking, ticketing, or a cancellation or exchange you request), never because an airline changed or cancelled a flight.","example":"completed","uniqueKey":"oneOf.1.\\items.items.[INDEX].status","typeLabel":"string"},"booking_ref":{"type":"string","description":"The Jinko booking reference of the booking this item belongs to, also after an exchange.","example":"JNK-A0AUR2","uniqueKey":"oneOf.1.\\items.items.[INDEX].booking_ref","typeLabel":"string"},"booking_reference":{"type":"string","description":"Deprecated: use `booking_ref` instead. The Jinko reference of the cart this item lives on: after an exchange, the exchange’s own reference.","deprecated":true,"uniqueKey":"oneOf.1.\\items.items.[INDEX].booking_reference","typeLabel":"string"},"servicing":{"type":"object","properties":{"can_refund":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.can_refund","typeLabel":"boolean"},"can_void":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.can_void","typeLabel":"boolean"},"can_exchange":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.can_exchange","typeLabel":"boolean"},"refund_support_level":{"type":"string","enum":["AUTO","MANUAL_REQUIRED","UNSUPPORTED"],"uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.refund_support_level","typeLabel":"enum\u003cstring>"},"exchange_support_level":{"type":"string","enum":["AUTO","MANUAL_REQUIRED","UNSUPPORTED"],"uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.exchange_support_level","typeLabel":"enum\u003cstring>"},"refund_unavailable_reason":{"type":"string","uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.refund_unavailable_reason","typeLabel":"string"},"exchange_unavailable_reason":{"type":"string","uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.exchange_unavailable_reason","typeLabel":"string"},"refund_reason_code":{"type":"string","uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.refund_reason_code","typeLabel":"string"},"exchange_reason_code":{"type":"string","uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.exchange_reason_code","typeLabel":"string"},"reason_code":{"type":"string","uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.reason_code","typeLabel":"string"},"support_level":{"type":"string","enum":["AUTO","MANUAL_REQUIRED","UNSUPPORTED"],"uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing.support_level","typeLabel":"enum\u003cstring>"}},"required":["can_refund","can_void","can_exchange"],"description":"Eligibility of this booked item and its current product. Read the live refund or exchange check before committing; eligibility can change with time.","uniqueKey":"oneOf.1.\\items.items.[INDEX].servicing","typeLabel":"object"}},"required":["item_id","domain"],"uniqueKey":"oneOf.1.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.1.\\items","typeLabel":"object[]"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"BAD_REQUEST","message":"\u003cstring>","doc_url":"\u003cstring>","field":"selections[1].quantity"}}}},"exampleType":"generated"}},"exampleType":"generated"},"e58b2fa7-6118-4870-9ab4-3fe4ee0ad684":{"description":"The resource this request names no longer exists","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"GONE","message":"The resource no longer exists.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"GONE","message":"The resource no longer exists.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"8c5d1d62-1c9f-44bd-b2be-a04225df5721":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"BAD_REQUEST","message":"A required field is missing or invalid.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"BAD_REQUEST","message":"A required field is missing or invalid.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"3bde8120-16fe-42cd-a93b-ed284094fc87":{"description":"Rate limit or quota exceeded","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Absent when no interval applies.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry after the Retry-After delay.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry after the Retry-After delay.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d6710379-b198-480e-9d91-5d56a8e3d7c6":{"description":"The travel provider rejected the request, or an upstream call failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UPSTREAM_REJECTED","message":"The request was declined for this offer. Try another offer.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UPSTREAM_REJECTED","message":"The request was declined for this offer. Try another offer.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"10a47f18-a967-456b-9e7b-d0d86ab8b6cb":{"description":"No travel provider can serve the request right now","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Absent when no interval applies.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UPSTREAM_UNAVAILABLE","message":"The service is temporarily unavailable. Retry after the Retry-After delay.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UPSTREAM_UNAVAILABLE","message":"The service is temporarily unavailable. Retry after the Retry-After delay.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"1a800ff9-bc6e-4439-853f-d7e53606bb3f":{"description":"The travel provider did not answer in time","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UPSTREAM_TIMEOUT","message":"The request timed out before a result was available. Retry the request.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UPSTREAM_TIMEOUT","message":"The request timed out before a result was available. Retry the request.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"83f1a6e4-8362-497d-a930-dd79161e16a6":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"ApiKeyAuth"}},"d9e9376a-f45e-4147-a377-28a08687e133":{"BearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"6c2e2c14-8667-4ef1-a6c7-d1e7fb982378":{"url":"https://api.gojinko.com","description":"Production"},"0b2c8592-7b6b-4acc-9351-2a69f3e0f42a":{"url":"https://api.sandbox.gojinko.com","description":"Sandbox"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-API-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-API-Key"}],"title":"ApiKeyAuth"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api-reference/public-api.yaml"},"subdomain":"jinko-dev","siteName":"Jinko Platform","title":"get-booking - Jinko Platform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-17T23:48:47.617Z","originalFileLocation":"api/get-booking.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference\">\u003cmeta data-mint-head name=\"application-name\" content=\"Jinko Platform\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"get-booking - Jinko Platform\">\u003cmeta data-mint-head property=\"og:description\" content=\"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Jinko Platform\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dev.gojinko.com/api/get-booking\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://jinko-dev.mintlify.site/_mintlify/api/og/v2?division=Trip+%26+Payment\u0026amp;title=get-booking\u0026amp;description=Retrieve+booked+item+IDs+and+per-item+servicing+eligibility+using+the+Jinko+booking+reference\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=bfd33f0cd58255c67be195ec68952b47fbeaa08bc7aeeecc5ba125939e362a53\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"get-booking - Jinko Platform\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jinko-dev.mintlify.site/_mintlify/api/og/v2?division=Trip+%26+Payment\u0026amp;title=get-booking\u0026amp;description=Retrieve+booked+item+IDs+and+per-item+servicing+eligibility+using+the+Jinko+booking+reference\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=bfd33f0cd58255c67be195ec68952b47fbeaa08bc7aeeecc5ba125939e362a53\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Jinko Platform\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF6363\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dev.gojinko.com/api/get-booking\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/get-booking.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dev.gojinko.com/#organization\",\"name\":\"Jinko Platform\",\"url\":\"https://docs.dev.gojinko.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dev.gojinko.com#website\",\"name\":\"Jinko Platform\",\"url\":\"https://docs.dev.gojinko.com\",\"publisher\":{\"@id\":\"https://docs.dev.gojinko.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dev.gojinko.com/api/get-booking#webpage\",\"url\":\"https://docs.dev.gojinko.com/api/get-booking\",\"name\":\"get-booking\",\"description\":\"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference\",\"dateModified\":\"2026-10-17T23:48:47.617Z\",\"isPartOf\":{\"@id\":\"https://docs.dev.gojinko.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dev.gojinko.com/api/get-booking#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dev.gojinko.com/api/get-booking#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Trip \u0026 Payment\",\"item\":\"https://docs.dev.gojinko.com/api/trip\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"get-booking\",\"item\":\"https://docs.dev.gojinko.com/api/get-booking\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.dev.gojinko.com/api/get-booking#apireference\",\"headline\":\"get-booking\",\"name\":\"get-booking\",\"description\":\"Retrieve booked item IDs and per-item servicing eligibility using the Jinko booking reference\",\"url\":\"https://docs.dev.gojinko.com/api/get-booking\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dev.gojinko.com/api/get-booking#webpage\"},\"dateModified\":\"2026-10-17T23:48:47.617Z\",\"publisher\":{\"@id\":\"https://docs.dev.gojinko.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dev.gojinko.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Jinko Platform\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Jinko Platform","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/tools/overview"}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli/overview"}]},{"tab":"API reference","groups":[{"group":"Introduction","pages":[{"title":"API reference","href":"/api-reference/introduction"}]},{"group":"Travel Demand","pages":[{"group":"Destination","pages":[{"title":"destination","sidebarTitle":"/v1/destination","openapi":"api-reference/public-api.yaml GET /v1/destination","href":"/api/destination"},{"title":"destination trend","sidebarTitle":"/v1/destination/trend","openapi":"api-reference/public-api.yaml GET /v1/destination/trend","href":"/api/destination/trend"}]},{"group":"Market","pages":[{"title":"market","sidebarTitle":"/v1/market","openapi":"api-reference/public-api.yaml GET /v1/market","href":"/api/market"},{"title":"market trend","sidebarTitle":"/v1/market/trend","openapi":"api-reference/public-api.yaml GET /v1/market/trend","href":"/api/market/trend"}]},{"group":"Audience","pages":[{"title":"audience","sidebarTitle":"/v1/audience","openapi":"api-reference/public-api.yaml GET /v1/audience","href":"/api/audience"},{"title":"audience trend","sidebarTitle":"/v1/audience/trend","openapi":"api-reference/public-api.yaml GET /v1/audience/trend","href":"/api/audience/trend"}]},{"group":"Trend","pages":[{"title":"trend","sidebarTitle":"/v1/trend","openapi":"api-reference/public-api.yaml GET /v1/trend","href":"/api/trend"}]}]},{"group":"Flights","pages":[{"group":"Discovery","pages":[{"title":"find-destination","sidebarTitle":"/v1/find_destination","openapi":"api-reference/public-api.yaml POST /v1/find_destination","href":"/api/find-destination"},{"title":"flight-calendar","sidebarTitle":"/v1/flight_calendar","openapi":"api-reference/public-api.yaml POST /v1/flight_calendar","href":"/api/flight-calendar"},{"title":"find-dates","sidebarTitle":"/v1/find_dates","openapi":"api-reference/public-api.yaml POST /v1/find_dates","href":"/api/find-dates"},{"title":"lowest-fare","sidebarTitle":"/v1/lowest_fare","openapi":"api-reference/public-api.yaml POST /v1/lowest_fare","href":"/api/lowest-fare"},{"title":"price-monitoring","sidebarTitle":"/v1/price_monitoring","openapi":"api-reference/public-api.yaml POST /v1/price_monitoring","href":"/api/price-monitoring"},{"title":"flight-price-advice","sidebarTitle":"/v1/flight_price_advice","openapi":"api-reference/public-api.yaml POST /v1/flight_price_advice","href":"/api/flight-price-advice"}]},{"group":"Search","pages":[{"title":"flight-search","sidebarTitle":"/v1/flight_search","openapi":"api-reference/public-api.yaml POST /v1/flight_search","href":"/api/flight-search"},{"title":"flight-award-search (preview)","sidebarTitle":"/v1/flight_award_search (preview)","openapi":"api-reference/public-api-dev.yaml POST /v1/flight_award_search","href":"/api/flight-award-search"}]},{"group":"Manage","pages":[{"title":"refund check","sidebarTitle":"/v1/refund_check","openapi":"api-reference/public-api.yaml POST /v1/refund_check","deprecated":true,"href":"/api/refund/check"},{"title":"refund commit","sidebarTitle":"/v1/refund_commit","openapi":"api-reference/public-api.yaml POST /v1/refund_commit","deprecated":true,"href":"/api/refund/commit"},{"title":"refund status","sidebarTitle":"/v1/refund_status","openapi":"api-reference/public-api.yaml POST /v1/refund_status","deprecated":true,"href":"/api/refund/status"},{"title":"exchange shop","sidebarTitle":"/v1/exchange_shop","openapi":"api-reference/public-api.yaml POST /v1/exchange_shop","href":"/api/exchange/shop"},{"title":"exchange price","sidebarTitle":"/v1/exchange_price","openapi":"api-reference/public-api.yaml POST /v1/exchange_price","href":"/api/exchange/price"},{"title":"exchange commit","sidebarTitle":"/v1/exchange_commit","openapi":"api-reference/public-api.yaml POST /v1/exchange_commit","href":"/api/exchange/commit"},{"title":"exchange status","sidebarTitle":"/v1/exchange_status","openapi":"api-reference/public-api.yaml POST /v1/exchange_status","href":"/api/exchange/status"},{"title":"flight-refund-preview","sidebarTitle":"/v1/flight_refund_preview","openapi":"api-reference/public-api.yaml POST /v1/flight_refund_preview","href":"/api/flight-refund-preview"},{"title":"flight-refund-commit","sidebarTitle":"/v1/flight_refund_commit","openapi":"api-reference/public-api.yaml POST /v1/flight_refund_commit","href":"/api/flight-refund-commit"},{"title":"flight-refund-status","sidebarTitle":"/v1/flight_refund_status","openapi":"api-reference/public-api.yaml POST /v1/flight_refund_status","href":"/api/flight-refund-status"}]}]},{"group":"Hotels","pages":[{"title":"hotel-search","sidebarTitle":"/v1/hotel_search","openapi":"api-reference/public-api.yaml POST /v1/hotel_search","href":"/api/hotel-search"},{"title":"hotel-details","sidebarTitle":"/v1/hotel_details/{hotel_id}","openapi":"api-reference/public-api.yaml GET /v1/hotel_details/{hotel_id}","href":"/api/hotel-details"},{"title":"hotel-reviews","sidebarTitle":"/v1/hotel_reviews/{hotel_id}","openapi":"api-reference/public-api.yaml GET /v1/hotel_reviews/{hotel_id}","href":"/api/hotel-reviews"},{"title":"hotel-cancel","sidebarTitle":"/v1/hotel_cancel","openapi":"api-reference/public-api.yaml POST /v1/hotel_cancel","deprecated":true,"href":"/api/hotel-cancel"},{"title":"hotel-cancel-preview","sidebarTitle":"/v1/hotel_cancel_preview","openapi":"api-reference/public-api.yaml POST /v1/hotel_cancel_preview","href":"/api/hotel-cancel-preview"},{"title":"hotel-cancel-commit","sidebarTitle":"/v1/hotel_cancel_commit","openapi":"api-reference/public-api.yaml POST /v1/hotel_cancel_commit","href":"/api/hotel-cancel-commit"},{"title":"hotel-cancel-status","sidebarTitle":"/v1/hotel_cancel_status","openapi":"api-reference/public-api.yaml POST /v1/hotel_cancel_status","href":"/api/hotel-cancel-status"}]},{"group":"AI","pages":[{"group":"Hotel search","pages":[{"title":"hotel-ai-search","sidebarTitle":"/v1/hotel_ai_search","openapi":"api-reference/public-api.yaml POST /v1/hotel_ai_search","href":"/api/hotel-ai-search"},{"title":"hotel-ai-search-task","sidebarTitle":"/v1/hotel_ai_search/tasks/{task_id}","openapi":"api-reference/public-api.yaml GET /v1/hotel_ai_search/tasks/{task_id}","href":"/api/hotel-ai-search-task"},{"title":"hotel-ai-search-events","sidebarTitle":"/v1/hotel_ai_search/tasks/{task_id}/events","openapi":"api-reference/public-api.yaml GET /v1/hotel_ai_search/tasks/{task_id}/events","href":"/api/hotel-ai-search-events"},{"title":"hotel-ai-search-cancel","sidebarTitle":"/v1/hotel_ai_search/tasks/{task_id}:cancel","openapi":"api-reference/public-api.yaml POST /v1/hotel_ai_search/tasks/{task_id}:cancel","href":"/api/hotel-ai-search-cancel"}]}]},{"group":"Cars","pages":[{"title":"car-search","sidebarTitle":"/v1/car_search","openapi":"api-reference/public-api.yaml POST /v1/car_search","href":"/api/car-search"},{"title":"car-cancel-preview","sidebarTitle":"/v1/car_cancel_preview","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_preview","href":"/api/car-cancel-preview"},{"title":"car-cancel-commit","sidebarTitle":"/v1/car_cancel_commit","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_commit","href":"/api/car-cancel-commit"},{"title":"car-cancel-status","sidebarTitle":"/v1/car_cancel_status","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_status","href":"/api/car-cancel-status"}]},{"group":"Trip \u0026 Payment","pages":[{"title":"trip","sidebarTitle":"/v1/trip","openapi":"api-reference/public-api.yaml POST /v1/trip","href":"/api/trip"},{"group":"Ancillaries","pages":[{"title":"select-ancillaries","sidebarTitle":"/v1/select_ancillaries","openapi":"api-reference/public-api.yaml POST /v1/select_ancillaries","href":"/api/select-ancillaries"},{"title":"trip ancillaries","sidebarTitle":"/v1/trip/{trip_id}/ancillaries","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}/ancillaries","href":"/api/trip/ancillaries"}]},{"title":"checkout","sidebarTitle":"/v1/checkout","openapi":"api-reference/public-api.yaml POST /v1/checkout","href":"/api/checkout"},{"title":"agent-payment submit","sidebarTitle":"/v1/agent_payment/submit","openapi":"api-reference/public-api.yaml POST /v1/agent_payment/submit","href":"/api/agent-payment/submit"},{"title":"trip-status","sidebarTitle":"/v1/trip/{trip_id}","description":"Fetch the full lifecycle state of a trip, items, travelers, quote, fulfillment, and any booking references","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}","href":"/api/trip-status"},{"title":"get-booking","sidebarTitle":"/v1/get_booking","openapi":"api-reference/public-api.yaml POST /v1/get_booking","href":"/api/get-booking"}]},{"group":"Marketing claim","tag":"Preview","pages":[{"title":"best-price-guarantee","sidebarTitle":"/v1/best_price_guarantee","description":"Best Price Guarantee: ask for a hotel offer at a lower price found elsewhere","openapi":"api-reference/public-api.yaml POST /v1/best_price_guarantee","href":"/api/best-price-guarantee"},{"title":"best-price-guarantee-status","sidebarTitle":"/v1/best_price_guarantee/{id}","openapi":"api-reference/public-api.yaml GET /v1/best_price_guarantee/{id}","href":"/api/best-price-guarantee-status"}]},{"group":"Webhooks","pages":[{"title":"webhooks register","sidebarTitle":"/v1/webhooks","openapi":"api-reference/public-api.yaml POST /v1/webhooks","href":"/api/webhooks/register"},{"title":"webhooks list","sidebarTitle":"/v1/webhooks","openapi":"api-reference/public-api.yaml GET /v1/webhooks","href":"/api/webhooks/list"},{"title":"webhooks get","sidebarTitle":"/v1/webhooks/{id}","openapi":"api-reference/public-api.yaml GET /v1/webhooks/{id}","href":"/api/webhooks/get"},{"title":"webhooks delete","sidebarTitle":"/v1/webhooks/{id}","openapi":"api-reference/public-api.yaml DELETE /v1/webhooks/{id}","href":"/api/webhooks/delete"},{"title":"webhooks test","sidebarTitle":"/v1/webhooks/{id}/test","openapi":"api-reference/public-api.yaml POST /v1/webhooks/{id}/test","href":"/api/webhooks/test"},{"title":"webhooks deliveries","sidebarTitle":"/v1/webhooks/{id}/deliveries","openapi":"api-reference/public-api.yaml GET /v1/webhooks/{id}/deliveries","href":"/api/webhooks/deliveries"},{"title":"webhooks replay","sidebarTitle":"/v1/webhooks/{id}/deliveries/{delivery_id}/replay","openapi":"api-reference/public-api.yaml POST /v1/webhooks/{id}/deliveries/{delivery_id}/replay","href":"/api/webhooks/replay"}]},{"group":"Other endpoints","pages":[{"title":"flight-ai-search","sidebarTitle":"/v1/flight_ai_search","openapi":"api-reference/public-api.yaml POST /v1/flight_ai_search","href":"/api/flight-ai-search"},{"title":"flight-ai-search-cancel","sidebarTitle":"/v1/flight_ai_search/tasks/{task_id}:cancel","openapi":"api-reference/public-api.yaml POST /v1/flight_ai_search/tasks/{task_id}:cancel","href":"/api/flight-ai-search-cancel"},{"title":"flight-ai-search-events","sidebarTitle":"/v1/flight_ai_search/tasks/{task_id}/events","openapi":"api-reference/public-api.yaml GET /v1/flight_ai_search/tasks/{task_id}/events","href":"/api/flight-ai-search-events"},{"title":"flight-ai-search-task","sidebarTitle":"/v1/flight_ai_search/tasks/{task_id}","openapi":"api-reference/public-api.yaml GET /v1/flight_ai_search/tasks/{task_id}","href":"/api/flight-ai-search-task"},{"title":"flight-schedule","sidebarTitle":"/v1/flight_schedule","openapi":"api-reference/public-api.yaml POST /v1/flight_schedule","href":"/api/flight-schedule"},{"title":"trip payment-attempts","sidebarTitle":"/v1/trip/{trip_id}/payment_attempts/{payment_attempt_id}","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}/payment_attempts/{payment_attempt_id}","href":"/api/trip/payment-attempts"}]}]}]},"basePath":"","title":"get-booking - Jinko Platform","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}