Call this endpoint after the customer selects a hotel. It is the second step
of the flow: Search → Rooms → Prebook → Book.
Send the same dates, occupancy and nationality used for hotel search.
Unifystays calls the active suppliers in parallel and normalizes their room
options.The POST returns quickly. It answers with the rooms Unifystays already knows
for this hotel and a stream_id / sse_stream_url. The live supplier offers
then arrive on that stream as Server-Sent Events, one provider_options event
per supplier batch, and a final done event. Read the stream with
Stream Room Updates.Each streamed offer carries two identifiers you need later:
booking_token: identifies the whole offer. You send it to Prebook.
room_allocation_id: identifies one room slot of the offer.
1
POST the stay
Send dates, nationality and the occupancy of every room. Keep
data.unifystays_rooms and open data.sse_stream_url immediately.
2
Read the stream
Add family objects and offers as provider_options events arrive. Stop at
done.
3
Show room cards
Draw one card per room family with the offers under it (see
Render Room Cards).
Used by suppliers for market eligibility, pricing, and booking rules. Defaults to residency when omitted.
residency
Your guest form (ISO 3166-1 alpha-2)
Optional. Used for residency-restricted rates. Defaults to nationality. When both are omitted IN is used, so always send at least one.
language
Your locale (for example en)
Optional. Echoed in quote_context.language of each offer.
rooms
Your occupancy form
Send 1–8 entries, one for every room the customer needs. Array position is preserved as a room allocation.
rooms[].adults
Your occupancy form
Number of adults staying in that room (1–5). Adults plus children must not exceed 5 per room.
rooms[].child_ages
Your occupancy form
Age of every child staying in that room. Use [] when there are no children.
Optional header X-Unifystays-Currency (an ISO 4217 code such as EUR) sets the
display currency for this request. Without it the response uses your
organization’s display currency, which is USD unless configured. See
Display currency.If the customer changes the hotel, dates, nationality, number of rooms, or any
room’s occupancy, request room options again. Tokens from the old request must
not be reused.Errors: 400 for an invalid body (for example check_in in the past, or
check_out not after check_in), 404 when the hotel does not exist. The
body is checked when you POST; supplier problems are reported later on the
stream, not as an HTTP error.
The POST response is intentionally fast. data.options is initially empty;
connect to data.sse_stream_url to receive live provider_options events.
This example is for a hotel that was searched before. On a hotel’s first search
unifystays_rooms is [].
The initial response contains the rooms already known for this hotel and a
stream_id with sse_stream_url. Live supplier options are delivered
progressively through the stream. Every streamed bookable option includes a
short signed booking_token required by Prebook a Room.
Response key
What it means
What your integration should do
data.hotel_id
The Unifystays hotel represented by this room response
Keep it with the selected option and send it as hotel_id to prebook.
data.unifystays_rooms[]
The hotel’s family objects; store each family and its variants by id. Empty on a hotel’s first search
Store each room by its id and draw an empty card for it until offers arrive.
data.options[]
Reserved response field; always empty in the initial response (total_options is 0)
Read live options from provider_options SSE events.
data.providers_queried[]
Suppliers being queried for this hotel
Informational. A listed supplier can still return nothing; the done event reports the outcome.
stream_id, sse_stream_url
Short-lived SSE stream for progressive supplier results
Connect immediately and collect options until the done event.
Stream provider_options.rooms[]
The family objects the event’s offers use, new or updated
Add or replace each family by unifystays_room_id.
Stream provider_options.options[]
Complete supplier offers for all requested room slots
The customer selects one complete option; do not combine rooms from different options.
Stream options[].booking_token
Opaque, signed identity for the complete selected option; valid for at most 15 minutes (lifecycle.expires_at)
Send it unchanged to prebook. Do not create, parse, or modify it.
Stream options[].offer_family_id
Offers whose slots are in the same families in the same order share it; null when any slot is a tmp_ room
Use it as the card key for multi-room searches. Never use it for booking.
Stream options[].rooms[]
One entry per requested room instance
Put the offer on the card of its slot’s room; show the slot’s own provider_room facts on the offer row.
room_allocation_id
Opaque identity for one exact room slot
Keep it associated with that slot. Prebook returns the authoritative copy used for booking.
unifystays_room_id
The variant (or family, for a hotel-assigned bed type) this slot belongs to; unifystays_family_id names the family
Look the family up in your store. Display identity only.
provider_room
The seller’s own room: name, beds, maximum guests and whatever static attributes it sent
Always show its beds and maximum guests on the offer row.
mapping_status, mapping_details
MAPPED when the slot is in a built room, UNMAPPED for a tmp_ room; how the slot was matched
Diagnostics only. They do not determine bookability.
unifystays_room
Always null
Ignore it. Use unifystays_room_id.
occupancy
Adults and child ages quoted for this allocation
Keep guest assignment compatible with this occupancy.
Room grouping never changes what is booked. Every offer is the supplier’s own
offer: booking_token and room_allocation_id identify it, whatever room it
is shown under.
Offers from different suppliers for the same physical room are grouped in one
family object, split into variants by bed type. Draw one card per family:
Header: the family’s name and details (photos, size, description,
amenities) labelled with details.source, for example “Photos & details:
TripJack”.
Variants: show each variant’s beds, bedrooms, max_guests and
smoking only from the variant object in variants[]; a null value is
unknown.
Rows: one per offer, with price, meal plan and cancellation from the
offer, under the variant its slot’s unifystays_room_id names. Offers
listed under bed_assignment.suppliers (their slot id is the family id) go
under the label Bed type assigned by the hotel. Each offer row always shows
its own provider_room beds and maximum guests.
What to put on each part of the card:
Part
Take it from
Notes
Room name, photos, size, description, amenities
The family object (name, details)
All details come from the one supplier in details.source. Show it, for example “Photos & details: TripJack”.
Bed configuration of a variant
variants[].beds, bedrooms, max_guests, smoking
null is unknown. Never copy a bed type from one supplier’s provider_room onto the variant.
Offer price
pricing.native_ledger.totals[0].total (or usd_ledger, or display_ledger to show your display currency)
Divide amount_minor by 10 to the power of currency_exponent. Show payable_at_property separately as “pay at hotel”. See the price ledger.
Cancellation badge
cancellation.refundability and free_cancellation_until
Show the full penalties timeline on a detail view.
Every offer’s pricing carries display_currency and display_ledger: the
supplier’s native_ledger lines converted to the display currency, which is
your organization’s setting or the X-Unifystays-Currency header. Read
display_currency instead of assuming it. native_ledger stays the
authoritative amount owed.
Field
What it means
How to use it
pricing.display_currency
ISO 4217 code of display_ledger and of every display_* amount.
Always read it.
pricing.display_ledger
The same lines as native_ledger, converted to display_currency. Same as usd_ledger when the display currency is USD. null when a rate is missing.
Show it as the guest price. Fall back to native_ledger when null.
commercial_display
commercial with every amount in display_currency. null when commercial is hidden.
A display_* value is null when no exchange rate is available for the
currency; it is never a made-up zero. Display amounts are converted with the
current rate and are for showing only. The supplier charges in the native
currency.Room ids:
unifystays_room_id is for display and grouping only. Book with
booking_token and room_allocation_id.
A tmp_ id is valid for this search only. Do not store it.
A built room id may be retired later, when two rooms turn out to be the same
room. Do not keep room ids as long-lived keys.
A later provider_options event may send a family again with different
variants, bed_assignment or details: replace your copy.
Client logic:
const rooms = new Map<string, FamilyObject>(); // family unifystays_room_id -> familyconst offers = new Map<string, Offer[]>(); // card key -> offersfor (const room of data.unifystays_rooms) rooms.set(room.unifystays_room_id, room);source.addEventListener("provider_options", (message) => { const event = JSON.parse(message.data); for (const room of event.rooms ?? []) rooms.set(room.unifystays_room_id, room); for (const offer of event.options) { // One room per offer: the slot's family. Several rooms: the offer family. const key = offer.rooms.length === 1 ? offer.rooms[0].unifystays_family_id : (offer.offer_family_id ?? offer.offer_id); offers.set(key, [...(offers.get(key) ?? []), offer]); }});
For a multi-room search the card key is offer_family_id ?? offer_id and the
header lists each slot’s family. An offer with offer_family_id: null contains
a tmp_ room, so a multi-room offer with a tmp_ room gets its own card.
Keep the selected option’s booking_token only for the immediate prebook
step; it is time-sensitive.
Connect to Stream Room Updates to obtain
the bookable options and their identifiers.
Request fresh room options if the stay dates, guest mix, nationality, or
selected hotel changes.
Do not cache room options or reuse their booking tokens as a checkout
guarantee. Supplier-backed availability and price can change.
The OpenAPI section below provides the complete request body and response
fields, including room options and stream identifiers.
ISO 4217 currency for display amounts (display_ledger, display_amount, commercial_display). Optional: defaults to your organization's display currency, USD unless configured. Read pricing.display_currency in the response.
One entry per room the guest needs (1 to 8). Order is preserved: slot N of every offer answers rooms[N]. Each room has adults and child_ages (use [] for no children).
Guest country of residence, ISO 3166-1 alpha-2 (for example IN). Suppliers use it for residency-restricted rates. Defaults to nationality when omitted. When both are omitted, IN is used, so always send at least one.
Guest nationality, ISO 3166-1 alpha-2 (for example IN). Suppliers use it for market eligibility, pricing and booking rules. Defaults to residency when omitted. When both are omitted, IN is used, so always send at least one.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Unifystays API","colors":{"primary":"#0F766E","light":"#14B8A6","dark":"#134E4A"},"navbar":{"links":[{"href":"https://unifystays.com","label":"Portal"},{"href":"mailto:support@unifystays.com","label":"Support"}]},"contextual":{"options":["copy","download-spec","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"unifystays","hasAudioNarration":false,"actualSubdomain":"unifystays","customDomains":["docs.unifystays.com"],"gitSource":{"type":"github","owner":"ronakonline","repo":"unifystay","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae836724729f9837cf0d8e4","collectionId":"17105c7f-831f-4751-8445-71739bb329ae","liveDeploymentHistoryId":"6ae836724729f9837cf0d8e4","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae836724729f9837cf0d8e4","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API Reference","count":29},{"language":"default","tag":"Guides","count":10},{"language":"default","tag":"Bookings","count":8},{"language":"default","tag":"Search \u0026 hotels","count":7},{"language":"default","tag":"Webhook endpoints","count":7},{"language":"default","tag":"Build your integration","count":5},{"language":"default","tag":"Webhook logs","count":4},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Destination \u0026 master data","count":2},{"language":"default","tag":"Operate","count":2}]},"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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/hotel-rooms","slug":"/api-reference/hotel-rooms","pageMetadata":{"title":"Get Room Options","description":"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.","openapi":"reference/openapi.json POST /hotels/{hotel_id}/rooms","href":"/api-reference/hotel-rooms"},"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: \"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.\"\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`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Info,Step,Steps,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Call this endpoint after the customer selects a hotel. It is the second step\nof the flow: Search → `,_jsx(_components.strong,{children:`Rooms`}),` → `,_jsx(_components.a,{href:`/api-reference/prebook`,children:`Prebook`}),` → Book.\nSend the same dates, occupancy and nationality used for hotel search.\nUnifystays calls the active suppliers in parallel and normalizes their room\noptions.`]}),`\n`,_jsxs(_components.p,{children:[`The POST returns quickly. It answers with the rooms Unifystays already knows\nfor this hotel and a `,_jsx(_components.code,{children:`stream_id`}),` / `,_jsx(_components.code,{children:`sse_stream_url`}),`. The live supplier offers\nthen arrive on that stream as Server-Sent Events, one `,_jsx(_components.code,{children:`provider_options`}),` event\nper supplier batch, and a final `,_jsx(_components.code,{children:`done`}),` event. Read the stream with\n`,_jsx(_components.a,{href:`/api-reference/hotel-room-stream`,children:`Stream Room Updates`}),`.`]}),`\n`,_jsx(_components.p,{children:`Each streamed offer carries two identifiers you need later:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`booking_token`}),`: identifies the whole offer. You send it to Prebook.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`room_allocation_id`}),`: identifies one room slot of the offer.`]}),`\n`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`POST the stay`,children:_jsxs(_components.p,{children:[`Send dates, nationality and the occupancy of every room. Keep\n`,_jsx(_components.code,{children:`data.unifystays_rooms`}),` and open `,_jsx(_components.code,{children:`data.sse_stream_url`}),` immediately.`]})}),_jsx(Step,{title:`Read the stream`,children:_jsxs(_components.p,{children:[`Add family objects and offers as `,_jsx(_components.code,{children:`provider_options`}),` events arrive. Stop at\n`,_jsx(_components.code,{children:`done`}),`.`]})}),_jsx(Step,{title:`Show room cards`,children:_jsxs(_components.p,{children:[`Draw one card per room family with the offers under it (see\n`,_jsx(_components.a,{href:`#render-room-cards`,children:`Render Room Cards`}),`).`]})}),_jsx(Step,{title:`Prebook the chosen offer`,children:_jsxs(_components.p,{children:[`Send its `,_jsx(_components.code,{children:`booking_token`}),` unchanged to `,_jsx(_components.a,{href:`/api-reference/prebook`,children:`Prebook`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`request-example`,children:`Request Example`}),`\n`,`\n`,_jsx(Heading,{level:`2`,id:`request-fields`,children:`Request Fields`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Where to get it`}),_jsx(_components.th,{children:`How it is used`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Path `,_jsx(_components.code,{children:`hotel_id`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`hotel_id`}),` from the selected hotel-search or autocomplete result`]}),_jsx(_components.td,{children:`Selects the hotel whose live room inventory is requested.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`check_in`}),`, `,_jsx(_components.code,{children:`check_out`})]}),_jsx(_components.td,{children:`Your customer’s stay form`}),_jsx(_components.td,{children:`Must describe the same stay the customer selected during search.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`nationality`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`iso_code`}),` from `,_jsx(_components.a,{href:`/api-reference/nationalities`,children:`Nationalities`})]}),_jsxs(_components.td,{children:[`Used by suppliers for market eligibility, pricing, and booking rules. Defaults to `,_jsx(_components.code,{children:`residency`}),` when omitted.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`residency`})}),_jsx(_components.td,{children:`Your guest form (ISO 3166-1 alpha-2)`}),_jsxs(_components.td,{children:[`Optional. Used for residency-restricted rates. Defaults to `,_jsx(_components.code,{children:`nationality`}),`. When both are omitted `,_jsx(_components.code,{children:`IN`}),` is used, so always send at least one.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`language`})}),_jsxs(_components.td,{children:[`Your locale (for example `,_jsx(_components.code,{children:`en`}),`)`]}),_jsxs(_components.td,{children:[`Optional. Echoed in `,_jsx(_components.code,{children:`quote_context.language`}),` of each offer.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`rooms`})}),_jsx(_components.td,{children:`Your occupancy form`}),_jsx(_components.td,{children:`Send 1–8 entries, one for every room the customer needs. Array position is preserved as a room allocation.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`rooms[].adults`})}),_jsx(_components.td,{children:`Your occupancy form`}),_jsx(_components.td,{children:`Number of adults staying in that room (1–5). Adults plus children must not exceed 5 per room.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`rooms[].child_ages`})}),_jsx(_components.td,{children:`Your occupancy form`}),_jsxs(_components.td,{children:[`Age of every child staying in that room. Use `,_jsx(_components.code,{children:`[]`}),` when there are no children.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Optional header `,_jsx(_components.code,{children:`X-Unifystays-Currency`}),` (an ISO 4217 code such as `,_jsx(_components.code,{children:`EUR`}),`) sets the\ndisplay currency for this request. Without it the response uses your\norganization’s display currency, which is USD unless configured. See\n`,_jsx(_components.a,{href:`#display-currency`,children:`Display currency`}),`.`]}),`\n`,_jsx(_components.p,{children:`If the customer changes the hotel, dates, nationality, number of rooms, or any\nroom’s occupancy, request room options again. Tokens from the old request must\nnot be reused.`}),`\n`,_jsxs(_components.p,{children:[`Errors: `,_jsx(_components.code,{children:`400`}),` for an invalid body (for example `,_jsx(_components.code,{children:`check_in`}),` in the past, or\n`,_jsx(_components.code,{children:`check_out`}),` not after `,_jsx(_components.code,{children:`check_in`}),`), `,_jsx(_components.code,{children:`404`}),` when the hotel does not exist. The\nbody is checked when you POST; supplier problems are reported later on the\nstream, not as an HTTP error.`]}),`\n`,_jsx(Heading,{level:`2`,id:`initial-response-example`,children:`Initial Response Example`}),`\n`,_jsxs(_components.p,{children:[`The POST response is intentionally fast. `,_jsx(_components.code,{children:`data.options`}),` is initially empty;\nconnect to `,_jsx(_components.code,{children:`data.sse_stream_url`}),` to receive live `,_jsx(_components.code,{children:`provider_options`}),` events.\nThis example is for a hotel that was searched before. On a hotel’s first search\n`,_jsx(_components.code,{children:`unifystays_rooms`}),` is `,_jsx(_components.code,{children:`[]`}),`.`]}),`\n`,`\n`,_jsx(Heading,{level:`2`,id:`use-the-response`,children:`Use the Response`}),`\n`,_jsxs(_components.p,{children:[`The initial response contains the rooms already known for this hotel and a\n`,_jsx(_components.code,{children:`stream_id`}),` with `,_jsx(_components.code,{children:`sse_stream_url`}),`. Live supplier options are delivered\nprogressively through the stream. Every streamed bookable option includes a\nshort signed `,_jsx(_components.code,{children:`booking_token`}),` required by `,_jsx(_components.a,{href:`/api-reference/prebook`,children:`Prebook a Room`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Response key`}),_jsx(_components.th,{children:`What it means`}),_jsx(_components.th,{children:`What your integration should do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data.hotel_id`})}),_jsx(_components.td,{children:`The Unifystays hotel represented by this room response`}),_jsxs(_components.td,{children:[`Keep it with the selected option and send it as `,_jsx(_components.code,{children:`hotel_id`}),` to prebook.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data.unifystays_rooms[]`})}),_jsx(_components.td,{children:`The hotel’s family objects; store each family and its variants by id. Empty on a hotel’s first search`}),_jsx(_components.td,{children:`Store each room by its id and draw an empty card for it until offers arrive.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data.options[]`})}),_jsxs(_components.td,{children:[`Reserved response field; always empty in the initial response (`,_jsx(_components.code,{children:`total_options`}),` is 0)`]}),_jsxs(_components.td,{children:[`Read live options from `,_jsx(_components.code,{children:`provider_options`}),` SSE events.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data.providers_queried[]`})}),_jsx(_components.td,{children:`Suppliers being queried for this hotel`}),_jsxs(_components.td,{children:[`Informational. A listed supplier can still return nothing; the `,_jsx(_components.code,{children:`done`}),` event reports the outcome.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`stream_id`}),`, `,_jsx(_components.code,{children:`sse_stream_url`})]}),_jsx(_components.td,{children:`Short-lived SSE stream for progressive supplier results`}),_jsxs(_components.td,{children:[`Connect immediately and collect options until the `,_jsx(_components.code,{children:`done`}),` event.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`provider_options.rooms[]`})]}),_jsx(_components.td,{children:`The family objects the event’s offers use, new or updated`}),_jsxs(_components.td,{children:[`Add or replace each family by `,_jsx(_components.code,{children:`unifystays_room_id`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`provider_options.options[]`})]}),_jsx(_components.td,{children:`Complete supplier offers for all requested room slots`}),_jsx(_components.td,{children:`The customer selects one complete option; do not combine rooms from different options.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`options[].booking_token`})]}),_jsxs(_components.td,{children:[`Opaque, signed identity for the complete selected option; valid for at most 15 minutes (`,_jsx(_components.code,{children:`lifecycle.expires_at`}),`)`]}),_jsx(_components.td,{children:`Send it unchanged to prebook. Do not create, parse, or modify it.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`options[].offer_family_id`})]}),_jsxs(_components.td,{children:[`Offers whose slots are in the same families in the same order share it; `,_jsx(_components.code,{children:`null`}),` when any slot is a `,_jsx(_components.code,{children:`tmp_`}),` room`]}),_jsx(_components.td,{children:`Use it as the card key for multi-room searches. Never use it for booking.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`options[].rooms[]`})]}),_jsx(_components.td,{children:`One entry per requested room instance`}),_jsxs(_components.td,{children:[`Put the offer on the card of its slot’s room; show the slot’s own `,_jsx(_components.code,{children:`provider_room`}),` facts on the offer row.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`room_allocation_id`})}),_jsx(_components.td,{children:`Opaque identity for one exact room slot`}),_jsx(_components.td,{children:`Keep it associated with that slot. Prebook returns the authoritative copy used for booking.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unifystays_room_id`})}),_jsxs(_components.td,{children:[`The variant (or family, for a hotel-assigned bed type) this slot belongs to; `,_jsx(_components.code,{children:`unifystays_family_id`}),` names the family`]}),_jsx(_components.td,{children:`Look the family up in your store. Display identity only.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`provider_room`})}),_jsx(_components.td,{children:`The seller’s own room: name, beds, maximum guests and whatever static attributes it sent`}),_jsx(_components.td,{children:`Always show its beds and maximum guests on the offer row.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mapping_status`}),`, `,_jsx(_components.code,{children:`mapping_details`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`MAPPED`}),` when the slot is in a built room, `,_jsx(_components.code,{children:`UNMAPPED`}),` for a `,_jsx(_components.code,{children:`tmp_`}),` room; how the slot was matched`]}),_jsx(_components.td,{children:`Diagnostics only. They do not determine bookability.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unifystays_room`})}),_jsxs(_components.td,{children:[`Always `,_jsx(_components.code,{children:`null`})]}),_jsxs(_components.td,{children:[`Ignore it. Use `,_jsx(_components.code,{children:`unifystays_room_id`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`occupancy`})}),_jsx(_components.td,{children:`Adults and child ages quoted for this allocation`}),_jsx(_components.td,{children:`Keep guest assignment compatible with this occupancy.`})]})]})]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Room grouping never changes what is booked. Every offer is the supplier’s own\noffer: `,_jsx(_components.code,{children:`booking_token`}),` and `,_jsx(_components.code,{children:`room_allocation_id`}),` identify it, whatever room it\nis shown under.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`render-room-cards`,children:`Render Room Cards`}),`\n`,_jsx(_components.p,{children:`Offers from different suppliers for the same physical room are grouped in one\nfamily object, split into variants by bed type. Draw one card per family:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Header:`}),` the family’s `,_jsx(_components.code,{children:`name`}),` and `,_jsx(_components.code,{children:`details`}),` (photos, size, description,\namenities) labelled with `,_jsx(_components.code,{children:`details.source`}),`, for example “Photos \u0026 details:\nTripJack”.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Variants:`}),` show each variant’s `,_jsx(_components.code,{children:`beds`}),`, `,_jsx(_components.code,{children:`bedrooms`}),`, `,_jsx(_components.code,{children:`max_guests`}),` and\n`,_jsx(_components.code,{children:`smoking`}),` only from the variant object in `,_jsx(_components.code,{children:`variants[]`}),`; a null value is\nunknown.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rows:`}),` one per offer, with price, meal plan and cancellation from the\noffer, under the variant its slot’s `,_jsx(_components.code,{children:`unifystays_room_id`}),` names. Offers\nlisted under `,_jsx(_components.code,{children:`bed_assignment.suppliers`}),` (their slot id is the family id) go\nunder the label `,_jsx(_components.em,{children:`Bed type assigned by the hotel`}),`. Each offer row always shows\nits own `,_jsx(_components.code,{children:`provider_room`}),` beds and maximum guests.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`What to put on each part of the card:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Part`}),_jsx(_components.th,{children:`Take it from`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Room name, photos, size, description, amenities`}),_jsxs(_components.td,{children:[`The family object (`,_jsx(_components.code,{children:`name`}),`, `,_jsx(_components.code,{children:`details`}),`)`]}),_jsxs(_components.td,{children:[`All `,_jsx(_components.code,{children:`details`}),` come from the one supplier in `,_jsx(_components.code,{children:`details.source`}),`. Show it, for example “Photos \u0026 details: TripJack”.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bed configuration of a variant`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`variants[].beds`}),`, `,_jsx(_components.code,{children:`bedrooms`}),`, `,_jsx(_components.code,{children:`max_guests`}),`, `,_jsx(_components.code,{children:`smoking`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`null`}),` is unknown. Never copy a bed type from one supplier’s `,_jsx(_components.code,{children:`provider_room`}),` onto the variant.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Offer price`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`pricing.native_ledger.totals[0].total`}),` (or `,_jsx(_components.code,{children:`usd_ledger`}),`, or `,_jsx(_components.code,{children:`display_ledger`}),` to show your display currency)`]}),_jsxs(_components.td,{children:[`Divide `,_jsx(_components.code,{children:`amount_minor`}),` by 10 to the power of `,_jsx(_components.code,{children:`currency_exponent`}),`. Show `,_jsx(_components.code,{children:`payable_at_property`}),` separately as “pay at hotel”. See `,_jsx(_components.a,{href:`/api-reference/hotel-room-stream#the-price-ledger-pricing`,children:`the price ledger`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cancellation badge`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`cancellation.refundability`}),` and `,_jsx(_components.code,{children:`free_cancellation_until`})]}),_jsxs(_components.td,{children:[`Show the full `,_jsx(_components.code,{children:`penalties`}),` timeline on a detail view.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Meal plan and inclusions`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`rooms[].meal_plan.label`}),`, `,_jsx(_components.code,{children:`inclusions[].label`})]}),_jsx(_components.td,{children:`One per room slot.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Must-read text`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`notices[]`}),` where `,_jsx(_components.code,{children:`must_display`}),` is `,_jsx(_components.code,{children:`true`})]}),_jsx(_components.td,{children:`Show before the guest books.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Expiry`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`lifecycle.expires_at`})}),_jsx(_components.td,{children:`Search again after it.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`display-currency`,children:`Display currency`}),`\n`,_jsxs(_components.p,{children:[`Every offer’s `,_jsx(_components.code,{children:`pricing`}),` carries `,_jsx(_components.code,{children:`display_currency`}),` and `,_jsx(_components.code,{children:`display_ledger`}),`: the\nsupplier’s `,_jsx(_components.code,{children:`native_ledger`}),` lines converted to the display currency, which is\nyour organization’s setting or the `,_jsx(_components.code,{children:`X-Unifystays-Currency`}),` header. Read\n`,_jsx(_components.code,{children:`display_currency`}),` instead of assuming it. `,_jsx(_components.code,{children:`native_ledger`}),` stays the\nauthoritative amount owed.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it means`}),_jsx(_components.th,{children:`How to use it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing.display_currency`})}),_jsxs(_components.td,{children:[`ISO 4217 code of `,_jsx(_components.code,{children:`display_ledger`}),` and of every `,_jsx(_components.code,{children:`display_*`}),` amount.`]}),_jsx(_components.td,{children:`Always read it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing.display_ledger`})}),_jsxs(_components.td,{children:[`The same lines as `,_jsx(_components.code,{children:`native_ledger`}),`, converted to `,_jsx(_components.code,{children:`display_currency`}),`. Same as `,_jsx(_components.code,{children:`usd_ledger`}),` when the display currency is USD. `,_jsx(_components.code,{children:`null`}),` when a rate is missing.`]}),_jsxs(_components.td,{children:[`Show it as the guest price. Fall back to `,_jsx(_components.code,{children:`native_ledger`}),` when `,_jsx(_components.code,{children:`null`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`commercial_display`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`commercial`}),` with every amount in `,_jsx(_components.code,{children:`display_currency`}),`. `,_jsx(_components.code,{children:`null`}),` when `,_jsx(_components.code,{children:`commercial`}),` is hidden.`]}),_jsx(_components.td,{children:`Informational only, never add it to a ledger.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`nightly_prices[].display_amount`})}),_jsxs(_components.td,{children:[`The night’s amount in `,_jsx(_components.code,{children:`display_currency`}),`.`]}),_jsx(_components.td,{children:`Optional display.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`cancellation.penalties[].display_amount`}),`, `,_jsx(_components.code,{children:`no_show.display_amount`})]}),_jsxs(_components.td,{children:[`The penalty in `,_jsx(_components.code,{children:`display_currency`}),`.`]}),_jsx(_components.td,{children:`Show next to the policy.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`deposit.display_amount`})}),_jsxs(_components.td,{children:[`The deposit in `,_jsx(_components.code,{children:`display_currency`}),`.`]}),_jsx(_components.td,{children:`Show next to the deposit.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`display_*`}),` value is `,_jsx(_components.code,{children:`null`}),` when no exchange rate is available for the\ncurrency; it is never a made-up zero. Display amounts are converted with the\ncurrent rate and are for showing only. The supplier charges in the native\ncurrency.`]}),`\n`,_jsx(_components.p,{children:`Room ids:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`unifystays_room_id`}),` is for display and grouping only. Book with\n`,_jsx(_components.code,{children:`booking_token`}),` and `,_jsx(_components.code,{children:`room_allocation_id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.code,{children:`tmp_`}),` id is valid for this search only. Do not store it.`]}),`\n`,_jsx(_components.li,{children:`A built room id may be retired later, when two rooms turn out to be the same\nroom. Do not keep room ids as long-lived keys.`}),`\n`,_jsxs(_components.li,{children:[`A later `,_jsx(_components.code,{children:`provider_options`}),` event may send a family again with different\nvariants, `,_jsx(_components.code,{children:`bed_assignment`}),` or details: replace your copy.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Client logic:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`19`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`19`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` rooms`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Map`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`FamilyObject`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`>(); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// family unifystays_room_id -> family`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` offers`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Map`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`Offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[]>(); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// card key -> offers`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` room`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` of`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unifystays_rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unifystays_room_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`source`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`addEventListener`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"provider_options\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` event`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` JSON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`parse`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` room`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` of`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`rooms`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ??`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [])`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unifystays_room_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` offer`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` of`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`options`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // One room per offer: the slot's family. Several rooms: the offer family.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` key`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`length`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ?`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`].`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unifystays_family_id`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offer_family_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ??`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offer_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` offers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, [`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`??`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` []), `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For a multi-room search the card key is `,_jsx(_components.code,{children:`offer_family_id ?? offer_id`}),` and the\nheader lists each slot’s family. An offer with `,_jsx(_components.code,{children:`offer_family_id: null`}),` contains\na `,_jsx(_components.code,{children:`tmp_`}),` room, so a multi-room offer with a `,_jsx(_components.code,{children:`tmp_`}),` room gets its own card.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Keep the selected option’s `,_jsx(_components.code,{children:`booking_token`}),` only for the immediate prebook\nstep; it is time-sensitive.`]}),`\n`,_jsxs(_components.li,{children:[`Connect to `,_jsx(_components.a,{href:`/api-reference/hotel-room-stream`,children:`Stream Room Updates`}),` to obtain\nthe bookable options and their identifiers.`]}),`\n`,_jsx(_components.li,{children:`Request fresh room options if the stay dates, guest mix, nationality, or\nselected hotel changes.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Do not cache room options or reuse their booking tokens as a checkout\nguarantee. Supplier-backed availability and price can change.`})}),`\n`,_jsx(_components.p,{children:`The OpenAPI section below provides the complete request body and response\nfields, including room options and stream identifiers.`})]})}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":"Get Room Options","description":"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.","openapi":"reference/openapi.json POST /hotels/{hotel_id}/rooms","href":"/api-reference/hotel-rooms"}}},"mdxSourceWithNoJs":{"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`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Info,RequestExample,ResponseExample,Step,Steps,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Call this endpoint after the customer selects a hotel. It is the second step\nof the flow: Search → `,_jsx(_components.strong,{children:`Rooms`}),` → `,_jsx(_components.a,{href:`/api-reference/prebook`,children:`Prebook`}),` → Book.\nSend the same dates, occupancy and nationality used for hotel search.\nUnifystays calls the active suppliers in parallel and normalizes their room\noptions.`]}),`\n`,_jsxs(_components.p,{children:[`The POST returns quickly. It answers with the rooms Unifystays already knows\nfor this hotel and a `,_jsx(_components.code,{children:`stream_id`}),` / `,_jsx(_components.code,{children:`sse_stream_url`}),`. The live supplier offers\nthen arrive on that stream as Server-Sent Events, one `,_jsx(_components.code,{children:`provider_options`}),` event\nper supplier batch, and a final `,_jsx(_components.code,{children:`done`}),` event. Read the stream with\n`,_jsx(_components.a,{href:`/api-reference/hotel-room-stream`,children:`Stream Room Updates`}),`.`]}),`\n`,_jsx(_components.p,{children:`Each streamed offer carries two identifiers you need later:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`booking_token`}),`: identifies the whole offer. You send it to Prebook.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`room_allocation_id`}),`: identifies one room slot of the offer.`]}),`\n`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`POST the stay`,children:_jsxs(_components.p,{children:[`Send dates, nationality and the occupancy of every room. Keep\n`,_jsx(_components.code,{children:`data.unifystays_rooms`}),` and open `,_jsx(_components.code,{children:`data.sse_stream_url`}),` immediately.`]})}),_jsx(Step,{title:`Read the stream`,children:_jsxs(_components.p,{children:[`Add family objects and offers as `,_jsx(_components.code,{children:`provider_options`}),` events arrive. Stop at\n`,_jsx(_components.code,{children:`done`}),`.`]})}),_jsx(Step,{title:`Show room cards`,children:_jsxs(_components.p,{children:[`Draw one card per room family with the offers under it (see\n`,_jsx(_components.a,{href:`#render-room-cards`,children:`Render Room Cards`}),`).`]})}),_jsx(Step,{title:`Prebook the chosen offer`,children:_jsxs(_components.p,{children:[`Send its `,_jsx(_components.code,{children:`booking_token`}),` unchanged to `,_jsx(_components.a,{href:`/api-reference/prebook`,children:`Prebook`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`request-example`,children:`Request Example`}),`\n`,_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`16`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$UNIFYSTAYS_BASE_URL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/hotels/123456/rooms\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"content-type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"x-api-key: `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$UNIFYSTAYS_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"check_in\": \"2026-09-12\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"check_out\": \"2026-09-15\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"nationality\": \"IN\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"language\": \"en\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"rooms\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"adults\": 2,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"child_ages\": []`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`2`,id:`request-fields`,children:`Request Fields`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Where to get it`}),_jsx(_components.th,{children:`How it is used`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Path `,_jsx(_components.code,{children:`hotel_id`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`hotel_id`}),` from the selected hotel-search or autocomplete result`]}),_jsx(_components.td,{children:`Selects the hotel whose live room inventory is requested.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`check_in`}),`, `,_jsx(_components.code,{children:`check_out`})]}),_jsx(_components.td,{children:`Your customer’s stay form`}),_jsx(_components.td,{children:`Must describe the same stay the customer selected during search.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`nationality`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`iso_code`}),` from `,_jsx(_components.a,{href:`/api-reference/nationalities`,children:`Nationalities`})]}),_jsxs(_components.td,{children:[`Used by suppliers for market eligibility, pricing, and booking rules. Defaults to `,_jsx(_components.code,{children:`residency`}),` when omitted.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`residency`})}),_jsx(_components.td,{children:`Your guest form (ISO 3166-1 alpha-2)`}),_jsxs(_components.td,{children:[`Optional. Used for residency-restricted rates. Defaults to `,_jsx(_components.code,{children:`nationality`}),`. When both are omitted `,_jsx(_components.code,{children:`IN`}),` is used, so always send at least one.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`language`})}),_jsxs(_components.td,{children:[`Your locale (for example `,_jsx(_components.code,{children:`en`}),`)`]}),_jsxs(_components.td,{children:[`Optional. Echoed in `,_jsx(_components.code,{children:`quote_context.language`}),` of each offer.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`rooms`})}),_jsx(_components.td,{children:`Your occupancy form`}),_jsx(_components.td,{children:`Send 1–8 entries, one for every room the customer needs. Array position is preserved as a room allocation.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`rooms[].adults`})}),_jsx(_components.td,{children:`Your occupancy form`}),_jsx(_components.td,{children:`Number of adults staying in that room (1–5). Adults plus children must not exceed 5 per room.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`rooms[].child_ages`})}),_jsx(_components.td,{children:`Your occupancy form`}),_jsxs(_components.td,{children:[`Age of every child staying in that room. Use `,_jsx(_components.code,{children:`[]`}),` when there are no children.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Optional header `,_jsx(_components.code,{children:`X-Unifystays-Currency`}),` (an ISO 4217 code such as `,_jsx(_components.code,{children:`EUR`}),`) sets the\ndisplay currency for this request. Without it the response uses your\norganization’s display currency, which is USD unless configured. See\n`,_jsx(_components.a,{href:`#display-currency`,children:`Display currency`}),`.`]}),`\n`,_jsx(_components.p,{children:`If the customer changes the hotel, dates, nationality, number of rooms, or any\nroom’s occupancy, request room options again. Tokens from the old request must\nnot be reused.`}),`\n`,_jsxs(_components.p,{children:[`Errors: `,_jsx(_components.code,{children:`400`}),` for an invalid body (for example `,_jsx(_components.code,{children:`check_in`}),` in the past, or\n`,_jsx(_components.code,{children:`check_out`}),` not after `,_jsx(_components.code,{children:`check_in`}),`), `,_jsx(_components.code,{children:`404`}),` when the hotel does not exist. The\nbody is checked when you POST; supplier problems are reported later on the\nstream, not as an HTTP error.`]}),`\n`,_jsx(Heading,{level:`2`,id:`initial-response-example`,children:`Initial Response Example`}),`\n`,_jsxs(_components.p,{children:[`The POST response is intentionally fast. `,_jsx(_components.code,{children:`data.options`}),` is initially empty;\nconnect to `,_jsx(_components.code,{children:`data.sse_stream_url`}),` to receive live `,_jsx(_components.code,{children:`provider_options`}),` events.\nThis example is for a hotel that was searched before. On a hotel’s first search\n`,_jsx(_components.code,{children:`unifystays_rooms`}),` is `,_jsx(_components.code,{children:`[]`}),`.`]}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:``,numberOfLines:`44`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`44`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Static rooms loaded. Connect to SSE stream for live provider options.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"hotel_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1393631\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"hotel_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Taj Palace, New Delhi\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"check_in\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-20\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"check_out\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-21\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"nights\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"total_options\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"providers_queried\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"TRIPJACK\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"REZLIVE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"RATEHAWK\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"unifystays_rooms\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"unifystays_room_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"4120552\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Deluxe Room\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"details\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"source\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"TRIPJACK\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"images\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.example/tj-twin-1.jpg\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"caption\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"is_primary\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"size\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"value\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`32`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"unit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sqm\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"description\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Room overlooking the Diplomatic Enclave.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"description_format\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"TEXT\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"amenities\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"wifi\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Free WiFi\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"suppliers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"RATEHAWK\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"REZLIVE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"TRIPJACK\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"variants\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"unifystays_room_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"4120553\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"beds\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"TWIN\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"count\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"bedrooms\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"max_guests\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"smoking\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"suppliers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"TRIPJACK\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"bed_assignment\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"suppliers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"REZLIVE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"stream_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"stream_a71c0e9b2f44\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sse_stream_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/hotels/1393631/rooms/stream/stream_a71c0e9b2f44\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"options\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: []`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`2`,id:`use-the-response`,children:`Use the Response`}),`\n`,_jsxs(_components.p,{children:[`The initial response contains the rooms already known for this hotel and a\n`,_jsx(_components.code,{children:`stream_id`}),` with `,_jsx(_components.code,{children:`sse_stream_url`}),`. Live supplier options are delivered\nprogressively through the stream. Every streamed bookable option includes a\nshort signed `,_jsx(_components.code,{children:`booking_token`}),` required by `,_jsx(_components.a,{href:`/api-reference/prebook`,children:`Prebook a Room`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Response key`}),_jsx(_components.th,{children:`What it means`}),_jsx(_components.th,{children:`What your integration should do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data.hotel_id`})}),_jsx(_components.td,{children:`The Unifystays hotel represented by this room response`}),_jsxs(_components.td,{children:[`Keep it with the selected option and send it as `,_jsx(_components.code,{children:`hotel_id`}),` to prebook.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data.unifystays_rooms[]`})}),_jsx(_components.td,{children:`The hotel’s family objects; store each family and its variants by id. Empty on a hotel’s first search`}),_jsx(_components.td,{children:`Store each room by its id and draw an empty card for it until offers arrive.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data.options[]`})}),_jsxs(_components.td,{children:[`Reserved response field; always empty in the initial response (`,_jsx(_components.code,{children:`total_options`}),` is 0)`]}),_jsxs(_components.td,{children:[`Read live options from `,_jsx(_components.code,{children:`provider_options`}),` SSE events.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data.providers_queried[]`})}),_jsx(_components.td,{children:`Suppliers being queried for this hotel`}),_jsxs(_components.td,{children:[`Informational. A listed supplier can still return nothing; the `,_jsx(_components.code,{children:`done`}),` event reports the outcome.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`stream_id`}),`, `,_jsx(_components.code,{children:`sse_stream_url`})]}),_jsx(_components.td,{children:`Short-lived SSE stream for progressive supplier results`}),_jsxs(_components.td,{children:[`Connect immediately and collect options until the `,_jsx(_components.code,{children:`done`}),` event.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`provider_options.rooms[]`})]}),_jsx(_components.td,{children:`The family objects the event’s offers use, new or updated`}),_jsxs(_components.td,{children:[`Add or replace each family by `,_jsx(_components.code,{children:`unifystays_room_id`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`provider_options.options[]`})]}),_jsx(_components.td,{children:`Complete supplier offers for all requested room slots`}),_jsx(_components.td,{children:`The customer selects one complete option; do not combine rooms from different options.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`options[].booking_token`})]}),_jsxs(_components.td,{children:[`Opaque, signed identity for the complete selected option; valid for at most 15 minutes (`,_jsx(_components.code,{children:`lifecycle.expires_at`}),`)`]}),_jsx(_components.td,{children:`Send it unchanged to prebook. Do not create, parse, or modify it.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`options[].offer_family_id`})]}),_jsxs(_components.td,{children:[`Offers whose slots are in the same families in the same order share it; `,_jsx(_components.code,{children:`null`}),` when any slot is a `,_jsx(_components.code,{children:`tmp_`}),` room`]}),_jsx(_components.td,{children:`Use it as the card key for multi-room searches. Never use it for booking.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Stream `,_jsx(_components.code,{children:`options[].rooms[]`})]}),_jsx(_components.td,{children:`One entry per requested room instance`}),_jsxs(_components.td,{children:[`Put the offer on the card of its slot’s room; show the slot’s own `,_jsx(_components.code,{children:`provider_room`}),` facts on the offer row.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`room_allocation_id`})}),_jsx(_components.td,{children:`Opaque identity for one exact room slot`}),_jsx(_components.td,{children:`Keep it associated with that slot. Prebook returns the authoritative copy used for booking.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unifystays_room_id`})}),_jsxs(_components.td,{children:[`The variant (or family, for a hotel-assigned bed type) this slot belongs to; `,_jsx(_components.code,{children:`unifystays_family_id`}),` names the family`]}),_jsx(_components.td,{children:`Look the family up in your store. Display identity only.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`provider_room`})}),_jsx(_components.td,{children:`The seller’s own room: name, beds, maximum guests and whatever static attributes it sent`}),_jsx(_components.td,{children:`Always show its beds and maximum guests on the offer row.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mapping_status`}),`, `,_jsx(_components.code,{children:`mapping_details`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`MAPPED`}),` when the slot is in a built room, `,_jsx(_components.code,{children:`UNMAPPED`}),` for a `,_jsx(_components.code,{children:`tmp_`}),` room; how the slot was matched`]}),_jsx(_components.td,{children:`Diagnostics only. They do not determine bookability.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unifystays_room`})}),_jsxs(_components.td,{children:[`Always `,_jsx(_components.code,{children:`null`})]}),_jsxs(_components.td,{children:[`Ignore it. Use `,_jsx(_components.code,{children:`unifystays_room_id`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`occupancy`})}),_jsx(_components.td,{children:`Adults and child ages quoted for this allocation`}),_jsx(_components.td,{children:`Keep guest assignment compatible with this occupancy.`})]})]})]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Room grouping never changes what is booked. Every offer is the supplier’s own\noffer: `,_jsx(_components.code,{children:`booking_token`}),` and `,_jsx(_components.code,{children:`room_allocation_id`}),` identify it, whatever room it\nis shown under.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`render-room-cards`,children:`Render Room Cards`}),`\n`,_jsx(_components.p,{children:`Offers from different suppliers for the same physical room are grouped in one\nfamily object, split into variants by bed type. Draw one card per family:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Header:`}),` the family’s `,_jsx(_components.code,{children:`name`}),` and `,_jsx(_components.code,{children:`details`}),` (photos, size, description,\namenities) labelled with `,_jsx(_components.code,{children:`details.source`}),`, for example “Photos \u0026 details:\nTripJack”.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Variants:`}),` show each variant’s `,_jsx(_components.code,{children:`beds`}),`, `,_jsx(_components.code,{children:`bedrooms`}),`, `,_jsx(_components.code,{children:`max_guests`}),` and\n`,_jsx(_components.code,{children:`smoking`}),` only from the variant object in `,_jsx(_components.code,{children:`variants[]`}),`; a null value is\nunknown.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rows:`}),` one per offer, with price, meal plan and cancellation from the\noffer, under the variant its slot’s `,_jsx(_components.code,{children:`unifystays_room_id`}),` names. Offers\nlisted under `,_jsx(_components.code,{children:`bed_assignment.suppliers`}),` (their slot id is the family id) go\nunder the label `,_jsx(_components.em,{children:`Bed type assigned by the hotel`}),`. Each offer row always shows\nits own `,_jsx(_components.code,{children:`provider_room`}),` beds and maximum guests.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`What to put on each part of the card:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Part`}),_jsx(_components.th,{children:`Take it from`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Room name, photos, size, description, amenities`}),_jsxs(_components.td,{children:[`The family object (`,_jsx(_components.code,{children:`name`}),`, `,_jsx(_components.code,{children:`details`}),`)`]}),_jsxs(_components.td,{children:[`All `,_jsx(_components.code,{children:`details`}),` come from the one supplier in `,_jsx(_components.code,{children:`details.source`}),`. Show it, for example “Photos \u0026 details: TripJack”.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bed configuration of a variant`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`variants[].beds`}),`, `,_jsx(_components.code,{children:`bedrooms`}),`, `,_jsx(_components.code,{children:`max_guests`}),`, `,_jsx(_components.code,{children:`smoking`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`null`}),` is unknown. Never copy a bed type from one supplier’s `,_jsx(_components.code,{children:`provider_room`}),` onto the variant.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Offer price`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`pricing.native_ledger.totals[0].total`}),` (or `,_jsx(_components.code,{children:`usd_ledger`}),`, or `,_jsx(_components.code,{children:`display_ledger`}),` to show your display currency)`]}),_jsxs(_components.td,{children:[`Divide `,_jsx(_components.code,{children:`amount_minor`}),` by 10 to the power of `,_jsx(_components.code,{children:`currency_exponent`}),`. Show `,_jsx(_components.code,{children:`payable_at_property`}),` separately as “pay at hotel”. See `,_jsx(_components.a,{href:`/api-reference/hotel-room-stream#the-price-ledger-pricing`,children:`the price ledger`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cancellation badge`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`cancellation.refundability`}),` and `,_jsx(_components.code,{children:`free_cancellation_until`})]}),_jsxs(_components.td,{children:[`Show the full `,_jsx(_components.code,{children:`penalties`}),` timeline on a detail view.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Meal plan and inclusions`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`rooms[].meal_plan.label`}),`, `,_jsx(_components.code,{children:`inclusions[].label`})]}),_jsx(_components.td,{children:`One per room slot.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Must-read text`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`notices[]`}),` where `,_jsx(_components.code,{children:`must_display`}),` is `,_jsx(_components.code,{children:`true`})]}),_jsx(_components.td,{children:`Show before the guest books.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Expiry`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`lifecycle.expires_at`})}),_jsx(_components.td,{children:`Search again after it.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`display-currency`,children:`Display currency`}),`\n`,_jsxs(_components.p,{children:[`Every offer’s `,_jsx(_components.code,{children:`pricing`}),` carries `,_jsx(_components.code,{children:`display_currency`}),` and `,_jsx(_components.code,{children:`display_ledger`}),`: the\nsupplier’s `,_jsx(_components.code,{children:`native_ledger`}),` lines converted to the display currency, which is\nyour organization’s setting or the `,_jsx(_components.code,{children:`X-Unifystays-Currency`}),` header. Read\n`,_jsx(_components.code,{children:`display_currency`}),` instead of assuming it. `,_jsx(_components.code,{children:`native_ledger`}),` stays the\nauthoritative amount owed.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it means`}),_jsx(_components.th,{children:`How to use it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing.display_currency`})}),_jsxs(_components.td,{children:[`ISO 4217 code of `,_jsx(_components.code,{children:`display_ledger`}),` and of every `,_jsx(_components.code,{children:`display_*`}),` amount.`]}),_jsx(_components.td,{children:`Always read it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing.display_ledger`})}),_jsxs(_components.td,{children:[`The same lines as `,_jsx(_components.code,{children:`native_ledger`}),`, converted to `,_jsx(_components.code,{children:`display_currency`}),`. Same as `,_jsx(_components.code,{children:`usd_ledger`}),` when the display currency is USD. `,_jsx(_components.code,{children:`null`}),` when a rate is missing.`]}),_jsxs(_components.td,{children:[`Show it as the guest price. Fall back to `,_jsx(_components.code,{children:`native_ledger`}),` when `,_jsx(_components.code,{children:`null`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`commercial_display`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`commercial`}),` with every amount in `,_jsx(_components.code,{children:`display_currency`}),`. `,_jsx(_components.code,{children:`null`}),` when `,_jsx(_components.code,{children:`commercial`}),` is hidden.`]}),_jsx(_components.td,{children:`Informational only, never add it to a ledger.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`nightly_prices[].display_amount`})}),_jsxs(_components.td,{children:[`The night’s amount in `,_jsx(_components.code,{children:`display_currency`}),`.`]}),_jsx(_components.td,{children:`Optional display.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`cancellation.penalties[].display_amount`}),`, `,_jsx(_components.code,{children:`no_show.display_amount`})]}),_jsxs(_components.td,{children:[`The penalty in `,_jsx(_components.code,{children:`display_currency`}),`.`]}),_jsx(_components.td,{children:`Show next to the policy.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`deposit.display_amount`})}),_jsxs(_components.td,{children:[`The deposit in `,_jsx(_components.code,{children:`display_currency`}),`.`]}),_jsx(_components.td,{children:`Show next to the deposit.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`display_*`}),` value is `,_jsx(_components.code,{children:`null`}),` when no exchange rate is available for the\ncurrency; it is never a made-up zero. Display amounts are converted with the\ncurrent rate and are for showing only. The supplier charges in the native\ncurrency.`]}),`\n`,_jsx(_components.p,{children:`Room ids:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`unifystays_room_id`}),` is for display and grouping only. Book with\n`,_jsx(_components.code,{children:`booking_token`}),` and `,_jsx(_components.code,{children:`room_allocation_id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.code,{children:`tmp_`}),` id is valid for this search only. Do not store it.`]}),`\n`,_jsx(_components.li,{children:`A built room id may be retired later, when two rooms turn out to be the same\nroom. Do not keep room ids as long-lived keys.`}),`\n`,_jsxs(_components.li,{children:[`A later `,_jsx(_components.code,{children:`provider_options`}),` event may send a family again with different\nvariants, `,_jsx(_components.code,{children:`bed_assignment`}),` or details: replace your copy.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Client logic:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`19`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`19`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` rooms`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Map`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`FamilyObject`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`>(); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// family unifystays_room_id -> family`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` offers`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Map`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`Offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[]>(); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// card key -> offers`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` room`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` of`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unifystays_rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unifystays_room_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`source`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`addEventListener`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"provider_options\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` event`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` JSON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`parse`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` room`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` of`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`rooms`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ??`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [])`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unifystays_room_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` offer`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` of`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`options`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // One room per offer: the slot's family. Several rooms: the offer family.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` key`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`length`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ?`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`rooms`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`].`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unifystays_family_id`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offer_family_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ??`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offer_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` offers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, [`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`??`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` []), `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`offer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For a multi-room search the card key is `,_jsx(_components.code,{children:`offer_family_id ?? offer_id`}),` and the\nheader lists each slot’s family. An offer with `,_jsx(_components.code,{children:`offer_family_id: null`}),` contains\na `,_jsx(_components.code,{children:`tmp_`}),` room, so a multi-room offer with a `,_jsx(_components.code,{children:`tmp_`}),` room gets its own card.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Keep the selected option’s `,_jsx(_components.code,{children:`booking_token`}),` only for the immediate prebook\nstep; it is time-sensitive.`]}),`\n`,_jsxs(_components.li,{children:[`Connect to `,_jsx(_components.a,{href:`/api-reference/hotel-room-stream`,children:`Stream Room Updates`}),` to obtain\nthe bookable options and their identifiers.`]}),`\n`,_jsx(_components.li,{children:`Request fresh room options if the stay dates, guest mix, nationality, or\nselected hotel changes.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Do not cache room options or reuse their booking tokens as a checkout\nguarantee. Supplier-backed availability and price can change.`})}),`\n`,_jsx(_components.p,{children:`The OpenAPI section below provides the complete request body and response\nfields, including room options and stream identifiers.`})]})}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":"Get Room Options","description":"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.","openapi":"reference/openapi.json POST /hotels/{hotel_id}/rooms","href":"/api-reference/hotel-rooms"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Request Example","slug":"request-example","depth":2,"children":[]},{"title":"Request Fields","slug":"request-fields","depth":2,"children":[]},{"title":"Initial Response Example","slug":"initial-response-example","depth":2,"children":[]},{"title":"Use the Response","slug":"use-the-response","depth":2,"children":[]},{"title":"Render Room Cards","slug":"render-room-cards","depth":2,"children":[]},{"title":"Display currency","slug":"display-currency","depth":2,"children":[]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"shellscript\">\u003ccode language=\"shellscript\" numberOfLines=\"16\">\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">curl\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">$UNIFYSTAYS_BASE_URL\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">/hotels/123456/rooms\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -X\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> POST\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"content-type: application/json\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"x-api-key: \u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">$UNIFYSTAYS_API_KEY\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -d\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> '{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"check_in\": \"2026-09-12\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"check_out\": \"2026-09-15\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"nationality\": \"IN\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"language\": \"en\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"rooms\": [\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"adults\": 2,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"child_ages\": []\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> ]\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }'\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"44\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"success\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">true\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"message\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Static rooms loaded. Connect to SSE stream for live provider options.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"data\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"hotel_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"1393631\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"hotel_name\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Taj Palace, New Delhi\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"check_in\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-20\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"check_out\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-21\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"nights\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"total_options\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">0\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"providers_queried\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"TRIPJACK\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"REZLIVE\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"RATEHAWK\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"unifystays_rooms\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"unifystays_room_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"4120552\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"name\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Deluxe Room\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"details\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"source\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"TRIPJACK\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"images\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> { \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"url\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"https://cdn.example/tj-twin-1.jpg\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"caption\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"is_primary\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">true\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> ],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"size\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: { \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"value\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">32\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"unit\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"sqm\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> },\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"description\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Room overlooking the Diplomatic Enclave.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"description_format\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"TEXT\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"amenities\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [{ \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"wifi\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"name\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Free WiFi\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }]\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> },\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"suppliers\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"RATEHAWK\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"REZLIVE\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"TRIPJACK\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"variants\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"unifystays_room_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"4120553\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"beds\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [{ \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"type\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"TWIN\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"count\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">2\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"bedrooms\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"max_guests\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">2\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"smoking\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"suppliers\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"TRIPJACK\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">]\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> ],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"bed_assignment\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: { \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"suppliers\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"REZLIVE\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">] }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> ],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"stream_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"stream_a71c0e9b2f44\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"sse_stream_url\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"/hotels/1393631/rooms/stream/stream_a71c0e9b2f44\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"options\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: []\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.","operationId":"HotelRoomsController_getRooms","parameters":["c05bd32a-82b5-414c-baca-6b7d0171bc17","debe8416-8c6c-4d04-99a1-e26c8e06f56f","7d306f05-30b3-40ef-8166-248194327190","95ffbf8e-6e3c-4e4f-9e74-34285f446e22"],"requestBody":"56fec0cf-0bb0-4046-b30d-0d7ff9c1dc0f","responses":{"200":"e4a68953-70af-4ed9-88c2-1fe44f646fa1","400":"aa89669b-b0da-4060-9219-9853075d3415","404":"f3af8327-452f-49bf-8d7b-552c24fb737f","406":"827f8e19-16a9-4d11-a0f4-fd77157e4459"},"summary":"Get all room options for a hotel","tags":["Hotel Rooms"],"method":"post","type":"path","servers":["58b3027e-a79b-4d2c-898a-ec7cc8ae6eae","32e511f6-5caf-4d51-acd6-ad4d164fb151"],"security":["71ce26d4-cf7b-4d3b-ab99-f95701a1c420"],"path":"/hotels/{hotel_id}/rooms","baseUrlOptions":["https://api-sandbox.unifystays.com","https://api.unifystays.com"],"title":"Get all room options for a hotel","codeSamples":[],"requiredOnlyExamples":false,"requestExamples":[{"dropdown":false,"language":"shellscript","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"shellscript","children":{"type":"code","key":null,"ref":null,"props":{"language":"shellscript","numberOfLines":"16","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#953800","--shiki-dark":"#DCDCAA"},"children":"curl"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"$UNIFYSTAYS_BASE_URL"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"/hotels/123456/rooms\""}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -X"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" POST"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -H"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"content-type: application/json\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -H"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"x-api-key: "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"$UNIFYSTAYS_API_KEY"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\""}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -d"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" '{"}}]}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"check_in\": \"2026-09-12\","}}}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"check_out\": \"2026-09-15\","}}}},"\n",{"type":"span","key":"14","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"nationality\": \"IN\","}}}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"language\": \"en\","}}}},"\n",{"type":"span","key":"18","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"rooms\": ["}}}},"\n",{"type":"span","key":"20","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" {"}}}},"\n",{"type":"span","key":"22","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"adults\": 2,"}}}},"\n",{"type":"span","key":"24","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"child_ages\": []"}}}},"\n",{"type":"span","key":"26","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" }"}}}},"\n",{"type":"span","key":"28","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" ]"}}}},"\n",{"type":"span","key":"30","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" }'"}}}},"\n"]}}}},"filename":""}],"requestExampleType":"mdx","responseExamples":[{"dropdown":false,"language":"json","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"json","children":{"type":"code","key":null,"ref":null,"props":{"language":"json","numberOfLines":"44","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"success\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"true"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"message\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Static rooms loaded. Connect to SSE stream for live provider options.\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"data\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": {"}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"hotel_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"1393631\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"hotel_name\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Taj Palace, New Delhi\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"check_in\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"2026-10-20\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"14","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"check_out\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"2026-10-21\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"nights\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"1"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"18","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"total_options\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"0"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"20","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"providers_queried\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"TRIPJACK\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"REZLIVE\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"RATEHAWK\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"],"}}]}},"\n",{"type":"span","key":"22","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"unifystays_rooms\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}}]}},"\n",{"type":"span","key":"24","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" {"}}}},"\n",{"type":"span","key":"26","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"unifystays_room_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"4120552\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"28","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"name\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Deluxe Room\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"30","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"details\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": {"}}]}},"\n",{"type":"span","key":"32","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"source\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"TRIPJACK\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"34","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"images\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}}]}},"\n",{"type":"span","key":"36","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" { "}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"url\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"https://cdn.example/tj-twin-1.jpg\""}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"caption\""}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"is_primary\""}},{"type":"span","key":"10","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"11","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"true"}},{"type":"span","key":"12","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}]}},"\n",{"type":"span","key":"38","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" ],"}}}},"\n",{"type":"span","key":"40","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"size\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": { "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"value\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"32"}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"unit\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"sqm\""}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" },"}}]}},"\n",{"type":"span","key":"42","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"description\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Room overlooking the Diplomatic Enclave.\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"44","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"description_format\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"TEXT\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"46","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"amenities\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": [{ "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"id\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"wifi\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"name\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Free WiFi\""}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }]"}}]}},"\n",{"type":"span","key":"48","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" },"}}}},"\n",{"type":"span","key":"50","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"suppliers\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"RATEHAWK\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"REZLIVE\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"TRIPJACK\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"],"}}]}},"\n",{"type":"span","key":"52","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"variants\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}}]}},"\n",{"type":"span","key":"54","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" {"}}}},"\n",{"type":"span","key":"56","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"unifystays_room_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"4120553\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"58","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"beds\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": [{ "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"type\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"TWIN\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"count\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"2"}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }],"}}]}},"\n",{"type":"span","key":"60","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"bedrooms\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"62","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"max_guests\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"2"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"64","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"smoking\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"66","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"suppliers\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"TRIPJACK\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"]"}}]}},"\n",{"type":"span","key":"68","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}}},"\n",{"type":"span","key":"70","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" ],"}}}},"\n",{"type":"span","key":"72","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"bed_assignment\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": { "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":"\"suppliers\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"REZLIVE\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"] }"}}]}},"\n",{"type":"span","key":"74","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}}},"\n",{"type":"span","key":"76","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" ],"}}}},"\n",{"type":"span","key":"78","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"stream_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"stream_a71c0e9b2f44\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"80","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"sse_stream_url\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"/hotels/1393631/rooms/stream/stream_a71c0e9b2f44\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"82","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"options\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": []"}}]}},"\n",{"type":"span","key":"84","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}}},"\n",{"type":"span","key":"86","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"}"}}}},"\n"]}}}},"filename":""}],"responseExampleType":"mdx"},"dependencies":{"parameters":{"c05bd32a-82b5-414c-baca-6b7d0171bc17":{"name":"hotel_id","required":true,"in":"path","description":"Unifystays hotel ID from hotel search or destination autocomplete (numeric string).","schema":{"example":"123456","type":"string","isRequired":true,"description":"Unifystays hotel ID from hotel search or destination autocomplete (numeric string).","uniqueKey":"","typeLabel":"string"}},"debe8416-8c6c-4d04-99a1-e26c8e06f56f":{"name":"language","description":"Enter language code(ex. en)","in":"header","schema":{}},"7d306f05-30b3-40ef-8166-248194327190":{"name":"X-Unifystays-Contract-Version","in":"header","required":false,"description":"Hotel API contract version. Optional: 2 is the current version and the default.","schema":{"type":"string","enum":["2"],"default":"2","isRequired":false,"description":"Hotel API contract version. Optional: 2 is the current version and the default.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"95ffbf8e-6e3c-4e4f-9e74-34285f446e22":{"name":"X-Unifystays-Currency","in":"header","required":false,"description":"ISO 4217 currency for display amounts (display_ledger, display_amount, commercial_display). Optional: defaults to your organization's display currency, USD unless configured. Read pricing.display_currency in the response.","schema":{"type":"string","minLength":3,"maxLength":3,"example":"EUR","isRequired":false,"description":"ISO 4217 currency for display amounts (display_ledger, display_amount, commercial_display). Optional: defaults to your organization's display currency, USD unless configured. Read pricing.display_currency in the response.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"check_in":{"type":"string","description":"Check-in date (YYYY-MM-DD). Today or later. Use the same date as the hotel search.","example":"2026-07-01","isRequired":true,"uniqueKey":"check_in","typeLabel":"string"},"check_out":{"type":"string","description":"Check-out date (YYYY-MM-DD). Must be after check_in. Use the same date as the hotel search.","example":"2026-07-04","isRequired":true,"uniqueKey":"check_out","typeLabel":"string"},"rooms":{"description":"One entry per room the guest needs (1 to 8). Order is preserved: slot N of every offer answers rooms[N]. Each room has adults and child_ages (use [] for no children).","minItems":1,"maxItems":8,"example":[{"adults":2,"child_ages":[]}],"type":"array","items":{"type":"object","properties":{"adults":{"type":"number","description":"Number of adults (age 18 and over) in this room, 1-5. Each room needs at least one adult.","example":2,"minimum":1,"maximum":5,"isRequired":true,"uniqueKey":"rooms.items.[INDEX].adults","typeLabel":"number"},"child_ages":{"description":"Age of each child in this room, one number per child (0-17; use 0 for an infant). Send one age per child, not a child count. Omit or send [] when there are no children. Adults plus children must not exceed 5 per room. Child ages affect price, so send the same ages again when you request room options and prebook.","example":[5,8],"type":"array","items":{"type":"number","uniqueKey":"rooms.items.[INDEX].child_ages.items.[INDEX]","typeLabel":"number"},"uniqueKey":"rooms.items.[INDEX].child_ages","typeLabel":"number[]"}},"required":["adults"],"uniqueKey":"rooms.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"rooms","typeLabel":"object[]"},"residency":{"type":"string","description":"Guest country of residence, ISO 3166-1 alpha-2 (for example IN). Suppliers use it for residency-restricted rates. Defaults to nationality when omitted. When both are omitted, IN is used, so always send at least one.","example":"IN","uniqueKey":"residency","typeLabel":"string"},"nationality":{"type":"string","description":"Guest nationality, ISO 3166-1 alpha-2 (for example IN). Suppliers use it for market eligibility, pricing and booking rules. Defaults to residency when omitted. When both are omitted, IN is used, so always send at least one.","example":"IN","uniqueKey":"nationality","typeLabel":"string"},"language":{"type":"string","description":"Language code for supplier-written text (for example en). Optional. It is echoed in quote_context.language of each offer.","example":"en","uniqueKey":"language","typeLabel":"string"}},"required":["check_in","check_out","rooms"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"check_in":"2026-07-01","check_out":"2026-07-04","rooms":[{"adults":2,"child_ages":[]}],"residency":"IN","nationality":"IN","language":"en"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"e4a68953-70af-4ed9-88c2-1fe44f646fa1":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"contract_version":{"type":"string","example":"2","description":"Response contract version, always 2.","isRequired":true,"uniqueKey":"contract_version","typeLabel":"string"},"success":{"type":"boolean","example":true,"description":"True when the search was started.","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"message":{"type":"string","example":"Rooms fetched successfully","description":"Human-readable status. Do not parse it.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","description":"The initial room response.","required":["hotel_id","hotel_name","check_in","check_out","nights","total_options","providers_queried","unifystays_rooms","stream_id","sse_stream_url","options"],"properties":{"hotel_id":{"type":"string","example":"123456","description":"Unifystays hotel ID this response is for. Send it as hotel_id to Prebook.","isRequired":true,"uniqueKey":"data.hotel_id","typeLabel":"string"},"hotel_name":{"type":"string","example":"The Taj Mahal Palace","description":"Hotel name.","isRequired":true,"uniqueKey":"data.hotel_name","typeLabel":"string"},"check_in":{"type":"string","example":"2026-07-01","description":"Check-in date from the request (YYYY-MM-DD).","isRequired":true,"uniqueKey":"data.check_in","typeLabel":"string"},"check_out":{"type":"string","example":"2026-07-04","description":"Check-out date from the request (YYYY-MM-DD).","isRequired":true,"uniqueKey":"data.check_out","typeLabel":"string"},"nights":{"type":"number","example":3,"description":"Number of nights.","isRequired":true,"uniqueKey":"data.nights","typeLabel":"number"},"total_options":{"type":"number","example":2,"description":"Offers in this initial response. Always 0; live offers arrive on the stream.","isRequired":true,"uniqueKey":"data.total_options","typeLabel":"number"},"providers_queried":{"example":["TBO","TRIPJACK"],"description":"Suppliers being queried for this hotel. A supplier on this list can still return nothing or fail; read the done event.","type":"array","items":{"type":"string","uniqueKey":"data.providers_queried.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.providers_queried","typeLabel":"string[]"},"unifystays_rooms":{"type":"array","items":{"oneOf":[{"type":"object","description":"A room family: one room type of the hotel as the card header, with its bed-type variants. Show the header from this object, each variant's beds only from its variant object, and family-level offers (bed_assignment.suppliers) with a hotel-assigns-bed label. Rate-level facts are never on the room; they are on each offer.","required":["unifystays_room_id","name","details","suppliers","variants","bed_assignment"],"properties":{"unifystays_room_id":{"type":"string","example":"4120552","description":"Family id for display and grouping only; never booking identity. A tmp_ id is valid for this search only.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.unifystays_room_id","typeLabel":"string"},"name":{"type":"string","example":"Deluxe Room","description":"Room type name for the card header, for example Deluxe Room. Bed type is not part of it; beds come from the variants.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.name","typeLabel":"string"},"details":{"type":"object","description":"Details of the family, shared by its variants (a variant has no details of its own).","required":["source","images","size","description","description_format","amenities"],"properties":{"source":{"oneOf":[{"type":"string","example":"TRIPJACK","description":"The one supplier every field below comes from; never mixed. Show it on the card, e.g. \"Photos \u0026 details: TripJack\". Null when no supplier's details may be shown; the other fields are then empty.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.source.oneOf.0","typeLabel":"string"},{"type":"null","example":"TRIPJACK","description":"The one supplier every field below comes from; never mixed. Show it on the card, e.g. \"Photos \u0026 details: TripJack\". Null when no supplier's details may be shown; the other fields are then empty.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.source.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.source","typeLabel":"string | null"},"images":{"description":"Photos of the room type, from details.source. Empty when none.","type":"array","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL. Treat it as opaque; do not rewrite or strip it.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images.items.[INDEX].url","typeLabel":"string"},"caption":{"oneOf":[{"type":"string","description":"Caption when supplied. Null otherwise.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images.items.[INDEX].caption.oneOf.0","typeLabel":"string"},{"type":"null","description":"Caption when supplied. Null otherwise.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images.items.[INDEX].caption.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images.items.[INDEX].caption","typeLabel":"string | null"},"is_primary":{"oneOf":[{"type":"boolean","description":"True for the lead image of the room. Null when the source does not say.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images.items.[INDEX].is_primary.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for the lead image of the room. Null when the source does not say.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images.items.[INDEX].is_primary.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images.items.[INDEX].is_primary","typeLabel":"boolean | null"}},"required":["url","caption","is_primary"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.images","typeLabel":"object[]"},"size":{"oneOf":[{"type":"object","description":"Room size as described by details.source.","required":["value","unit"],"properties":{"value":{"oneOf":[{"type":"number","description":"Room size number. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size.oneOf.0.value.oneOf.0","typeLabel":"number"},{"type":"null","description":"Room size number. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size.oneOf.0.value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size.oneOf.0.value","typeLabel":"number | null"},"unit":{"oneOf":[{"type":"string","example":"sqm","description":"Unit of value, for example sqm. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size.oneOf.0.unit.oneOf.0","typeLabel":"string"},{"type":"null","example":"sqm","description":"Unit of value, for example sqm. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size.oneOf.0.unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size.oneOf.0.unit","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.size","typeLabel":"object | null"},"description":{"oneOf":[{"type":"string","description":"Room description from details.source. Null when none.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room description from details.source. Null when none.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.description","typeLabel":"string | null"},"description_format":{"oneOf":[{"type":"string","enum":["HTML","TEXT"],"description":"HTML = sanitized HTML to render; TEXT = plain text to escape. Null when description is null.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.description_format.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["HTML","TEXT"],"description":"HTML = sanitized HTML to render; TEXT = plain text to escape. Null when description is null.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.description_format.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.description_format","typeLabel":"enum\u003cstring> | null"},"amenities":{"description":"Room amenities and physical features (balcony, bathtub, kitchenette) as described by details.source.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"wifi","description":"Amenity identifier. Use as a key only within the same family object.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.amenities.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","example":"Free WiFi","description":"Amenity name to display.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.amenities.items.[INDEX].name","typeLabel":"string"}},"required":["id","name"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.amenities.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details.amenities","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.details","typeLabel":"object"},"suppliers":{"example":["REZLIVE","TRIPJACK"],"description":"Suppliers linked to this family or its variants, sorted. A supplier can be listed before its offers arrive in this stream.","type":"array","items":{"type":"string","uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.suppliers.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.suppliers","typeLabel":"string[]"},"variants":{"description":"Variants with at least one seller in this stream so far.","type":"array","items":{"type":"object","properties":{"unifystays_room_id":{"type":"string","example":"4120553","description":"Variant id (a family's bed type). Display identity only; may be retired later when rooms are merged.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].unifystays_room_id","typeLabel":"string"},"beds":{"oneOf":[{"description":"Present only when every supplier selling this variant in the stream stated exactly these beds; otherwise null.","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["SINGLE","DOUBLE","QUEEN","KING","TWIN","SOFA_BED","BUNK"],"example":"TWIN","description":"Bed type.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].beds.oneOf.0.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"count":{"type":"number","example":2,"description":"Number of beds of this type.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].beds.oneOf.0.items.[INDEX].count","typeLabel":"number"}},"required":["type","count"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].beds.oneOf.0.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].beds.oneOf.0","typeLabel":"object[]"},{"description":"Present only when every supplier selling this variant in the stream stated exactly these beds; otherwise null.","type":"null","items":{"type":"object","properties":{"type":{"type":"string","enum":["SINGLE","DOUBLE","QUEEN","KING","TWIN","SOFA_BED","BUNK"],"example":"TWIN","description":"Bed type."},"count":{"type":"number","example":2,"description":"Number of beds of this type."}},"required":["type","count"]},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].beds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].beds","typeLabel":"object[] | null"},"bedrooms":{"oneOf":[{"type":"number","description":"Same rule as beds.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].bedrooms.oneOf.0","typeLabel":"number"},{"type":"null","description":"Same rule as beds.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].bedrooms.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].bedrooms","typeLabel":"number | null"},"max_guests":{"oneOf":[{"type":"number","example":2,"description":"Same rule as beds.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].max_guests.oneOf.0","typeLabel":"number"},{"type":"null","example":2,"description":"Same rule as beds.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].max_guests.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].max_guests","typeLabel":"number | null"},"smoking":{"oneOf":[{"type":"string","enum":["SMOKING","NON_SMOKING"],"description":"Same rule as beds.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].smoking.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["SMOKING","NON_SMOKING"],"description":"Same rule as beds.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].smoking.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].smoking","typeLabel":"enum\u003cstring> | null"},"suppliers":{"example":["REZLIVE","TRIPJACK"],"description":"Suppliers selling this variant in this stream, sorted.","type":"array","items":{"type":"string","uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].suppliers.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX].suppliers","typeLabel":"string[]"}},"required":["unifystays_room_id","beds","bedrooms","max_guests","smoking","suppliers"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.variants","typeLabel":"object[]"},"bed_assignment":{"type":"object","description":"Suppliers whose offers sit at family level because they do not state a bed type. Empty suppliers array when every offer is in a variant.","required":["suppliers"],"properties":{"suppliers":{"example":["REZLIVE"],"description":"Suppliers whose offers sit at family level: the hotel assigns the bed type. Show those offers under the family header with that label.","type":"array","items":{"type":"string","uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.bed_assignment.suppliers.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.bed_assignment.suppliers","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0.bed_assignment","typeLabel":"object"}},"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Room detail shared by supplier rooms (provider_room) and catalogue rooms (unifystays_room, provider_code UNIFYSTAYS). Forward compatibility: new fields and new enum values may be added within a contract version. Ignore fields you do not recognise and treat an unrecognised enum value as unknown. null always means not known; an empty array means none were supplied.","required":["provider_code","provider_hotel_id","id","name","supplier_name","description","description_format","detail_status","room_type","room_category","size","amenities","images","bed_configurations","bed_summary","occupancy","bathroom","views","features","extra_bed","child_bed"],"properties":{"provider_code":{"type":"string","example":"TRIPJACK","description":"Supplier that sells this room, for example TRIPJACK. Display as the seller name if you wish.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.provider_code","typeLabel":"string"},"provider_hotel_id":{"oneOf":[{"type":"string","example":"100000249368","description":"The supplier's ID for the hotel. Null when not supplied. Informational.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.provider_hotel_id.oneOf.0","typeLabel":"string"},{"type":"null","example":"100000249368","description":"The supplier's ID for the hotel. Null when not supplied. Informational.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.provider_hotel_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.provider_hotel_id","typeLabel":"string | null"},"id":{"oneOf":[{"type":"string","example":"10024615989","description":"The supplier's ID for this room type. Null when the supplier sends none. Informational; do not use it as a booking key.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.id.oneOf.0","typeLabel":"string"},{"type":"null","example":"10024615989","description":"The supplier's ID for this room type. Null when the supplier sends none. Informational; do not use it as a booking key.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.id","typeLabel":"string | null"},"name":{"type":"string","example":"Aloft Studio, King","description":"Room name to display on the offer row, in the seller's words. For a catalogue room it can change as names are normalised; do not use it as an identity.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.name","typeLabel":"string"},"supplier_name":{"oneOf":[{"type":"string","description":"Room name exactly as the supplier sent it. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room name exactly as the supplier sent it. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.supplier_name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","description":"Room description. Null when none. Render according to description_format.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room description. Null when none. Render according to description_format.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.description","typeLabel":"string | null"},"description_format":{"oneOf":[{"type":"string","enum":["HTML","TEXT"],"description":"HTML = sanitized HTML to render; TEXT = plain text to escape. Null when description is null.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.description_format.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["HTML","TEXT"],"description":"HTML = sanitized HTML to render; TEXT = plain text to escape. Null when description is null.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.description_format.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.description_format","typeLabel":"enum\u003cstring> | null"},"detail_status":{"type":"string","enum":["NONE","PARTIAL","COMPLETE"],"description":"NONE: only id and name are known. PARTIAL: some structured detail is present; any field may still be null. COMPLETE: reserved; not emitted today.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.detail_status","typeLabel":"enum\u003cstring>"},"room_type":{"oneOf":[{"type":"object","description":"Room type classification (for example SUITE). Null when unknown.","required":["normalized_code","supplier_code","supplier_name"],"properties":{"normalized_code":{"type":"string","enum":["ROOM","SUITE","STUDIO","APARTMENT","VILLA","DORM","STANDARD","SUPERIOR","DELUXE","EXECUTIVE","PREMIUM","FAMILY","OTHER","UNKNOWN"],"example":"SUPERIOR","description":"Unifystays classification. New values may be added; treat an unknown value as OTHER.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.0.normalized_code","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.0.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.0.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.0.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.0.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.0.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.0.supplier_name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_type","typeLabel":"object | null"},"room_category":{"oneOf":[{"type":"object","description":"Room category classification (for example DELUXE). Null when unknown.","required":["normalized_code","supplier_code","supplier_name"],"properties":{"normalized_code":{"type":"string","enum":["ROOM","SUITE","STUDIO","APARTMENT","VILLA","DORM","STANDARD","SUPERIOR","DELUXE","EXECUTIVE","PREMIUM","FAMILY","OTHER","UNKNOWN"],"example":"SUPERIOR","description":"Unifystays classification. New values may be added; treat an unknown value as OTHER.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.0.normalized_code","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.0.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.0.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.0.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.0.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.0.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.0.supplier_name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.room_category","typeLabel":"object | null"},"size":{"oneOf":[{"type":"object","description":"Room size. Null when unknown.","required":["value","unit"],"properties":{"value":{"oneOf":[{"type":"number","description":"Room size number. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size.oneOf.0.value.oneOf.0","typeLabel":"number"},{"type":"null","description":"Room size number. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size.oneOf.0.value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size.oneOf.0.value","typeLabel":"number | null"},"unit":{"oneOf":[{"type":"string","example":"sqm","description":"Unit of value, for example sqm. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size.oneOf.0.unit.oneOf.0","typeLabel":"string"},{"type":"null","example":"sqm","description":"Unit of value, for example sqm. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size.oneOf.0.unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size.oneOf.0.unit","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.size","typeLabel":"object | null"},"amenities":{"description":"Amenities the seller lists for the room. Empty array when none were supplied.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2403","description":"Supplier amenity id. For UNIFYSTAYS rooms this is the amenity code (same as normalized_code).","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].id","typeLabel":"string"},"normalized_code":{"oneOf":[{"type":"string","example":"WHEELCHAIR_ACCESSIBLE","description":"Stable upper-case amenity code. New codes may be added; treat an unrecognised code as a plain labelled amenity.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].normalized_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"WHEELCHAIR_ACCESSIBLE","description":"Stable upper-case amenity code. New codes may be added; treat an unrecognised code as a plain labelled amenity.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].normalized_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].normalized_code","typeLabel":"string | null"},"supplier_code":{"oneOf":[{"type":"string","example":"2403","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"2403","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].supplier_code","typeLabel":"string | null"},"name":{"type":"string","example":"Free WiFi","description":"Amenity name to display.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].name","typeLabel":"string"},"category":{"oneOf":[{"type":"string","enum":["GENERAL","ACCESSIBILITY","OUTDOOR","KITCHEN","BATHROOM","CONNECTIVITY","SAFETY"],"description":"Grouping for display. Null when the source does not categorise the amenity.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].category.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["GENERAL","ACCESSIBILITY","OUTDOOR","KITCHEN","BATHROOM","CONNECTIVITY","SAFETY"],"description":"Grouping for display. Null when the source does not categorise the amenity.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].category.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX].category","typeLabel":"enum\u003cstring> | null"}},"required":["id","normalized_code","supplier_code","name","category"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.amenities","typeLabel":"object[]"},"images":{"description":"Room images from the seller. Empty array when none.","type":"array","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL. Treat it as opaque; do not rewrite or strip it.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images.items.[INDEX].url","typeLabel":"string"},"caption":{"oneOf":[{"type":"string","description":"Caption when supplied. Null otherwise.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images.items.[INDEX].caption.oneOf.0","typeLabel":"string"},{"type":"null","description":"Caption when supplied. Null otherwise.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images.items.[INDEX].caption.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images.items.[INDEX].caption","typeLabel":"string | null"},"is_primary":{"oneOf":[{"type":"boolean","description":"True for the lead image of the room. Null when the source does not say.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images.items.[INDEX].is_primary.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for the lead image of the room. Null when the source does not say.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images.items.[INDEX].is_primary.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images.items.[INDEX].is_primary","typeLabel":"boolean | null"}},"required":["url","caption","is_primary"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.images","typeLabel":"object[]"},"bed_configurations":{"description":"Supplier-provided bedding choices. An empty array means dependable bedding data was not supplied; it does not mean the room has no bed.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"bed_1","description":"Identifies this layout within the room.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].id","typeLabel":"string"},"bed_count":{"oneOf":[{"type":"number","example":1,"description":"Total number of beds in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bed_count.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Total number of beds in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bed_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bed_count","typeLabel":"number | null"},"bedroom_count":{"oneOf":[{"type":"number","example":1,"description":"Number of bedrooms in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bedroom_count.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Number of bedrooms in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bedroom_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bedroom_count","typeLabel":"number | null"},"beds":{"description":"The beds in this layout, one entry per bed type.","type":"array","items":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","example":"King","description":"Bed type as the supplier named it, for display. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].type.oneOf.0","typeLabel":"string"},{"type":"null","example":"King","description":"Bed type as the supplier named it, for display. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].type","typeLabel":"string | null"},"normalized_type":{"oneOf":[{"type":"string","enum":["SINGLE","DOUBLE","QUEEN","KING","TWIN","SOFA_BED","BUNK","OTHER"],"description":"Null when the bed type is not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["SINGLE","DOUBLE","QUEEN","KING","TWIN","SOFA_BED","BUNK","OTHER"],"description":"Null when the bed type is not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type","typeLabel":"enum\u003cstring> | null"},"supplier_type":{"oneOf":[{"type":"string","description":"The supplier's raw bed-type value. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type.oneOf.0","typeLabel":"string"},{"type":"null","description":"The supplier's raw bed-type value. Null when not supplied.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type","typeLabel":"string | null"},"quantity":{"oneOf":[{"type":"number","example":1,"description":"Number of beds of this type. Null means unknown, not zero.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Number of beds of this type. Null means unknown, not zero.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity","typeLabel":"number | null"},"width_min_cm":{"oneOf":[{"type":"number","example":151,"description":"Minimum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm.oneOf.0","typeLabel":"number"},{"type":"null","example":151,"description":"Minimum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm","typeLabel":"number | null"},"width_max_cm":{"oneOf":[{"type":"number","example":180,"description":"Maximum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm.oneOf.0","typeLabel":"number"},{"type":"null","example":180,"description":"Maximum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm","typeLabel":"number | null"}},"required":["type","normalized_type","supplier_type","quantity","width_min_cm","width_max_cm"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].beds","typeLabel":"object[]"},"bed_type_guaranteed":{"oneOf":[{"type":"boolean","description":"True only when the supplier explicitly guarantees this bedding. False means described but not guaranteed; null means unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bed_type_guaranteed.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True only when the supplier explicitly guarantees this bedding. False means described but not guaranteed; null means unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bed_type_guaranteed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].bed_type_guaranteed","typeLabel":"boolean | null"},"selected":{"oneOf":[{"type":"boolean","description":"True for the layout this offer is sold with. Null when not known, and always null on catalogue (UNIFYSTAYS) rooms, where layouts are alternatives.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].selected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for the layout this offer is sold with. Null when not known, and always null on catalogue (UNIFYSTAYS) rooms, where layouts are alternatives.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].selected.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX].selected","typeLabel":"boolean | null"}},"required":["id","bed_count","bedroom_count","beds","bed_type_guaranteed","selected"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_configurations","typeLabel":"object[]"},"bed_summary":{"oneOf":[{"type":"string","example":"1 king bed or 2 single beds","description":"English display text for the bedding. Null when not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_summary.oneOf.0","typeLabel":"string"},{"type":"null","example":"1 king bed or 2 single beds","description":"English display text for the bedding. Null when not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_summary.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bed_summary","typeLabel":"string | null"},"occupancy":{"oneOf":[{"type":"object","description":"Room capacity as the seller states it. Null when unknown.","required":["max_allowed"],"properties":{"max_allowed":{"type":"object","description":"The room's capacity as the seller states it. This is capacity, not the occupancy you searched for (that is in the slot's occupancy).","required":["total","adults","children","infants"],"properties":{"total":{"oneOf":[{"type":"number","example":3,"description":"Maximum guests in the room, all ages. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.total.oneOf.0","typeLabel":"number"},{"type":"null","example":3,"description":"Maximum guests in the room, all ages. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.total","typeLabel":"number | null"},"adults":{"oneOf":[{"type":"number","example":3,"description":"Maximum adults. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.adults.oneOf.0","typeLabel":"number"},{"type":"null","example":3,"description":"Maximum adults. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.adults.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.adults","typeLabel":"number | null"},"children":{"oneOf":[{"type":"number","example":2,"description":"Maximum children. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.children.oneOf.0","typeLabel":"number"},{"type":"null","example":2,"description":"Maximum children. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.children.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.children","typeLabel":"number | null"},"infants":{"oneOf":[{"type":"number","description":"Maximum infants. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.infants.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum infants. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.infants.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed.infants","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0.max_allowed","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.occupancy","typeLabel":"object | null"},"bathroom":{"oneOf":[{"type":"object","description":"Bathroom details. Null when unknown.","required":["type","count"],"properties":{"type":{"oneOf":[{"type":"string","enum":["PRIVATE","SHARED","ENSUITE"],"description":"Null when not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["PRIVATE","SHARED","ENSUITE"],"description":"Null when not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom.oneOf.0.type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"count":{"oneOf":[{"type":"number","description":"Number of bathrooms. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom.oneOf.0.count.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of bathrooms. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom.oneOf.0.count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom.oneOf.0.count","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.bathroom","typeLabel":"object | null"},"views":{"description":"Views from the room. Empty array when none were supplied.","type":"array","items":{"type":"object","properties":{"normalized_code":{"type":"string","example":"CITY","description":"Unifystays view code, for example CITY. New codes may be added; fall back to name.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX].normalized_code","typeLabel":"string"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX].supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX].supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX].supplier_code","typeLabel":"string | null"},"name":{"type":"string","description":"View name to display.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX].name","typeLabel":"string"},"partial":{"oneOf":[{"type":"boolean","description":"True when the view is known to be partial; null when not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX].partial.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the view is known to be partial; null when not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX].partial.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX].partial","typeLabel":"boolean | null"}},"required":["normalized_code","supplier_code","name","partial"],"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.views","typeLabel":"object[]"},"features":{"oneOf":[{"type":"object","description":"Boolean features (balcony, smoking, accessible...). Null when none were supplied.","required":["balcony","smoking","accessible","club_access","connecting_room"],"properties":{"balcony":{"oneOf":[{"type":"boolean","description":"True when the room has a balcony. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.balcony.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the room has a balcony. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.balcony.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.balcony","typeLabel":"boolean | null"},"smoking":{"oneOf":[{"type":"string","enum":["SMOKING","NON_SMOKING","MIXED"],"description":"MIXED means smoking status depends on the room allocated. Null when not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.smoking.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["SMOKING","NON_SMOKING","MIXED"],"description":"MIXED means smoking status depends on the room allocated. Null when not known.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.smoking.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.smoking","typeLabel":"enum\u003cstring> | null"},"accessible":{"oneOf":[{"type":"boolean","description":"True for an accessible (wheelchair-friendly) room. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.accessible.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for an accessible (wheelchair-friendly) room. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.accessible.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.accessible","typeLabel":"boolean | null"},"club_access":{"oneOf":[{"type":"boolean","description":"True when the rate includes club or lounge access. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.club_access.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the rate includes club or lounge access. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.club_access.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.club_access","typeLabel":"boolean | null"},"connecting_room":{"oneOf":[{"type":"boolean","description":"True when the room connects to another. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.connecting_room.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the room connects to another. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.connecting_room.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0.connecting_room","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.features","typeLabel":"object | null"},"extra_bed":{"oneOf":[{"type":"object","description":"Extra-bed rules. Null when unknown.","required":["available","included","charge_applicable"],"properties":{"available":{"oneOf":[{"type":"boolean","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.available.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.available.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.available","typeLabel":"boolean | null"},"included":{"oneOf":[{"type":"boolean","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.included","typeLabel":"boolean | null"},"charge_applicable":{"oneOf":[{"type":"boolean","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.charge_applicable.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.charge_applicable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0.charge_applicable","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.extra_bed","typeLabel":"object | null"},"child_bed":{"oneOf":[{"type":"object","description":"Child-bed or cot rules. Null when unknown.","required":["available","included","charge_applicable"],"properties":{"available":{"oneOf":[{"type":"boolean","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.available.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.available.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.available","typeLabel":"boolean | null"},"included":{"oneOf":[{"type":"boolean","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.included","typeLabel":"boolean | null"},"charge_applicable":{"oneOf":[{"type":"boolean","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.charge_applicable.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.charge_applicable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0.charge_applicable","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1.child_bed","typeLabel":"object | null"}},"uniqueKey":"data.unifystays_rooms.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"data.unifystays_rooms.items.[INDEX]","typeLabel":"object"},"description":"The hotel's rooms built from earlier searches as family objects (FamilyObjectDto), each composed from every supplier linked to it. Empty on a hotel's first search.","isRequired":true,"uniqueKey":"data.unifystays_rooms","typeLabel":"object[]"},"stream_id":{"type":"string","example":"stream_8f4b9d1f6d9e","description":"ID of the live stream. The stream searches for up to 45 seconds and stays readable for about 2 minutes after it ends. Use it only with sse_stream_url.","isRequired":true,"uniqueKey":"data.stream_id","typeLabel":"string"},"sse_stream_url":{"type":"string","example":"/hotels/123456/rooms/stream/stream_8f4b9d1f6d9e","description":"Path of the SSE stream, relative to the API base URL. Open it immediately with the same x-api-key.","isRequired":true,"uniqueKey":"data.sse_stream_url","typeLabel":"string"},"options":{"description":"Reserved initial-response options array (normally empty). Live options are delivered by provider_options events on sse_stream_url.","type":"array","items":{"type":"object","properties":{"offer_id":{"type":"string","example":"off_01J...","description":"Unifystays ID of this offer (off_...). Use it as the list key and to match a prebook result with the offer it replaces. Not a booking key; book with booking_token.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].offer_id","typeLabel":"string"},"revision":{"type":"number","example":1,"description":"Version of the offer. 1 for a room-search offer; the offer returned by Prebook has the next revision.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].revision","typeLabel":"number"},"offer_family_id":{"oneOf":[{"type":"string","description":"Offers whose slots are the same room families in the same order share this id. Use it as the card key for multi-room searches. Null when any slot is a tmp_ room. Never use it for booking.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].offer_family_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Offers whose slots are the same room families in the same order share this id. Use it as the card key for multi-room searches. Null when any slot is a tmp_ room. Never use it for booking.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].offer_family_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].offer_family_id","typeLabel":"string | null"},"supersedes_offer_id":{"oneOf":[{"type":"string","description":"Immediate prior offer replaced by this one. Null for the initial rooms quote; prebook points to the rooms offer. Replace the old offer atomically.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].supersedes_offer_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Immediate prior offer replaced by this one. Null for the initial rooms quote; prebook points to the rooms offer. Replace the old offer atomically.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].supersedes_offer_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].supersedes_offer_id","typeLabel":"string | null"},"quote_context":{"type":"object","description":"The search this offer answers: hotel, dates, occupancy, residency, nationality and language. Echoed so you can verify the offer matches what the guest asked for.","required":["hotel","check_in","check_out","nights","rooms","residency","nationality","language"],"properties":{"hotel":{"type":"object","description":"The hotel this offer is for.","required":["id","name","address","address_local","city","state","country","postal_code","latitude","longitude","timezone"],"properties":{"id":{"type":"string","description":"Unifystays hotel ID.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.id","typeLabel":"string"},"name":{"type":"string","description":"Hotel name.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.name","typeLabel":"string"},"address":{"oneOf":[{"type":"string","description":"Hotel address, in English (Latin script) when a verified supplier address is available.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.address.oneOf.0","typeLabel":"string"},{"type":"null","description":"Hotel address, in English (Latin script) when a verified supplier address is available.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.address.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.address","typeLabel":"string | null"},"address_local":{"oneOf":[{"type":"string","description":"Catalogue address in the local script (e.g. Thai) when it is not Latin script; null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.address_local.oneOf.0","typeLabel":"string"},{"type":"null","description":"Catalogue address in the local script (e.g. Thai) when it is not Latin script; null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.address_local.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.address_local","typeLabel":"string | null"},"city":{"oneOf":[{"type":"string","description":"City. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.city.oneOf.0","typeLabel":"string"},{"type":"null","description":"City. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.city.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.city","typeLabel":"string | null"},"state":{"oneOf":[{"type":"string","description":"State or region. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.state.oneOf.0","typeLabel":"string"},{"type":"null","description":"State or region. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.state.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.state","typeLabel":"string | null"},"country":{"oneOf":[{"type":"string","description":"Country code (ISO 3166-1 alpha-2). Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.country.oneOf.0","typeLabel":"string"},{"type":"null","description":"Country code (ISO 3166-1 alpha-2). Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.country.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.country","typeLabel":"string | null"},"postal_code":{"oneOf":[{"type":"string","description":"Postal code. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.postal_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Postal code. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.postal_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.postal_code","typeLabel":"string | null"},"latitude":{"oneOf":[{"type":"number","description":"Latitude. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.latitude.oneOf.0","typeLabel":"number"},{"type":"null","description":"Latitude. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.latitude.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.latitude","typeLabel":"number | null"},"longitude":{"oneOf":[{"type":"number","description":"Longitude. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.longitude.oneOf.0","typeLabel":"number"},{"type":"null","description":"Longitude. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.longitude.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.longitude","typeLabel":"number | null"},"timezone":{"oneOf":[{"type":"string","description":"IANA time zone of the hotel when known. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.timezone.oneOf.0","typeLabel":"string"},{"type":"null","description":"IANA time zone of the hotel when known. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.timezone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel.timezone","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.hotel","typeLabel":"object"},"check_in":{"type":"string","description":"Check-in date (YYYY-MM-DD).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.check_in","typeLabel":"string"},"check_out":{"type":"string","description":"Check-out date (YYYY-MM-DD).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.check_out","typeLabel":"string"},"nights":{"type":"number","description":"Number of nights.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.nights","typeLabel":"number"},"rooms":{"description":"Occupancy of each room, in request order.","type":"array","items":{"type":"object","properties":{"adults":{"type":"number","description":"Adults in the room.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.rooms.items.[INDEX].adults","typeLabel":"number"},"child_ages":{"description":"Ages of the children in the room.","type":"array","items":{"type":"number","uniqueKey":"data.options.items.[INDEX].quote_context.rooms.items.[INDEX].child_ages.items.[INDEX]","typeLabel":"number"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.rooms.items.[INDEX].child_ages","typeLabel":"number[]"}},"required":["adults","child_ages"],"uniqueKey":"data.options.items.[INDEX].quote_context.rooms.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.rooms","typeLabel":"object[]"},"residency":{"oneOf":[{"type":"string","description":"Residency country used for the quote (ISO 3166-1 alpha-2).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.residency.oneOf.0","typeLabel":"string"},{"type":"null","description":"Residency country used for the quote (ISO 3166-1 alpha-2).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.residency.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.residency","typeLabel":"string | null"},"nationality":{"oneOf":[{"type":"string","description":"Nationality used for the quote (ISO 3166-1 alpha-2).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.nationality.oneOf.0","typeLabel":"string"},{"type":"null","description":"Nationality used for the quote (ISO 3166-1 alpha-2).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.nationality.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.nationality","typeLabel":"string | null"},"language":{"oneOf":[{"type":"string","description":"Language code from the request. Null when none was sent.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Language code from the request. Null when none was sent.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context.language","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].quote_context","typeLabel":"object"},"provider_code":{"type":"string","example":"TBO","description":"Supplier that sells the offer, for example TRIPJACK.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].provider_code","typeLabel":"string"},"room_combination":{"type":"object","description":"How the rooms array is composed. The complete rooms array is always one atomic offer.","required":["normalized_type","supplier_code","supplier_name"],"properties":{"normalized_type":{"type":"string","enum":["SINGLE_ROOM","SAME_ROOM_TYPE","MIXED_ROOM_TYPES","FIXED_COMBINATION","OTHER","UNKNOWN"],"description":"Normalized description of the room composition. The complete rooms array is always one atomic offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].room_combination.normalized_type","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","description":"Opaque supplier-native combination code retained for diagnostics and future mappings. Prefer normalized_type for application logic.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].room_combination.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Opaque supplier-native combination code retained for diagnostics and future mappings. Prefer normalized_type for application logic.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].room_combination.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].room_combination.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","description":"Supplier-native display label, when supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].room_combination.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier-native display label, when supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].room_combination.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].room_combination.supplier_name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].room_combination","typeLabel":"object"},"rate_plan":{"oneOf":[{"type":"object","description":"Rate eligibility and selling classification. Supplier fields are opaque and nullable; use normalized_type and restriction flags for logic.","required":["normalized_type","supplier_code","supplier_name","qualification","is_package","is_fenced"],"properties":{"normalized_type":{"type":"string","enum":["PUBLIC","NEGOTIATED","CORPORATE","MEMBER","MOBILE","PACKAGE","PROMOTIONAL","GOVERNMENT","GROUP","OTHER","UNKNOWN"],"description":"Rate class: PUBLIC, NEGOTIATED, CORPORATE, MEMBER, MOBILE, PACKAGE, PROMOTIONAL, GOVERNMENT, GROUP, OTHER, or UNKNOWN. UNKNOWN means the supplier did not say; do not assume PUBLIC.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.normalized_type","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","description":"Opaque supplier-native rate-plan identifier. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Opaque supplier-native rate-plan identifier. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","description":"Supplier-native display name. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier-native display name. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.supplier_name","typeLabel":"string | null"},"qualification":{"oneOf":[{"type":"string","description":"Supplier-defined eligibility condition. Display it when present; do not infer eligibility from null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.qualification.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier-defined eligibility condition. Display it when present; do not infer eligibility from null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.qualification.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.qualification","typeLabel":"string | null"},"is_package":{"type":"boolean","description":"True when the rate is sold as part of a package.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.is_package","typeLabel":"boolean"},"is_fenced":{"type":"boolean","description":"True when the supplier restricts how the rate may be sold. Show qualification when it is present.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0.is_fenced","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rate_plan","typeLabel":"object | null"},"rooms":{"description":"One entry per requested room, in request order. Book all of them together; they cannot be split across offers.","type":"array","items":{"type":"object","properties":{"room_allocation_id":{"type":"string","example":"ra_2c1fb39ed54742f28d95bd8bc5f4375d","description":"Opaque identity for this exact quoted room slot. Preserved through prebook and booking.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].room_allocation_id","typeLabel":"string"},"provider_room":{"type":"object","description":"The seller's own room: name, beds, capacity and the attributes the seller sent. Always show its beds and maximum guests on the offer row.","required":["provider_code","provider_hotel_id","id","name","supplier_name","description","description_format","detail_status","room_type","room_category","size","amenities","images","bed_configurations","bed_summary","occupancy","bathroom","views","features","extra_bed","child_bed"],"properties":{"provider_code":{"type":"string","example":"TRIPJACK","description":"Supplier that sells this room, for example TRIPJACK. Display as the seller name if you wish.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.provider_code","typeLabel":"string"},"provider_hotel_id":{"oneOf":[{"type":"string","example":"100000249368","description":"The supplier's ID for the hotel. Null when not supplied. Informational.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.provider_hotel_id.oneOf.0","typeLabel":"string"},{"type":"null","example":"100000249368","description":"The supplier's ID for the hotel. Null when not supplied. Informational.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.provider_hotel_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.provider_hotel_id","typeLabel":"string | null"},"id":{"oneOf":[{"type":"string","example":"10024615989","description":"The supplier's ID for this room type. Null when the supplier sends none. Informational; do not use it as a booking key.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.id.oneOf.0","typeLabel":"string"},{"type":"null","example":"10024615989","description":"The supplier's ID for this room type. Null when the supplier sends none. Informational; do not use it as a booking key.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.id","typeLabel":"string | null"},"name":{"type":"string","example":"Aloft Studio, King","description":"Room name to display on the offer row, in the seller's words. For a catalogue room it can change as names are normalised; do not use it as an identity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.name","typeLabel":"string"},"supplier_name":{"oneOf":[{"type":"string","description":"Room name exactly as the supplier sent it. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room name exactly as the supplier sent it. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.supplier_name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","description":"Room description. Null when none. Render according to description_format.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room description. Null when none. Render according to description_format.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.description","typeLabel":"string | null"},"description_format":{"oneOf":[{"type":"string","enum":["HTML","TEXT"],"description":"HTML = sanitized HTML to render; TEXT = plain text to escape. Null when description is null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.description_format.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["HTML","TEXT"],"description":"HTML = sanitized HTML to render; TEXT = plain text to escape. Null when description is null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.description_format.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.description_format","typeLabel":"enum\u003cstring> | null"},"detail_status":{"type":"string","enum":["NONE","PARTIAL","COMPLETE"],"description":"NONE: only id and name are known. PARTIAL: some structured detail is present; any field may still be null. COMPLETE: reserved; not emitted today.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.detail_status","typeLabel":"enum\u003cstring>"},"room_type":{"oneOf":[{"type":"object","description":"Room type classification (for example SUITE). Null when unknown.","required":["normalized_code","supplier_code","supplier_name"],"properties":{"normalized_code":{"type":"string","enum":["ROOM","SUITE","STUDIO","APARTMENT","VILLA","DORM","STANDARD","SUPERIOR","DELUXE","EXECUTIVE","PREMIUM","FAMILY","OTHER","UNKNOWN"],"example":"SUPERIOR","description":"Unifystays classification. New values may be added; treat an unknown value as OTHER.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.0.normalized_code","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.0.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.0.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.0.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.0.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.0.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.0.supplier_name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_type","typeLabel":"object | null"},"room_category":{"oneOf":[{"type":"object","description":"Room category classification (for example DELUXE). Null when unknown.","required":["normalized_code","supplier_code","supplier_name"],"properties":{"normalized_code":{"type":"string","enum":["ROOM","SUITE","STUDIO","APARTMENT","VILLA","DORM","STANDARD","SUPERIOR","DELUXE","EXECUTIVE","PREMIUM","FAMILY","OTHER","UNKNOWN"],"example":"SUPERIOR","description":"Unifystays classification. New values may be added; treat an unknown value as OTHER.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.0.normalized_code","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.0.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.0.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.0.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.0.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.0.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.0.supplier_name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.room_category","typeLabel":"object | null"},"size":{"oneOf":[{"type":"object","description":"Room size. Null when unknown.","required":["value","unit"],"properties":{"value":{"oneOf":[{"type":"number","description":"Room size number. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size.oneOf.0.value.oneOf.0","typeLabel":"number"},{"type":"null","description":"Room size number. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size.oneOf.0.value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size.oneOf.0.value","typeLabel":"number | null"},"unit":{"oneOf":[{"type":"string","example":"sqm","description":"Unit of value, for example sqm. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size.oneOf.0.unit.oneOf.0","typeLabel":"string"},{"type":"null","example":"sqm","description":"Unit of value, for example sqm. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size.oneOf.0.unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size.oneOf.0.unit","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.size","typeLabel":"object | null"},"amenities":{"description":"Amenities the seller lists for the room. Empty array when none were supplied.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2403","description":"Supplier amenity id. For UNIFYSTAYS rooms this is the amenity code (same as normalized_code).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].id","typeLabel":"string"},"normalized_code":{"oneOf":[{"type":"string","example":"WHEELCHAIR_ACCESSIBLE","description":"Stable upper-case amenity code. New codes may be added; treat an unrecognised code as a plain labelled amenity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].normalized_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"WHEELCHAIR_ACCESSIBLE","description":"Stable upper-case amenity code. New codes may be added; treat an unrecognised code as a plain labelled amenity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].normalized_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].normalized_code","typeLabel":"string | null"},"supplier_code":{"oneOf":[{"type":"string","example":"2403","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"2403","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].supplier_code","typeLabel":"string | null"},"name":{"type":"string","example":"Free WiFi","description":"Amenity name to display.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].name","typeLabel":"string"},"category":{"oneOf":[{"type":"string","enum":["GENERAL","ACCESSIBILITY","OUTDOOR","KITCHEN","BATHROOM","CONNECTIVITY","SAFETY"],"description":"Grouping for display. Null when the source does not categorise the amenity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].category.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["GENERAL","ACCESSIBILITY","OUTDOOR","KITCHEN","BATHROOM","CONNECTIVITY","SAFETY"],"description":"Grouping for display. Null when the source does not categorise the amenity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].category.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX].category","typeLabel":"enum\u003cstring> | null"}},"required":["id","normalized_code","supplier_code","name","category"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.amenities","typeLabel":"object[]"},"images":{"description":"Room images from the seller. Empty array when none.","type":"array","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL. Treat it as opaque; do not rewrite or strip it.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images.items.[INDEX].url","typeLabel":"string"},"caption":{"oneOf":[{"type":"string","description":"Caption when supplied. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images.items.[INDEX].caption.oneOf.0","typeLabel":"string"},{"type":"null","description":"Caption when supplied. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images.items.[INDEX].caption.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images.items.[INDEX].caption","typeLabel":"string | null"},"is_primary":{"oneOf":[{"type":"boolean","description":"True for the lead image of the room. Null when the source does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images.items.[INDEX].is_primary.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for the lead image of the room. Null when the source does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images.items.[INDEX].is_primary.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images.items.[INDEX].is_primary","typeLabel":"boolean | null"}},"required":["url","caption","is_primary"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.images","typeLabel":"object[]"},"bed_configurations":{"description":"Supplier-provided bedding choices. An empty array means dependable bedding data was not supplied; it does not mean the room has no bed.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"bed_1","description":"Identifies this layout within the room.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].id","typeLabel":"string"},"bed_count":{"oneOf":[{"type":"number","example":1,"description":"Total number of beds in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bed_count.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Total number of beds in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bed_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bed_count","typeLabel":"number | null"},"bedroom_count":{"oneOf":[{"type":"number","example":1,"description":"Number of bedrooms in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bedroom_count.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Number of bedrooms in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bedroom_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bedroom_count","typeLabel":"number | null"},"beds":{"description":"The beds in this layout, one entry per bed type.","type":"array","items":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","example":"King","description":"Bed type as the supplier named it, for display. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].type.oneOf.0","typeLabel":"string"},{"type":"null","example":"King","description":"Bed type as the supplier named it, for display. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].type","typeLabel":"string | null"},"normalized_type":{"oneOf":[{"type":"string","enum":["SINGLE","DOUBLE","QUEEN","KING","TWIN","SOFA_BED","BUNK","OTHER"],"description":"Null when the bed type is not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["SINGLE","DOUBLE","QUEEN","KING","TWIN","SOFA_BED","BUNK","OTHER"],"description":"Null when the bed type is not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type","typeLabel":"enum\u003cstring> | null"},"supplier_type":{"oneOf":[{"type":"string","description":"The supplier's raw bed-type value. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type.oneOf.0","typeLabel":"string"},{"type":"null","description":"The supplier's raw bed-type value. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type","typeLabel":"string | null"},"quantity":{"oneOf":[{"type":"number","example":1,"description":"Number of beds of this type. Null means unknown, not zero.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Number of beds of this type. Null means unknown, not zero.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity","typeLabel":"number | null"},"width_min_cm":{"oneOf":[{"type":"number","example":151,"description":"Minimum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm.oneOf.0","typeLabel":"number"},{"type":"null","example":151,"description":"Minimum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm","typeLabel":"number | null"},"width_max_cm":{"oneOf":[{"type":"number","example":180,"description":"Maximum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm.oneOf.0","typeLabel":"number"},{"type":"null","example":180,"description":"Maximum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm","typeLabel":"number | null"}},"required":["type","normalized_type","supplier_type","quantity","width_min_cm","width_max_cm"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].beds","typeLabel":"object[]"},"bed_type_guaranteed":{"oneOf":[{"type":"boolean","description":"True only when the supplier explicitly guarantees this bedding. False means described but not guaranteed; null means unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bed_type_guaranteed.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True only when the supplier explicitly guarantees this bedding. False means described but not guaranteed; null means unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bed_type_guaranteed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].bed_type_guaranteed","typeLabel":"boolean | null"},"selected":{"oneOf":[{"type":"boolean","description":"True for the layout this offer is sold with. Null when not known, and always null on catalogue (UNIFYSTAYS) rooms, where layouts are alternatives.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].selected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for the layout this offer is sold with. Null when not known, and always null on catalogue (UNIFYSTAYS) rooms, where layouts are alternatives.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].selected.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX].selected","typeLabel":"boolean | null"}},"required":["id","bed_count","bedroom_count","beds","bed_type_guaranteed","selected"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_configurations","typeLabel":"object[]"},"bed_summary":{"oneOf":[{"type":"string","example":"1 king bed or 2 single beds","description":"English display text for the bedding. Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_summary.oneOf.0","typeLabel":"string"},{"type":"null","example":"1 king bed or 2 single beds","description":"English display text for the bedding. Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_summary.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bed_summary","typeLabel":"string | null"},"occupancy":{"oneOf":[{"type":"object","description":"Room capacity as the seller states it. Null when unknown.","required":["max_allowed"],"properties":{"max_allowed":{"type":"object","description":"The room's capacity as the seller states it. This is capacity, not the occupancy you searched for (that is in the slot's occupancy).","required":["total","adults","children","infants"],"properties":{"total":{"oneOf":[{"type":"number","example":3,"description":"Maximum guests in the room, all ages. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.total.oneOf.0","typeLabel":"number"},{"type":"null","example":3,"description":"Maximum guests in the room, all ages. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.total","typeLabel":"number | null"},"adults":{"oneOf":[{"type":"number","example":3,"description":"Maximum adults. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.adults.oneOf.0","typeLabel":"number"},{"type":"null","example":3,"description":"Maximum adults. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.adults.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.adults","typeLabel":"number | null"},"children":{"oneOf":[{"type":"number","example":2,"description":"Maximum children. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.children.oneOf.0","typeLabel":"number"},{"type":"null","example":2,"description":"Maximum children. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.children.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.children","typeLabel":"number | null"},"infants":{"oneOf":[{"type":"number","description":"Maximum infants. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.infants.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum infants. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.infants.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed.infants","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0.max_allowed","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.occupancy","typeLabel":"object | null"},"bathroom":{"oneOf":[{"type":"object","description":"Bathroom details. Null when unknown.","required":["type","count"],"properties":{"type":{"oneOf":[{"type":"string","enum":["PRIVATE","SHARED","ENSUITE"],"description":"Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["PRIVATE","SHARED","ENSUITE"],"description":"Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom.oneOf.0.type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"count":{"oneOf":[{"type":"number","description":"Number of bathrooms. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom.oneOf.0.count.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of bathrooms. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom.oneOf.0.count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom.oneOf.0.count","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.bathroom","typeLabel":"object | null"},"views":{"description":"Views from the room. Empty array when none were supplied.","type":"array","items":{"type":"object","properties":{"normalized_code":{"type":"string","example":"CITY","description":"Unifystays view code, for example CITY. New codes may be added; fall back to name.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX].normalized_code","typeLabel":"string"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX].supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX].supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX].supplier_code","typeLabel":"string | null"},"name":{"type":"string","description":"View name to display.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX].name","typeLabel":"string"},"partial":{"oneOf":[{"type":"boolean","description":"True when the view is known to be partial; null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX].partial.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the view is known to be partial; null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX].partial.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX].partial","typeLabel":"boolean | null"}},"required":["normalized_code","supplier_code","name","partial"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.views","typeLabel":"object[]"},"features":{"oneOf":[{"type":"object","description":"Boolean features (balcony, smoking, accessible...). Null when none were supplied.","required":["balcony","smoking","accessible","club_access","connecting_room"],"properties":{"balcony":{"oneOf":[{"type":"boolean","description":"True when the room has a balcony. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.balcony.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the room has a balcony. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.balcony.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.balcony","typeLabel":"boolean | null"},"smoking":{"oneOf":[{"type":"string","enum":["SMOKING","NON_SMOKING","MIXED"],"description":"MIXED means smoking status depends on the room allocated. Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.smoking.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["SMOKING","NON_SMOKING","MIXED"],"description":"MIXED means smoking status depends on the room allocated. Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.smoking.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.smoking","typeLabel":"enum\u003cstring> | null"},"accessible":{"oneOf":[{"type":"boolean","description":"True for an accessible (wheelchair-friendly) room. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.accessible.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for an accessible (wheelchair-friendly) room. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.accessible.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.accessible","typeLabel":"boolean | null"},"club_access":{"oneOf":[{"type":"boolean","description":"True when the rate includes club or lounge access. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.club_access.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the rate includes club or lounge access. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.club_access.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.club_access","typeLabel":"boolean | null"},"connecting_room":{"oneOf":[{"type":"boolean","description":"True when the room connects to another. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.connecting_room.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the room connects to another. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.connecting_room.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0.connecting_room","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.features","typeLabel":"object | null"},"extra_bed":{"oneOf":[{"type":"object","description":"Extra-bed rules. Null when unknown.","required":["available","included","charge_applicable"],"properties":{"available":{"oneOf":[{"type":"boolean","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.available.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.available.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.available","typeLabel":"boolean | null"},"included":{"oneOf":[{"type":"boolean","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.included","typeLabel":"boolean | null"},"charge_applicable":{"oneOf":[{"type":"boolean","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.charge_applicable.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.charge_applicable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0.charge_applicable","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.extra_bed","typeLabel":"object | null"},"child_bed":{"oneOf":[{"type":"object","description":"Child-bed or cot rules. Null when unknown.","required":["available","included","charge_applicable"],"properties":{"available":{"oneOf":[{"type":"boolean","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.available.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.available.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.available","typeLabel":"boolean | null"},"included":{"oneOf":[{"type":"boolean","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.included","typeLabel":"boolean | null"},"charge_applicable":{"oneOf":[{"type":"boolean","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.charge_applicable.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.charge_applicable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0.charge_applicable","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room.child_bed","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].provider_room","typeLabel":"object"},"mapping_status":{"type":"string","enum":["MAPPED","AMBIGUOUS","UNMAPPED","CONFLICT"],"example":"MAPPED","description":"MAPPED when the slot is placed in a built room family; UNMAPPED for a tmp_ room that is valid for this search only. AMBIGUOUS and CONFLICT are reserved. Diagnostics only: every offer stays bookable through its booking_token.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_status","typeLabel":"enum\u003cstring>"},"mapping_details":{"type":"object","description":"How the slot was placed in a room family. Diagnostics only.","required":["source","confidence","algorithm_version","reason_codes"],"properties":{"source":{"oneOf":[{"type":"string","enum":["MANUAL","AUTO"],"description":"MANUAL when a person confirmed the placement, AUTO when it was matched automatically. Null for a tmp_ room.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.source.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["MANUAL","AUTO"],"description":"MANUAL when a person confirmed the placement, AUTO when it was matched automatically. Null for a tmp_ room.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.source.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.source","typeLabel":"enum\u003cstring> | null"},"confidence":{"oneOf":[{"type":"number","example":0.93,"description":"Reserved; currently null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.confidence.oneOf.0","typeLabel":"number"},{"type":"null","example":0.93,"description":"Reserved; currently null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.confidence.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.confidence","typeLabel":"number | null"},"algorithm_version":{"oneOf":[{"type":"string","example":"ROOM_RULES_V5","description":"Version label of the matching rules. Null for a tmp_ room. Diagnostics only.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.algorithm_version.oneOf.0","typeLabel":"string"},{"type":"null","example":"ROOM_RULES_V5","description":"Version label of the matching rules. Null for a tmp_ room. Diagnostics only.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.algorithm_version.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.algorithm_version","typeLabel":"string | null"},"reason_codes":{"example":["GLOBAL_CATALOGUE_ASSIGNMENT","ASSIGNMENT_STABLE","BED_EXACT"],"description":"Why the slot was placed here. Diagnostics only; the list of codes can change, do not branch on it.","type":"array","items":{"type":"string","uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.reason_codes.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details.reason_codes","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].mapping_details","typeLabel":"object"},"unifystays_room":{"oneOf":[{"type":"object","description":"Always null. Use unifystays_room_id and unifystays_family_id.","required":["provider_code","provider_hotel_id","id","name","supplier_name","description","description_format","detail_status","room_type","room_category","size","amenities","images","bed_configurations","bed_summary","occupancy","bathroom","views","features","extra_bed","child_bed"],"properties":{"provider_code":{"type":"string","example":"TRIPJACK","description":"Supplier that sells this room, for example TRIPJACK. Display as the seller name if you wish.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.provider_code","typeLabel":"string"},"provider_hotel_id":{"oneOf":[{"type":"string","example":"100000249368","description":"The supplier's ID for the hotel. Null when not supplied. Informational.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.provider_hotel_id.oneOf.0","typeLabel":"string"},{"type":"null","example":"100000249368","description":"The supplier's ID for the hotel. Null when not supplied. Informational.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.provider_hotel_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.provider_hotel_id","typeLabel":"string | null"},"id":{"oneOf":[{"type":"string","example":"10024615989","description":"The supplier's ID for this room type. Null when the supplier sends none. Informational; do not use it as a booking key.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.id.oneOf.0","typeLabel":"string"},{"type":"null","example":"10024615989","description":"The supplier's ID for this room type. Null when the supplier sends none. Informational; do not use it as a booking key.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.id","typeLabel":"string | null"},"name":{"type":"string","example":"Aloft Studio, King","description":"Room name to display on the offer row, in the seller's words. For a catalogue room it can change as names are normalised; do not use it as an identity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.name","typeLabel":"string"},"supplier_name":{"oneOf":[{"type":"string","description":"Room name exactly as the supplier sent it. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room name exactly as the supplier sent it. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.supplier_name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","description":"Room description. Null when none. Render according to description_format.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room description. Null when none. Render according to description_format.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.description","typeLabel":"string | null"},"description_format":{"oneOf":[{"type":"string","enum":["HTML","TEXT"],"description":"HTML = sanitized HTML to render; TEXT = plain text to escape. Null when description is null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.description_format.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["HTML","TEXT"],"description":"HTML = sanitized HTML to render; TEXT = plain text to escape. Null when description is null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.description_format.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.description_format","typeLabel":"enum\u003cstring> | null"},"detail_status":{"type":"string","enum":["NONE","PARTIAL","COMPLETE"],"description":"NONE: only id and name are known. PARTIAL: some structured detail is present; any field may still be null. COMPLETE: reserved; not emitted today.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.detail_status","typeLabel":"enum\u003cstring>"},"room_type":{"oneOf":[{"type":"object","description":"Room type classification (for example SUITE). Null when unknown.","required":["normalized_code","supplier_code","supplier_name"],"properties":{"normalized_code":{"type":"string","enum":["ROOM","SUITE","STUDIO","APARTMENT","VILLA","DORM","STANDARD","SUPERIOR","DELUXE","EXECUTIVE","PREMIUM","FAMILY","OTHER","UNKNOWN"],"example":"SUPERIOR","description":"Unifystays classification. New values may be added; treat an unknown value as OTHER.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.0.normalized_code","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.0.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.0.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.0.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.0.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.0.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.0.supplier_name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_type","typeLabel":"object | null"},"room_category":{"oneOf":[{"type":"object","description":"Room category classification (for example DELUXE). Null when unknown.","required":["normalized_code","supplier_code","supplier_name"],"properties":{"normalized_code":{"type":"string","enum":["ROOM","SUITE","STUDIO","APARTMENT","VILLA","DORM","STANDARD","SUPERIOR","DELUXE","EXECUTIVE","PREMIUM","FAMILY","OTHER","UNKNOWN"],"example":"SUPERIOR","description":"Unifystays classification. New values may be added; treat an unknown value as OTHER.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.0.normalized_code","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.0.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.0.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.0.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.0.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier's own label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.0.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.0.supplier_name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.room_category","typeLabel":"object | null"},"size":{"oneOf":[{"type":"object","description":"Room size. Null when unknown.","required":["value","unit"],"properties":{"value":{"oneOf":[{"type":"number","description":"Room size number. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size.oneOf.0.value.oneOf.0","typeLabel":"number"},{"type":"null","description":"Room size number. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size.oneOf.0.value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size.oneOf.0.value","typeLabel":"number | null"},"unit":{"oneOf":[{"type":"string","example":"sqm","description":"Unit of value, for example sqm. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size.oneOf.0.unit.oneOf.0","typeLabel":"string"},{"type":"null","example":"sqm","description":"Unit of value, for example sqm. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size.oneOf.0.unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size.oneOf.0.unit","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.size","typeLabel":"object | null"},"amenities":{"description":"Amenities the seller lists for the room. Empty array when none were supplied.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2403","description":"Supplier amenity id. For UNIFYSTAYS rooms this is the amenity code (same as normalized_code).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].id","typeLabel":"string"},"normalized_code":{"oneOf":[{"type":"string","example":"WHEELCHAIR_ACCESSIBLE","description":"Stable upper-case amenity code. New codes may be added; treat an unrecognised code as a plain labelled amenity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].normalized_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"WHEELCHAIR_ACCESSIBLE","description":"Stable upper-case amenity code. New codes may be added; treat an unrecognised code as a plain labelled amenity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].normalized_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].normalized_code","typeLabel":"string | null"},"supplier_code":{"oneOf":[{"type":"string","example":"2403","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"2403","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].supplier_code","typeLabel":"string | null"},"name":{"type":"string","example":"Free WiFi","description":"Amenity name to display.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].name","typeLabel":"string"},"category":{"oneOf":[{"type":"string","enum":["GENERAL","ACCESSIBILITY","OUTDOOR","KITCHEN","BATHROOM","CONNECTIVITY","SAFETY"],"description":"Grouping for display. Null when the source does not categorise the amenity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].category.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["GENERAL","ACCESSIBILITY","OUTDOOR","KITCHEN","BATHROOM","CONNECTIVITY","SAFETY"],"description":"Grouping for display. Null when the source does not categorise the amenity.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].category.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX].category","typeLabel":"enum\u003cstring> | null"}},"required":["id","normalized_code","supplier_code","name","category"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.amenities","typeLabel":"object[]"},"images":{"description":"Room images from the seller. Empty array when none.","type":"array","items":{"type":"object","properties":{"url":{"type":"string","description":"Image URL. Treat it as opaque; do not rewrite or strip it.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images.items.[INDEX].url","typeLabel":"string"},"caption":{"oneOf":[{"type":"string","description":"Caption when supplied. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images.items.[INDEX].caption.oneOf.0","typeLabel":"string"},{"type":"null","description":"Caption when supplied. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images.items.[INDEX].caption.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images.items.[INDEX].caption","typeLabel":"string | null"},"is_primary":{"oneOf":[{"type":"boolean","description":"True for the lead image of the room. Null when the source does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images.items.[INDEX].is_primary.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for the lead image of the room. Null when the source does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images.items.[INDEX].is_primary.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images.items.[INDEX].is_primary","typeLabel":"boolean | null"}},"required":["url","caption","is_primary"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.images","typeLabel":"object[]"},"bed_configurations":{"description":"Supplier-provided bedding choices. An empty array means dependable bedding data was not supplied; it does not mean the room has no bed.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"bed_1","description":"Identifies this layout within the room.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].id","typeLabel":"string"},"bed_count":{"oneOf":[{"type":"number","example":1,"description":"Total number of beds in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bed_count.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Total number of beds in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bed_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bed_count","typeLabel":"number | null"},"bedroom_count":{"oneOf":[{"type":"number","example":1,"description":"Number of bedrooms in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bedroom_count.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Number of bedrooms in this layout. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bedroom_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bedroom_count","typeLabel":"number | null"},"beds":{"description":"The beds in this layout, one entry per bed type.","type":"array","items":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","example":"King","description":"Bed type as the supplier named it, for display. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].type.oneOf.0","typeLabel":"string"},{"type":"null","example":"King","description":"Bed type as the supplier named it, for display. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].type","typeLabel":"string | null"},"normalized_type":{"oneOf":[{"type":"string","enum":["SINGLE","DOUBLE","QUEEN","KING","TWIN","SOFA_BED","BUNK","OTHER"],"description":"Null when the bed type is not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["SINGLE","DOUBLE","QUEEN","KING","TWIN","SOFA_BED","BUNK","OTHER"],"description":"Null when the bed type is not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].normalized_type","typeLabel":"enum\u003cstring> | null"},"supplier_type":{"oneOf":[{"type":"string","description":"The supplier's raw bed-type value. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type.oneOf.0","typeLabel":"string"},{"type":"null","description":"The supplier's raw bed-type value. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].supplier_type","typeLabel":"string | null"},"quantity":{"oneOf":[{"type":"number","example":1,"description":"Number of beds of this type. Null means unknown, not zero.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity.oneOf.0","typeLabel":"number"},{"type":"null","example":1,"description":"Number of beds of this type. Null means unknown, not zero.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].quantity","typeLabel":"number | null"},"width_min_cm":{"oneOf":[{"type":"number","example":151,"description":"Minimum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm.oneOf.0","typeLabel":"number"},{"type":"null","example":151,"description":"Minimum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].width_min_cm","typeLabel":"number | null"},"width_max_cm":{"oneOf":[{"type":"number","example":180,"description":"Maximum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm.oneOf.0","typeLabel":"number"},{"type":"null","example":180,"description":"Maximum bed width in centimetres when stated. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX].width_max_cm","typeLabel":"number | null"}},"required":["type","normalized_type","supplier_type","quantity","width_min_cm","width_max_cm"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].beds","typeLabel":"object[]"},"bed_type_guaranteed":{"oneOf":[{"type":"boolean","description":"True only when the supplier explicitly guarantees this bedding. False means described but not guaranteed; null means unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bed_type_guaranteed.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True only when the supplier explicitly guarantees this bedding. False means described but not guaranteed; null means unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bed_type_guaranteed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].bed_type_guaranteed","typeLabel":"boolean | null"},"selected":{"oneOf":[{"type":"boolean","description":"True for the layout this offer is sold with. Null when not known, and always null on catalogue (UNIFYSTAYS) rooms, where layouts are alternatives.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].selected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for the layout this offer is sold with. Null when not known, and always null on catalogue (UNIFYSTAYS) rooms, where layouts are alternatives.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].selected.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX].selected","typeLabel":"boolean | null"}},"required":["id","bed_count","bedroom_count","beds","bed_type_guaranteed","selected"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_configurations","typeLabel":"object[]"},"bed_summary":{"oneOf":[{"type":"string","example":"1 king bed or 2 single beds","description":"English display text for the bedding. Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_summary.oneOf.0","typeLabel":"string"},{"type":"null","example":"1 king bed or 2 single beds","description":"English display text for the bedding. Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_summary.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bed_summary","typeLabel":"string | null"},"occupancy":{"oneOf":[{"type":"object","description":"Room capacity as the seller states it. Null when unknown.","required":["max_allowed"],"properties":{"max_allowed":{"type":"object","description":"The room's capacity as the seller states it. This is capacity, not the occupancy you searched for (that is in the slot's occupancy).","required":["total","adults","children","infants"],"properties":{"total":{"oneOf":[{"type":"number","example":3,"description":"Maximum guests in the room, all ages. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.total.oneOf.0","typeLabel":"number"},{"type":"null","example":3,"description":"Maximum guests in the room, all ages. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.total","typeLabel":"number | null"},"adults":{"oneOf":[{"type":"number","example":3,"description":"Maximum adults. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.adults.oneOf.0","typeLabel":"number"},{"type":"null","example":3,"description":"Maximum adults. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.adults.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.adults","typeLabel":"number | null"},"children":{"oneOf":[{"type":"number","example":2,"description":"Maximum children. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.children.oneOf.0","typeLabel":"number"},{"type":"null","example":2,"description":"Maximum children. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.children.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.children","typeLabel":"number | null"},"infants":{"oneOf":[{"type":"number","description":"Maximum infants. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.infants.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum infants. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.infants.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed.infants","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0.max_allowed","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.occupancy","typeLabel":"object | null"},"bathroom":{"oneOf":[{"type":"object","description":"Bathroom details. Null when unknown.","required":["type","count"],"properties":{"type":{"oneOf":[{"type":"string","enum":["PRIVATE","SHARED","ENSUITE"],"description":"Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["PRIVATE","SHARED","ENSUITE"],"description":"Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom.oneOf.0.type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"count":{"oneOf":[{"type":"number","description":"Number of bathrooms. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom.oneOf.0.count.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of bathrooms. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom.oneOf.0.count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom.oneOf.0.count","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.bathroom","typeLabel":"object | null"},"views":{"description":"Views from the room. Empty array when none were supplied.","type":"array","items":{"type":"object","properties":{"normalized_code":{"type":"string","example":"CITY","description":"Unifystays view code, for example CITY. New codes may be added; fall back to name.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX].normalized_code","typeLabel":"string"},"supplier_code":{"oneOf":[{"type":"string","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX].supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Supplier-native code. Null for UNIFYSTAYS rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX].supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX].supplier_code","typeLabel":"string | null"},"name":{"type":"string","description":"View name to display.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX].name","typeLabel":"string"},"partial":{"oneOf":[{"type":"boolean","description":"True when the view is known to be partial; null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX].partial.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the view is known to be partial; null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX].partial.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX].partial","typeLabel":"boolean | null"}},"required":["normalized_code","supplier_code","name","partial"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.views","typeLabel":"object[]"},"features":{"oneOf":[{"type":"object","description":"Boolean features (balcony, smoking, accessible...). Null when none were supplied.","required":["balcony","smoking","accessible","club_access","connecting_room"],"properties":{"balcony":{"oneOf":[{"type":"boolean","description":"True when the room has a balcony. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.balcony.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the room has a balcony. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.balcony.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.balcony","typeLabel":"boolean | null"},"smoking":{"oneOf":[{"type":"string","enum":["SMOKING","NON_SMOKING","MIXED"],"description":"MIXED means smoking status depends on the room allocated. Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.smoking.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["SMOKING","NON_SMOKING","MIXED"],"description":"MIXED means smoking status depends on the room allocated. Null when not known.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.smoking.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.smoking","typeLabel":"enum\u003cstring> | null"},"accessible":{"oneOf":[{"type":"boolean","description":"True for an accessible (wheelchair-friendly) room. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.accessible.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True for an accessible (wheelchair-friendly) room. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.accessible.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.accessible","typeLabel":"boolean | null"},"club_access":{"oneOf":[{"type":"boolean","description":"True when the rate includes club or lounge access. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.club_access.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the rate includes club or lounge access. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.club_access.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.club_access","typeLabel":"boolean | null"},"connecting_room":{"oneOf":[{"type":"boolean","description":"True when the room connects to another. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.connecting_room.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the room connects to another. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.connecting_room.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0.connecting_room","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.features","typeLabel":"object | null"},"extra_bed":{"oneOf":[{"type":"object","description":"Extra-bed rules. Null when unknown.","required":["available","included","charge_applicable"],"properties":{"available":{"oneOf":[{"type":"boolean","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.available.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.available.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.available","typeLabel":"boolean | null"},"included":{"oneOf":[{"type":"boolean","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.included","typeLabel":"boolean | null"},"charge_applicable":{"oneOf":[{"type":"boolean","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.charge_applicable.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.charge_applicable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0.charge_applicable","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.extra_bed","typeLabel":"object | null"},"child_bed":{"oneOf":[{"type":"object","description":"Child-bed or cot rules. Null when unknown.","required":["available","included","charge_applicable"],"properties":{"available":{"oneOf":[{"type":"boolean","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.available.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when this bed can be added. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.available.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.available","typeLabel":"boolean | null"},"included":{"oneOf":[{"type":"boolean","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the bed is included in the price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.included","typeLabel":"boolean | null"},"charge_applicable":{"oneOf":[{"type":"boolean","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.charge_applicable.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the hotel charges for the bed. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.charge_applicable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0.charge_applicable","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0.child_bed","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room","typeLabel":"object | null"},"occupancy":{"type":"object","description":"Adults and child ages quoted for this slot, copied from your request in the same order.","required":["adults","child_ages"],"example":{"adults":2,"child_ages":[7]},"properties":{"adults":{"type":"number","example":2,"minimum":1,"description":"Number of adults in the room.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].occupancy.adults","typeLabel":"number"},"child_ages":{"example":[7],"description":"Age of each child in the room. Empty array when no children.","type":"array","items":{"type":"number","uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].occupancy.child_ages.items.[INDEX]","typeLabel":"number"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].occupancy.child_ages","typeLabel":"number[]"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].occupancy","typeLabel":"object"},"meal_plan":{"type":"object","description":"Meal plan of this room slot.","required":["code","supplier_code","supplier_name","label","is_breakfast_included","is_child_meal_included"],"properties":{"code":{"type":"string","enum":["RO","BB","HB","FB","AI","OTHER","UNKNOWN"],"example":"BB","description":"Normalized meal plan. RO room only, BB breakfast, HB half board, FB full board, AI all inclusive, OTHER another plan (read label), UNKNOWN not stated.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.code","typeLabel":"enum\u003cstring>"},"supplier_code":{"oneOf":[{"type":"string","example":"breakfast","description":"The supplier's raw meal code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.supplier_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"breakfast","description":"The supplier's raw meal code. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.supplier_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.supplier_code","typeLabel":"string | null"},"supplier_name":{"oneOf":[{"type":"string","example":"Breakfast","description":"The supplier's own meal label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.supplier_name.oneOf.0","typeLabel":"string"},{"type":"null","example":"Breakfast","description":"The supplier's own meal label. Null when not supplied.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.supplier_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.supplier_name","typeLabel":"string | null"},"label":{"type":"string","example":"Bed \u0026 Breakfast","description":"English label to display, for example Bed \u0026 Breakfast.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.label","typeLabel":"string"},"is_breakfast_included":{"type":"boolean","example":true,"description":"True when breakfast is included in the price.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.is_breakfast_included","typeLabel":"boolean"},"is_child_meal_included":{"oneOf":[{"type":"boolean","description":"True when meals for children are included. Null when the supplier does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.is_child_meal_included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when meals for children are included. Null when the supplier does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.is_child_meal_included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan.is_child_meal_included","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].meal_plan","typeLabel":"object"},"inclusions":{"description":"Inclusions of this room slot (for example free WiFi). Empty array when none.","type":"array","items":{"type":"object","properties":{"code":{"type":"string","example":"free_wifi","description":"Machine code of the inclusion (for example free_wifi). New codes can appear; treat unknown codes as plain labels.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].inclusions.items.[INDEX].code","typeLabel":"string"},"label":{"type":"string","example":"Free WiFi","description":"Inclusion text to show to the guest.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].inclusions.items.[INDEX].label","typeLabel":"string"}},"required":["code","label"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].inclusions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].inclusions","typeLabel":"object[]"},"unifystays_family_id":{"oneOf":[{"type":"string","example":"4120552","description":"The family this slot's room belongs to (equals unifystays_room_id for a family-level seller). A tmp_ id is valid for this search only.","uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_family_id.oneOf.0","typeLabel":"string"},{"type":"null","example":"4120552","description":"The family this slot's room belongs to (equals unifystays_room_id for a family-level seller). A tmp_ id is valid for this search only.","uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_family_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_family_id","typeLabel":"string | null"},"unifystays_room_id":{"oneOf":[{"type":"string","example":"4120552","description":"Id of the room object this slot belongs to (data.unifystays_rooms, or rooms[] on the provider_options event). A tmp_ id is valid for this search only. Display identity only; book with booking_token and room_allocation_id.","uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room_id.oneOf.0","typeLabel":"string"},{"type":"null","example":"4120552","description":"Id of the room object this slot belongs to (data.unifystays_rooms, or rooms[] on the provider_options event). A tmp_ id is valid for this search only. Display identity only; book with booking_token and room_allocation_id.","uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX].unifystays_room_id","typeLabel":"string | null"}},"required":["room_allocation_id","provider_room","mapping_status","mapping_details","unifystays_room","occupancy","meal_plan","inclusions"],"uniqueKey":"data.options.items.[INDEX].rooms.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].rooms","typeLabel":"object[]"},"lifecycle":{"type":"object","description":"Validity, availability and booking modes of the offer.","required":["stage","quoted_at","expires_at","prebook_required","price_guaranteed","availability","rooms_remaining","on_request","available_booking_modes","hold_allowed","hold_deadline","post_booking_actions"],"properties":{"stage":{"type":"string","enum":["ROOMS","PREBOOK"],"description":"Where the offer is in the flow: ROOMS (from room search) or PREBOOK (rechecked at prebook).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.stage","typeLabel":"enum\u003cstring>"},"quoted_at":{"type":"string","description":"When Unifystays obtained this offer from the supplier (ISO 8601, UTC).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.quoted_at","typeLabel":"string"},"expires_at":{"type":"string","description":"When the offer stops being valid (ISO 8601, UTC): 15 minutes after quoted_at, or earlier when the supplier sets an earlier expiry. Do not send a booking_token after this time; search again.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.expires_at","typeLabel":"string"},"prebook_required":{"type":"boolean","description":"True when you must call Prebook before booking. Always true for a rooms-stage offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.prebook_required","typeLabel":"boolean"},"price_guaranteed":{"type":"boolean","description":"True only when the supplier guarantees this price. False at room search: the price and availability are confirmed by prebook.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.price_guaranteed","typeLabel":"boolean"},"availability":{"type":"string","enum":["AVAILABLE","SOLD_OUT","ON_REQUEST","UNKNOWN"],"description":"AVAILABLE, SOLD_OUT, ON_REQUEST (the supplier confirms after booking), or UNKNOWN.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.availability","typeLabel":"enum\u003cstring>"},"rooms_remaining":{"oneOf":[{"type":"object","description":"Rooms left at this rate when the supplier says so, for urgency messages. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.rooms_remaining.oneOf.0","typeLabel":"object"},{"type":"null","description":"Rooms left at this rate when the supplier says so, for urgency messages. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.rooms_remaining.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.rooms_remaining","typeLabel":"object | null"},"on_request":{"type":"boolean","description":"True when the booking is not instantly confirmed and the supplier confirms later.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.on_request","typeLabel":"boolean"},"available_booking_modes":{"type":"array","description":"Booking modes certified for this exact offer. Rooms-stage offers normally expose INSTANT only; prebook may add HOLD.","items":{"type":"string","enum":["INSTANT","HOLD"],"uniqueKey":"data.options.items.[INDEX].lifecycle.available_booking_modes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.available_booking_modes","typeLabel":"enum\u003cstring>[]"},"hold_allowed":{"type":"boolean","description":"True when the offer can be held without payment. Always false at room search; prebook can report true.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_allowed","typeLabel":"boolean"},"hold_deadline":{"oneOf":[{"type":"object","description":"Time by which a held booking must be confirmed. Null when no hold is possible.","required":["local_datetime","timezone","utc_datetime"],"properties":{"local_datetime":{"type":"string","example":"2026-05-18T23:59:59","description":"Date and time exactly as the supplier stated it, without an offset (ISO 8601, for example 2026-05-18T23:59:59). It is wall-clock time in the zone named by timezone. Show this to the guest.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.0.local_datetime","typeLabel":"string"},"timezone":{"oneOf":[{"type":"string","example":"UTC","description":"IANA time zone of local_datetime (for example Asia/Kolkata) when known. Null when the supplier gave no zone; then utc_datetime is also null and you should show local_datetime as is.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.0.timezone.oneOf.0","typeLabel":"string"},{"type":"null","example":"UTC","description":"IANA time zone of local_datetime (for example Asia/Kolkata) when known. Null when the supplier gave no zone; then utc_datetime is also null and you should show local_datetime as is.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.0.timezone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.0.timezone","typeLabel":"string | null"},"utc_datetime":{"oneOf":[{"type":"string","example":"2026-05-18T23:59:59.000Z","description":"The same moment in UTC (ISO 8601 with Z). Null when the time zone is unknown. Use it for deadline logic and countdowns, never for display without a zone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.0.utc_datetime.oneOf.0","typeLabel":"string"},{"type":"null","example":"2026-05-18T23:59:59.000Z","description":"The same moment in UTC (ISO 8601 with Z). Null when the time zone is unknown. Use it for deadline logic and countdowns, never for display without a zone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.0.utc_datetime.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.0.utc_datetime","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.hold_deadline","typeLabel":"object | null"},"post_booking_actions":{"type":"array","description":"Post-booking actions supported by this provider for the offer. An empty array means no provider API is certified for those actions.","items":{"type":"string","enum":["STATUS","CANCEL","CONFIRM_HOLD"],"uniqueKey":"data.options.items.[INDEX].lifecycle.post_booking_actions.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle.post_booking_actions","typeLabel":"enum\u003cstring>[]"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].lifecycle","typeLabel":"object"},"pricing":{"type":"object","description":"The price of the whole offer. native_ledger is authoritative (supplier currency, integer minor units). usd_ledger is the same lines converted to USD, or null when a rate is missing.","required":["price_basis","breakdown_status","native_ledger","usd_ledger","display_currency","display_ledger","conversion"],"properties":{"price_basis":{"type":"string","enum":["NET","GROSS","COMMISSIONABLE","UNKNOWN"],"description":"Commercial nature of the supplier's price as the supplier declares it: NET, GROSS, COMMISSIONABLE or UNKNOWN. It does not change how you read the ledger; use commercial for the supplier's own reference values.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.price_basis","typeLabel":"enum\u003cstring>"},"breakdown_status":{"type":"string","enum":["COMPLETE","PARTIAL","NOT_PROVIDED","ESTIMATED"],"description":"How complete the itemisation is. COMPLETE: all charges are itemised. PARTIAL: some charges may not be itemised. NOT_PROVIDED: the supplier gave no breakdown. ESTIMATED: part of the breakdown is estimated. The totals are reliable in every case.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.breakdown_status","typeLabel":"enum\u003cstring>"},"native_ledger":{"type":"object","description":"Authoritative supplier/property obligations in their native currencies. Its lines already reconcile to its totals and must not be added to commercial fields.","required":["primary_currency","totals","lines"],"properties":{"primary_currency":{"type":"string","example":"USD","description":"Main currency of the ledger (ISO 4217). Offers priced in several currencies have one totals entry per currency.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.primary_currency","typeLabel":"string"},"totals":{"description":"One total per currency present in the lines. Usually exactly one.","type":"array","items":{"type":"object","properties":{"currency":{"type":"string","example":"USD","description":"ISO 4217 currency of this total.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Decimal places of the currency.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].currency_exponent","typeLabel":"number"},"payable_to_supplier":{"type":"object","description":"Sum of the lines with collection_location SUPPLIER: the amount settled through the supplier for this booking.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].payable_to_supplier.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].payable_to_supplier.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].payable_to_supplier.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].payable_to_supplier","typeLabel":"object"},"payable_at_property":{"type":"object","description":"Sum of the lines with collection_location PROPERTY: charges the guest pays at the hotel. Show them to the guest as 'pay at hotel'.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].payable_at_property.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].payable_at_property.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].payable_at_property.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].payable_at_property","typeLabel":"object"},"total":{"type":"object","description":"payable_to_supplier plus payable_at_property: everything the guest ends up paying for the stay, split by who collects it.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].total.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].total.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].total.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX].total","typeLabel":"object"}},"required":["currency","currency_exponent","payable_to_supplier","payable_at_property","total"],"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.totals","typeLabel":"object[]"},"lines":{"description":"Complete payable ledger. Accommodation is represented by room_rate lines; no separate base price exists.","type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["room_rate","tax","fee","adjustment","other"],"description":"Type of charge: room_rate (the accommodation; exactly one per ledger), tax, fee, adjustment, other.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].category","typeLabel":"enum\u003cstring>"},"code":{"type":"string","example":"city_tax","description":"Supplier's code for the charge, lower case (for example city_tax). Informational.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].code","typeLabel":"string"},"normalized_code":{"type":"string","example":"CITY_TAX","description":"Unifystays code for the charge (for example CITY_TAX, RESORT_FEE, SERVICE_FEE, VAT, ROOM_RATE, OTHER_TAX). New codes can appear; fall back to description for unknown ones.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].normalized_code","typeLabel":"string"},"description":{"type":"string","example":"City tax","description":"Charge name to show to the guest, in English.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].description","typeLabel":"string"},"amount":{"type":"object","description":"Amount of the line in minor units, in the ledger's currency. Lines already reconcile to the ledger totals: do not add them to anything else.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].amount.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].amount.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].amount.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].amount","typeLabel":"object"},"collection_location":{"type":"string","enum":["SUPPLIER","PROPERTY"],"description":"Who collects the line. SUPPLIER: paid through the supplier (counts in payable_to_supplier). PROPERTY: the guest pays the hotel on arrival or departure (counts in payable_at_property).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].collection_location","typeLabel":"enum\u003cstring>"},"included_in_quoted_total":{"type":"boolean","example":false,"description":"True when the supplier's quoted rate already contains this line, so it is not an extra charge. False when it is charged on top of the quoted rate (typically taxes and fees collected at the property).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].included_in_quoted_total","typeLabel":"boolean"},"scope":{"type":"object","description":"What the amount covers (whole stay, per room, per person...).","required":["basis","room_allocation_id","guest_type","quantity"],"properties":{"basis":{"type":"string","enum":["PER_STAY","PER_ROOM","PER_ROOM_PER_NIGHT","PER_PERSON","PER_PERSON_PER_NIGHT"],"description":"What the amount covers. PER_STAY: the whole stay. PER_ROOM / PER_ROOM_PER_NIGHT: each room (per night). PER_PERSON / PER_PERSON_PER_NIGHT: each guest (per night). The amount is already the total for that scope.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.basis","typeLabel":"enum\u003cstring>"},"room_allocation_id":{"oneOf":[{"type":"string","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.room_allocation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.room_allocation_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.room_allocation_id","typeLabel":"string | null"},"guest_type":{"oneOf":[{"type":"string","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.guest_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.guest_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.guest_type","typeLabel":"enum\u003cstring> | null"},"quantity":{"oneOf":[{"type":"number","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.quantity.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope.quantity","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].scope","typeLabel":"object"},"mandatory":{"oneOf":[{"type":"boolean","description":"True when the charge is compulsory, false when optional, null when the supplier does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].mandatory.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the charge is compulsory, false when optional, null when the supplier does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].mandatory.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].mandatory","typeLabel":"boolean | null"},"source_amount":{"type":"object","description":"USD ledger only: the original amount in the supplier currency before conversion.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].source_amount.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].source_amount.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].source_amount.currency_exponent","typeLabel":"number"}},"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].source_amount","typeLabel":"object"},"is_estimated":{"type":"boolean","description":"USD ledger only: true when the line was converted from another currency with an exchange rate (so the USD value is an estimate), false when the source was already USD.","uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX].is_estimated","typeLabel":"boolean"}},"required":["category","code","normalized_code","description","amount","collection_location","included_in_quoted_total","scope","mandatory"],"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger.lines","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.native_ledger","typeLabel":"object"},"usd_ledger":{"oneOf":[{"type":"object","description":"The same logical native-ledger lines converted completely to USD. Null when any required FX rate is unavailable.","required":["primary_currency","totals","lines"],"properties":{"primary_currency":{"type":"string","example":"USD","description":"Main currency of the ledger (ISO 4217). Offers priced in several currencies have one totals entry per currency.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.primary_currency","typeLabel":"string"},"totals":{"description":"One total per currency present in the lines. Usually exactly one.","type":"array","items":{"type":"object","properties":{"currency":{"type":"string","example":"USD","description":"ISO 4217 currency of this total.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Decimal places of the currency.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].currency_exponent","typeLabel":"number"},"payable_to_supplier":{"type":"object","description":"Sum of the lines with collection_location SUPPLIER: the amount settled through the supplier for this booking.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].payable_to_supplier.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].payable_to_supplier.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].payable_to_supplier.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].payable_to_supplier","typeLabel":"object"},"payable_at_property":{"type":"object","description":"Sum of the lines with collection_location PROPERTY: charges the guest pays at the hotel. Show them to the guest as 'pay at hotel'.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].payable_at_property.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].payable_at_property.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].payable_at_property.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].payable_at_property","typeLabel":"object"},"total":{"type":"object","description":"payable_to_supplier plus payable_at_property: everything the guest ends up paying for the stay, split by who collects it.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].total.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].total.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].total.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX].total","typeLabel":"object"}},"required":["currency","currency_exponent","payable_to_supplier","payable_at_property","total"],"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.totals","typeLabel":"object[]"},"lines":{"description":"Complete payable ledger. Accommodation is represented by room_rate lines; no separate base price exists.","type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["room_rate","tax","fee","adjustment","other"],"description":"Type of charge: room_rate (the accommodation; exactly one per ledger), tax, fee, adjustment, other.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].category","typeLabel":"enum\u003cstring>"},"code":{"type":"string","example":"city_tax","description":"Supplier's code for the charge, lower case (for example city_tax). Informational.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].code","typeLabel":"string"},"normalized_code":{"type":"string","example":"CITY_TAX","description":"Unifystays code for the charge (for example CITY_TAX, RESORT_FEE, SERVICE_FEE, VAT, ROOM_RATE, OTHER_TAX). New codes can appear; fall back to description for unknown ones.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].normalized_code","typeLabel":"string"},"description":{"type":"string","example":"City tax","description":"Charge name to show to the guest, in English.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].description","typeLabel":"string"},"amount":{"type":"object","description":"Amount of the line in minor units, in the ledger's currency. Lines already reconcile to the ledger totals: do not add them to anything else.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].amount.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].amount.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].amount.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].amount","typeLabel":"object"},"collection_location":{"type":"string","enum":["SUPPLIER","PROPERTY"],"description":"Who collects the line. SUPPLIER: paid through the supplier (counts in payable_to_supplier). PROPERTY: the guest pays the hotel on arrival or departure (counts in payable_at_property).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].collection_location","typeLabel":"enum\u003cstring>"},"included_in_quoted_total":{"type":"boolean","example":false,"description":"True when the supplier's quoted rate already contains this line, so it is not an extra charge. False when it is charged on top of the quoted rate (typically taxes and fees collected at the property).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].included_in_quoted_total","typeLabel":"boolean"},"scope":{"type":"object","description":"What the amount covers (whole stay, per room, per person...).","required":["basis","room_allocation_id","guest_type","quantity"],"properties":{"basis":{"type":"string","enum":["PER_STAY","PER_ROOM","PER_ROOM_PER_NIGHT","PER_PERSON","PER_PERSON_PER_NIGHT"],"description":"What the amount covers. PER_STAY: the whole stay. PER_ROOM / PER_ROOM_PER_NIGHT: each room (per night). PER_PERSON / PER_PERSON_PER_NIGHT: each guest (per night). The amount is already the total for that scope.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.basis","typeLabel":"enum\u003cstring>"},"room_allocation_id":{"oneOf":[{"type":"string","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.room_allocation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.room_allocation_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.room_allocation_id","typeLabel":"string | null"},"guest_type":{"oneOf":[{"type":"string","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.guest_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.guest_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.guest_type","typeLabel":"enum\u003cstring> | null"},"quantity":{"oneOf":[{"type":"number","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.quantity.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope.quantity","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].scope","typeLabel":"object"},"mandatory":{"oneOf":[{"type":"boolean","description":"True when the charge is compulsory, false when optional, null when the supplier does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].mandatory.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the charge is compulsory, false when optional, null when the supplier does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].mandatory.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].mandatory","typeLabel":"boolean | null"},"source_amount":{"type":"object","description":"USD ledger only: the original amount in the supplier currency before conversion.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].source_amount.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].source_amount.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].source_amount.currency_exponent","typeLabel":"number"}},"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].source_amount","typeLabel":"object"},"is_estimated":{"type":"boolean","description":"USD ledger only: true when the line was converted from another currency with an exchange rate (so the USD value is an estimate), false when the source was already USD.","uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX].is_estimated","typeLabel":"boolean"}},"required":["category","code","normalized_code","description","amount","collection_location","included_in_quoted_total","scope","mandatory"],"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0.lines","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.usd_ledger","typeLabel":"object | null"},"display_currency":{"type":"string","example":"EUR","description":"Currency of display_ledger: the organization's display currency (USD unless the organization chose another, or sent the X-Unifystays-Currency header).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_currency","typeLabel":"string"},"display_ledger":{"oneOf":[{"type":"object","description":"The same logical native-ledger lines converted completely to display_currency. Identical to usd_ledger when display_currency is USD. Null when any required FX rate is unavailable.","required":["primary_currency","totals","lines"],"properties":{"primary_currency":{"type":"string","example":"USD","description":"Main currency of the ledger (ISO 4217). Offers priced in several currencies have one totals entry per currency.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.primary_currency","typeLabel":"string"},"totals":{"description":"One total per currency present in the lines. Usually exactly one.","type":"array","items":{"type":"object","properties":{"currency":{"type":"string","example":"USD","description":"ISO 4217 currency of this total.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Decimal places of the currency.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].currency_exponent","typeLabel":"number"},"payable_to_supplier":{"type":"object","description":"Sum of the lines with collection_location SUPPLIER: the amount settled through the supplier for this booking.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].payable_to_supplier.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].payable_to_supplier.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].payable_to_supplier.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].payable_to_supplier","typeLabel":"object"},"payable_at_property":{"type":"object","description":"Sum of the lines with collection_location PROPERTY: charges the guest pays at the hotel. Show them to the guest as 'pay at hotel'.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].payable_at_property.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].payable_at_property.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].payable_at_property.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].payable_at_property","typeLabel":"object"},"total":{"type":"object","description":"payable_to_supplier plus payable_at_property: everything the guest ends up paying for the stay, split by who collects it.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].total.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].total.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].total.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX].total","typeLabel":"object"}},"required":["currency","currency_exponent","payable_to_supplier","payable_at_property","total"],"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.totals","typeLabel":"object[]"},"lines":{"description":"Complete payable ledger. Accommodation is represented by room_rate lines; no separate base price exists.","type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["room_rate","tax","fee","adjustment","other"],"description":"Type of charge: room_rate (the accommodation; exactly one per ledger), tax, fee, adjustment, other.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].category","typeLabel":"enum\u003cstring>"},"code":{"type":"string","example":"city_tax","description":"Supplier's code for the charge, lower case (for example city_tax). Informational.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].code","typeLabel":"string"},"normalized_code":{"type":"string","example":"CITY_TAX","description":"Unifystays code for the charge (for example CITY_TAX, RESORT_FEE, SERVICE_FEE, VAT, ROOM_RATE, OTHER_TAX). New codes can appear; fall back to description for unknown ones.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].normalized_code","typeLabel":"string"},"description":{"type":"string","example":"City tax","description":"Charge name to show to the guest, in English.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].description","typeLabel":"string"},"amount":{"type":"object","description":"Amount of the line in minor units, in the ledger's currency. Lines already reconcile to the ledger totals: do not add them to anything else.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].amount.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].amount.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].amount.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].amount","typeLabel":"object"},"collection_location":{"type":"string","enum":["SUPPLIER","PROPERTY"],"description":"Who collects the line. SUPPLIER: paid through the supplier (counts in payable_to_supplier). PROPERTY: the guest pays the hotel on arrival or departure (counts in payable_at_property).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].collection_location","typeLabel":"enum\u003cstring>"},"included_in_quoted_total":{"type":"boolean","example":false,"description":"True when the supplier's quoted rate already contains this line, so it is not an extra charge. False when it is charged on top of the quoted rate (typically taxes and fees collected at the property).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].included_in_quoted_total","typeLabel":"boolean"},"scope":{"type":"object","description":"What the amount covers (whole stay, per room, per person...).","required":["basis","room_allocation_id","guest_type","quantity"],"properties":{"basis":{"type":"string","enum":["PER_STAY","PER_ROOM","PER_ROOM_PER_NIGHT","PER_PERSON","PER_PERSON_PER_NIGHT"],"description":"What the amount covers. PER_STAY: the whole stay. PER_ROOM / PER_ROOM_PER_NIGHT: each room (per night). PER_PERSON / PER_PERSON_PER_NIGHT: each guest (per night). The amount is already the total for that scope.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.basis","typeLabel":"enum\u003cstring>"},"room_allocation_id":{"oneOf":[{"type":"string","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.room_allocation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.room_allocation_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.room_allocation_id","typeLabel":"string | null"},"guest_type":{"oneOf":[{"type":"string","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.guest_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.guest_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.guest_type","typeLabel":"enum\u003cstring> | null"},"quantity":{"oneOf":[{"type":"number","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.quantity.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope.quantity","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].scope","typeLabel":"object"},"mandatory":{"oneOf":[{"type":"boolean","description":"True when the charge is compulsory, false when optional, null when the supplier does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].mandatory.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the charge is compulsory, false when optional, null when the supplier does not say.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].mandatory.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].mandatory","typeLabel":"boolean | null"},"source_amount":{"type":"object","description":"USD ledger only: the original amount in the supplier currency before conversion.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].source_amount.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].source_amount.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].source_amount.currency_exponent","typeLabel":"number"}},"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].source_amount","typeLabel":"object"},"is_estimated":{"type":"boolean","description":"USD ledger only: true when the line was converted from another currency with an exchange rate (so the USD value is an estimate), false when the source was already USD.","uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX].is_estimated","typeLabel":"boolean"}},"required":["category","code","normalized_code","description","amount","collection_location","included_in_quoted_total","scope","mandatory"],"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0.lines","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.display_ledger","typeLabel":"object | null"},"conversion":{"type":"object","description":"FX rates used for usd_ledger and display_ledger.","required":["status","missing_currencies","rates"],"properties":{"status":{"type":"string","enum":["AVAILABLE","UNAVAILABLE"],"description":"AVAILABLE when every currency could be converted and usd_ledger and display_ledger are present. UNAVAILABLE when a rate is missing and both are null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.status","typeLabel":"enum\u003cstring>"},"missing_currencies":{"description":"Currencies without a rate, including the display currency when its rate is the one missing. Empty when status is AVAILABLE.","type":"array","items":{"type":"string","uniqueKey":"data.options.items.[INDEX].pricing.conversion.missing_currencies.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.missing_currencies","typeLabel":"string[]"},"rates":{"description":"Rates used for both usd_ledger and display_ledger: for each native currency, the pair to USD and, when different, the pair to the display currency. Empty when status is UNAVAILABLE.","type":"array","items":{"type":"object","properties":{"base_currency":{"type":"string","example":"AED","description":"Currency that was converted.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.rates.items.[INDEX].base_currency","typeLabel":"string"},"quote_currency":{"type":"string","example":"USD","description":"Currency the base currency was converted into: USD, or the organization's display currency; see PricingDto.display_currency.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.rates.items.[INDEX].quote_currency","typeLabel":"string"},"rate":{"type":"number","example":0.272294,"description":"Units of quote_currency for one unit of base_currency, used to build usd_ledger or display_ledger.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.rates.items.[INDEX].rate","typeLabel":"number"},"rate_updated_at":{"oneOf":[{"type":"string","description":"When the rate was last refreshed (ISO 8601). Null for USD or when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.rates.items.[INDEX].rate_updated_at.oneOf.0","typeLabel":"string"},{"type":"null","description":"When the rate was last refreshed (ISO 8601). Null for USD or when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.rates.items.[INDEX].rate_updated_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.rates.items.[INDEX].rate_updated_at","typeLabel":"string | null"}},"required":["base_currency","quote_currency","rate","rate_updated_at"],"uniqueKey":"data.options.items.[INDEX].pricing.conversion.rates.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion.rates","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing.conversion","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].pricing","typeLabel":"object"},"payment":{"type":"object","description":"Who pays, where and when.","required":["settlement_channel","payer","supplier_payment_type","payable_at","collection_timing","requires_card_data","requires_cvc","requires_vcc","security_deposit"],"properties":{"settlement_channel":{"type":"string","enum":["SUPPLIER_ACCOUNT","PROPERTY"],"description":"How the supplier is paid. SUPPLIER_ACCOUNT: through your account with the supplier. PROPERTY: the guest pays the hotel.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.settlement_channel","typeLabel":"enum\u003cstring>"},"payer":{"type":"string","enum":["AGENCY","GUEST","UNKNOWN"],"description":"Who pays. AGENCY: you (the agency). GUEST: the guest pays directly. UNKNOWN.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.payer","typeLabel":"enum\u003cstring>"},"supplier_payment_type":{"type":"string","description":"The supplier's own payment label (for example deposit or agency_credit). Informational; do not branch on it.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.supplier_payment_type","typeLabel":"string"},"payable_at":{"type":"string","enum":["SUPPLIER","PROPERTY"],"description":"Where the main amount is collected: SUPPLIER or PROPERTY. Charges collected at the property are marked in the pricing ledger.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.payable_at","typeLabel":"enum\u003cstring>"},"collection_timing":{"type":"string","enum":["AT_BOOKING","BEFORE_CHECK_IN","AT_CHECK_IN","AT_CHECK_OUT","ON_INVOICE","UNKNOWN"],"description":"When the money is collected: AT_BOOKING, BEFORE_CHECK_IN, AT_CHECK_IN, AT_CHECK_OUT, ON_INVOICE, or UNKNOWN.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.collection_timing","typeLabel":"enum\u003cstring>"},"requires_card_data":{"type":"boolean","description":"True when the guest's card details are needed. Offers that require a card are not returned, so this is false on offers you receive.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.requires_card_data","typeLabel":"boolean"},"requires_cvc":{"type":"boolean","description":"True when a card security code is needed. False on offers you receive.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.requires_cvc","typeLabel":"boolean"},"requires_vcc":{"type":"boolean","description":"True when a virtual card must be issued to the supplier. False on offers you receive.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.requires_vcc","typeLabel":"boolean"},"security_deposit":{"oneOf":[{"type":"object","description":"Refundable or non-refundable security/guarantee deposit when explicitly supplied. This is distinct from an opaque supplier payment type named deposit.","required":["amount","display_amount","refundable"],"properties":{"amount":{"type":"object","description":"Deposit amount.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.amount.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.amount.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.amount.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.amount","typeLabel":"object"},"display_amount":{"oneOf":[{"type":"object","description":"The deposit converted to the display currency (pricing.display_currency). Null when no exchange rate is available; never a made-up zero.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.display_amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.display_amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.display_amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.display_amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.display_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.display_amount","typeLabel":"object | null"},"refundable":{"oneOf":[{"type":"boolean","description":"True when the deposit is refunded; null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.refundable.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when the deposit is refunded; null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.refundable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0.refundable","typeLabel":"boolean | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment.security_deposit","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].payment","typeLabel":"object"},"commercial":{"type":"object","description":"Supplier reference values (net, gross, commission...). Never add these to the ledger.","required":["supplier_charge_total","display_total","gross_total","net_total","commission_total","agent_reward","recommended_selling_total","minimum_selling_total","original_total","discount_total","vat"],"properties":{"supplier_charge_total":{"oneOf":[{"type":"object","description":"Amount the supplier expects to debit or invoice to the agency. Informational settlement evidence; never add it to a pricing ledger.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.supplier_charge_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.supplier_charge_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.supplier_charge_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.supplier_charge_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.supplier_charge_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.supplier_charge_total","typeLabel":"object | null"},"display_total":{"oneOf":[{"type":"object","description":"Supplier-provided amount intended for display; not an additional charge.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.display_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.display_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.display_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.display_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.display_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.display_total","typeLabel":"object | null"},"gross_total":{"oneOf":[{"type":"object","description":"Supplier-stated gross amount before commission deduction.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.gross_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.gross_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.gross_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.gross_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.gross_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.gross_total","typeLabel":"object | null"},"net_total":{"oneOf":[{"type":"object","description":"Supplier-stated net agency cost.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.net_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.net_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.net_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.net_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.net_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.net_total","typeLabel":"object | null"},"commission_total":{"oneOf":[{"type":"object","description":"Supplier-stated agency commission; not derived by Unifystays.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.commission_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.commission_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.commission_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.commission_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.commission_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.commission_total","typeLabel":"object | null"},"agent_reward":{"oneOf":[{"type":"object","description":"Separate supplier reward, cashback, or incentive.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.agent_reward.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.agent_reward.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.agent_reward.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.agent_reward.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.agent_reward.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.agent_reward","typeLabel":"object | null"},"recommended_selling_total":{"oneOf":[{"type":"object","description":"Supplier-recommended customer selling price.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.recommended_selling_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.recommended_selling_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.recommended_selling_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.recommended_selling_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.recommended_selling_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.recommended_selling_total","typeLabel":"object | null"},"minimum_selling_total":{"oneOf":[{"type":"object","description":"Supplier-enforced minimum customer selling price.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.minimum_selling_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.minimum_selling_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.minimum_selling_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.minimum_selling_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.minimum_selling_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.minimum_selling_total","typeLabel":"object | null"},"original_total":{"oneOf":[{"type":"object","description":"Supplier price before discount or promotion.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.original_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.original_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.original_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.original_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.original_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.original_total","typeLabel":"object | null"},"discount_total":{"oneOf":[{"type":"object","description":"Supplier-stated discount amount.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.discount_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.discount_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.discount_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.discount_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.discount_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.discount_total","typeLabel":"object | null"},"vat":{"oneOf":[{"type":"object","description":"VAT details as the supplier states them. Null when not supplied.","required":["included","applied","amount","rate"],"properties":{"included":{"oneOf":[{"type":"boolean","description":"True when VAT is included in the quoted price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when VAT is included in the quoted price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.included","typeLabel":"boolean | null"},"applied":{"oneOf":[{"type":"boolean","description":"True when VAT applies. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.applied.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when VAT applies. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.applied.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.applied","typeLabel":"boolean | null"},"amount":{"oneOf":[{"type":"object","description":"VAT amount when the supplier states it. Null otherwise.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.amount","typeLabel":"object | null"},"rate":{"oneOf":[{"type":"number","description":"VAT rate in percent when stated. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.rate.oneOf.0","typeLabel":"number"},{"type":"null","description":"VAT rate in percent when stated. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.rate.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0.rate","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial.vat","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial","typeLabel":"object"},"commercial_display":{"oneOf":[{"type":"object","description":"The same supplier reference values as `commercial`, with every amount converted to the display currency (pricing.display_currency). An amount with no exchange rate is null. Null when `commercial` is hidden. Never add these to the ledger.","required":["supplier_charge_total","display_total","gross_total","net_total","commission_total","agent_reward","recommended_selling_total","minimum_selling_total","original_total","discount_total","vat"],"properties":{"supplier_charge_total":{"oneOf":[{"type":"object","description":"Amount the supplier expects to debit or invoice to the agency. Informational settlement evidence; never add it to a pricing ledger.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.supplier_charge_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.supplier_charge_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.supplier_charge_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.supplier_charge_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.supplier_charge_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.supplier_charge_total","typeLabel":"object | null"},"display_total":{"oneOf":[{"type":"object","description":"Supplier-provided amount intended for display; not an additional charge.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.display_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.display_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.display_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.display_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.display_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.display_total","typeLabel":"object | null"},"gross_total":{"oneOf":[{"type":"object","description":"Supplier-stated gross amount before commission deduction.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.gross_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.gross_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.gross_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.gross_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.gross_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.gross_total","typeLabel":"object | null"},"net_total":{"oneOf":[{"type":"object","description":"Supplier-stated net agency cost.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.net_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.net_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.net_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.net_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.net_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.net_total","typeLabel":"object | null"},"commission_total":{"oneOf":[{"type":"object","description":"Supplier-stated agency commission; not derived by Unifystays.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.commission_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.commission_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.commission_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.commission_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.commission_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.commission_total","typeLabel":"object | null"},"agent_reward":{"oneOf":[{"type":"object","description":"Separate supplier reward, cashback, or incentive.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.agent_reward.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.agent_reward.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.agent_reward.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.agent_reward.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.agent_reward.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.agent_reward","typeLabel":"object | null"},"recommended_selling_total":{"oneOf":[{"type":"object","description":"Supplier-recommended customer selling price.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.recommended_selling_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.recommended_selling_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.recommended_selling_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.recommended_selling_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.recommended_selling_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.recommended_selling_total","typeLabel":"object | null"},"minimum_selling_total":{"oneOf":[{"type":"object","description":"Supplier-enforced minimum customer selling price.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.minimum_selling_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.minimum_selling_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.minimum_selling_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.minimum_selling_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.minimum_selling_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.minimum_selling_total","typeLabel":"object | null"},"original_total":{"oneOf":[{"type":"object","description":"Supplier price before discount or promotion.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.original_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.original_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.original_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.original_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.original_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.original_total","typeLabel":"object | null"},"discount_total":{"oneOf":[{"type":"object","description":"Supplier-stated discount amount.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.discount_total.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.discount_total.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.discount_total.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.discount_total.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.discount_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.discount_total","typeLabel":"object | null"},"vat":{"oneOf":[{"type":"object","description":"VAT details as the supplier states them. Null when not supplied.","required":["included","applied","amount","rate"],"properties":{"included":{"oneOf":[{"type":"boolean","description":"True when VAT is included in the quoted price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.included.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when VAT is included in the quoted price. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.included.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.included","typeLabel":"boolean | null"},"applied":{"oneOf":[{"type":"boolean","description":"True when VAT applies. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.applied.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when VAT applies. Null when unknown.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.applied.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.applied","typeLabel":"boolean | null"},"amount":{"oneOf":[{"type":"object","description":"VAT amount when the supplier states it. Null otherwise.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.amount","typeLabel":"object | null"},"rate":{"oneOf":[{"type":"number","description":"VAT rate in percent when stated. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.rate.oneOf.0","typeLabel":"number"},{"type":"null","description":"VAT rate in percent when stated. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.rate.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0.rate","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0.vat","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].commercial_display","typeLabel":"object | null"},"booking_requirements":{"description":"Guest and booking fields that will be needed at booking. Plan your checkout form from this list.","type":"array","items":{"type":"object","properties":{"requirement_id":{"type":"string","example":"br_first_name_all_guests_2","description":"Opaque offer-bound id that must be echoed in a booking guest answer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].requirement_id","typeLabel":"string"},"code":{"type":"string","example":"FIRST_NAME","description":"Stable normalized field code. New certified codes may be added without changing the booking request schema.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].code","typeLabel":"string"},"label":{"type":"string","example":"First name","description":"English label for the field.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].label","typeLabel":"string"},"value_type":{"type":"string","enum":["TEXT","EMAIL","PHONE","DATE","ENUM","COUNTRY_CODE","IDENTIFIER"],"description":"Kind of value to collect: TEXT, EMAIL, PHONE, DATE (YYYY-MM-DD), ENUM (pick from allowed_values), COUNTRY_CODE (ISO 3166-1 alpha-2) or IDENTIFIER (document number).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].value_type","typeLabel":"enum\u003cstring>"},"scope":{"type":"string","enum":["LEAD_GUEST","ALL_GUESTS","ADULT","CHILD","INFANT"],"description":"Guests to whom this requirement applies. LEAD_GUEST: the first guest only. ALL_GUESTS: every guest. ADULT, CHILD, INFANT: guests of that type. room_allocation_ids can narrow it to specific rooms.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].scope","typeLabel":"enum\u003cstring>"},"room_allocation_ids":{"description":"Rooms the requirement applies to. Empty means all rooms in the offer.","type":"array","items":{"type":"string","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].room_allocation_ids.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].room_allocation_ids","typeLabel":"string[]"},"required":{"type":"boolean","description":"True when the value must be provided at booking.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].required","typeLabel":"boolean"},"allowed_values":{"description":"The values to offer when value_type is ENUM. Empty for free input.","type":"array","items":{"type":"string","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].allowed_values.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].allowed_values","typeLabel":"string[]"},"description":{"oneOf":[{"type":"string","description":"Extra explanation to show next to the field. Null when none.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra explanation to show next to the field. Null when none.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].description","typeLabel":"string | null"},"constraints":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"min_length":{"oneOf":[{"type":"number","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.min_length.oneOf.0","typeLabel":"number"},{"type":"null","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.min_length.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.min_length","typeLabel":"number | null"},"max_length":{"oneOf":[{"type":"number","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.max_length.oneOf.0","typeLabel":"number"},{"type":"null","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.max_length.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.max_length","typeLabel":"number | null"},"pattern":{"oneOf":[{"type":"string","description":"ECMAScript regular expression the whole value must match. Compile with `pattern_flags`.","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.pattern.oneOf.0","typeLabel":"string"},{"type":"null","description":"ECMAScript regular expression the whole value must match. Compile with `pattern_flags`.","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.pattern.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.pattern","typeLabel":"string | null"},"pattern_flags":{"oneOf":[{"type":"string","example":"u","description":"RegExp flags for `pattern` (e.g. \"u\" for Unicode property classes such as \\p{L}).","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.pattern_flags.oneOf.0","typeLabel":"string"},{"type":"null","example":"u","description":"RegExp flags for `pattern` (e.g. \"u\" for Unicode property classes such as \\p{L}).","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.pattern_flags.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.pattern_flags","typeLabel":"string | null"},"min_age":{"oneOf":[{"type":"number","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.min_age.oneOf.0","typeLabel":"number"},{"type":"null","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.min_age.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.min_age","typeLabel":"number | null"},"max_age":{"oneOf":[{"type":"number","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.max_age.oneOf.0","typeLabel":"number"},{"type":"null","uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.max_age.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0.max_age","typeLabel":"number | null"}},"description":"Validation hints for the value: length range, a regular expression (pattern with pattern_flags), and an age range for guests. Null when there are no hints. Validate in your form; the booking API checks them again.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"properties":{"min_length":{"oneOf":[{"type":"number"},{"type":"null"}]},"max_length":{"oneOf":[{"type":"number"},{"type":"null"}]},"pattern":{"oneOf":[{"type":"string","description":"ECMAScript regular expression the whole value must match. Compile with `pattern_flags`."},{"type":"null","description":"ECMAScript regular expression the whole value must match. Compile with `pattern_flags`."}]},"pattern_flags":{"oneOf":[{"type":"string","example":"u","description":"RegExp flags for `pattern` (e.g. \"u\" for Unicode property classes such as \\p{L})."},{"type":"null","example":"u","description":"RegExp flags for `pattern` (e.g. \"u\" for Unicode property classes such as \\p{L})."}]},"min_age":{"oneOf":[{"type":"number"},{"type":"null"}]},"max_age":{"oneOf":[{"type":"number"},{"type":"null"}]}},"description":"Validation hints for the value: length range, a regular expression (pattern with pattern_flags), and an age range for guests. Null when there are no hints. Validate in your form; the booking API checks them again.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX].constraints","typeLabel":"object | null"}},"required":["requirement_id","code","label","value_type","scope","room_allocation_ids","required","allowed_values","description","constraints"],"uniqueKey":"data.options.items.[INDEX].booking_requirements.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_requirements","typeLabel":"object[]"},"cancellation":{"type":"object","description":"Cancellation policy to show to the guest.","required":["refundability","policy_stage","free_cancellation_until","policy_text","penalties","no_show"],"properties":{"refundability":{"type":"string","enum":["REFUNDABLE","PARTIALLY_REFUNDABLE","NON_REFUNDABLE","UNKNOWN"],"description":"REFUNDABLE: cancellable with no charge at some point. PARTIALLY_REFUNDABLE: cancellable but some penalty windows charge money. NON_REFUNDABLE: no refund. UNKNOWN: reserved for when the supplier gives no policy.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.refundability","typeLabel":"enum\u003cstring>"},"policy_stage":{"type":"string","enum":["INDICATIVE","RECHECKED","FINAL"],"description":"How firm the policy is. INDICATIVE: from the room search, can still change. RECHECKED: confirmed by the supplier at prebook. FINAL: the supplier's final terms. Show the policy from prebook before the guest pays.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.policy_stage","typeLabel":"enum\u003cstring>"},"free_cancellation_until":{"oneOf":[{"type":"object","description":"Last moment the guest can cancel without a charge. Null when there is no free-cancellation period (or the supplier did not state one). Display it with the time zone.","required":["local_datetime","timezone","utc_datetime"],"properties":{"local_datetime":{"type":"string","example":"2026-05-18T23:59:59","description":"Date and time exactly as the supplier stated it, without an offset (ISO 8601, for example 2026-05-18T23:59:59). It is wall-clock time in the zone named by timezone. Show this to the guest.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.0.local_datetime","typeLabel":"string"},"timezone":{"oneOf":[{"type":"string","example":"UTC","description":"IANA time zone of local_datetime (for example Asia/Kolkata) when known. Null when the supplier gave no zone; then utc_datetime is also null and you should show local_datetime as is.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.0.timezone.oneOf.0","typeLabel":"string"},{"type":"null","example":"UTC","description":"IANA time zone of local_datetime (for example Asia/Kolkata) when known. Null when the supplier gave no zone; then utc_datetime is also null and you should show local_datetime as is.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.0.timezone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.0.timezone","typeLabel":"string | null"},"utc_datetime":{"oneOf":[{"type":"string","example":"2026-05-18T23:59:59.000Z","description":"The same moment in UTC (ISO 8601 with Z). Null when the time zone is unknown. Use it for deadline logic and countdowns, never for display without a zone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.0.utc_datetime.oneOf.0","typeLabel":"string"},{"type":"null","example":"2026-05-18T23:59:59.000Z","description":"The same moment in UTC (ISO 8601 with Z). Null when the time zone is unknown. Use it for deadline logic and countdowns, never for display without a zone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.0.utc_datetime.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.0.utc_datetime","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.free_cancellation_until","typeLabel":"object | null"},"policy_text":{"type":"string","description":"Ready-to-show English summary generated from the fields (for example Non-refundable; cancellation penalties apply.). The penalties list is the precise rule.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.policy_text","typeLabel":"string"},"penalties":{"description":"Penalty windows in the order the supplier sent them. Render them as a timeline: from, to and the charge. Empty when the supplier sent no windows.","type":"array","items":{"type":"object","properties":{"from":{"type":"object","description":"Start of this penalty window (inclusive).","required":["local_datetime","timezone","utc_datetime"],"properties":{"local_datetime":{"type":"string","example":"2026-05-18T23:59:59","description":"Date and time exactly as the supplier stated it, without an offset (ISO 8601, for example 2026-05-18T23:59:59). It is wall-clock time in the zone named by timezone. Show this to the guest.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].from.local_datetime","typeLabel":"string"},"timezone":{"oneOf":[{"type":"string","example":"UTC","description":"IANA time zone of local_datetime (for example Asia/Kolkata) when known. Null when the supplier gave no zone; then utc_datetime is also null and you should show local_datetime as is.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].from.timezone.oneOf.0","typeLabel":"string"},{"type":"null","example":"UTC","description":"IANA time zone of local_datetime (for example Asia/Kolkata) when known. Null when the supplier gave no zone; then utc_datetime is also null and you should show local_datetime as is.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].from.timezone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].from.timezone","typeLabel":"string | null"},"utc_datetime":{"oneOf":[{"type":"string","example":"2026-05-18T23:59:59.000Z","description":"The same moment in UTC (ISO 8601 with Z). Null when the time zone is unknown. Use it for deadline logic and countdowns, never for display without a zone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].from.utc_datetime.oneOf.0","typeLabel":"string"},{"type":"null","example":"2026-05-18T23:59:59.000Z","description":"The same moment in UTC (ISO 8601 with Z). Null when the time zone is unknown. Use it for deadline logic and countdowns, never for display without a zone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].from.utc_datetime.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].from.utc_datetime","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].from","typeLabel":"object"},"to":{"oneOf":[{"type":"object","description":"Exclusive end of this penalty window when supplied. Null means the rule runs until check-in or beyond, not that the policy is incomplete.","required":["local_datetime","timezone","utc_datetime"],"properties":{"local_datetime":{"type":"string","example":"2026-05-18T23:59:59","description":"Date and time exactly as the supplier stated it, without an offset (ISO 8601, for example 2026-05-18T23:59:59). It is wall-clock time in the zone named by timezone. Show this to the guest.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.0.local_datetime","typeLabel":"string"},"timezone":{"oneOf":[{"type":"string","example":"UTC","description":"IANA time zone of local_datetime (for example Asia/Kolkata) when known. Null when the supplier gave no zone; then utc_datetime is also null and you should show local_datetime as is.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.0.timezone.oneOf.0","typeLabel":"string"},{"type":"null","example":"UTC","description":"IANA time zone of local_datetime (for example Asia/Kolkata) when known. Null when the supplier gave no zone; then utc_datetime is also null and you should show local_datetime as is.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.0.timezone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.0.timezone","typeLabel":"string | null"},"utc_datetime":{"oneOf":[{"type":"string","example":"2026-05-18T23:59:59.000Z","description":"The same moment in UTC (ISO 8601 with Z). Null when the time zone is unknown. Use it for deadline logic and countdowns, never for display without a zone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.0.utc_datetime.oneOf.0","typeLabel":"string"},{"type":"null","example":"2026-05-18T23:59:59.000Z","description":"The same moment in UTC (ISO 8601 with Z). Null when the time zone is unknown. Use it for deadline logic and countdowns, never for display without a zone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.0.utc_datetime.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.0.utc_datetime","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].to","typeLabel":"object | null"},"charge_basis":{"type":"string","enum":["FIXED_AMOUNT","PERCENTAGE","NIGHTS","FULL_STAY","UNKNOWN"],"description":"How the penalty is calculated. FIXED_AMOUNT: a fixed sum (native_amount). PERCENTAGE: percentage of the basis in calculation_basis. NIGHTS: number_of_nights nights. FULL_STAY: the whole stay. UNKNOWN: the supplier gave no usable rule; show description.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].charge_basis","typeLabel":"enum\u003cstring>"},"percentage":{"oneOf":[{"type":"number","description":"Percentage charged when charge_basis is PERCENTAGE (for example 50 means 50%). Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].percentage.oneOf.0","typeLabel":"number"},{"type":"null","description":"Percentage charged when charge_basis is PERCENTAGE (for example 50 means 50%). Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].percentage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].percentage","typeLabel":"number | null"},"number_of_nights":{"oneOf":[{"type":"number","description":"Number of nights charged when charge_basis is NIGHTS. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].number_of_nights.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of nights charged when charge_basis is NIGHTS. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].number_of_nights.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].number_of_nights","typeLabel":"number | null"},"native_amount":{"oneOf":[{"type":"object","description":"Penalty amount in the supplier currency when it can be computed. 0 means a free-cancellation window. Null when the amount cannot be computed (for example a percentage of a basis other than the total); then show percentage / number_of_nights and description.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].native_amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].native_amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].native_amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].native_amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].native_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].native_amount","typeLabel":"object | null"},"usd_amount":{"oneOf":[{"type":"object","description":"native_amount converted to USD. Null when native_amount is null or no exchange rate is available.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].usd_amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].usd_amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].usd_amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].usd_amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].usd_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].usd_amount","typeLabel":"object | null"},"display_amount":{"oneOf":[{"type":"object","description":"native_amount converted to the display currency. Null when native_amount is null or no exchange rate is available. Same as usd_amount when the display currency is USD.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].display_amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].display_amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].display_amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].display_amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].display_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].display_amount","typeLabel":"object | null"},"conversion_status":{"type":"string","enum":["AVAILABLE","UNAVAILABLE"],"description":"AVAILABLE when usd_amount is filled; UNAVAILABLE when it is null.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].conversion_status","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"Short label for the window: Free cancellation window (amount 0) or Cancellation penalty. Do not parse.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].description","typeLabel":"string"},"calculation_basis":{"type":"string","enum":["TOTAL","ROOM_RATE","FIRST_NIGHT","NIGHTLY_RATE","SUPPLIER_DEFINED","UNKNOWN"],"description":"What a percentage or nights charge is applied to. TOTAL: the total payable to the supplier. ROOM_RATE, FIRST_NIGHT, NIGHTLY_RATE: that part of the rate. SUPPLIER_DEFINED or UNKNOWN: the supplier did not say exactly.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].calculation_basis","typeLabel":"enum\u003cstring>"},"scope":{"type":"object","description":"What the penalty covers. Usually PER_STAY with all other fields null.","required":["basis","room_allocation_id","guest_type","quantity"],"properties":{"basis":{"type":"string","enum":["PER_STAY","PER_ROOM","PER_ROOM_PER_NIGHT","PER_PERSON","PER_PERSON_PER_NIGHT"],"description":"What the amount covers. PER_STAY: the whole stay. PER_ROOM / PER_ROOM_PER_NIGHT: each room (per night). PER_PERSON / PER_PERSON_PER_NIGHT: each guest (per night). The amount is already the total for that scope.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.basis","typeLabel":"enum\u003cstring>"},"room_allocation_id":{"oneOf":[{"type":"string","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.room_allocation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.room_allocation_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.room_allocation_id","typeLabel":"string | null"},"guest_type":{"oneOf":[{"type":"string","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.guest_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.guest_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.guest_type","typeLabel":"enum\u003cstring> | null"},"quantity":{"oneOf":[{"type":"number","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.quantity.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope.quantity","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX].scope","typeLabel":"object"}},"required":["from","to","charge_basis","percentage","number_of_nights","native_amount","usd_amount","display_amount","conversion_status","description","calculation_basis","scope"],"uniqueKey":"data.options.items.[INDEX].cancellation.penalties.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.penalties","typeLabel":"object[]"},"no_show":{"oneOf":[{"type":"object","description":"No-show terms when the supplier states them. Null when none were supplied; that does not mean a no-show is free.","required":["trigger","applies_from_local_time","penalty"],"properties":{"trigger":{"type":"string","enum":["NO_SHOW"],"description":"Always NO_SHOW.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.trigger","typeLabel":"enum\u003cstring>"},"applies_from_local_time":{"oneOf":[{"type":"string","example":"18:00:00","description":"Supplier-local no-show cutoff time when supplied. No date or timezone is inferred.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.applies_from_local_time.oneOf.0","typeLabel":"string"},{"type":"null","example":"18:00:00","description":"Supplier-local no-show cutoff time when supplied. No date or timezone is inferred.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.applies_from_local_time.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.applies_from_local_time","typeLabel":"string | null"},"penalty":{"oneOf":[{"type":"object","description":"Charge triggered by a no-show. Null means no monetary no-show charge was supplied; it never means a zero charge was inferred.","required":["charge_basis","native_amount","usd_amount","display_amount","conversion_status","calculation_basis","scope"],"properties":{"charge_basis":{"type":"string","enum":["FIXED_AMOUNT","UNKNOWN"],"description":"FIXED_AMOUNT when native_amount is filled; UNKNOWN otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.charge_basis","typeLabel":"enum\u003cstring>"},"native_amount":{"oneOf":[{"type":"object","description":"No-show charge in the supplier currency.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.native_amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.native_amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.native_amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.native_amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.native_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.native_amount","typeLabel":"object | null"},"usd_amount":{"oneOf":[{"type":"object","description":"No-show charge converted to USD. Null when no exchange rate is available.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.usd_amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.usd_amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.usd_amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.usd_amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.usd_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.usd_amount","typeLabel":"object | null"},"display_amount":{"oneOf":[{"type":"object","description":"native_amount converted to the display currency. Null when native_amount is null or no exchange rate is available. Same as usd_amount when the display currency is USD.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.display_amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.display_amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.display_amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.display_amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.display_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.display_amount","typeLabel":"object | null"},"conversion_status":{"type":"string","enum":["AVAILABLE","UNAVAILABLE","NOT_REQUIRED"],"description":"AVAILABLE when usd_amount is filled, UNAVAILABLE when no rate was available, NOT_REQUIRED when there is nothing to convert.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.conversion_status","typeLabel":"enum\u003cstring>"},"calculation_basis":{"type":"string","enum":["SUPPLIER_DEFINED"],"description":"Always SUPPLIER_DEFINED: the amount is whatever the supplier states.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.calculation_basis","typeLabel":"enum\u003cstring>"},"scope":{"type":"object","description":"What the no-show charge covers; always the whole stay.","required":["basis","room_allocation_id","guest_type","quantity"],"properties":{"basis":{"type":"string","enum":["PER_STAY","PER_ROOM","PER_ROOM_PER_NIGHT","PER_PERSON","PER_PERSON_PER_NIGHT"],"description":"What the amount covers. PER_STAY: the whole stay. PER_ROOM / PER_ROOM_PER_NIGHT: each room (per night). PER_PERSON / PER_PERSON_PER_NIGHT: each guest (per night). The amount is already the total for that scope.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.basis","typeLabel":"enum\u003cstring>"},"room_allocation_id":{"oneOf":[{"type":"string","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.room_allocation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room slot the charge belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.room_allocation_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.room_allocation_id","typeLabel":"string | null"},"guest_type":{"oneOf":[{"type":"string","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.guest_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["ADULT","CHILD","INFANT"],"description":"Guest type the charge applies to. Null when it applies to everyone.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.guest_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.guest_type","typeLabel":"enum\u003cstring> | null"},"quantity":{"oneOf":[{"type":"number","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.quantity.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of units the charge was calculated on (for example guests or nights) when the supplier states it. Null otherwise.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope.quantity","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0.scope","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0.penalty","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation.no_show","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].cancellation","typeLabel":"object"},"nightly_prices":{"description":"Per-night price breakdown when the supplier gives one. Empty array when not supplied. Display only; the ledger is authoritative.","type":"array","items":{"type":"object","properties":{"date":{"oneOf":[{"type":"string","description":"Night date (YYYY-MM-DD). Null when the supplier does not date the night.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].date.oneOf.0","typeLabel":"string"},{"type":"null","description":"Night date (YYYY-MM-DD). Null when the supplier does not date the night.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].date.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].date","typeLabel":"string | null"},"room_allocation_id":{"oneOf":[{"type":"string","description":"Room slot the amount belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].room_allocation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Room slot the amount belongs to. Null when it covers the whole offer.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].room_allocation_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].room_allocation_id","typeLabel":"string | null"},"amount":{"type":"object","description":"Amount for the night (integer minor units with currency_exponent). It is a display breakdown; the ledger is the authoritative price.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].amount.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].amount.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].amount.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].amount","typeLabel":"object"},"display_amount":{"oneOf":[{"type":"object","description":"The night's amount converted to the display currency (pricing.display_currency). Null when no exchange rate is available.","required":["amount_minor","currency","currency_exponent"],"properties":{"amount_minor":{"type":"number","example":17700,"description":"Integer amount in minor units of the currency. Divide by 10 to the power of currency_exponent: 17700 with exponent 2 is 177.00; a zero-decimal currency such as JPY has exponent 0. Never treat it as a decimal amount.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].display_amount.oneOf.0.amount_minor","typeLabel":"number"},"currency":{"type":"string","example":"USD","description":"ISO 4217 currency code of the amount (upper case). Native-ledger amounts are in the supplier's currency; usd_ledger amounts are USD.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].display_amount.oneOf.0.currency","typeLabel":"string"},"currency_exponent":{"type":"number","example":2,"description":"Number of decimal places of the currency (2 for USD, 0 for JPY, 3 for KWD). Use it to format amount_minor.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].display_amount.oneOf.0.currency_exponent","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].display_amount.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].display_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].display_amount","typeLabel":"object | null"},"scope":{"type":"string","enum":["OFFER","ROOM_ALLOCATION"],"description":"OFFER when the amount covers all rooms, ROOM_ALLOCATION when it covers one room slot.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].scope","typeLabel":"enum\u003cstring>"},"component":{"type":"string","enum":["ROOM_RATE","PAYABLE_TO_SUPPLIER","UNKNOWN"],"description":"Meaning of the nightly amount. PAYABLE_TO_SUPPLIER excludes separately collected property charges.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX].component","typeLabel":"enum\u003cstring>"}},"required":["date","room_allocation_id","amount","display_amount","scope","component"],"uniqueKey":"data.options.items.[INDEX].nightly_prices.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].nightly_prices","typeLabel":"object[]"},"promotions":{"description":"Supplier promotions applied to the rate. Empty array when none.","type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Promotion code from the supplier.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].promotions.items.[INDEX].code","typeLabel":"string"},"title":{"type":"string","description":"Promotion title to show.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].promotions.items.[INDEX].title","typeLabel":"string"},"description":{"oneOf":[{"type":"string","description":"Promotion detail. Null when none.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].promotions.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Promotion detail. Null when none.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].promotions.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].promotions.items.[INDEX].description","typeLabel":"string | null"}},"required":["code","title","description"],"uniqueKey":"data.options.items.[INDEX].promotions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].promotions","typeLabel":"object[]"},"benefits":{"description":"Extra benefits included in the rate (for example late check-out). Empty array when none.","type":"array","items":{"type":"object","properties":{"code":{"type":"string","example":"free_wifi","description":"Machine code of the inclusion (for example free_wifi). New codes can appear; treat unknown codes as plain labels.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].benefits.items.[INDEX].code","typeLabel":"string"},"label":{"type":"string","example":"Free WiFi","description":"Inclusion text to show to the guest.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].benefits.items.[INDEX].label","typeLabel":"string"}},"required":["code","label"],"uniqueKey":"data.options.items.[INDEX].benefits.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].benefits","typeLabel":"object[]"},"notices":{"description":"Notices for the guest. Always show those with must_display true.","type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Notice code. Informational.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].notices.items.[INDEX].code","typeLabel":"string"},"severity":{"type":"string","enum":["INFO","WARNING","REQUIRED"],"description":"INFO: helpful. WARNING: may affect the guest's decision. REQUIRED: a condition the supplier requires the guest to be told.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].notices.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"scope":{"type":"string","enum":["OFFER","ROOM","PAYMENT","CANCELLATION","HOTEL"],"description":"What the notice is about: the whole OFFER, a ROOM, the PAYMENT, the CANCELLATION policy, or the HOTEL.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].notices.items.[INDEX].scope","typeLabel":"enum\u003cstring>"},"text":{"type":"string","description":"Notice text to show, in the supplier's wording.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].notices.items.[INDEX].text","typeLabel":"string"},"must_display":{"type":"boolean","description":"True when you must show the text to the guest before they book. Always honour it.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].notices.items.[INDEX].must_display","typeLabel":"boolean"}},"required":["code","severity","scope","text","must_display"],"uniqueKey":"data.options.items.[INDEX].notices.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].notices","typeLabel":"object[]"},"supplier_terms_and_conditions":{"oneOf":[{"type":"object","description":"Full supplier terms. Null when none. You decide where to show them (for example a link at checkout).","required":["type","format","text"],"properties":{"type":{"type":"string","enum":["SUPPLIER_TERMS_AND_CONDITIONS"],"description":"Always SUPPLIER_TERMS_AND_CONDITIONS.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].supplier_terms_and_conditions.oneOf.0.type","typeLabel":"enum\u003cstring>"},"format":{"type":"string","enum":["PLAIN_TEXT","HTML"],"description":"PLAIN_TEXT (escape it) or HTML (already sanitised; render it).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].supplier_terms_and_conditions.oneOf.0.format","typeLabel":"enum\u003cstring>"},"text":{"type":"string","description":"Complete supplier-authored terms. Consumers decide whether and where to display them.","isRequired":true,"uniqueKey":"data.options.items.[INDEX].supplier_terms_and_conditions.oneOf.0.text","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.options.items.[INDEX].supplier_terms_and_conditions.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"data.options.items.[INDEX].supplier_terms_and_conditions.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.options.items.[INDEX].supplier_terms_and_conditions","typeLabel":"object | null"},"booking_token":{"type":"string","example":"bq7.Y0QxTmtKc21Wbmk.3.6zI4D6fUEw2jVv7KQdM4Kw","description":"Opaque signed token that identifies this complete offer. Send it unchanged to Prebook. Never parse, build or edit it. It stops working when the offer expires (lifecycle.expires_at, at most 15 minutes after quoted_at).","isRequired":true,"uniqueKey":"data.options.items.[INDEX].booking_token","typeLabel":"string"}},"required":["offer_id","revision","offer_family_id","supersedes_offer_id","quote_context","provider_code","room_combination","rate_plan","rooms","lifecycle","pricing","payment","commercial","commercial_display","booking_requirements","cancellation","nightly_prices","promotions","benefits","notices","supplier_terms_and_conditions","booking_token"],"uniqueKey":"data.options.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"required":["contract_version","success","message","data"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"contract_version":"2","success":true,"message":"Rooms fetched successfully","data":{"hotel_id":"123456","hotel_name":"The Taj Mahal Palace","check_in":"2026-07-01","check_out":"2026-07-04","nights":3,"total_options":2,"providers_queried":["TBO","TRIPJACK"],"unifystays_rooms":[{"unifystays_room_id":"4120552","name":"Deluxe Room","details":{"source":"TRIPJACK","images":[{"url":"\u003cstring>","caption":"\u003cstring>","is_primary":true}],"size":{"value":123,"unit":"sqm"},"description":"\u003cstring>","description_format":"HTML","amenities":[{"id":"wifi","name":"Free WiFi"}]},"suppliers":["REZLIVE","TRIPJACK"],"variants":[{"unifystays_room_id":"4120553","beds":[{"type":"TWIN","count":2}],"bedrooms":123,"max_guests":2,"smoking":"SMOKING","suppliers":["REZLIVE","TRIPJACK"]}],"bed_assignment":{"suppliers":["REZLIVE"]}}],"stream_id":"stream_8f4b9d1f6d9e","sse_stream_url":"/hotels/123456/rooms/stream/stream_8f4b9d1f6d9e","options":[{"offer_id":"off_01J...","revision":1,"offer_family_id":"\u003cstring>","supersedes_offer_id":"\u003cstring>","quote_context":{"hotel":{"id":"\u003cstring>","name":"\u003cstring>","address":"\u003cstring>","address_local":"\u003cstring>","city":"\u003cstring>","state":"\u003cstring>","country":"\u003cstring>","postal_code":"\u003cstring>","latitude":123,"longitude":123,"timezone":"\u003cstring>"},"check_in":"\u003cstring>","check_out":"\u003cstring>","nights":123,"rooms":[{"adults":123,"child_ages":[123]}],"residency":"\u003cstring>","nationality":"\u003cstring>","language":"\u003cstring>"},"provider_code":"TBO","room_combination":{"normalized_type":"SINGLE_ROOM","supplier_code":"\u003cstring>","supplier_name":"\u003cstring>"},"rate_plan":{"normalized_type":"PUBLIC","supplier_code":"\u003cstring>","supplier_name":"\u003cstring>","qualification":"\u003cstring>","is_package":true,"is_fenced":true},"rooms":[{"room_allocation_id":"ra_2c1fb39ed54742f28d95bd8bc5f4375d","provider_room":{"provider_code":"TRIPJACK","provider_hotel_id":"100000249368","id":"10024615989","name":"Aloft Studio, King","supplier_name":"\u003cstring>","description":"\u003cstring>","description_format":"HTML","detail_status":"NONE","room_type":{"normalized_code":"SUPERIOR","supplier_code":"\u003cstring>","supplier_name":"\u003cstring>"},"room_category":{"normalized_code":"SUPERIOR","supplier_code":"\u003cstring>","supplier_name":"\u003cstring>"},"size":{"value":123,"unit":"sqm"},"amenities":[{"id":"2403","normalized_code":"WHEELCHAIR_ACCESSIBLE","supplier_code":"2403","name":"Free WiFi","category":"GENERAL"}],"images":[{"url":"\u003cstring>","caption":"\u003cstring>","is_primary":true}],"bed_configurations":[{"id":"bed_1","bed_count":1,"bedroom_count":1,"beds":[{"type":"King","normalized_type":"SINGLE","supplier_type":"\u003cstring>","quantity":1,"width_min_cm":151,"width_max_cm":180}],"bed_type_guaranteed":true,"selected":true}],"bed_summary":"1 king bed or 2 single beds","occupancy":{"max_allowed":{"total":3,"adults":3,"children":2,"infants":123}},"bathroom":{"type":"PRIVATE","count":123},"views":[{"normalized_code":"CITY","supplier_code":"\u003cstring>","name":"\u003cstring>","partial":true}],"features":{"balcony":true,"smoking":"SMOKING","accessible":true,"club_access":true,"connecting_room":true},"extra_bed":{"available":true,"included":true,"charge_applicable":true},"child_bed":{"available":true,"included":true,"charge_applicable":true}},"mapping_status":"MAPPED","mapping_details":{"source":"MANUAL","confidence":0.93,"algorithm_version":"ROOM_RULES_V5","reason_codes":["GLOBAL_CATALOGUE_ASSIGNMENT","ASSIGNMENT_STABLE","BED_EXACT"]},"unifystays_room":{"provider_code":"TRIPJACK","provider_hotel_id":"100000249368","id":"10024615989","name":"Aloft Studio, King","supplier_name":"\u003cstring>","description":"\u003cstring>","description_format":"HTML","detail_status":"NONE","room_type":{"normalized_code":"SUPERIOR","supplier_code":"\u003cstring>","supplier_name":"\u003cstring>"},"room_category":{"normalized_code":"SUPERIOR","supplier_code":"\u003cstring>","supplier_name":"\u003cstring>"},"size":{"value":123,"unit":"sqm"},"amenities":[{"id":"2403","normalized_code":"WHEELCHAIR_ACCESSIBLE","supplier_code":"2403","name":"Free WiFi","category":"GENERAL"}],"images":[{"url":"\u003cstring>","caption":"\u003cstring>","is_primary":true}],"bed_configurations":[{"id":"bed_1","bed_count":1,"bedroom_count":1,"beds":[{"type":"King","normalized_type":"SINGLE","supplier_type":"\u003cstring>","quantity":1,"width_min_cm":151,"width_max_cm":180}],"bed_type_guaranteed":true,"selected":true}],"bed_summary":"1 king bed or 2 single beds","occupancy":{"max_allowed":{"total":3,"adults":3,"children":2,"infants":123}},"bathroom":{"type":"PRIVATE","count":123},"views":[{"normalized_code":"CITY","supplier_code":"\u003cstring>","name":"\u003cstring>","partial":true}],"features":{"balcony":true,"smoking":"SMOKING","accessible":true,"club_access":true,"connecting_room":true},"extra_bed":{"available":true,"included":true,"charge_applicable":true},"child_bed":{"available":true,"included":true,"charge_applicable":true}},"occupancy":{"adults":2,"child_ages":[7]},"meal_plan":{"code":"BB","supplier_code":"breakfast","supplier_name":"Breakfast","label":"Bed \u0026 Breakfast","is_breakfast_included":true,"is_child_meal_included":true},"inclusions":[{"code":"free_wifi","label":"Free WiFi"}],"unifystays_family_id":"4120552","unifystays_room_id":"4120552"}],"lifecycle":{"stage":"ROOMS","quoted_at":"\u003cstring>","expires_at":"\u003cstring>","prebook_required":true,"price_guaranteed":true,"availability":"AVAILABLE","rooms_remaining":{},"on_request":true,"available_booking_modes":["INSTANT"],"hold_allowed":true,"hold_deadline":{"local_datetime":"2026-05-18T23:59:59","timezone":"UTC","utc_datetime":"2026-05-18T23:59:59.000Z"},"post_booking_actions":["STATUS"]},"pricing":{"price_basis":"NET","breakdown_status":"COMPLETE","native_ledger":{"primary_currency":"USD","totals":[{"currency":"USD","currency_exponent":2,"payable_to_supplier":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"payable_at_property":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"total":{"amount_minor":17700,"currency":"USD","currency_exponent":2}}],"lines":[{"category":"room_rate","code":"city_tax","normalized_code":"CITY_TAX","description":"City tax","amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"collection_location":"SUPPLIER","included_in_quoted_total":false,"scope":{"basis":"PER_STAY","room_allocation_id":"\u003cstring>","guest_type":"ADULT","quantity":123},"mandatory":true,"source_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"is_estimated":true}]},"usd_ledger":{"primary_currency":"USD","totals":[{"currency":"USD","currency_exponent":2,"payable_to_supplier":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"payable_at_property":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"total":{"amount_minor":17700,"currency":"USD","currency_exponent":2}}],"lines":[{"category":"room_rate","code":"city_tax","normalized_code":"CITY_TAX","description":"City tax","amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"collection_location":"SUPPLIER","included_in_quoted_total":false,"scope":{"basis":"PER_STAY","room_allocation_id":"\u003cstring>","guest_type":"ADULT","quantity":123},"mandatory":true,"source_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"is_estimated":true}]},"display_currency":"EUR","display_ledger":{"primary_currency":"USD","totals":[{"currency":"USD","currency_exponent":2,"payable_to_supplier":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"payable_at_property":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"total":{"amount_minor":17700,"currency":"USD","currency_exponent":2}}],"lines":[{"category":"room_rate","code":"city_tax","normalized_code":"CITY_TAX","description":"City tax","amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"collection_location":"SUPPLIER","included_in_quoted_total":false,"scope":{"basis":"PER_STAY","room_allocation_id":"\u003cstring>","guest_type":"ADULT","quantity":123},"mandatory":true,"source_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"is_estimated":true}]},"conversion":{"status":"AVAILABLE","missing_currencies":["\u003cstring>"],"rates":[{"base_currency":"AED","quote_currency":"USD","rate":0.272294,"rate_updated_at":"\u003cstring>"}]}},"payment":{"settlement_channel":"SUPPLIER_ACCOUNT","payer":"AGENCY","supplier_payment_type":"\u003cstring>","payable_at":"SUPPLIER","collection_timing":"AT_BOOKING","requires_card_data":true,"requires_cvc":true,"requires_vcc":true,"security_deposit":{"amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"display_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"refundable":true}},"commercial":{"supplier_charge_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"display_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"gross_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"net_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"commission_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"agent_reward":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"recommended_selling_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"minimum_selling_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"original_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"discount_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"vat":{"included":true,"applied":true,"amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"rate":123}},"commercial_display":{"supplier_charge_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"display_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"gross_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"net_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"commission_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"agent_reward":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"recommended_selling_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"minimum_selling_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"original_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"discount_total":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"vat":{"included":true,"applied":true,"amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"rate":123}},"booking_requirements":[{"requirement_id":"br_first_name_all_guests_2","code":"FIRST_NAME","label":"First name","value_type":"TEXT","scope":"LEAD_GUEST","room_allocation_ids":["\u003cstring>"],"required":true,"allowed_values":["\u003cstring>"],"description":"\u003cstring>","constraints":{"min_length":123,"max_length":123,"pattern":"\u003cstring>","pattern_flags":"u","min_age":123,"max_age":123}}],"cancellation":{"refundability":"REFUNDABLE","policy_stage":"INDICATIVE","free_cancellation_until":{"local_datetime":"2026-05-18T23:59:59","timezone":"UTC","utc_datetime":"2026-05-18T23:59:59.000Z"},"policy_text":"\u003cstring>","penalties":[{"from":{"local_datetime":"2026-05-18T23:59:59","timezone":"UTC","utc_datetime":"2026-05-18T23:59:59.000Z"},"to":{"local_datetime":"2026-05-18T23:59:59","timezone":"UTC","utc_datetime":"2026-05-18T23:59:59.000Z"},"charge_basis":"FIXED_AMOUNT","percentage":123,"number_of_nights":123,"native_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"usd_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"display_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"conversion_status":"AVAILABLE","description":"\u003cstring>","calculation_basis":"TOTAL","scope":{"basis":"PER_STAY","room_allocation_id":"\u003cstring>","guest_type":"ADULT","quantity":123}}],"no_show":{"trigger":"NO_SHOW","applies_from_local_time":"18:00:00","penalty":{"charge_basis":"FIXED_AMOUNT","native_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"usd_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"display_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"conversion_status":"AVAILABLE","calculation_basis":"SUPPLIER_DEFINED","scope":{"basis":"PER_STAY","room_allocation_id":"\u003cstring>","guest_type":"ADULT","quantity":123}}}},"nightly_prices":[{"date":"\u003cstring>","room_allocation_id":"\u003cstring>","amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"display_amount":{"amount_minor":17700,"currency":"USD","currency_exponent":2},"scope":"OFFER","component":"ROOM_RATE"}],"promotions":[{"code":"\u003cstring>","title":"\u003cstring>","description":"\u003cstring>"}],"benefits":[{"code":"free_wifi","label":"Free WiFi"}],"notices":[{"code":"\u003cstring>","severity":"INFO","scope":"OFFER","text":"\u003cstring>","must_display":true}],"supplier_terms_and_conditions":{"type":"SUPPLIER_TERMS_AND_CONDITIONS","format":"PLAIN_TEXT","text":"\u003cstring>"},"booking_token":"bq7.Y0QxTmtKc21Wbmk.3.6zI4D6fUEw2jVv7KQdM4Kw"}]}}}},"exampleType":"generated"}},"headers":{"X-Unifystays-Contract-Version":{"description":"Hotel contract version of this response.","schema":{"type":"string","enum":["2"]}}},"exampleType":"generated"},"aa89669b-b0da-4060-9219-9853075d3415":{"description":"Invalid request parameters","headers":{"X-Unifystays-Contract-Version":{"description":"Hotel contract version of this response.","schema":{"type":"string","enum":["2"]}}},"content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"f3af8327-452f-49bf-8d7b-552c24fb737f":{"description":"Hotel not found","headers":{"X-Unifystays-Contract-Version":{"description":"Hotel contract version of this response.","schema":{"type":"string","enum":["2"]}}},"content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"827f8e19-16a9-4d11-a0f4-fd77157e4459":{"description":"CONTRACT_VERSION_UNSUPPORTED","headers":{"X-Unifystays-Contract-Version":{"description":"Hotel contract version of this response.","schema":{"type":"string","enum":["2"]}}},"content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"71ce26d4-cf7b-4d3b-ab99-f95701a1c420":{"x-api-key":{"type":"apiKey","in":"header","name":"x-api-key","description":"Environment-specific API key created in the Unifystays portal","scopes":[],"schemeName":"x-api-key"}}},"servers":{"58b3027e-a79b-4d2c-898a-ec7cc8ae6eae":{"url":"https://api-sandbox.unifystays.com","description":"Sandbox"},"32e511f6-5caf-4d51-acd6-ad4d164fb151":{"url":"https://api.unifystays.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"Environment-specific API key created in the Unifystays portal","scopes":[],"schemeName":"x-api-key"},"schema":{"title":"x-api-key","type":"string","description":"Environment-specific API key created in the Unifystays portal","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"x-api-key","name":"x-api-key"}],"title":"x-api-key"}]},"originalFileLocation":"reference/openapi.json"},"subdomain":"unifystays","siteName":"Unifystays API","title":"Get Room Options - Unifystays API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T07:16:55.223Z","originalFileLocation":"api-reference/hotel-rooms.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=\"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Unifystays API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/unifystays/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/unifystays/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/unifystays/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/unifystays/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get Room Options - Unifystays API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Unifystays API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.unifystays.com/api-reference/hotel-rooms\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://unifystays.mintlify.app/_mintlify/api/og/v2?division=Search+%26+hotels\u0026amp;title=Get+Room+Options\u0026amp;description=Start+live+supplier+room+retrieval+for+a+selected+hotel+and+receive+bookable+options+with+booking+tokens.\u0026amp;theme=8157bd32ddef625e2bd30aba\u0026amp;signature=961e4932b6edcd230a84b9d864865876e5d07751754e9a75a03d990f9c68866d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get Room Options - Unifystays API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://unifystays.mintlify.app/_mintlify/api/og/v2?division=Search+%26+hotels\u0026amp;title=Get+Room+Options\u0026amp;description=Start+live+supplier+room+retrieval+for+a+selected+hotel+and+receive+bookable+options+with+booking+tokens.\u0026amp;theme=8157bd32ddef625e2bd30aba\u0026amp;signature=961e4932b6edcd230a84b9d864865876e5d07751754e9a75a03d990f9c68866d\">\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=\"https://mintlify.s3.us-west-1.amazonaws.com/unifystays/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Unifystays API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0F766E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.unifystays.com/api-reference/hotel-rooms\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/hotel-rooms.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.unifystays.com/#organization\",\"name\":\"Unifystays API\",\"url\":\"https://docs.unifystays.com\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.unifystays.com#website\",\"name\":\"Unifystays API\",\"url\":\"https://docs.unifystays.com\",\"publisher\":{\"@id\":\"https://docs.unifystays.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.unifystays.com/api-reference/hotel-rooms#webpage\",\"url\":\"https://docs.unifystays.com/api-reference/hotel-rooms\",\"name\":\"Get Room Options\",\"description\":\"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.\",\"dateModified\":\"2026-10-26T07:16:55.223Z\",\"isPartOf\":{\"@id\":\"https://docs.unifystays.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.unifystays.com/api-reference/hotel-rooms#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.unifystays.com/api-reference/hotel-rooms#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Search \u0026 hotels\",\"item\":\"https://docs.unifystays.com/api-reference/hotel-filters\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get Room Options\",\"item\":\"https://docs.unifystays.com/api-reference/hotel-rooms\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.unifystays.com/api-reference/hotel-rooms#apireference\",\"headline\":\"Get Room Options\",\"name\":\"Get Room Options\",\"description\":\"Start live supplier room retrieval for a selected hotel and receive bookable options with booking tokens.\",\"url\":\"https://docs.unifystays.com/api-reference/hotel-rooms\",\"mainEntityOfPage\":{\"@id\":\"https://docs.unifystays.com/api-reference/hotel-rooms#webpage\"},\"dateModified\":\"2026-10-26T07:16:55.223Z\",\"publisher\":{\"@id\":\"https://docs.unifystays.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.unifystays.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Unifystays API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Unifystays API","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"Overview","href":"/api-reference/overview"}]},{"group":"Destination \u0026 master data","pages":[{"title":"Destination Autocomplete","openapi":"reference/openapi.json GET /destinations/autocomplete","href":"/api-reference/destination-autocomplete"},{"title":"List Nationalities","openapi":"reference/openapi.json GET /master-data/nationalities","href":"/api-reference/nationalities"}]},{"group":"Search \u0026 hotels","pages":[{"title":"Get Hotel Filters","openapi":"reference/openapi.json GET /hotels/filters","href":"/api-reference/hotel-filters"},{"title":"Search Hotels","openapi":"reference/openapi.json POST /hotels/search","href":"/api-reference/search-hotels"},{"title":"Get Search Price Updates","openapi":"reference/openapi.json GET /hotels/search/{searchId}/prices","href":"/api-reference/search-price-updates"},{"title":"Get Hotel Content","description":"Retrieve static hotel content for one hotel: description, address, contact, check-in and check-out times, facilities, photos and policies.","openapi":"reference/openapi.json GET /hotels/{hotelId}/content","href":"/api-reference/hotel-content"},{"title":"Get Room Options","openapi":"reference/openapi.json POST /hotels/{hotel_id}/rooms","href":"/api-reference/hotel-rooms"},{"title":"Stream Room Updates","description":"Consume room offers from every supplier as they arrive, with family objects, prices, cancellation terms and booking tokens.","openapi":"reference/openapi.json GET /hotels/{hotel_id}/rooms/stream/{stream_id}","href":"/api-reference/hotel-room-stream"},{"title":"Prebook a Room","openapi":"reference/openapi.json POST /hotels/prebook","href":"/api-reference/prebook"}]},{"group":"Bookings","pages":[{"title":"Create Booking","openapi":"reference/openapi.json POST /hotels/book","href":"/api-reference/create-booking"},{"title":"Confirm Hold","openapi":"reference/openapi.json POST /hotels/book/{booking_id}/confirm-hold","href":"/api-reference/confirm-hold"},{"title":"List Bookings","openapi":"reference/openapi.json GET /hotels/book","href":"/api-reference/list-bookings"},{"title":"Get Booking Status","openapi":"reference/openapi.json GET /hotels/book/{booking_id}","href":"/api-reference/get-booking-status"},{"title":"Find Booking by Idempotency-Key","openapi":"reference/openapi.json GET /hotels/book/by-idempotency-key","href":"/api-reference/get-booking-by-idempotency-key"},{"title":"Get Booking Details","openapi":"reference/openapi.json GET /hotels/book/{booking_id}/details","href":"/api-reference/get-booking-details"},{"title":"Quote Cancellation","openapi":"reference/openapi.json POST /hotels/book/{booking_id}/cancellation-quote","href":"/api-reference/cancellation-quote"},{"title":"Cancel Booking","openapi":"reference/openapi.json POST /hotels/book/{booking_id}/cancel","href":"/api-reference/cancel-booking"}]},{"group":"Webhook endpoints","pages":[{"title":"Create Webhook Endpoint","openapi":"reference/openapi.json POST /webhooks/endpoints","href":"/api-reference/webhooks/create-endpoint"},{"title":"List Webhook Endpoints","openapi":"reference/openapi.json GET /webhooks/endpoints","href":"/api-reference/webhooks/list-endpoints"},{"title":"Get Webhook Endpoint","openapi":"reference/openapi.json GET /webhooks/endpoints/{endpoint_id}","href":"/api-reference/webhooks/get-endpoint"},{"title":"Update Webhook Endpoint","openapi":"reference/openapi.json PATCH /webhooks/endpoints/{endpoint_id}","href":"/api-reference/webhooks/update-endpoint"},{"title":"Delete Webhook Endpoint","openapi":"reference/openapi.json DELETE /webhooks/endpoints/{endpoint_id}","href":"/api-reference/webhooks/delete-endpoint"},{"title":"Rotate Webhook Secret","openapi":"reference/openapi.json POST /webhooks/endpoints/{endpoint_id}/rotate-secret","href":"/api-reference/webhooks/rotate-secret"},{"title":"Send Test Webhook","openapi":"reference/openapi.json POST /webhooks/endpoints/{endpoint_id}/test","href":"/api-reference/webhooks/test-endpoint"}]},{"group":"Webhook logs","pages":[{"title":"List Webhook Events","openapi":"reference/openapi.json GET /webhooks/events","href":"/api-reference/webhooks/list-events"},{"title":"List Webhook Deliveries","openapi":"reference/openapi.json GET /webhooks/deliveries","href":"/api-reference/webhooks/list-deliveries"},{"title":"Get Webhook Delivery","openapi":"reference/openapi.json GET /webhooks/deliveries/{delivery_id}","href":"/api-reference/webhooks/get-delivery"},{"title":"Replay Webhook Delivery","openapi":"reference/openapi.json POST /webhooks/deliveries/{delivery_id}/replay","href":"/api-reference/webhooks/replay-delivery"}]}]}]},"basePath":"","title":"Get Room Options - Unifystays API","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","clsx-BIWXJmsZ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DKZWslLH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-UDqbR6xh.js"]}