{
"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": "CONFLICT",
"message": "The operation conflicts with the current state of the resource.",
"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"
}
}
Ancillaries
trip ancillaries
List purchasable ancillaries for a trip (no checkout)
GET
/
v1
/
trip
/
{trip_id}
/
ancillaries
List purchasable ancillaries for a trip (no checkout)
curl --request GET \ --url https://api.gojinko.com/v1/trip/{trip_id}/ancillaries \ --header 'X-API-Key: <api-key>'
{
"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": "CONFLICT",
"message": "The operation conflicts with the current state of the resource.",
"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"
}
}
Returns the available ancillaries for a trip without generating a checkout URL. A price quote runs automatically to retrieve the ancillary catalog and is reused while valid.Responds 200 with status: "ready" and items[] when the quote is complete. If the quote is still being priced it responds 202 with status: "pricing" and a Retry-After header, poll the same URL until it returns 200. Never returns a checkout URL.
{"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/trip/ancillaries","slug":"/api/trip/ancillaries","pageMetadata":{"title":"trip ancillaries","sidebarTitle":"/v1/trip/{trip_id}/ancillaries","description":"List purchasable ancillaries for a trip (no checkout)","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}/ancillaries","href":"/api/trip/ancillaries"},"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: \"List purchasable ancillaries for a trip (no checkout)\"\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`,strong:`strong`,..._provideComponents(),...props.components};return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Returns the available ancillaries for a trip without generating a checkout URL. A price quote runs automatically to retrieve the ancillary catalog and is reused while valid.`}),`\n`,_jsxs(_components.p,{children:[`Responds `,_jsx(_components.strong,{children:`200`}),` with `,_jsx(_components.code,{children:`status: \"ready\"`}),` and `,_jsx(_components.code,{children:`items[]`}),` when the quote is complete. If the quote is still being priced it responds `,_jsx(_components.strong,{children:`202`}),` with `,_jsx(_components.code,{children:`status: \"pricing\"`}),` and a `,_jsx(_components.code,{children:`Retry-After`}),` header, poll the same URL until it returns 200. Never returns a checkout URL.`]})]})}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":"trip ancillaries","sidebarTitle":"/v1/trip/{trip_id}/ancillaries","description":"List purchasable ancillaries for a trip (no checkout)","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}/ancillaries","href":"/api/trip/ancillaries"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Pricing \u0026 booking"],"summary":"List purchasable ancillaries for a trip (no checkout)","description":"List purchasable ancillaries for a trip (no checkout)","security":["95ca532c-14d8-453e-922d-bdb37cbdbb69","a861d4eb-41b1-40e4-86d0-79d455a38b98"],"parameters":["6b49a4c3-980f-4ca8-8229-c59cd623674a"],"responses":{"200":"7feb31b9-13f4-4c00-88c2-d7e33f5d24ff","202":"c275d2e0-ae3d-43b4-8afa-580b7ecb12bd","400":"1db848e6-4f06-4766-80f0-b98b2e2f5f98","401":"67d00c8e-a19b-48c8-b37b-e60014822e50","402":"29c4fd11-1aa8-4496-9860-f4239600404a","404":"6158fc95-dcee-4c5d-ba01-93e47280b0e1","409":"a600d2bf-b156-48ed-a796-b223c73795d4","410":"10733b9e-7983-4e85-bb3e-2f66c603fe76","422":"03856eb7-3cb0-46fd-acf3-0961cb67e647","429":"39b4f183-c80a-4a80-81d6-363ae4aad517","502":"8a11880a-c74a-499c-b21e-333a22c90ff2","503":"7d763a94-8627-4006-9065-c36dc19709fd","504":"dc75f4cc-5862-4d2c-89c6-05c69c72b31a"},"method":"get","type":"path","servers":["6c2e2c14-8667-4ef1-a6c7-d1e7fb982378","0b2c8592-7b6b-4acc-9351-2a69f3e0f42a"],"path":"/v1/trip/{trip_id}/ancillaries","baseUrlOptions":["https://api.gojinko.com","https://api.sandbox.gojinko.com"],"title":"List purchasable ancillaries for a trip (no checkout)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"6b49a4c3-980f-4ca8-8229-c59cd623674a":{"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"},"required":true,"name":"trip_id","in":"path"}},"responses":{"7feb31b9-13f4-4c00-88c2-d7e33f5d24ff":{"description":"Ancillaries ready: `status: \"ready\"` with `items[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"trip_id":{"type":"string","isRequired":true,"uniqueKey":"trip_id","typeLabel":"string"},"status":{"type":"string","example":"ready","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"quote_id":{"type":"string","example":"2097152","uniqueKey":"quote_id","typeLabel":"string"},"quoted_cart_id":{"type":"number","description":"Deprecated: use `quote_id` instead. The same quote as an integer.","deprecated":true,"uniqueKey":"quoted_cart_id","typeLabel":"number"},"expires_at":{"type":"string","uniqueKey":"expires_at","typeLabel":"string"},"retry_after_seconds":{"type":"integer","uniqueKey":"retry_after_seconds","typeLabel":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"collector":{"type":"string","enum":["jinko","supplier"],"description":"Who charges the card: Jinko (merchant of record) or the supplier (channel mode).","uniqueKey":"\\items.items.[INDEX].collector","typeLabel":"enum\u003cstring>"},"item_id":{"type":"string","example":"itm_4b91c2","uniqueKey":"\\items.items.[INDEX].item_id","typeLabel":"string"},"kind":{"type":"string","description":"What the item is: \"flight\", \"hotel\", \"car\" or \"ground\".","example":"flight","uniqueKey":"\\items.items.[INDEX].kind","typeLabel":"string"},"offer_id":{"type":"string","description":"Deprecated: use `trip_item_token` instead. The offer handle this item was created from, exactly as it was submitted to `trip(add_item)`. On a hotel item it is the `htl_…` rate token; on a flight item it is the `offer_id` of the search result the token came from. One caveat when reconciling: on a hotel whose occupancy the provider re-shopped, this stays the token you SUBMITTED even though the priced rate moved. A trip never holds two flights the same travellers cannot both take: adding a flight whose segments overlap a flight already in the trip, another fare of the same flights included, is refused with 409 naming the item already there.","example":"htl_2d67a7441c60e5de","deprecated":true,"uniqueKey":"\\items.items.[INDEX].offer_id","typeLabel":"string"},"trip_item_token":{"type":"string","description":"The handle `trip(add_item)` took, echoed verbatim. On a hotel or car item it is the offer’s `trip_item_token` from the search. On a flight item it is the itinerary id and the fare joined by a colon, absent when the fare half was never resolved (a caller-supplied snapshot skips the resolver); read that absence as \"the platform cannot name the fare\", never as a different fare.","example":"of_9c1d2e:FARE_ABC","uniqueKey":"\\items.items.[INDEX].trip_item_token","typeLabel":"string"},"hotel_id":{"type":"string","description":"The property this hotel item books — the same id `hotel_search` publishes, so an item joins straight back to the search result it came from. Hotel items only.","example":"lp1f2c3","uniqueKey":"\\items.items.[INDEX].hotel_id","typeLabel":"string"},"special_requests":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].special_requests.items.[INDEX]","typeLabel":"string"},"description":"The special requests submitted with `trip(add_item)` for this hotel item, as stored — trimmed, blank entries dropped — and forwarded to the hotel supplier at booking. Requests only — the hotel may not honour them, and a confirmed booking does not imply it will. Hotel items only; absent when none were given (JIN-2499).","uniqueKey":"\\items.items.[INDEX].special_requests","typeLabel":"string[]"},"booking_scope":{"type":"string","description":"`room_bundle` means the submitted hotel offer token covers every room in `rooms`. Absent on every other hotel item, a single room included: read `rooms` for the rooms an item covers, and `booking_scope` only to learn whether one token books them all.","example":"room_bundle","uniqueKey":"\\items.items.[INDEX].booking_scope","typeLabel":"string"},"num_rooms":{"type":"integer","minimum":1,"description":"Number of rooms this hotel item covers: 1 for a single room, the bundle size for a room bundle. Hotel items only; absent when the platform cannot state the party the item was priced for.","example":1,"uniqueKey":"\\items.items.[INDEX].num_rooms","typeLabel":"integer"},"rooms":{"type":"array","items":{"type":"object","properties":{"occupancy_number":{"type":"integer","minimum":1,"description":"Stable one-based room slot within this bundle.","example":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy_number","typeLabel":"integer"},"occupancy":{"type":"object","properties":{"adults":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy.adults","typeLabel":"integer"},"children_ages":{"type":"array","items":{"type":"integer","minimum":0,"maximum":17,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy.children_ages.items.[INDEX]","typeLabel":"integer"},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy.children_ages","typeLabel":"integer[]"}},"required":["adults"],"description":"The party one room is requested or priced for: the number of adults and the age of each child.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy","typeLabel":"object"},"room_id":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].room_id","typeLabel":"string"},"mapped_room_id":{"type":"integer","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].mapped_room_id","typeLabel":"integer"},"room_name":{"type":"string","example":"Superior Double","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].room_name","typeLabel":"string"},"rate_id":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].rate_id","typeLabel":"string"},"board_type":{"type":"string","example":"BB","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].board_type","typeLabel":"string"},"board_name":{"type":"string","example":"Breakfast Included","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].board_name","typeLabel":"string"},"max_occupancy":{"type":"integer","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].max_occupancy","typeLabel":"integer"},"taxes_and_fees":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. The tax in MAJOR units of `currency`.","example":164.49,"deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. The currency of `amount`.","example":"EUR","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].currency","typeLabel":"string"},"amount_money":{"type":"object","description":"The tax. When the supplier named no currency for the line, it is the currency the rate is priced in.","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":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].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":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].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":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount_money","typeLabel":"object"},"description":{"type":"string","description":"The provider’s own wording for the tax. Free text, not a code.","example":"19, VAT National taxes on accommodation","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].description","typeLabel":"string"},"included":{"type":"boolean","description":"True when the amount is ALREADY inside `total_amount_money`; false when the guest pays it at the property on top. Getting this backwards misquotes the trip.","example":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].included","typeLabel":"boolean"},"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":"EUR 164.49","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees","typeLabel":"object[]"},"policies":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].type","typeLabel":"string"},"description":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].description","typeLabel":"string"},"fee_amount":{"type":"number","description":"Deprecated: use `fee_amount_money` instead. Customer policy fee in MAJOR units of `fee_currency`.","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount","typeLabel":"number"},"fee_currency":{"type":"string","description":"Deprecated: use `fee_amount_money` instead. The currency of `fee_amount`.","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_currency","typeLabel":"string"},"fee_amount_money":{"type":"object","description":"Customer cancellation or policy fee, with exact minor units and currency precision.","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":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_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":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_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":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount_money","typeLabel":"object"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies","typeLabel":"object[]"},"is_refundable":{"type":"boolean","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].is_refundable","typeLabel":"boolean"},"cancellation_policy":{"type":"array","items":{"type":"object","properties":{"cancel_time":{"type":"string","description":"Deadline after which this tier applies. RFC 3339 with the supplier’s declared UTC offset. Steps whose deadline has no declared timezone are omitted from the ladder — the platform never invents an offset — so a schedule can be shorter than the supplier’s own. Tiers are chronological, earliest first, so the first entry is the deadline that matters.","example":"2026-08-18T10:00:00+02:00","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].cancel_time","typeLabel":"string"},"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. Read `amount_money`, `percent` or `nights`, whichever this step carries. What the guest is charged on or after `cancel_time`: a sum in MAJOR units of `currency`, a percentage or a number of nights, as `type` says.","example":606.13,"deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. The currency of `amount`.","example":"EUR","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].currency","typeLabel":"string"},"type":{"type":"string","description":"How the charge is expressed — a sum (\"amount\", \"flat_fee\"; read `amount_money`), a percentage (\"percent\", \"percentage\"; read `percent`) or a number of nights (\"nights\"; read `nights`).","example":"amount","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].type","typeLabel":"string"},"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":"EUR 606.13","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].display","typeLabel":"string"},"amount_money":{"type":"object","description":"What the guest is charged on or after `cancel_time`, when this step is a sum. Absent on a percentage or nights step, and when the supplier named no currency.","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":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].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":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].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":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount_money","typeLabel":"object"},"percent":{"type":"number","description":"The charge as a percentage of the stay price, when this step is a percentage, on the 0–100 scale the supplier states it in: 50 is half the stay price, 100 the whole of it. Never a 0–1 fraction. Absent otherwise.","example":50,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].percent","typeLabel":"number"},"nights":{"type":"number","description":"The charge as a number of nights of the stay, when this step is expressed in nights. Absent otherwise.","example":1,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].nights","typeLabel":"number"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy","typeLabel":"object[]"},"free_cancellation_until":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].free_cancellation_until","typeLabel":"string"},"payment_types":{"type":"array","items":{"type":"string","enum":["pay_now","pay_at_property","deposit"],"description":"How the rate can be settled. `pay_now` — paid when the booking is made. `pay_at_property` — paid to the hotel at the property. `deposit` — a deposit is taken.","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].payment_types.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"How the rate can be settled. Each value appears at most once.","example":["pay_now"],"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].payment_types","typeLabel":"enum\u003cstring>[]"},"remarks":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].remarks","typeLabel":"string"}},"required":["occupancy_number","occupancy"],"description":"One room of a hotel item — the single room a one-room item books, or one slot of a room-bundle rate — with the party it was priced for (`occupancy`) and its display and policy details. The containing item owns the customer-facing total; supplier net, suggested retail, commission and room-local supplier price figures are intentionally not part of this public shape.","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX]","typeLabel":"object"},"description":"One entry per room this hotel item covers, single room or bundle (JIN-2565). Each entry states in `occupancy` the party that room was priced for — adults and children’s ages — so a checkout page can show the guest who the rate is for before payment, and a wrong child age, which changes the price and the room, is caught before the money moves. On a single room the entry’s room, board, refundability and tax lines are the item’s own, the same figures `hotel_terms` states; on a room bundle each entry carries that room’s details from the supplier. The item price remains the authoritative customer total for every room together. Absent when the platform holds no party for the item.","uniqueKey":"\\items.items.[INDEX].rooms","typeLabel":"object[]"},"price":{"type":"object","description":"Deprecated: use `price_money` instead. Item total in major currency units. Absent until the trip has been quoted.","deprecated":true,"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":"\\items.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":"\\items.items.[INDEX].price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.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":"\\items.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":"\\items.items.[INDEX].price.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price","typeLabel":"object"},"price_money":{"type":"object","description":"Item total. Absent until the trip has been quoted — an unpriced item carries no `price_money` key at all, so absence means \"not priced yet\", not \"free\".","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":"\\items.items.[INDEX].price_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_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":"\\items.items.[INDEX].price_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":"\\items.items.[INDEX].price_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price_money","typeLabel":"object"},"pax_count":{"type":"number","example":1,"uniqueKey":"\\items.items.[INDEX].pax_count","typeLabel":"number"},"available_ancillaries":{"type":"array","items":{"type":"object","properties":{"offer_id":{"type":"string","description":"Opaque identifier of this ancillary offer. Pass it back exactly as received in `selections[].offer_id`; do not parse or build it.","example":"anc_3f9a1c27e4b8d051","isRequired":true,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].offer_id","typeLabel":"string"},"type":{"type":"string","description":"Ancillary family — \"bag\", \"seat\", \"meal\", \"assistance\", … An open set. Offers with type \"seat\" carry `seat_map` and no `price_per_unit`: the price is per seat, in `seat_map.seats[].price_money`.","example":"bag","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].type","typeLabel":"string"},"label":{"type":"string","description":"The provider label verbatim, kept as the source of truth. Some labels arrive with HTML entities and \"\u0026\" component-joiners — show `display_label` instead.","example":"bag\u00261 x large 55 x 40 x 20 cm\u0026Includes Speedy Boarding","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].label","typeLabel":"string"},"display_label":{"type":"string","description":"Human-readable rendering of `label`: HTML entities decoded, \"\u0026\" joiners normalised to \", \". This is the one to display.","example":"bag, 1 x large 55 x 40 x 20 cm, Includes Speedy Boarding","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].display_label","typeLabel":"string"},"description":{"type":"string","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].description","typeLabel":"string"},"price_per_unit":{"type":"object","description":"Deprecated: use `price_per_unit_money` instead. The unit price in MAJOR currency units.","deprecated":true,"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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit","typeLabel":"object"},"price_per_unit_money":{"type":"object","description":"The price of one unit of this ancillary. Absent when the offer carries no price, and on seat offers, which price each seat in the seat map.","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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_money","typeLabel":"object"},"scope":{"type":"string","description":"Seat offers only: one seat per passenger per segment.","example":"PER_PAX_PER_SEGMENT","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].scope","typeLabel":"string"},"segment_ref_ids":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].segment_ref_ids.items.[INDEX]","typeLabel":"string"},"description":"The segment(s) a seat offer covers, one per offer. Pass the one entry back as the selection's `segment_ref_ids`.","example":["seg_1"],"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].segment_ref_ids","typeLabel":"string[]"},"seat_map":{"type":"object","properties":{"segment_ref_id":{"type":"string","example":"seg_1","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.segment_ref_id","typeLabel":"string"},"flight_number":{"type":"string","example":"W62202","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.flight_number","typeLabel":"string"},"seats":{"type":"array","items":{"type":"object","properties":{"seat_number":{"type":"string","example":"14A","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].seat_number","typeLabel":"string"},"available":{"type":"boolean","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].available","typeLabel":"boolean"},"chargeable":{"type":"boolean","description":"True when the seat has a price.","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].chargeable","typeLabel":"boolean"},"price":{"type":"object","description":"Deprecated: use `price_money` instead. The seat price in major units in the trip currency.","deprecated":true,"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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price","typeLabel":"object"},"price_money":{"type":"object","description":"The exact seat price in the trip currency. Absent for a free seat.","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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_money","typeLabel":"object"},"characteristics":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].characteristics.items.[INDEX]","typeLabel":"string"},"example":["WINDOW"],"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].characteristics","typeLabel":"string[]"}},"description":"A numbered seat. Read `price_money` for its exact price in the trip currency. Both price fields are absent for a free seat.","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats","typeLabel":"object[]"}},"description":"The numbered seats for the segment covered by a seat offer. Select a seat with `available` true; its `price_money`, when present, is exact money in the trip currency.","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map","typeLabel":"object"},"seat_map_status":{"type":"string","enum":["pending","ready"],"description":"Seat offers only: pending means the seat map is still loading and seat_map.seats is empty; read again. Ready means seats are listed.","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map_status","typeLabel":"enum\u003cstring>"},"per_pax":{"type":"boolean","description":"True when the price is charged per passenger rather than once per booking.","example":true,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].per_pax","typeLabel":"boolean"},"max_quantity":{"type":"integer","example":2,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].max_quantity","typeLabel":"integer"},"paid_at":{"type":"string","enum":["now","local"],"description":"Car rate extras only. `now`: charged by Jinko at checkout and inside the item price once selected. `local`: collected by the rental desk on pick-up — selectable, but never part of the charge. Absent for flight ancillaries, which are always charged by Jinko.","example":"now","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].paid_at","typeLabel":"enum\u003cstring>"}},"required":["offer_id"],"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX]","typeLabel":"object"},"description":"Ancillaries that can still be selected on this item. Empty once nothing is on offer; populated only after the item has been quoted.","uniqueKey":"\\items.items.[INDEX].available_ancillaries","typeLabel":"object[]"},"selected_ancillaries":{"type":"array","items":{"type":"object","properties":{"offer_id":{"type":"string","description":"Opaque identifier of this ancillary offer. Pass it back exactly as received in `selections[].offer_id`; do not parse or build it.","example":"anc_3f9a1c27e4b8d051","isRequired":true,"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].offer_id","typeLabel":"string"},"traveler_ref":{"type":"string","description":"The traveler the selection applies to; absent on a booking-level ancillary.","example":"pax_1","uniqueKey":"\\items.items.[INDEX].selected_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].pax_ref_id","typeLabel":"string"},"quantity":{"type":"integer","example":1,"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].quantity","typeLabel":"integer"},"type":{"type":"string","description":"Ancillary family on a booked outcome, e.g. \"seat\" or \"bag\" (lowercase, open set). May be absent before booking.","example":"seat","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].type","typeLabel":"string"},"seat_number":{"type":"string","example":"14A","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].seat_number","typeLabel":"string"},"segment_ref_ids":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].segment_ref_ids.items.[INDEX]","typeLabel":"string"},"example":["seg_1"],"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].segment_ref_ids","typeLabel":"string[]"},"price":{"type":"object","description":"Deprecated: use `price_money` instead. The unit price of the chosen seat, set by the server: major units in the trip currency. Absent for a free seat or a selection without its own unit price.","deprecated":true,"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":"\\items.items.[INDEX].selected_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].selected_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":"\\items.items.[INDEX].selected_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price","typeLabel":"object"},"price_money":{"type":"object","description":"The exact unit price of the chosen seat, set by the server. Absent for a free seat or a selection without its own unit price, e.g. a bag.","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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_money","typeLabel":"object"},"status":{"type":"string","enum":["pending","confirmed","failed"],"description":"Absent before booking. For seats, `pending` means the airline has not confirmed the seat yet. `confirmed` means booked with the airline. `failed` means not booked.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"not_charged":{"type":"boolean","description":"true when this seat is not charged to the traveler.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].not_charged","typeLabel":"boolean"},"failure_reason":{"type":"string","description":"Why an ancillary failed, or why a pending airline outcome needs reconciliation.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].failure_reason","typeLabel":"string"}},"required":["offer_id"],"description":"An ancillary selected on a trip item, as the trip read and the select_ancillaries response both return it. Provider data is never included.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX]","typeLabel":"object"},"description":"Ancillaries already selected on this item.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries","typeLabel":"object[]"},"price_changed":{"type":"boolean","description":"True when the provider re-priced this item between the search snapshot and the live quote. Checkout PROCEEDS at the new `price` — show the change before taking payment. Read `price_change` for the two figures and the signed difference. Absent when the price held.","example":true,"uniqueKey":"\\items.items.[INDEX].price_changed","typeLabel":"boolean"},"original_price":{"type":"object","description":"Deprecated: use `original_price_money` instead. The snapshot price recorded at search time, in major currency units.","deprecated":true,"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":"\\items.items.[INDEX].original_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":"\\items.items.[INDEX].original_price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].original_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":"\\items.items.[INDEX].original_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":"\\items.items.[INDEX].original_price.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].original_price","typeLabel":"object"},"original_price_money":{"type":"object","description":"The snapshot price recorded at search time. Present only when `price_changed` is true; compare it against `price_money` to show the caller what moved.","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":"\\items.items.[INDEX].original_price_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].original_price_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":"\\items.items.[INDEX].original_price_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":"\\items.items.[INDEX].original_price_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].original_price_money","typeLabel":"object"},"price_change":{"type":"object","properties":{"original":{"type":"object","description":"Deprecated: use `original_money` instead. The selling price shown at search time, before the quote, in MAJOR currency units.","deprecated":true,"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":"\\items.items.[INDEX].price_change.original.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":"\\items.items.[INDEX].price_change.original.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].price_change.original.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":"\\items.items.[INDEX].price_change.original.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":"\\items.items.[INDEX].price_change.original.display","typeLabel":"string"}},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.original","typeLabel":"object"},"current":{"type":"object","description":"Deprecated: use `current_money` instead. The selling price the trip is quoted at — the same figure as `price` — in MAJOR currency units.","deprecated":true,"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":"\\items.items.[INDEX].price_change.current.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":"\\items.items.[INDEX].price_change.current.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].price_change.current.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":"\\items.items.[INDEX].price_change.current.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":"\\items.items.[INDEX].price_change.current.display","typeLabel":"string"}},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.current","typeLabel":"object"},"delta":{"type":"object","description":"Deprecated: use `delta_money` instead. `current` minus `original`, SIGNED, in MAJOR currency units: positive when the price rose, negative when it fell.","deprecated":true,"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":"\\items.items.[INDEX].price_change.delta.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":"\\items.items.[INDEX].price_change.delta.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].price_change.delta.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":"\\items.items.[INDEX].price_change.delta.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":"\\items.items.[INDEX].price_change.delta.display","typeLabel":"string"}},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.delta","typeLabel":"object"},"original_money":{"type":"object","description":"The selling price shown at search time, before the quote.","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":"\\items.items.[INDEX].price_change.original_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.original_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":"\\items.items.[INDEX].price_change.original_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":"\\items.items.[INDEX].price_change.original_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price_change.original_money","typeLabel":"object"},"current_money":{"type":"object","description":"The selling price the trip is quoted at — the same figure as `price_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":"\\items.items.[INDEX].price_change.current_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.current_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":"\\items.items.[INDEX].price_change.current_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":"\\items.items.[INDEX].price_change.current_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price_change.current_money","typeLabel":"object"},"delta_money":{"type":"object","description":"`current_money` minus `original_money`, SIGNED: `value` is positive when the price rose, negative when it fell.","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":"\\items.items.[INDEX].price_change.delta_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.delta_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":"\\items.items.[INDEX].price_change.delta_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":"\\items.items.[INDEX].price_change.delta_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price_change.delta_money","typeLabel":"object"}},"required":["original","current","delta"],"description":"The move between the price shown at search time and the price the trip is quoted at, stated as three figures so the caller can report it without subtracting. Read `original_money`, `current_money` and `delta_money`; the deprecated `original`, `current` and `delta` carry the same figures in major currency units. All are in one currency, matching the item’s price. Present ONLY when the two differ — an item whose price held carries no `price_change` at all, and `price_changed` is true whenever it is present.","uniqueKey":"\\items.items.[INDEX].price_change","typeLabel":"object"},"required_attributes":{"type":"object","properties":{"source":{"type":"string","description":"Origin of the requirement. Known values: \"provider\" (carrier-stated, authoritative) and \"derived\" (inferred from the itinerary; advisory only, not a compliance statement). The value is passed through without additional validation, so new sources may appear.","example":"provider","uniqueKey":"\\items.items.[INDEX].required_attributes.source","typeLabel":"string"},"per_passenger":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].required_attributes.per_passenger.items.[INDEX]","typeLabel":"string"},"description":"Attribute names that must be collected for each passenger. Names are an open set in the provider’s own vocabulary.","example":["PassportNumber","PassportExpiryDate","DateOfBirth"],"uniqueKey":"\\items.items.[INDEX].required_attributes.per_passenger","typeLabel":"string[]"},"booking":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].required_attributes.booking.items.[INDEX]","typeLabel":"string"},"description":"Attribute names that must be collected once per booking.","example":["BillingAddress","PostCode"],"uniqueKey":"\\items.items.[INDEX].required_attributes.booking","typeLabel":"string[]"},"per_passenger_conditional":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].required_attributes.per_passenger_conditional.items.[INDEX]","typeLabel":"string"},"description":"Attribute names that may be required for each passenger depending on carrier, route, or passenger details. Collect them when in doubt.","example":["Nationality"],"uniqueKey":"\\items.items.[INDEX].required_attributes.per_passenger_conditional","typeLabel":"string[]"},"booking_conditional":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].required_attributes.booking_conditional.items.[INDEX]","typeLabel":"string"},"description":"Attribute names that may be required once per booking depending on carrier, route, or passenger details. Collect them when in doubt.","uniqueKey":"\\items.items.[INDEX].required_attributes.booking_conditional","typeLabel":"string[]"}},"description":"Extra attributes the carrier requires collected before booking this item — e.g. passport fields on carriers that mandate travel documents. Contents are passed through without additional validation. When this object is absent, no requirement is known; absence is NOT a statement that no document is needed.","uniqueKey":"\\items.items.[INDEX].required_attributes","typeLabel":"object"},"hotel_terms":{"type":"object","properties":{"terms_as_of":{"type":"string","enum":["search","quote"],"description":"How fresh these terms are. `search` — captured in the search snapshot the item was created from and held since. `quote` — re-read from the provider when the trip was quoted. Today the platform always answers `search`.","example":"search","uniqueKey":"\\items.items.[INDEX].hotel_terms.terms_as_of","typeLabel":"enum\u003cstring>"},"taxes_breakdown":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. The tax in MAJOR units of `currency`.","example":164.49,"deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. The currency of `amount`.","example":"EUR","deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].currency","typeLabel":"string"},"amount_money":{"type":"object","description":"The tax. When the supplier named no currency for the line, it is the currency the rate is priced in.","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":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].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":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].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":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].amount_money","typeLabel":"object"},"description":{"type":"string","description":"The provider’s own wording for the tax. Free text, not a code.","example":"19, VAT National taxes on accommodation","uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].description","typeLabel":"string"},"included":{"type":"boolean","description":"True when the amount is ALREADY inside `total_amount_money`; false when the guest pays it at the property on top. Getting this backwards misquotes the trip.","example":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].included","typeLabel":"boolean"},"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":"EUR 164.49","deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX]","typeLabel":"object"},"description":"Taxes and fees on the held rate. An empty array means no tax is known, not that there is none; check `included` per line before adding anything to the item price.","uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown","typeLabel":"object[]"},"cancellation_schedule":{"type":"array","items":{"type":"object","properties":{"cancel_time":{"type":"string","description":"Deadline after which this tier applies. RFC 3339 with the supplier’s declared UTC offset. Steps whose deadline has no declared timezone are omitted from the ladder — the platform never invents an offset — so a schedule can be shorter than the supplier’s own. Tiers are chronological, earliest first, so the first entry is the deadline that matters.","example":"2026-08-18T10:00:00+02:00","uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].cancel_time","typeLabel":"string"},"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. Read `amount_money`, `percent` or `nights`, whichever this step carries. What the guest is charged on or after `cancel_time`: a sum in MAJOR units of `currency`, a percentage or a number of nights, as `type` says.","example":606.13,"deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. The currency of `amount`.","example":"EUR","deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].currency","typeLabel":"string"},"type":{"type":"string","description":"How the charge is expressed — a sum (\"amount\", \"flat_fee\"; read `amount_money`), a percentage (\"percent\", \"percentage\"; read `percent`) or a number of nights (\"nights\"; read `nights`).","example":"amount","uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].type","typeLabel":"string"},"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":"EUR 606.13","deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].display","typeLabel":"string"},"amount_money":{"type":"object","description":"What the guest is charged on or after `cancel_time`, when this step is a sum. Absent on a percentage or nights step, and when the supplier named no currency.","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":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].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":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].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":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].amount_money","typeLabel":"object"},"percent":{"type":"number","description":"The charge as a percentage of the stay price, when this step is a percentage, on the 0–100 scale the supplier states it in: 50 is half the stay price, 100 the whole of it. Never a 0–1 fraction. Absent otherwise.","example":50,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].percent","typeLabel":"number"},"nights":{"type":"number","description":"The charge as a number of nights of the stay, when this step is expressed in nights. Absent otherwise.","example":1,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].nights","typeLabel":"number"}},"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX]","typeLabel":"object"},"description":"The penalty ladder for this rate, chronological. Absent when the provider published none — which is not a statement that cancelling is free.","uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule","typeLabel":"object[]"},"free_cancellation_until":{"type":"string","description":"Last instant the stay can be cancelled at no charge. RFC 3339 with the supplier’s declared UTC offset. Absent when the supplier declared no timezone — the platform never invents an offset, so a deadline it cannot place on the clock is withheld rather than published ambiguously — and absent when the rate is non-refundable or the provider named no deadline.","example":"2026-08-18T10:00:00+02:00","uniqueKey":"\\items.items.[INDEX].hotel_terms.free_cancellation_until","typeLabel":"string"},"is_refundable":{"type":"boolean","example":false,"uniqueKey":"\\items.items.[INDEX].hotel_terms.is_refundable","typeLabel":"boolean"},"board_type":{"type":"string","example":"RO","uniqueKey":"\\items.items.[INDEX].hotel_terms.board_type","typeLabel":"string"},"board_name":{"type":"string","example":"Room Only","uniqueKey":"\\items.items.[INDEX].hotel_terms.board_name","typeLabel":"string"},"payment_types":{"type":"array","items":{"type":"string","enum":["pay_now","pay_at_property","deposit"],"description":"How the rate can be settled. `pay_now` — paid when the booking is made. `pay_at_property` — paid to the hotel at the property. `deposit` — a deposit is taken.","uniqueKey":"\\items.items.[INDEX].hotel_terms.payment_types.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"How the rate can be settled. Each value appears at most once.","example":["pay_now"],"uniqueKey":"\\items.items.[INDEX].hotel_terms.payment_types","typeLabel":"enum\u003cstring>[]"},"room_name":{"type":"string","example":"Superior Double","uniqueKey":"\\items.items.[INDEX].hotel_terms.room_name","typeLabel":"string"},"room_capacity":{"type":"integer","example":2,"uniqueKey":"\\items.items.[INDEX].hotel_terms.room_capacity","typeLabel":"integer"}},"description":"The rate terms behind a hotel item — cancellation ladder, taxes, board and room — as the platform holds them. They were captured at SEARCH time and are not re-confirmed at quote: read `terms_as_of` before treating any of them as a guarantee of what the provider will charge at booking. Present on hotel items only.","uniqueKey":"\\items.items.[INDEX].hotel_terms","typeLabel":"object"}},"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items","typeLabel":"object[]"}},"required":["trip_id","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"trip_id":"\u003cstring>","status":"ready","quote_id":"2097152","quoted_cart_id":123,"expires_at":"\u003cstring>","retry_after_seconds":123,"items":[{"collector":"jinko","item_id":"itm_4b91c2","kind":"flight","offer_id":"htl_2d67a7441c60e5de","trip_item_token":"of_9c1d2e:FARE_ABC","hotel_id":"lp1f2c3","special_requests":["\u003cstring>"],"booking_scope":"room_bundle","num_rooms":1,"rooms":[{"occupancy_number":1,"occupancy":{"adults":2,"children_ages":[8]},"room_id":"\u003cstring>","mapped_room_id":123,"room_name":"Superior Double","rate_id":"\u003cstring>","board_type":"BB","board_name":"Breakfast Included","max_occupancy":123,"taxes_and_fees":[{"amount":164.49,"currency":"EUR","amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"description":"19, VAT National taxes on accommodation","included":true,"display":"EUR 164.49"}],"policies":[{"type":"\u003cstring>","description":"\u003cstring>","fee_amount":123,"fee_currency":"\u003cstring>","fee_amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"}}],"is_refundable":true,"cancellation_policy":[{"cancel_time":"2026-08-18T10:00:00+02:00","amount":606.13,"currency":"EUR","type":"amount","display":"EUR 606.13","amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"percent":50,"nights":1}],"free_cancellation_until":"\u003cstring>","payment_types":["pay_now"],"remarks":"\u003cstring>"}],"price":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"pax_count":1,"available_ancillaries":[{"offer_id":"anc_3f9a1c27e4b8d051","type":"bag","label":"bag\u00261 x large 55 x 40 x 20 cm\u0026Includes Speedy Boarding","display_label":"bag, 1 x large 55 x 40 x 20 cm, Includes Speedy Boarding","description":"\u003cstring>","price_per_unit":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_per_unit_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"scope":"PER_PAX_PER_SEGMENT","segment_ref_ids":["seg_1"],"seat_map":{"segment_ref_id":"seg_1","flight_number":"W62202","seats":[{"seat_number":"14A","available":true,"chargeable":true,"price":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"characteristics":["WINDOW"]}]},"seat_map_status":"pending","per_pax":true,"max_quantity":2,"paid_at":"now"}],"selected_ancillaries":[{"offer_id":"anc_3f9a1c27e4b8d051","traveler_ref":"pax_1","pax_ref_id":"pax_1","quantity":1,"type":"seat","seat_number":"14A","segment_ref_ids":["seg_1"],"price":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"status":"pending","not_charged":true,"failure_reason":"\u003cstring>"}],"price_changed":true,"original_price":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"original_price_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_change":{"original":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"current":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"delta":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"original_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"current_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"delta_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"}},"required_attributes":{"source":"provider","per_passenger":["PassportNumber","PassportExpiryDate","DateOfBirth"],"booking":["BillingAddress","PostCode"],"per_passenger_conditional":["Nationality"],"booking_conditional":["\u003cstring>"]},"hotel_terms":{"terms_as_of":"search","taxes_breakdown":[{"amount":164.49,"currency":"EUR","amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"description":"19, VAT National taxes on accommodation","included":true,"display":"EUR 164.49"}],"cancellation_schedule":[{"cancel_time":"2026-08-18T10:00:00+02:00","amount":606.13,"currency":"EUR","type":"amount","display":"EUR 606.13","amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"percent":50,"nights":1}],"free_cancellation_until":"2026-08-18T10:00:00+02:00","is_refundable":false,"board_type":"RO","board_name":"Room Only","payment_types":["pay_now"],"room_name":"Superior Double","room_capacity":2}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"c275d2e0-ae3d-43b4-8afa-580b7ecb12bd":{"description":"The quote is still being priced: `status: \"pricing\"`. Poll the same URL after Retry-After.","headers":{"Retry-After":{"schema":{"type":"string"},"description":"Polling delay supplied by the service."}},"content":{"application/json":{"schema":{"type":"object","properties":{"trip_id":{"type":"string","isRequired":true,"uniqueKey":"trip_id","typeLabel":"string"},"status":{"type":"string","example":"ready","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"quote_id":{"type":"string","example":"2097152","uniqueKey":"quote_id","typeLabel":"string"},"quoted_cart_id":{"type":"number","description":"Deprecated: use `quote_id` instead. The same quote as an integer.","deprecated":true,"uniqueKey":"quoted_cart_id","typeLabel":"number"},"expires_at":{"type":"string","uniqueKey":"expires_at","typeLabel":"string"},"retry_after_seconds":{"type":"integer","uniqueKey":"retry_after_seconds","typeLabel":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"collector":{"type":"string","enum":["jinko","supplier"],"description":"Who charges the card: Jinko (merchant of record) or the supplier (channel mode).","uniqueKey":"\\items.items.[INDEX].collector","typeLabel":"enum\u003cstring>"},"item_id":{"type":"string","example":"itm_4b91c2","uniqueKey":"\\items.items.[INDEX].item_id","typeLabel":"string"},"kind":{"type":"string","description":"What the item is: \"flight\", \"hotel\", \"car\" or \"ground\".","example":"flight","uniqueKey":"\\items.items.[INDEX].kind","typeLabel":"string"},"offer_id":{"type":"string","description":"Deprecated: use `trip_item_token` instead. The offer handle this item was created from, exactly as it was submitted to `trip(add_item)`. On a hotel item it is the `htl_…` rate token; on a flight item it is the `offer_id` of the search result the token came from. One caveat when reconciling: on a hotel whose occupancy the provider re-shopped, this stays the token you SUBMITTED even though the priced rate moved. A trip never holds two flights the same travellers cannot both take: adding a flight whose segments overlap a flight already in the trip, another fare of the same flights included, is refused with 409 naming the item already there.","example":"htl_2d67a7441c60e5de","deprecated":true,"uniqueKey":"\\items.items.[INDEX].offer_id","typeLabel":"string"},"trip_item_token":{"type":"string","description":"The handle `trip(add_item)` took, echoed verbatim. On a hotel or car item it is the offer’s `trip_item_token` from the search. On a flight item it is the itinerary id and the fare joined by a colon, absent when the fare half was never resolved (a caller-supplied snapshot skips the resolver); read that absence as \"the platform cannot name the fare\", never as a different fare.","example":"of_9c1d2e:FARE_ABC","uniqueKey":"\\items.items.[INDEX].trip_item_token","typeLabel":"string"},"hotel_id":{"type":"string","description":"The property this hotel item books — the same id `hotel_search` publishes, so an item joins straight back to the search result it came from. Hotel items only.","example":"lp1f2c3","uniqueKey":"\\items.items.[INDEX].hotel_id","typeLabel":"string"},"special_requests":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].special_requests.items.[INDEX]","typeLabel":"string"},"description":"The special requests submitted with `trip(add_item)` for this hotel item, as stored — trimmed, blank entries dropped — and forwarded to the hotel supplier at booking. Requests only — the hotel may not honour them, and a confirmed booking does not imply it will. Hotel items only; absent when none were given (JIN-2499).","uniqueKey":"\\items.items.[INDEX].special_requests","typeLabel":"string[]"},"booking_scope":{"type":"string","description":"`room_bundle` means the submitted hotel offer token covers every room in `rooms`. Absent on every other hotel item, a single room included: read `rooms` for the rooms an item covers, and `booking_scope` only to learn whether one token books them all.","example":"room_bundle","uniqueKey":"\\items.items.[INDEX].booking_scope","typeLabel":"string"},"num_rooms":{"type":"integer","minimum":1,"description":"Number of rooms this hotel item covers: 1 for a single room, the bundle size for a room bundle. Hotel items only; absent when the platform cannot state the party the item was priced for.","example":1,"uniqueKey":"\\items.items.[INDEX].num_rooms","typeLabel":"integer"},"rooms":{"type":"array","items":{"type":"object","properties":{"occupancy_number":{"type":"integer","minimum":1,"description":"Stable one-based room slot within this bundle.","example":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy_number","typeLabel":"integer"},"occupancy":{"type":"object","properties":{"adults":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy.adults","typeLabel":"integer"},"children_ages":{"type":"array","items":{"type":"integer","minimum":0,"maximum":17,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy.children_ages.items.[INDEX]","typeLabel":"integer"},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy.children_ages","typeLabel":"integer[]"}},"required":["adults"],"description":"The party one room is requested or priced for: the number of adults and the age of each child.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].occupancy","typeLabel":"object"},"room_id":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].room_id","typeLabel":"string"},"mapped_room_id":{"type":"integer","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].mapped_room_id","typeLabel":"integer"},"room_name":{"type":"string","example":"Superior Double","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].room_name","typeLabel":"string"},"rate_id":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].rate_id","typeLabel":"string"},"board_type":{"type":"string","example":"BB","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].board_type","typeLabel":"string"},"board_name":{"type":"string","example":"Breakfast Included","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].board_name","typeLabel":"string"},"max_occupancy":{"type":"integer","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].max_occupancy","typeLabel":"integer"},"taxes_and_fees":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. The tax in MAJOR units of `currency`.","example":164.49,"deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. The currency of `amount`.","example":"EUR","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].currency","typeLabel":"string"},"amount_money":{"type":"object","description":"The tax. When the supplier named no currency for the line, it is the currency the rate is priced in.","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":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].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":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].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":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount_money","typeLabel":"object"},"description":{"type":"string","description":"The provider’s own wording for the tax. Free text, not a code.","example":"19, VAT National taxes on accommodation","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].description","typeLabel":"string"},"included":{"type":"boolean","description":"True when the amount is ALREADY inside `total_amount_money`; false when the guest pays it at the property on top. Getting this backwards misquotes the trip.","example":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].included","typeLabel":"boolean"},"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":"EUR 164.49","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].taxes_and_fees","typeLabel":"object[]"},"policies":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].type","typeLabel":"string"},"description":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].description","typeLabel":"string"},"fee_amount":{"type":"number","description":"Deprecated: use `fee_amount_money` instead. Customer policy fee in MAJOR units of `fee_currency`.","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount","typeLabel":"number"},"fee_currency":{"type":"string","description":"Deprecated: use `fee_amount_money` instead. The currency of `fee_amount`.","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_currency","typeLabel":"string"},"fee_amount_money":{"type":"object","description":"Customer cancellation or policy fee, with exact minor units and currency precision.","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":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_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":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_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":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount_money","typeLabel":"object"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].policies","typeLabel":"object[]"},"is_refundable":{"type":"boolean","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].is_refundable","typeLabel":"boolean"},"cancellation_policy":{"type":"array","items":{"type":"object","properties":{"cancel_time":{"type":"string","description":"Deadline after which this tier applies. RFC 3339 with the supplier’s declared UTC offset. Steps whose deadline has no declared timezone are omitted from the ladder — the platform never invents an offset — so a schedule can be shorter than the supplier’s own. Tiers are chronological, earliest first, so the first entry is the deadline that matters.","example":"2026-08-18T10:00:00+02:00","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].cancel_time","typeLabel":"string"},"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. Read `amount_money`, `percent` or `nights`, whichever this step carries. What the guest is charged on or after `cancel_time`: a sum in MAJOR units of `currency`, a percentage or a number of nights, as `type` says.","example":606.13,"deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. The currency of `amount`.","example":"EUR","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].currency","typeLabel":"string"},"type":{"type":"string","description":"How the charge is expressed — a sum (\"amount\", \"flat_fee\"; read `amount_money`), a percentage (\"percent\", \"percentage\"; read `percent`) or a number of nights (\"nights\"; read `nights`).","example":"amount","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].type","typeLabel":"string"},"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":"EUR 606.13","deprecated":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].display","typeLabel":"string"},"amount_money":{"type":"object","description":"What the guest is charged on or after `cancel_time`, when this step is a sum. Absent on a percentage or nights step, and when the supplier named no currency.","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":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].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":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].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":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount_money","typeLabel":"object"},"percent":{"type":"number","description":"The charge as a percentage of the stay price, when this step is a percentage, on the 0–100 scale the supplier states it in: 50 is half the stay price, 100 the whole of it. Never a 0–1 fraction. Absent otherwise.","example":50,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].percent","typeLabel":"number"},"nights":{"type":"number","description":"The charge as a number of nights of the stay, when this step is expressed in nights. Absent otherwise.","example":1,"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].nights","typeLabel":"number"}},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].cancellation_policy","typeLabel":"object[]"},"free_cancellation_until":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].free_cancellation_until","typeLabel":"string"},"payment_types":{"type":"array","items":{"type":"string","enum":["pay_now","pay_at_property","deposit"],"description":"How the rate can be settled. `pay_now` — paid when the booking is made. `pay_at_property` — paid to the hotel at the property. `deposit` — a deposit is taken.","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].payment_types.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"How the rate can be settled. Each value appears at most once.","example":["pay_now"],"uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].payment_types","typeLabel":"enum\u003cstring>[]"},"remarks":{"type":"string","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX].remarks","typeLabel":"string"}},"required":["occupancy_number","occupancy"],"description":"One room of a hotel item — the single room a one-room item books, or one slot of a room-bundle rate — with the party it was priced for (`occupancy`) and its display and policy details. The containing item owns the customer-facing total; supplier net, suggested retail, commission and room-local supplier price figures are intentionally not part of this public shape.","uniqueKey":"\\items.items.[INDEX].rooms.items.[INDEX]","typeLabel":"object"},"description":"One entry per room this hotel item covers, single room or bundle (JIN-2565). Each entry states in `occupancy` the party that room was priced for — adults and children’s ages — so a checkout page can show the guest who the rate is for before payment, and a wrong child age, which changes the price and the room, is caught before the money moves. On a single room the entry’s room, board, refundability and tax lines are the item’s own, the same figures `hotel_terms` states; on a room bundle each entry carries that room’s details from the supplier. The item price remains the authoritative customer total for every room together. Absent when the platform holds no party for the item.","uniqueKey":"\\items.items.[INDEX].rooms","typeLabel":"object[]"},"price":{"type":"object","description":"Deprecated: use `price_money` instead. Item total in major currency units. Absent until the trip has been quoted.","deprecated":true,"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":"\\items.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":"\\items.items.[INDEX].price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.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":"\\items.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":"\\items.items.[INDEX].price.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price","typeLabel":"object"},"price_money":{"type":"object","description":"Item total. Absent until the trip has been quoted — an unpriced item carries no `price_money` key at all, so absence means \"not priced yet\", not \"free\".","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":"\\items.items.[INDEX].price_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_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":"\\items.items.[INDEX].price_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":"\\items.items.[INDEX].price_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price_money","typeLabel":"object"},"pax_count":{"type":"number","example":1,"uniqueKey":"\\items.items.[INDEX].pax_count","typeLabel":"number"},"available_ancillaries":{"type":"array","items":{"type":"object","properties":{"offer_id":{"type":"string","description":"Opaque identifier of this ancillary offer. Pass it back exactly as received in `selections[].offer_id`; do not parse or build it.","example":"anc_3f9a1c27e4b8d051","isRequired":true,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].offer_id","typeLabel":"string"},"type":{"type":"string","description":"Ancillary family — \"bag\", \"seat\", \"meal\", \"assistance\", … An open set. Offers with type \"seat\" carry `seat_map` and no `price_per_unit`: the price is per seat, in `seat_map.seats[].price_money`.","example":"bag","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].type","typeLabel":"string"},"label":{"type":"string","description":"The provider label verbatim, kept as the source of truth. Some labels arrive with HTML entities and \"\u0026\" component-joiners — show `display_label` instead.","example":"bag\u00261 x large 55 x 40 x 20 cm\u0026Includes Speedy Boarding","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].label","typeLabel":"string"},"display_label":{"type":"string","description":"Human-readable rendering of `label`: HTML entities decoded, \"\u0026\" joiners normalised to \", \". This is the one to display.","example":"bag, 1 x large 55 x 40 x 20 cm, Includes Speedy Boarding","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].display_label","typeLabel":"string"},"description":{"type":"string","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].description","typeLabel":"string"},"price_per_unit":{"type":"object","description":"Deprecated: use `price_per_unit_money` instead. The unit price in MAJOR currency units.","deprecated":true,"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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit","typeLabel":"object"},"price_per_unit_money":{"type":"object","description":"The price of one unit of this ancillary. Absent when the offer carries no price, and on seat offers, which price each seat in the seat map.","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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].price_per_unit_money","typeLabel":"object"},"scope":{"type":"string","description":"Seat offers only: one seat per passenger per segment.","example":"PER_PAX_PER_SEGMENT","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].scope","typeLabel":"string"},"segment_ref_ids":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].segment_ref_ids.items.[INDEX]","typeLabel":"string"},"description":"The segment(s) a seat offer covers, one per offer. Pass the one entry back as the selection's `segment_ref_ids`.","example":["seg_1"],"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].segment_ref_ids","typeLabel":"string[]"},"seat_map":{"type":"object","properties":{"segment_ref_id":{"type":"string","example":"seg_1","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.segment_ref_id","typeLabel":"string"},"flight_number":{"type":"string","example":"W62202","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.flight_number","typeLabel":"string"},"seats":{"type":"array","items":{"type":"object","properties":{"seat_number":{"type":"string","example":"14A","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].seat_number","typeLabel":"string"},"available":{"type":"boolean","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].available","typeLabel":"boolean"},"chargeable":{"type":"boolean","description":"True when the seat has a price.","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].chargeable","typeLabel":"boolean"},"price":{"type":"object","description":"Deprecated: use `price_money` instead. The seat price in major units in the trip currency.","deprecated":true,"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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price","typeLabel":"object"},"price_money":{"type":"object","description":"The exact seat price in the trip currency. Absent for a free seat.","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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_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":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].price_money","typeLabel":"object"},"characteristics":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].characteristics.items.[INDEX]","typeLabel":"string"},"example":["WINDOW"],"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX].characteristics","typeLabel":"string[]"}},"description":"A numbered seat. Read `price_money` for its exact price in the trip currency. Both price fields are absent for a free seat.","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map.seats","typeLabel":"object[]"}},"description":"The numbered seats for the segment covered by a seat offer. Select a seat with `available` true; its `price_money`, when present, is exact money in the trip currency.","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map","typeLabel":"object"},"seat_map_status":{"type":"string","enum":["pending","ready"],"description":"Seat offers only: pending means the seat map is still loading and seat_map.seats is empty; read again. Ready means seats are listed.","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].seat_map_status","typeLabel":"enum\u003cstring>"},"per_pax":{"type":"boolean","description":"True when the price is charged per passenger rather than once per booking.","example":true,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].per_pax","typeLabel":"boolean"},"max_quantity":{"type":"integer","example":2,"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].max_quantity","typeLabel":"integer"},"paid_at":{"type":"string","enum":["now","local"],"description":"Car rate extras only. `now`: charged by Jinko at checkout and inside the item price once selected. `local`: collected by the rental desk on pick-up — selectable, but never part of the charge. Absent for flight ancillaries, which are always charged by Jinko.","example":"now","uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX].paid_at","typeLabel":"enum\u003cstring>"}},"required":["offer_id"],"uniqueKey":"\\items.items.[INDEX].available_ancillaries.items.[INDEX]","typeLabel":"object"},"description":"Ancillaries that can still be selected on this item. Empty once nothing is on offer; populated only after the item has been quoted.","uniqueKey":"\\items.items.[INDEX].available_ancillaries","typeLabel":"object[]"},"selected_ancillaries":{"type":"array","items":{"type":"object","properties":{"offer_id":{"type":"string","description":"Opaque identifier of this ancillary offer. Pass it back exactly as received in `selections[].offer_id`; do not parse or build it.","example":"anc_3f9a1c27e4b8d051","isRequired":true,"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].offer_id","typeLabel":"string"},"traveler_ref":{"type":"string","description":"The traveler the selection applies to; absent on a booking-level ancillary.","example":"pax_1","uniqueKey":"\\items.items.[INDEX].selected_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].pax_ref_id","typeLabel":"string"},"quantity":{"type":"integer","example":1,"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].quantity","typeLabel":"integer"},"type":{"type":"string","description":"Ancillary family on a booked outcome, e.g. \"seat\" or \"bag\" (lowercase, open set). May be absent before booking.","example":"seat","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].type","typeLabel":"string"},"seat_number":{"type":"string","example":"14A","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].seat_number","typeLabel":"string"},"segment_ref_ids":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].segment_ref_ids.items.[INDEX]","typeLabel":"string"},"example":["seg_1"],"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].segment_ref_ids","typeLabel":"string[]"},"price":{"type":"object","description":"Deprecated: use `price_money` instead. The unit price of the chosen seat, set by the server: major units in the trip currency. Absent for a free seat or a selection without its own unit price.","deprecated":true,"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":"\\items.items.[INDEX].selected_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].selected_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":"\\items.items.[INDEX].selected_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price","typeLabel":"object"},"price_money":{"type":"object","description":"The exact unit price of the chosen seat, set by the server. Absent for a free seat or a selection without its own unit price, e.g. a bag.","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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_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":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].price_money","typeLabel":"object"},"status":{"type":"string","enum":["pending","confirmed","failed"],"description":"Absent before booking. For seats, `pending` means the airline has not confirmed the seat yet. `confirmed` means booked with the airline. `failed` means not booked.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"not_charged":{"type":"boolean","description":"true when this seat is not charged to the traveler.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].not_charged","typeLabel":"boolean"},"failure_reason":{"type":"string","description":"Why an ancillary failed, or why a pending airline outcome needs reconciliation.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX].failure_reason","typeLabel":"string"}},"required":["offer_id"],"description":"An ancillary selected on a trip item, as the trip read and the select_ancillaries response both return it. Provider data is never included.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries.items.[INDEX]","typeLabel":"object"},"description":"Ancillaries already selected on this item.","uniqueKey":"\\items.items.[INDEX].selected_ancillaries","typeLabel":"object[]"},"price_changed":{"type":"boolean","description":"True when the provider re-priced this item between the search snapshot and the live quote. Checkout PROCEEDS at the new `price` — show the change before taking payment. Read `price_change` for the two figures and the signed difference. Absent when the price held.","example":true,"uniqueKey":"\\items.items.[INDEX].price_changed","typeLabel":"boolean"},"original_price":{"type":"object","description":"Deprecated: use `original_price_money` instead. The snapshot price recorded at search time, in major currency units.","deprecated":true,"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":"\\items.items.[INDEX].original_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":"\\items.items.[INDEX].original_price.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].original_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":"\\items.items.[INDEX].original_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":"\\items.items.[INDEX].original_price.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].original_price","typeLabel":"object"},"original_price_money":{"type":"object","description":"The snapshot price recorded at search time. Present only when `price_changed` is true; compare it against `price_money` to show the caller what moved.","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":"\\items.items.[INDEX].original_price_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].original_price_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":"\\items.items.[INDEX].original_price_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":"\\items.items.[INDEX].original_price_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].original_price_money","typeLabel":"object"},"price_change":{"type":"object","properties":{"original":{"type":"object","description":"Deprecated: use `original_money` instead. The selling price shown at search time, before the quote, in MAJOR currency units.","deprecated":true,"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":"\\items.items.[INDEX].price_change.original.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":"\\items.items.[INDEX].price_change.original.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].price_change.original.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":"\\items.items.[INDEX].price_change.original.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":"\\items.items.[INDEX].price_change.original.display","typeLabel":"string"}},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.original","typeLabel":"object"},"current":{"type":"object","description":"Deprecated: use `current_money` instead. The selling price the trip is quoted at — the same figure as `price` — in MAJOR currency units.","deprecated":true,"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":"\\items.items.[INDEX].price_change.current.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":"\\items.items.[INDEX].price_change.current.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].price_change.current.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":"\\items.items.[INDEX].price_change.current.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":"\\items.items.[INDEX].price_change.current.display","typeLabel":"string"}},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.current","typeLabel":"object"},"delta":{"type":"object","description":"Deprecated: use `delta_money` instead. `current` minus `original`, SIGNED, in MAJOR currency units: positive when the price rose, negative when it fell.","deprecated":true,"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":"\\items.items.[INDEX].price_change.delta.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":"\\items.items.[INDEX].price_change.delta.value","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","example":"USD","uniqueKey":"\\items.items.[INDEX].price_change.delta.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":"\\items.items.[INDEX].price_change.delta.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":"\\items.items.[INDEX].price_change.delta.display","typeLabel":"string"}},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.delta","typeLabel":"object"},"original_money":{"type":"object","description":"The selling price shown at search time, before the quote.","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":"\\items.items.[INDEX].price_change.original_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.original_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":"\\items.items.[INDEX].price_change.original_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":"\\items.items.[INDEX].price_change.original_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price_change.original_money","typeLabel":"object"},"current_money":{"type":"object","description":"The selling price the trip is quoted at — the same figure as `price_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":"\\items.items.[INDEX].price_change.current_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.current_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":"\\items.items.[INDEX].price_change.current_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":"\\items.items.[INDEX].price_change.current_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price_change.current_money","typeLabel":"object"},"delta_money":{"type":"object","description":"`current_money` minus `original_money`, SIGNED: `value` is positive when the price rose, negative when it fell.","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":"\\items.items.[INDEX].price_change.delta_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].price_change.delta_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":"\\items.items.[INDEX].price_change.delta_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":"\\items.items.[INDEX].price_change.delta_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].price_change.delta_money","typeLabel":"object"}},"required":["original","current","delta"],"description":"The move between the price shown at search time and the price the trip is quoted at, stated as three figures so the caller can report it without subtracting. Read `original_money`, `current_money` and `delta_money`; the deprecated `original`, `current` and `delta` carry the same figures in major currency units. All are in one currency, matching the item’s price. Present ONLY when the two differ — an item whose price held carries no `price_change` at all, and `price_changed` is true whenever it is present.","uniqueKey":"\\items.items.[INDEX].price_change","typeLabel":"object"},"required_attributes":{"type":"object","properties":{"source":{"type":"string","description":"Origin of the requirement. Known values: \"provider\" (carrier-stated, authoritative) and \"derived\" (inferred from the itinerary; advisory only, not a compliance statement). The value is passed through without additional validation, so new sources may appear.","example":"provider","uniqueKey":"\\items.items.[INDEX].required_attributes.source","typeLabel":"string"},"per_passenger":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].required_attributes.per_passenger.items.[INDEX]","typeLabel":"string"},"description":"Attribute names that must be collected for each passenger. Names are an open set in the provider’s own vocabulary.","example":["PassportNumber","PassportExpiryDate","DateOfBirth"],"uniqueKey":"\\items.items.[INDEX].required_attributes.per_passenger","typeLabel":"string[]"},"booking":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].required_attributes.booking.items.[INDEX]","typeLabel":"string"},"description":"Attribute names that must be collected once per booking.","example":["BillingAddress","PostCode"],"uniqueKey":"\\items.items.[INDEX].required_attributes.booking","typeLabel":"string[]"},"per_passenger_conditional":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].required_attributes.per_passenger_conditional.items.[INDEX]","typeLabel":"string"},"description":"Attribute names that may be required for each passenger depending on carrier, route, or passenger details. Collect them when in doubt.","example":["Nationality"],"uniqueKey":"\\items.items.[INDEX].required_attributes.per_passenger_conditional","typeLabel":"string[]"},"booking_conditional":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].required_attributes.booking_conditional.items.[INDEX]","typeLabel":"string"},"description":"Attribute names that may be required once per booking depending on carrier, route, or passenger details. Collect them when in doubt.","uniqueKey":"\\items.items.[INDEX].required_attributes.booking_conditional","typeLabel":"string[]"}},"description":"Extra attributes the carrier requires collected before booking this item — e.g. passport fields on carriers that mandate travel documents. Contents are passed through without additional validation. When this object is absent, no requirement is known; absence is NOT a statement that no document is needed.","uniqueKey":"\\items.items.[INDEX].required_attributes","typeLabel":"object"},"hotel_terms":{"type":"object","properties":{"terms_as_of":{"type":"string","enum":["search","quote"],"description":"How fresh these terms are. `search` — captured in the search snapshot the item was created from and held since. `quote` — re-read from the provider when the trip was quoted. Today the platform always answers `search`.","example":"search","uniqueKey":"\\items.items.[INDEX].hotel_terms.terms_as_of","typeLabel":"enum\u003cstring>"},"taxes_breakdown":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. The tax in MAJOR units of `currency`.","example":164.49,"deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. The currency of `amount`.","example":"EUR","deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].currency","typeLabel":"string"},"amount_money":{"type":"object","description":"The tax. When the supplier named no currency for the line, it is the currency the rate is priced in.","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":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].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":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].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":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].amount_money","typeLabel":"object"},"description":{"type":"string","description":"The provider’s own wording for the tax. Free text, not a code.","example":"19, VAT National taxes on accommodation","uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].description","typeLabel":"string"},"included":{"type":"boolean","description":"True when the amount is ALREADY inside `total_amount_money`; false when the guest pays it at the property on top. Getting this backwards misquotes the trip.","example":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].included","typeLabel":"boolean"},"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":"EUR 164.49","deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX].display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown.items.[INDEX]","typeLabel":"object"},"description":"Taxes and fees on the held rate. An empty array means no tax is known, not that there is none; check `included` per line before adding anything to the item price.","uniqueKey":"\\items.items.[INDEX].hotel_terms.taxes_breakdown","typeLabel":"object[]"},"cancellation_schedule":{"type":"array","items":{"type":"object","properties":{"cancel_time":{"type":"string","description":"Deadline after which this tier applies. RFC 3339 with the supplier’s declared UTC offset. Steps whose deadline has no declared timezone are omitted from the ladder — the platform never invents an offset — so a schedule can be shorter than the supplier’s own. Tiers are chronological, earliest first, so the first entry is the deadline that matters.","example":"2026-08-18T10:00:00+02:00","uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].cancel_time","typeLabel":"string"},"amount":{"type":"number","description":"Deprecated: use `amount_money` instead. Read `amount_money`, `percent` or `nights`, whichever this step carries. What the guest is charged on or after `cancel_time`: a sum in MAJOR units of `currency`, a percentage or a number of nights, as `type` says.","example":606.13,"deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `amount_money` instead. The currency of `amount`.","example":"EUR","deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].currency","typeLabel":"string"},"type":{"type":"string","description":"How the charge is expressed — a sum (\"amount\", \"flat_fee\"; read `amount_money`), a percentage (\"percent\", \"percentage\"; read `percent`) or a number of nights (\"nights\"; read `nights`).","example":"amount","uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].type","typeLabel":"string"},"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":"EUR 606.13","deprecated":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].display","typeLabel":"string"},"amount_money":{"type":"object","description":"What the guest is charged on or after `cancel_time`, when this step is a sum. Absent on a percentage or nights step, and when the supplier named no currency.","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":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].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":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].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":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].amount_money","typeLabel":"object"},"percent":{"type":"number","description":"The charge as a percentage of the stay price, when this step is a percentage, on the 0–100 scale the supplier states it in: 50 is half the stay price, 100 the whole of it. Never a 0–1 fraction. Absent otherwise.","example":50,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].percent","typeLabel":"number"},"nights":{"type":"number","description":"The charge as a number of nights of the stay, when this step is expressed in nights. Absent otherwise.","example":1,"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX].nights","typeLabel":"number"}},"uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule.items.[INDEX]","typeLabel":"object"},"description":"The penalty ladder for this rate, chronological. Absent when the provider published none — which is not a statement that cancelling is free.","uniqueKey":"\\items.items.[INDEX].hotel_terms.cancellation_schedule","typeLabel":"object[]"},"free_cancellation_until":{"type":"string","description":"Last instant the stay can be cancelled at no charge. RFC 3339 with the supplier’s declared UTC offset. Absent when the supplier declared no timezone — the platform never invents an offset, so a deadline it cannot place on the clock is withheld rather than published ambiguously — and absent when the rate is non-refundable or the provider named no deadline.","example":"2026-08-18T10:00:00+02:00","uniqueKey":"\\items.items.[INDEX].hotel_terms.free_cancellation_until","typeLabel":"string"},"is_refundable":{"type":"boolean","example":false,"uniqueKey":"\\items.items.[INDEX].hotel_terms.is_refundable","typeLabel":"boolean"},"board_type":{"type":"string","example":"RO","uniqueKey":"\\items.items.[INDEX].hotel_terms.board_type","typeLabel":"string"},"board_name":{"type":"string","example":"Room Only","uniqueKey":"\\items.items.[INDEX].hotel_terms.board_name","typeLabel":"string"},"payment_types":{"type":"array","items":{"type":"string","enum":["pay_now","pay_at_property","deposit"],"description":"How the rate can be settled. `pay_now` — paid when the booking is made. `pay_at_property` — paid to the hotel at the property. `deposit` — a deposit is taken.","uniqueKey":"\\items.items.[INDEX].hotel_terms.payment_types.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"How the rate can be settled. Each value appears at most once.","example":["pay_now"],"uniqueKey":"\\items.items.[INDEX].hotel_terms.payment_types","typeLabel":"enum\u003cstring>[]"},"room_name":{"type":"string","example":"Superior Double","uniqueKey":"\\items.items.[INDEX].hotel_terms.room_name","typeLabel":"string"},"room_capacity":{"type":"integer","example":2,"uniqueKey":"\\items.items.[INDEX].hotel_terms.room_capacity","typeLabel":"integer"}},"description":"The rate terms behind a hotel item — cancellation ladder, taxes, board and room — as the platform holds them. They were captured at SEARCH time and are not re-confirmed at quote: read `terms_as_of` before treating any of them as a guarantee of what the provider will charge at booking. Present on hotel items only.","uniqueKey":"\\items.items.[INDEX].hotel_terms","typeLabel":"object"}},"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items","typeLabel":"object[]"}},"required":["trip_id","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"trip_id":"\u003cstring>","status":"ready","quote_id":"2097152","quoted_cart_id":123,"expires_at":"\u003cstring>","retry_after_seconds":123,"items":[{"collector":"jinko","item_id":"itm_4b91c2","kind":"flight","offer_id":"htl_2d67a7441c60e5de","trip_item_token":"of_9c1d2e:FARE_ABC","hotel_id":"lp1f2c3","special_requests":["\u003cstring>"],"booking_scope":"room_bundle","num_rooms":1,"rooms":[{"occupancy_number":1,"occupancy":{"adults":2,"children_ages":[8]},"room_id":"\u003cstring>","mapped_room_id":123,"room_name":"Superior Double","rate_id":"\u003cstring>","board_type":"BB","board_name":"Breakfast Included","max_occupancy":123,"taxes_and_fees":[{"amount":164.49,"currency":"EUR","amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"description":"19, VAT National taxes on accommodation","included":true,"display":"EUR 164.49"}],"policies":[{"type":"\u003cstring>","description":"\u003cstring>","fee_amount":123,"fee_currency":"\u003cstring>","fee_amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"}}],"is_refundable":true,"cancellation_policy":[{"cancel_time":"2026-08-18T10:00:00+02:00","amount":606.13,"currency":"EUR","type":"amount","display":"EUR 606.13","amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"percent":50,"nights":1}],"free_cancellation_until":"\u003cstring>","payment_types":["pay_now"],"remarks":"\u003cstring>"}],"price":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"pax_count":1,"available_ancillaries":[{"offer_id":"anc_3f9a1c27e4b8d051","type":"bag","label":"bag\u00261 x large 55 x 40 x 20 cm\u0026Includes Speedy Boarding","display_label":"bag, 1 x large 55 x 40 x 20 cm, Includes Speedy Boarding","description":"\u003cstring>","price_per_unit":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_per_unit_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"scope":"PER_PAX_PER_SEGMENT","segment_ref_ids":["seg_1"],"seat_map":{"segment_ref_id":"seg_1","flight_number":"W62202","seats":[{"seat_number":"14A","available":true,"chargeable":true,"price":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"characteristics":["WINDOW"]}]},"seat_map_status":"pending","per_pax":true,"max_quantity":2,"paid_at":"now"}],"selected_ancillaries":[{"offer_id":"anc_3f9a1c27e4b8d051","traveler_ref":"pax_1","pax_ref_id":"pax_1","quantity":1,"type":"seat","seat_number":"14A","segment_ref_ids":["seg_1"],"price":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"status":"pending","not_charged":true,"failure_reason":"\u003cstring>"}],"price_changed":true,"original_price":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"original_price_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"price_change":{"original":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"current":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"delta":{"amount":123,"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"original_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"current_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"delta_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"}},"required_attributes":{"source":"provider","per_passenger":["PassportNumber","PassportExpiryDate","DateOfBirth"],"booking":["BillingAddress","PostCode"],"per_passenger_conditional":["Nationality"],"booking_conditional":["\u003cstring>"]},"hotel_terms":{"terms_as_of":"search","taxes_breakdown":[{"amount":164.49,"currency":"EUR","amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"description":"19, VAT National taxes on accommodation","included":true,"display":"EUR 164.49"}],"cancellation_schedule":[{"cancel_time":"2026-08-18T10:00:00+02:00","amount":606.13,"currency":"EUR","type":"amount","display":"EUR 606.13","amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"percent":50,"nights":1}],"free_cancellation_until":"2026-08-18T10:00:00+02:00","is_refundable":false,"board_type":"RO","board_name":"Room Only","payment_types":["pay_now"],"room_name":"Superior Double","room_capacity":2}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"1db848e6-4f06-4766-80f0-b98b2e2f5f98":{"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"},"67d00c8e-a19b-48c8-b37b-e60014822e50":{"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"},"29c4fd11-1aa8-4496-9860-f4239600404a":{"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"},"6158fc95-dcee-4c5d-ba01-93e47280b0e1":{"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"},"a600d2bf-b156-48ed-a796-b223c73795d4":{"description":"The operation conflicts with the current state of the resource","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":"CONFLICT","message":"The operation conflicts with the current state of the resource.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"CONFLICT","message":"The operation conflicts with the current state of the resource.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"10733b9e-7983-4e85-bb3e-2f66c603fe76":{"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"},"03856eb7-3cb0-46fd-acf3-0961cb67e647":{"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"},"39b4f183-c80a-4a80-81d6-363ae4aad517":{"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"},"8a11880a-c74a-499c-b21e-333a22c90ff2":{"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"},"7d763a94-8627-4006-9065-c36dc19709fd":{"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"},"dc75f4cc-5862-4d2c-89c6-05c69c72b31a":{"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":{"95ca532c-14d8-453e-922d-bdb37cbdbb69":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"ApiKeyAuth"}},"a861d4eb-41b1-40e4-86d0-79d455a38b98":{"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":"trip ancillaries - Jinko Platform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-26T23:28:03.496Z","originalFileLocation":"api/trip/ancillaries.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=\"List purchasable ancillaries for a trip (no checkout)\">\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=\"trip ancillaries - Jinko Platform\">\u003cmeta data-mint-head property=\"og:description\" content=\"List purchasable ancillaries for a trip (no checkout)\">\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/trip/ancillaries\">\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=Ancillaries\u0026amp;title=trip+ancillaries\u0026amp;description=List+purchasable+ancillaries+for+a+trip+%28no+checkout%29\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=d6cecd36dc4dfad3fa362ae45cb085f6b9b0f2fd9fa8f14010b112dfc722d4e9\">\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=\"trip ancillaries - Jinko Platform\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"List purchasable ancillaries for a trip (no checkout)\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jinko-dev.mintlify.site/_mintlify/api/og/v2?division=Ancillaries\u0026amp;title=trip+ancillaries\u0026amp;description=List+purchasable+ancillaries+for+a+trip+%28no+checkout%29\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=d6cecd36dc4dfad3fa362ae45cb085f6b9b0f2fd9fa8f14010b112dfc722d4e9\">\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/trip/ancillaries\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/trip/ancillaries.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/trip/ancillaries#webpage\",\"url\":\"https://docs.dev.gojinko.com/api/trip/ancillaries\",\"name\":\"trip ancillaries\",\"description\":\"List purchasable ancillaries for a trip (no checkout)\",\"dateModified\":\"2026-09-26T23:28:03.496Z\",\"isPartOf\":{\"@id\":\"https://docs.dev.gojinko.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dev.gojinko.com/api/trip/ancillaries#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dev.gojinko.com/api/trip/ancillaries#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Trip \u0026 Payment\",\"item\":\"https://docs.dev.gojinko.com/api/trip\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ancillaries\",\"item\":\"https://docs.dev.gojinko.com/api/select-ancillaries\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"trip ancillaries\",\"item\":\"https://docs.dev.gojinko.com/api/trip/ancillaries\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.dev.gojinko.com/api/trip/ancillaries#apireference\",\"headline\":\"trip ancillaries\",\"name\":\"trip ancillaries\",\"description\":\"List purchasable ancillaries for a trip (no checkout)\",\"url\":\"https://docs.dev.gojinko.com/api/trip/ancillaries\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dev.gojinko.com/api/trip/ancillaries#webpage\"},\"dateModified\":\"2026-09-26T23:28:03.496Z\",\"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","description":"Select ancillaries (baggage, seats, meals) for a trip item","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","description":"Checkout a trip, returns a checkout URL the user opens to pay, plus the Shared Payment Token params an agent can use to pay programmatically","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}","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","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":"trip ancillaries - 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"]}