{
"error": {
"code": "BAD_REQUEST",
"message": "X-End-User-Id must be an opaque, tenant-scoped id; ids with a reserved prefix, such as user_ or org_, are not allowed."
}
}
{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/authentication/api-keys"
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "This API key is not granted the \"search_live\" scope required by this endpoint"
}
}
{
"error": {
"code": "CONFLICT",
"message": "The operation conflicts with the current state of the resource.",
"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"
}
}
Hotel search
hotel-ai-search-cancel
Cancel a hotel AI search task
POST
/
v1
/
hotel_ai_search
/
tasks
/
{task_id}
:cancel
Cancel a hotel AI search task
curl --request POST \
--url https://api.gojinko.com/v1/hotel_ai_search/tasks/{task_id}:cancel \
--header 'X-API-Key: <api-key>'
{
"error": {
"code": "BAD_REQUEST",
"message": "X-End-User-Id must be an opaque, tenant-scoped id; ids with a reserved prefix, such as user_ or org_, are not allowed."
}
}
{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/authentication/api-keys"
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "This API key is not granted the \"search_live\" scope required by this endpoint"
}
}
{
"error": {
"code": "CONFLICT",
"message": "The operation conflicts with the current state of the resource.",
"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"
}
}
Cancels a task that has not ended. A task that already ended answers 409CONFLICT.
A new message in the conversation already replaces a search that is still running. See Waiting for results.
working: the search is still running, read the task again. input_required: the message asks a question; answer it in the same conversation. completed: the hotels are in the answer. failed: see error. canceled: a later message or a cancel replaced it.
The search the request was understood as, in the hotel_search request fields, plus board_types and refundable_only for the rate filters applied to the results.
What a turn was charged to the organization's balance, once the turn has ended (completed, input_required, failed or canceled); every amount is 0 when the turn cost nothing. Absent while the task is working. Carried on JSON answers only: an event stream does not carry it, so read it with GET /v1/hotel_ai_search/tasks/{task_id}.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Jinko Platform","description":"Connect your AI agent to flights, hotels, car rentals, and bookings through MCP, REST API, TypeScript SDK, or CLI.","colors":{"primary":"#FF6363","light":"#FF807C","dark":"#BA4B4A"},"logo":{"light":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0","dark":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0"},"favicon":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/favicon.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=770e72a193924011a067dcacdcb654cf","navbar":{"links":[{"href":"https://dashboard.gojinko.com","label":"Dashboard"}],"primary":{"type":"button","label":"Get API Key","href":"https://dashboard.gojinko.com/developers/keys"}},"footer":{"socials":{"website":"https://gojinko.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"jinko-dev","hasAudioNarration":false,"actualSubdomain":"jinko-dev","customDomains":["docs.dev.gojinko.com"],"gitSource":{"type":"github","owner":"jinkoso","repo":"jinko-dev-platform","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6aeece39c11f500273ffd5ec","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":63},{"language":"default","tag":"CLI","count":49},{"language":"default","tag":"Flights","count":43},{"language":"default","tag":"Documentation","count":42},{"language":"default","tag":"MCP","count":23},{"language":"default","tag":"Manage","count":20},{"language":"default","tag":"Trip \u0026 Payment","count":19},{"language":"default","tag":"Discovery","count":17},{"language":"default","tag":"Hotels","count":16},{"language":"default","tag":"Travel Demand","count":14}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api/hotel-ai-search-cancel","slug":"/api/hotel-ai-search-cancel","pageMetadata":{"title":"hotel-ai-search-cancel","sidebarTitle":"/v1/hotel_ai_search/tasks/{task_id}:cancel","description":"Cancel a hotel AI search task","openapi":"api-reference/public-api.yaml POST /v1/hotel_ai_search/tasks/{task_id}:cancel","href":"/api/hotel-ai-search-cancel"},"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: \"Cancel a hotel AI search task\"\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={a:`a`,code:`code`,p:`p`,..._provideComponents(),...props.components},{Note}=_components;if(!Note)_missingMdxReference(`Note`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Cancels a task that has not ended. A task that already ended answers `,_jsx(_components.code,{children:`409`}),` `,_jsx(_components.code,{children:`CONFLICT`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`A new message in the conversation already replaces a search that is still running. See `,_jsx(_components.a,{href:`/ai/hotel-search/waiting-for-results#cancel-a-search`,children:`Waiting for results`}),`.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"hotel-ai-search-cancel","sidebarTitle":"/v1/hotel_ai_search/tasks/{task_id}:cancel","description":"Cancel a hotel AI search task","openapi":"api-reference/public-api.yaml POST /v1/hotel_ai_search/tasks/{task_id}:cancel","href":"/api/hotel-ai-search-cancel"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Hotels"],"summary":"Cancel a hotel AI search task","description":"Cancel a hotel AI search task","security":["288679b5-0090-4137-9f56-9391b79f11fc","5469928d-5f8e-4a25-a550-b949a96987a4"],"servers":["be592d80-40ab-493e-abe6-5162e27ee097"],"parameters":["0369d8f7-2c20-4be2-afbb-544e37a741a6"],"responses":{"200":"f2c73c08-51a1-4ff2-b8c1-817829effecb","400":"31d5849e-caab-4989-93e5-a7b3a87316c9","401":"56b903b4-c55f-45e3-928b-9bac2d091b72","403":"f957fe8b-bd10-4b00-8e04-0daef08fc644","404":"2e7be385-b192-480b-a51c-2fbd52986cf0","409":"c5f8d7d8-0e3e-4690-aa08-4acf9cc1f560","422":"b4827197-1abe-46be-93e8-72b46693653f","429":"4c6a54b3-63a1-420b-9018-66f160a4ca7c","502":"b12081d3-6b1d-40d8-92e1-039f52dce096","503":"177d87f0-ebf4-4ca6-a02e-1fffd80c8050","504":"5c3a4ee7-96dd-4ce9-a998-46770be800fe"},"method":"post","type":"path","path":"/v1/hotel_ai_search/tasks/{task_id}:cancel","baseUrlOptions":["https://api.gojinko.com"],"title":"Cancel a hotel AI search task","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"0369d8f7-2c20-4be2-afbb-544e37a741a6":{"schema":{"type":"string","minLength":1,"maxLength":100,"example":"atk_example","isRequired":true,"uniqueKey":"","typeLabel":"string"},"required":true,"name":"task_id","in":"path"}},"responses":{"f2c73c08-51a1-4ff2-b8c1-817829effecb":{"description":"The task, now `canceled`.","content":{"application/json":{"schema":{"type":"object","properties":{"context_id":{"oneOf":[{"type":"string","description":"The conversation; send it with the next message to continue.","example":"ctx_example","isRequired":true,"uniqueKey":"context_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The conversation; send it with the next message to continue.","example":"ctx_example","isRequired":true,"uniqueKey":"context_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"context_id","typeLabel":"string | null"},"task_id":{"type":"string","example":"atk_example","isRequired":true,"uniqueKey":"task_id","typeLabel":"string"},"status":{"type":"string","enum":["working","input_required","completed","failed","canceled"],"description":"`working`: the search is still running, read the task again. `input_required`: the message asks a question; answer it in the same conversation. `completed`: the hotels are in the answer. `failed`: see `error`. `canceled`: a later message or a cancel replaced it.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"The reply to show the traveller.","example":"Found 37 hotels in Paris for Oct 24–25 (1 night, 2 adults, 1 room).","uniqueKey":"message","typeLabel":"string"},"question":{"type":"string","description":"What the reply asks for, when `status` is `input_required`.","example":"dates","uniqueKey":"question","typeLabel":"string"},"criteria":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"criteria.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"criteria.additionalProperties","typeLabel":"null"},"description":"The search the request was understood as, in the `hotel_search` request fields, plus `board_types` and `refundable_only` for the rate filters applied to the results.","uniqueKey":"criteria","typeLabel":"object"},"notes":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"notes.items.[INDEX].additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"notes.items.[INDEX].additionalProperties","typeLabel":"null"},"uniqueKey":"notes.items.[INDEX]","typeLabel":"object"},"description":"Assumptions and adjustments made while understanding the request.","uniqueKey":"notes","typeLabel":"object[]"},"hotels":{"type":"array","items":{"type":"object","description":"A hotel of an AI search answer: the `hotel_search` hotel with its rooms and offers, and how well it fits the request.","properties":{"hotel_id":{"type":"string","description":"Opaque hotel identifier. Pass it to hotel_details, hotel_reviews and `hotel_ids` exactly as received; do not parse or build it. The value a hotel is known by can change between contract versions, so read it from a fresh hotel_search rather than keeping it.","example":"lp1d2c3","uniqueKey":"hotels.items.[INDEX].hotel_id","typeLabel":"string"},"hotel_ref":{"type":"string","description":"Deprecated: use `hotel_id` (search) or `id` (details, reviews). The hotel's identifier behind a source prefix, as earlier contract versions returned it; hotel_details and hotel_reviews still accept it. Pass it back exactly as received; do not parse or build it.","example":"h1:lp1d2c3","deprecated":true,"uniqueKey":"hotels.items.[INDEX].hotel_ref","typeLabel":"string"},"name":{"type":"string","example":"Hôtel Le Marais","uniqueKey":"hotels.items.[INDEX].name","typeLabel":"string"},"address":{"type":"string","example":"12 Rue de Rivoli","uniqueKey":"hotels.items.[INDEX].address","typeLabel":"string"},"city":{"type":"string","example":"Paris","uniqueKey":"hotels.items.[INDEX].city","typeLabel":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code, LOWER case as the platform sends it.","example":"fr","uniqueKey":"hotels.items.[INDEX].country","typeLabel":"string"},"star_rating":{"type":"number","example":4,"uniqueKey":"hotels.items.[INDEX].star_rating","typeLabel":"number"},"category":{"type":"string","description":"The provider's own category wording, which `star_rating` cannot express. Free text.","example":"4 KEYS","uniqueKey":"hotels.items.[INDEX].category","typeLabel":"string"},"lodging_type":{"type":"string","example":"Aparthotel","uniqueKey":"hotels.items.[INDEX].lodging_type","typeLabel":"string"},"rating":{"type":"number","description":"Guest score out of 10.","example":8.6,"uniqueKey":"hotels.items.[INDEX].rating","typeLabel":"number"},"review_count":{"type":"number","description":"Number of guest reviews behind `rating`.","example":1243,"uniqueKey":"hotels.items.[INDEX].review_count","typeLabel":"number"},"main_photo":{"type":"string","description":"Full-size hero image URL.","example":"https://images.example.com/hotels/main.jpg","uniqueKey":"hotels.items.[INDEX].main_photo","typeLabel":"string"},"thumbnail":{"type":"string","description":"Small preview image URL.","example":"https://images.example.com/hotels/thumb.jpg","uniqueKey":"hotels.items.[INDEX].thumbnail","typeLabel":"string"},"latitude":{"type":"number","example":48.8566,"uniqueKey":"hotels.items.[INDEX].latitude","typeLabel":"number"},"longitude":{"type":"number","example":2.3522,"uniqueKey":"hotels.items.[INDEX].longitude","typeLabel":"number"},"distance_km":{"type":"number","minimum":0,"description":"Straight-line distance from the search center, in kilometers.","uniqueKey":"hotels.items.[INDEX].distance_km","typeLabel":"number"},"recommendation_score":{"type":"number","minimum":0,"maximum":1,"description":"How well the hotel fits `intent.user_intent`, from 0 to 1, present when the intent re-ranked the results, which are then ordered by it. Without an intent the results keep the order `sort_by` names. Not a guest rating.","uniqueKey":"hotels.items.[INDEX].recommendation_score","typeLabel":"number"},"rooms":{"type":"array","items":{"type":"object","properties":{"room_id":{"type":"string","example":"rm_1","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].room_id","typeLabel":"string"},"room_name":{"type":"string","example":"Superior Double","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].room_name","typeLabel":"string"},"description":{"type":"string","description":"Free-text room description, when the provider supplied one.","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].description","typeLabel":"string"},"requested_occupancy":{"type":"integer","description":"The occupancy these rates were priced for — an echo of what you searched, not a property of the room. Pricing a different party size means searching again.","example":2,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].requested_occupancy","typeLabel":"integer"},"room_capacity":{"type":"integer","description":"How many the room sleeps, from the provider’s content catalogue. Absent when the catalogue carries no figure — absent means unknown, never zero. Same field as on hotel_details and on a hotel trip item.","example":2,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].room_capacity","typeLabel":"integer"},"max_occupancy":{"type":"integer","description":"Deprecated: an alias of `requested_occupancy` (same value), never the room’s capacity. Read `requested_occupancy` for the priced party size and `room_capacity` for how many the room sleeps.","deprecated":true,"example":2,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].max_occupancy","typeLabel":"integer"},"images":{"type":"array","items":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].images.items.[INDEX]","typeLabel":"string"},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].images","typeLabel":"string[]"},"amenities":{"type":"array","items":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].amenities.items.[INDEX]","typeLabel":"string"},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].amenities","typeLabel":"string[]"},"beds":{"type":"array","items":{"type":"object","properties":{"bed_type":{"type":"string","isRequired":true,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].beds.items.[INDEX].bed_type","typeLabel":"string"},"count":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].beds.items.[INDEX].count","typeLabel":"integer"}},"required":["bed_type","count"],"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].beds.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].beds","typeLabel":"object[]"},"rates":{"type":"array","items":{"type":"object","properties":{"offer_id":{"type":"string","description":"Legacy rooms[].rates[] compatibility token. New integrations use the hotel-level `offers[].trip_item_token`; add that token to the trip exactly once.","example":"htl_2d67a7441c60e5de","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].offer_id","typeLabel":"string"},"board_type":{"type":"string","example":"RO","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].board_type","typeLabel":"string"},"board_name":{"type":"string","example":"Room Only","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].board_name","typeLabel":"string"},"total_amount":{"type":"number","description":"Deprecated: use `total_amount_money` instead. Price for the whole stay in `currency`, in MAJOR units at the currency’s own precision.","example":1818.4,"deprecated":true,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].total_amount","typeLabel":"number"},"total_amount_display":{"type":"string","description":"Deprecated: use `total_amount_money` instead. The rate total as a string ready to show: the ISO 4217 code, a space, then `total_amount` at the currency’s ISO digits, e.g. \"EUR 606.13\".","example":"EUR 606.13","deprecated":true,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].total_amount_display","typeLabel":"string"},"currency":{"type":"string","description":"Deprecated: use `total_amount_money` instead. The currency of `total_amount`.","example":"EUR","deprecated":true,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].currency","typeLabel":"string"},"total_amount_money":{"type":"object","description":"Price for the whole stay.","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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].total_amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].total_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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].total_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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].total_amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].total_amount_money","typeLabel":"object"},"is_refundable":{"type":"boolean","example":false,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].is_refundable","typeLabel":"boolean"},"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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].free_cancellation_until","typeLabel":"string"},"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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].cancellation_schedule.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].cancellation_schedule.items.[INDEX].nights","typeLabel":"number"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].cancellation_schedule.items.[INDEX]","typeLabel":"object"},"description":"The full penalty ladder, chronological. Absent when the provider published none — which is not a statement that cancelling is free.","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].cancellation_schedule","typeLabel":"object[]"},"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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].taxes_breakdown.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].taxes_breakdown.items.[INDEX].display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].taxes_breakdown.items.[INDEX]","typeLabel":"object"},"description":"Taxes and fees on this rate. ALWAYS present, so an empty array means \"no tax is known\" and can be shown as such; check `included` per line before adding anything to `total_amount_money`.","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].taxes_breakdown","typeLabel":"object[]"},"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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].payment_types","typeLabel":"enum\u003cstring>[]"},"promotions":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].promotions.items.[INDEX].code","typeLabel":"string"},"name":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].promotions.items.[INDEX].name","typeLabel":"string"},"remark":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].promotions.items.[INDEX].remark","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].promotions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].promotions","typeLabel":"object[]"},"booking_scope":{"type":"string","description":"LEGACY-ONLY compatibility metadata. Current canonical `offers[]` never returns `booking_scope`; use `room_rates.length` to determine how many rooms an offer covers.","example":"room_bundle","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].booking_scope","typeLabel":"string"},"num_rooms":{"type":"integer","minimum":1,"description":"LEGACY-ONLY compatibility metadata. Current canonical `offers[]` represents room count through `room_rates.length` and never returns `num_rooms`.","example":2,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].occupancy_number","typeLabel":"integer"},"occupancy":{"type":"object","properties":{"adults":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].occupancy.adults","typeLabel":"integer"},"children_ages":{"type":"array","items":{"type":"integer","minimum":0,"maximum":17,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].occupancy.children_ages.items.[INDEX]","typeLabel":"integer"},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].occupancy","typeLabel":"object"},"room_id":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].room_id","typeLabel":"string"},"mapped_room_id":{"type":"integer","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].mapped_room_id","typeLabel":"integer"},"room_name":{"type":"string","example":"Superior Double","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].room_name","typeLabel":"string"},"rate_id":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].rate_id","typeLabel":"string"},"board_type":{"type":"string","example":"BB","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].board_type","typeLabel":"string"},"board_name":{"type":"string","example":"Breakfast Included","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].board_name","typeLabel":"string"},"max_occupancy":{"type":"integer","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX].display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].taxes_and_fees.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].taxes_and_fees","typeLabel":"object[]"},"policies":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].type","typeLabel":"string"},"description":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX].fee_amount_money","typeLabel":"object"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].policies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].policies","typeLabel":"object[]"},"is_refundable":{"type":"boolean","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX].nights","typeLabel":"number"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].cancellation_policy.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].cancellation_policy","typeLabel":"object[]"},"free_cancellation_until":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX].payment_types","typeLabel":"enum\u003cstring>[]"},"remarks":{"type":"string","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.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":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms.items.[INDEX]","typeLabel":"object"},"description":"LEGACY-ONLY compatibility room details. Current canonical `offers[]` returns `room_rates[]` and never returns this `rooms` field.","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX].rooms","typeLabel":"object[]"}},"description":"Deprecated compatibility shape under `rooms[].rates[]`. Current canonical `offers[]` does not return `booking_scope`, `num_rooms`, or `rooms`; use `room_rates[]` instead.","uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates.items.[INDEX]","typeLabel":"object"},"description":"DEPRECATED compatibility projection. Read the hotel-level `offers[]` list for new integrations and add an offer’s `trip_item_token` to the trip. Multi-room searches return this as an empty array.","deprecated":true,"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX].rates","typeLabel":"object[]"}},"uniqueKey":"hotels.items.[INDEX].rooms.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].rooms","typeLabel":"object[]"},"offers":{"type":"array","items":{"type":"object","properties":{"offer_id":{"type":"string","description":"Deprecated: use `trip_item_token` instead. Same value.","example":"htl_2d67a7441c60e5de","deprecated":true,"isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].offer_id","typeLabel":"string"},"total_amount":{"type":"number","description":"Deprecated: use `total_amount_money` instead. Price for the whole stay in `currency`, in MAJOR units at the currency’s own precision.","example":1818.4,"deprecated":true,"isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].total_amount","typeLabel":"number"},"currency":{"type":"string","description":"Deprecated: use `total_amount_money` instead. The currency of `total_amount`.","example":"EUR","deprecated":true,"isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].currency","typeLabel":"string"},"is_refundable":{"type":"boolean","isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].is_refundable","typeLabel":"boolean"},"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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].taxes_breakdown.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].taxes_breakdown.items.[INDEX].display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].taxes_breakdown.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].taxes_breakdown","typeLabel":"object[]"},"trip_item_token":{"type":"string","description":"The token `trip(add_item)` takes as `trip_item_token`. Add it once even when `room_rates` contains several occupancies.","example":"htl_2d67a7441c60e5de","isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].trip_item_token","typeLabel":"string"},"room_rates":{"type":"array","items":{"type":"object","properties":{"room_id":{"type":"string","description":"References one entry in this hotel’s `rooms[]` metadata.","isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].room_id","typeLabel":"string"},"occupancy_number":{"type":"integer","minimum":1,"description":"Stable one-based occupancy slot from the search request.","isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].occupancy_number","typeLabel":"integer"},"occupancy":{"type":"object","properties":{"adults":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].occupancy.adults","typeLabel":"integer"},"children_ages":{"type":"array","items":{"type":"integer","minimum":0,"maximum":17,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].occupancy.children_ages.items.[INDEX]","typeLabel":"integer"},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].occupancy","typeLabel":"object"},"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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].taxes_and_fees.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].taxes_and_fees.items.[INDEX].display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].taxes_and_fees.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].taxes_and_fees","typeLabel":"object[]"},"is_refundable":{"type":"boolean","isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].is_refundable","typeLabel":"boolean"},"room_name":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].room_name","typeLabel":"string"},"board_type":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].board_type","typeLabel":"string"},"board_name":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].board_name","typeLabel":"string"},"max_occupancy":{"type":"integer","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].max_occupancy","typeLabel":"integer"},"policies":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].policies.items.[INDEX].type","typeLabel":"string"},"description":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].policies.items.[INDEX].fee_amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].policies.items.[INDEX].fee_amount_money","typeLabel":"object"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].policies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].policies","typeLabel":"object[]"},"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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].cancellation_policy.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].cancellation_policy.items.[INDEX].nights","typeLabel":"number"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].cancellation_policy.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].cancellation_policy","typeLabel":"object[]"},"free_cancellation_until":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.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":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].payment_types","typeLabel":"enum\u003cstring>[]"},"remarks":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX].remarks","typeLabel":"string"}},"required":["room_id","occupancy_number","occupancy","taxes_and_fees","is_refundable"],"description":"Display and policy details for one requested room occupancy. It carries no customer price allocation; the containing offer owns the authoritative whole-stay total.","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates.items.[INDEX]","typeLabel":"object"},"description":"One entry per requested occupancy. One occupancy means one room; multiple occupancies mean a multi-room offer.","isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].room_rates","typeLabel":"object[]"},"board_type":{"type":"string","example":"RO","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].board_type","typeLabel":"string"},"board_name":{"type":"string","example":"Room Only","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].board_name","typeLabel":"string"},"total_amount_display":{"type":"string","description":"Deprecated: use `total_amount_money` instead. The rate total as a string ready to show: the ISO 4217 code, a space, then `total_amount` at the currency’s ISO digits, e.g. \"EUR 606.13\".","example":"EUR 606.13","deprecated":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].total_amount_display","typeLabel":"string"},"total_amount_money":{"type":"object","description":"Price for the whole stay.","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":"hotels.items.[INDEX].offers.items.[INDEX].total_amount_money.value","typeLabel":"integer"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"USD","isRequired":true,"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].total_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":"hotels.items.[INDEX].offers.items.[INDEX].total_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":"hotels.items.[INDEX].offers.items.[INDEX].total_amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].total_amount_money","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":"hotels.items.[INDEX].offers.items.[INDEX].free_cancellation_until","typeLabel":"string"},"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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].cancellation_schedule.items.[INDEX].amount_money.display","typeLabel":"string"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].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":"hotels.items.[INDEX].offers.items.[INDEX].cancellation_schedule.items.[INDEX].nights","typeLabel":"number"}},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].cancellation_schedule.items.[INDEX]","typeLabel":"object"},"description":"The full penalty ladder, chronological. Absent when the provider published none — which is not a statement that cancelling is free.","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].cancellation_schedule","typeLabel":"object[]"},"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":"hotels.items.[INDEX].offers.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":"hotels.items.[INDEX].offers.items.[INDEX].payment_types","typeLabel":"enum\u003cstring>[]"},"promotions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].promotions.items.[INDEX].name","typeLabel":"string"},"remark":{"type":"string","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].promotions.items.[INDEX].remark","typeLabel":"string"}},"description":"A provider promotion applied to the offer, as it is to be shown to the guest: its name and the remark that goes with it.","uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].promotions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX].promotions","typeLabel":"object[]"}},"required":["offer_id","total_amount","currency","is_refundable","taxes_breakdown","trip_item_token","room_rates"],"uniqueKey":"hotels.items.[INDEX].offers.items.[INDEX]","typeLabel":"object"},"description":"Bookable whole-stay offers. Choose one and add its `trip_item_token` to the trip exactly once.","uniqueKey":"hotels.items.[INDEX].offers","typeLabel":"object[]"},"match_score":{"type":"integer","minimum":0,"maximum":100,"description":"How well the hotel fits the request, 0–100. The hotels come best first. Relative to this search, not comparable across searches. Absent on some hotels.","example":87,"uniqueKey":"hotels.items.[INDEX].match_score","typeLabel":"integer"}},"uniqueKey":"hotels.items.[INDEX]","typeLabel":"object"},"uniqueKey":"hotels","typeLabel":"object[]"},"has_more":{"type":"boolean","description":"More hotels are available; ask for more in the same conversation.","uniqueKey":"has_more","typeLabel":"boolean"},"reference":{"type":"boolean","description":"The hotels are a 1-night reference search shown while the check-out date is asked.","uniqueKey":"reference","typeLabel":"boolean"},"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"description":"Why the task failed, when `status` is `failed`.","uniqueKey":"error","typeLabel":"object"},"superseded_by":{"type":"string","description":"The task that replaced this one, when `status` is `canceled`.","uniqueKey":"superseded_by","typeLabel":"string"},"charge":{"type":"object","properties":{"turn":{"type":"integer","description":"The message of the conversation this charge is for, from 1: the first message is 1 and each next message adds 1, whether it answers a question or asks for something new.","example":1,"isRequired":true,"uniqueKey":"charge.turn","typeLabel":"integer"},"llm_usd":{"type":"number","description":"The language-model part of the charge, in USD.","example":0.0165,"isRequired":true,"uniqueKey":"charge.llm_usd","typeLabel":"number"},"api_usd":{"type":"number","description":"The hotel search part of the charge, in USD.","example":0.0645,"isRequired":true,"uniqueKey":"charge.api_usd","typeLabel":"number"},"total_usd":{"type":"number","description":"`llm_usd` + `api_usd`.","example":0.081,"isRequired":true,"uniqueKey":"charge.total_usd","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"isRequired":true,"uniqueKey":"charge.currency","typeLabel":"enum\u003cstring>"}},"required":["turn","llm_usd","api_usd","total_usd","currency"],"description":"What a turn was charged to the organization's balance, once the turn has ended (`completed`, `input_required`, `failed` or `canceled`); every amount is 0 when the turn cost nothing. Absent while the task is `working`. Carried on JSON answers only: an event stream does not carry it, so read it with `GET /v1/hotel_ai_search/tasks/{task_id}`.","uniqueKey":"charge","typeLabel":"object"}},"required":["context_id","task_id","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"context_id":"ctx_example","task_id":"atk_example","status":"working","message":"Found 37 hotels in Paris for Oct 24–25 (1 night, 2 adults, 1 room).","question":"dates","criteria":{},"notes":[{}],"hotels":[{"hotel_id":"lp1d2c3","hotel_ref":"h1:lp1d2c3","name":"Hôtel Le Marais","address":"12 Rue de Rivoli","city":"Paris","country":"fr","star_rating":4,"category":"4 KEYS","lodging_type":"Aparthotel","rating":8.6,"review_count":1243,"main_photo":"https://images.example.com/hotels/main.jpg","thumbnail":"https://images.example.com/hotels/thumb.jpg","latitude":48.8566,"longitude":2.3522,"distance_km":1,"recommendation_score":0.5,"rooms":[{"room_id":"rm_1","room_name":"Superior Double","description":"\u003cstring>","requested_occupancy":2,"room_capacity":2,"max_occupancy":2,"images":["\u003cstring>"],"amenities":["\u003cstring>"],"beds":[{"bed_type":"\u003cstring>","count":2}],"rates":[{"offer_id":"htl_2d67a7441c60e5de","board_type":"RO","board_name":"Room Only","total_amount":1818.4,"total_amount_display":"EUR 606.13","currency":"EUR","total_amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"is_refundable":false,"free_cancellation_until":"2026-08-18T10:00:00+02:00","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}],"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"}],"payment_types":["pay_now"],"promotions":[{"code":"\u003cstring>","name":"\u003cstring>","remark":"\u003cstring>"}],"booking_scope":"room_bundle","num_rooms":2,"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>"}]}]}],"offers":[{"offer_id":"htl_2d67a7441c60e5de","total_amount":1818.4,"currency":"EUR","is_refundable":true,"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"}],"trip_item_token":"htl_2d67a7441c60e5de","room_rates":[{"room_id":"\u003cstring>","occupancy_number":2,"occupancy":{"adults":2,"children_ages":[8]},"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"}],"is_refundable":true,"room_name":"\u003cstring>","board_type":"\u003cstring>","board_name":"\u003cstring>","max_occupancy":123,"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"}}],"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>"}],"board_type":"RO","board_name":"Room Only","total_amount_display":"EUR 606.13","total_amount_money":{"value":41250,"currency":"USD","decimal_places":2,"display":"USD 412.50"},"free_cancellation_until":"2026-08-18T10:00:00+02:00","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}],"payment_types":["pay_now"],"promotions":[{"name":"\u003cstring>","remark":"\u003cstring>"}]}],"match_score":87}],"has_more":true,"reference":true,"error":{"code":"\u003cstring>","message":"\u003cstring>"},"superseded_by":"\u003cstring>","charge":{"turn":1,"llm_usd":0.0165,"api_usd":0.0645,"total_usd":0.081,"currency":"USD"}}}},"exampleType":"generated"}},"exampleType":"generated"},"31d5849e-caab-4989-93e5-a7b3a87316c9":{"description":"Bad request: an invalid header, such as a reserved `X-End-User-Id` (`user_…`, `org_…`).","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":"X-End-User-Id must be an opaque, tenant-scoped id; ids with a reserved prefix, such as user_ or org_, are not allowed."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"BAD_REQUEST","message":"X-End-User-Id must be an opaque, tenant-scoped id; ids with a reserved prefix, such as user_ or org_, are not allowed."}}}},"exampleType":"examples"}},"exampleType":"examples"},"56b903b4-c55f-45e3-928b-9bac2d091b72":{"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"},"f957fe8b-bd10-4b00-8e04-0daef08fc644":{"description":"The key is valid but is not a tenant API key (`jnk_t_…`), is not granted the `search_live` scope, or Travel AI search is not enabled for this account. **`FORBIDDEN`** — The credential is valid, and this request is refused anyway. Do not rotate the key — it is working. Check that it is entitled to this operation, and on this environment.","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":"FORBIDDEN","message":"This API key is not granted the \"search_live\" scope required by this endpoint"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"FORBIDDEN","message":"This API key is not granted the \"search_live\" scope required by this endpoint"}}}},"exampleType":"examples"}},"exampleType":"examples"},"2e7be385-b192-480b-a51c-2fbd52986cf0":{"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"},"c5f8d7d8-0e3e-4690-aa08-4acf9cc1f560":{"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"},"b4827197-1abe-46be-93e8-72b46693653f":{"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"},"4c6a54b3-63a1-420b-9018-66f160a4ca7c":{"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"},"b12081d3-6b1d-40d8-92e1-039f52dce096":{"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"},"177d87f0-ebf4-4ca6-a02e-1fffd80c8050":{"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"},"5c3a4ee7-96dd-4ce9-a998-46770be800fe":{"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":{"288679b5-0090-4137-9f56-9391b79f11fc":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"ApiKeyAuth"}},"5469928d-5f8e-4a25-a550-b949a96987a4":{"BearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"be592d80-40ab-493e-abe6-5162e27ee097":{"url":"https://api.gojinko.com","description":"Production"}},"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":"hotel-ai-search-cancel - Jinko Platform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T00:18:31.713Z","originalFileLocation":"api/hotel-ai-search-cancel.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=\"Cancel a hotel AI search task\">\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=\"hotel-ai-search-cancel - Jinko Platform\">\u003cmeta data-mint-head property=\"og:description\" content=\"Cancel a hotel AI search task\">\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/hotel-ai-search-cancel\">\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=Hotel+search\u0026amp;title=hotel-ai-search-cancel\u0026amp;description=Cancel+a+hotel+AI+search+task\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=f85c9865054bf6e3c45bdbccbc5007666876514f5755443cd450a47d46c0fccc\">\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=\"hotel-ai-search-cancel - Jinko Platform\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Cancel a hotel AI search task\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jinko-dev.mintlify.site/_mintlify/api/og/v2?division=Hotel+search\u0026amp;title=hotel-ai-search-cancel\u0026amp;description=Cancel+a+hotel+AI+search+task\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=f85c9865054bf6e3c45bdbccbc5007666876514f5755443cd450a47d46c0fccc\">\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/hotel-ai-search-cancel\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/hotel-ai-search-cancel.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/hotel-ai-search-cancel#webpage\",\"url\":\"https://docs.dev.gojinko.com/api/hotel-ai-search-cancel\",\"name\":\"hotel-ai-search-cancel\",\"description\":\"Cancel a hotel AI search task\",\"dateModified\":\"2026-10-23T00:18:31.713Z\",\"isPartOf\":{\"@id\":\"https://docs.dev.gojinko.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dev.gojinko.com/api/hotel-ai-search-cancel#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dev.gojinko.com/api/hotel-ai-search-cancel#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"AI\",\"item\":\"https://docs.dev.gojinko.com/api/hotel-ai-search\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hotel search\",\"item\":\"https://docs.dev.gojinko.com/api/hotel-ai-search\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"hotel-ai-search-cancel\",\"item\":\"https://docs.dev.gojinko.com/api/hotel-ai-search-cancel\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.dev.gojinko.com/api/hotel-ai-search-cancel#apireference\",\"headline\":\"hotel-ai-search-cancel\",\"name\":\"hotel-ai-search-cancel\",\"description\":\"Cancel a hotel AI search task\",\"url\":\"https://docs.dev.gojinko.com/api/hotel-ai-search-cancel\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dev.gojinko.com/api/hotel-ai-search-cancel#webpage\"},\"dateModified\":\"2026-10-23T00:18:31.713Z\",\"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","description":"Stream a hotel AI search task's 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","description":"Search live car rental offers","openapi":"api-reference/public-api.yaml POST /v1/car_search","href":"/api/car-search"},{"title":"car-cancel-preview","sidebarTitle":"/v1/car_cancel_preview","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_preview","href":"/api/car-cancel-preview"},{"title":"car-cancel-commit","sidebarTitle":"/v1/car_cancel_commit","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_commit","href":"/api/car-cancel-commit"},{"title":"car-cancel-status","sidebarTitle":"/v1/car_cancel_status","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_status","href":"/api/car-cancel-status"}]},{"group":"Trip \u0026 Payment","pages":[{"title":"trip","sidebarTitle":"/v1/trip","openapi":"api-reference/public-api.yaml POST /v1/trip","href":"/api/trip"},{"group":"Ancillaries","pages":[{"title":"select-ancillaries","sidebarTitle":"/v1/select_ancillaries","openapi":"api-reference/public-api.yaml POST /v1/select_ancillaries","href":"/api/select-ancillaries"},{"title":"trip ancillaries","sidebarTitle":"/v1/trip/{trip_id}/ancillaries","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}/ancillaries","href":"/api/trip/ancillaries"}]},{"title":"checkout","sidebarTitle":"/v1/checkout","openapi":"api-reference/public-api.yaml POST /v1/checkout","href":"/api/checkout"},{"title":"agent-payment submit","sidebarTitle":"/v1/agent_payment/submit","openapi":"api-reference/public-api.yaml POST /v1/agent_payment/submit","href":"/api/agent-payment/submit"},{"title":"trip-status","sidebarTitle":"/v1/trip/{trip_id}","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":"hotel-ai-search-cancel - 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"]}