Search live hotel inventory and nightly rates for a destination and stay window. It handles requests like “three nights in Lisbon next weekend for two adults” or “family room in Rome with one child in August”. Each result includes an htl_* offer token you can hand to the trip tool to start a booking.
Tool description (what the LLM sees)
Search live hotel inventory and rates.CONTINUATION:- To load more from a prior result, send { next_handle } by itself: it continues the same search. Do not repeat destination, dates, occupancy, currency, sort_by, filters, user_intent or trip_id.FIRST SEARCH REQUIRED:- destination: object, two distinct modes. Mode A (rate lookup): { hotel_name (+ optional country_code, city_name) } or { hotel_ids }. Mode B (hotel search): { query }, { city_name + country_code }, or { latitude + longitude (+ radius_km) }.- checkin, checkout: the user's stay dates in YYYY-MM-DD. Check-in must be today or later at the hotel; send timezone (the user's IANA time zone) so a stay that starts tonight is accepted. Check-out must be after check-in.OCCUPANCY (state it whenever the user gave a party):- either { occupancies: [{ adults, children_ages? }, ...] } (one entry per room) OR shorthand { adults, children?, rooms? }, not both.- When the user stated no party at all, you may search without one: the search then runs for 2 adults per room (1 room unless rooms says otherwise) and search_criteria.occupancy.source is "server_default". Tell the user the prices are for 2 adults in 1 room, and confirm the real party before trip(add_item), search again if it differs. A booking is priced for the party of the search.TWO MODES, pick deliberately:MODE A (rate lookup, the user named a specific hotel):- { hotel_name }: free-text hotel name ("Hotel Calimala", "The St. Regis Rome", "Hôtel Costes"). The server matches the name against its hotel catalog. ALWAYS pair with country_code AND city_name when known, lookup precision drops sharply on common names without scope. Returns 422 HOTEL_NAME_LOW_CONFIDENCE if no candidate scores ≥ 0.7; see "ERROR HANDLING" below.- { hotel_ids }: re-shop a known set (from a prior search result).In Mode A: property filters (min_rating, min_star_rating, max_star_rating, min_reviews, hotel_type_ids, chain_ids, facility_ids) do not apply: the named hotel is priced as if they were not sent (the user named the property). The same holds when a query is read as one hotel (destination_resolution.shape hotel_name). filters.max_budget_per_night applies. filters.max_results does not limit Mode A: every named hotel that has rates is returned. The response includes nearby_alternatives, up to 40 hotels within ~3km of the matched property, in the same response shape so the user can compare.MODE B (hotel search, the user is exploring a destination):- { query }: a natural-language destination (city, POI, island or region). The platform parses it once into city + country or coordinates and applies shared location normalization; raw query text is never sent to a supplier.- { city_name + country_code }: when the user named a city, even if ambiguous. Best when the destination has a primary city ("Mahón, ES" for Menorca; "Florence, IT" for Tuscany). Spell the city as an English-language booking site would, "Munich"/"Florence"/"Rome"/"Vienna", NOT "München"/"Firenze"/"Roma"/"Wien", but keep the local form where that IS the international one ("Regensburg", "Nürnberg", "Lyon"), and never an archaic exonym ("Leghorn", "Ratisbon"). When the user wrote the city in another language, translate it for this field only; keep their spelling when you talk back to them.- { latitude + longitude + radius_km }: when exact coordinates and the desired area are already known; radius_km is the half-side of the square searched, up to 50.ERROR HANDLING, 422 HOTEL_NAME_LOW_CONFIDENCE (Mode A only):When { hotel_name } fuzzy lookup finds no candidate ≥ 0.7, the response body is: { "error": { "code": "HOTEL_NAME_LOW_CONFIDENCE", "message": "...", "top_candidates": [{hotel_id, name, city, score}], "suggested_retry": { "destination": {...} } } }This is ACTIONABLE, not fatal. Pick one: 1. Top candidate matches what the user meant (typo/spelling) → confirm with the user, then retry with { hotel_ids: ["<top.hotel_id>"] }. 2. None of the candidates fit → ask the user "I couldn't pin down 'X', want me to search all hotels in <city> instead?" then retry with suggested_retry.destination. 3. User likely meant a different city → ask to clarify, then retry hotel_name with corrected country_code/city_name.Don't silently auto-pick a low-confidence candidate, booking the wrong hotel is worse than asking one clarifying question.ERROR HANDLING, 422 DESTINATION_LOW_CONFIDENCE (Mode B city_name+country_code only):When the city has no exact catalog match but close candidates exist, top_candidates are CITIES ({city, country_code, hotel_count, score}), not hotels: confirm an obvious typo and retry with that candidate's city_name + country_code (it resolves exactly), ask the user when several fit, and never report the city has no hotels.destination_resolution comes back on every successful search and says HOW the destination resolved (exact / fuzzy / provider_matched / fallback_string); the text summary's opening "Searched: …" line, when present, means the match was fuzzy, fell back to a literal string, resolved to a different city than requested, or the platform located a place that is not a city (an island, region, district, landmark, station, address or airport). When destination_resolution.resolved_place is set, the platform located the place itself: tell the user that place, with its place_type when it is not a city, as where you searched. When destination_resolution.alternatives is set, the destination may name another place too (the same name in another country or state, the island rather than its town): name them, ask which one the user meant before booking, and search another by sending its latitude, longitude and radius_km.SANITY-CHECK THE CITY GROUP (Mode B city_name, an "exact" match can still be the wrong group):destination_resolution.catalog_hotel_count is how many properties the matched city group holds. A count in the single or low double digits for a city you would expect to be large does NOT mean the city is small, it means you matched a near-empty duplicate group. "Roma" holds 3 properties where "Rome" holds 20,706; "Firenze" holds 1 where "Florence" holds 6,986; "Wien" holds 7 where "Vienna" holds 4,580. Treat it as a DESTINATION problem: retry with the English-booking-site spelling, or with { latitude + longitude + radius_km }.This overrides empty_reason. "no_availability_for_dates" is computed against the matched group alone, so a wrong-spelling match reports a sold-out city that actually has thousands of rooms, never tell the user a city is full, or that only N hotels exist there, on the strength of a small group.FIRST SEARCH OPTIONAL:- currency (ISO 4217), guest_nationality (ISO 3166-1 alpha-2)- sort_by: "recommended" (default) or "lowest" (cheapest per night first). Mode B only.- filters: { min_rating, min_star_rating, max_star_rating, min_reviews, hotel_type_ids, chain_ids, facility_ids, max_results, max_budget_per_night }- filters.facility_ids / filters.hotel_type_ids take NAMES ("pool", "spa", "parking"; "hostel", "ryokan", "chalet"), the accepted names are listed on each parameter. For a facility the user requires, send that one name. A name outside the list is rejected with the accepted names. Every property filter of a destination search is applied as sent.- filters.max_budget_per_night: per-night per-room price cap (request currency) for "under $150/night" asks. Hotels whose CHEAPEST rate fits are kept with ALL their rates, on every page. Also applies in Mode A.DESTINATION AND OCCUPANCY EXAMPLES:Add checkin and checkout for the user's actual stay to each example below.1. Free-text city search: { "destination": { "query": "Paris" }, "adults": 2 }2. Two-room family with kids: { "destination": { "city_name": "Barcelona", "country_code": "es" }, "occupancies": [{ "adults": 2 }, { "adults": 1, "children_ages": [5, 7] }] }3. Island/region with known coordinates: { "destination": { "latitude": 39.9496, "longitude": 4.1102, "radius_km": 30 }, "adults": 1 }4. Geo-radius search around a POI: { "destination": { "latitude": 41.4036, "longitude": 2.1744, "radius_km": 3 }, "adults": 2 }5. Mode A, user named a specific hotel: { "destination": { "hotel_name": "Hotel Calimala", "country_code": "it", "city_name": "Florence" }, "adults": 2, "currency": "EUR" }RESPONSE:- The text result is a summary, not JSON: hotels shown (with the total available when known), the price range and refundable split, then each hotel's stars, rating, cheapest price, rate count and hotel_id, and the rates an agent needs to choose a hotel: the cheapest rate of each board and refund-terms combination, cheapest first, one line per rate ending in trip_item_token=<htl_* token> with that rate's price, board and refund terms on the same line. A hotel's dearer rates at the same board and refund terms are not printed; a closing line counts them. Every rate, listed or not, is in structuredContent with its token.- structuredContent carries the full payload: each hotel with basic metadata (name, address, star_rating, rating, main_photo), a rooms[] list of room metadata (room_id, room_name, description, max_occupancy; rates[] is empty) and the hotel's bookable rates, once each, in offers[]: each offer has a trip_item_token (the htl_* token), board type, refund policy, cancellation schedule, taxes, total_amount_money and room_rates[] naming the room it prices (room_id, room_name, occupancy_number, occupancy). On a search of 2 or more rooms each offer's room_rates[] names the room slot it prices, one token per room, the same token repeated for identical rooms, or, when one offer covers every room, every room it books with its one token.- Order: hotels come in the order sort_by names, by default the hotel source's recommended order, or cheapest per night first with sort_by "lowest". Each hotel carries distance_km, its straight-line distance from the search center. When user_intent is given, hotels are re-ranked by how well each hotel matches the stated intent and carry recommendation_score (0 to 1; not a guest rating); the summary prints it on the hotel's "AI ranking" line. structuredContent also carries search metadata.- structuredContent.search_criteria states what the prices were produced under, on every response (success, empty, error): destination (as sent, and resolved as the platform reported it), stay (checkin, checkout, nights), occupancy (rooms, adults, children_ages, source: request | server_default | session), currency (and whether it was defaulted), filters (requested, and as sent to the platform search, ids where the platform takes ids; every property filter of a destination search is applied as sent, and a named hotel's applied filters leave the property filters out), and on an empty page relax_first (what to change first, in order). The summary's "Priced for:" line repeats the party, currency and filters: read them back to the user with the prices.- Empty page: do not repeat the same call. Change one thing per call in the order relax_first gives (the "Relax first:" line) before telling the user there is nothing.- Short page: a "Coverage:" line says how many hotels have rates for the area and dates, e.g. 1 hotel. A short list is not a paging gap: widen the radius, shift the dates or try a nearby city. filters.offset is rejected once a search returned search_handle; page with next_handle instead.- Error: the text names the retry policy, whether the SAME request is worth retrying once and after how many seconds (also structuredContent.retry_after_seconds when known), or whether the request has to change. One retry at most, never a loop; if it fails again, tell the user.NEXT STEP: Use the trip tool with add_item and the trip_item_token (htl_* token) of the rate the user picks. Hotel items work alongside flight items in the same trip.Flow: hotel_search → trip(add_item) → trip(upsert_travelers) → checkoutPRICES: rate prices, in the summary and in structuredContent, are totals for the stay.
Opaque continuation handle returned by a prior hotel_search. Send this field by itself, or with every other field null. A first request needs destination, checkin and checkout.
destination
object | null
No
Destination, provide exactly one shape; unused fields may be null or left out. Two distinct modes: MODE A (rate lookup, you know which hotel): • { hotel_ids } to re-shop a known set. • { hotel_name, country_code?, city_name? } when the user named a specific property. Server resolves via fuzzy lookup; returns 422 HOTEL_NAME_LOW_CONFIDENCE if no candidate scores ≥ 0.7. MODE B (hotel search, you’re exploring): • { query } for a natural-language destination. The platform parses it once into city + country or coordinates and never forwards the raw query to a supplier. • { city_name + country_code } for ambiguous city names or when the user named a primary city (“Mahón, ES” for Menorca). • { latitude + longitude + radius_km } when exact coordinates and the half-side of the square area are already known. In Mode A, property filters (min_rating / star / min_reviews / facility / chain / hotel_type) do not apply, the user already named the property, which is priced as if they were not sent; the same holds when a query is read as one hotel. filters.max_budget_per_night applies with hotel_ids or hotel_name.
checkin
string | null
No
Check-in date (YYYY-MM-DD).
checkout
unknown | null
No
Check-out date (YYYY-MM-DD).
timezone
string | null
No
The user’s IANA time zone (e.g. “America/New_York”), when known. Check-in may be today there, so a stay that starts tonight is accepted.
occupancies
array<object> | null
No
One entry per room (structured). PREFERRED whenever the party is larger than 2 adults or has children, it removes ambiguity about how guests are split across rooms. Example: [{ “adults”: 2 }, { “adults”: 1, “children_ages”: [5] }]. Do NOT combine with the shorthand fields (adults/children/rooms), use one or the other.
adults
integer | null
No
Shorthand: total adults across all rooms. Use ONLY when there is no ambiguity (1 or 2 adults = single room). For 3+ adults, or odd splits, ask the user how they want to split rooms and pass occupancies[] instead, e.g. 4 adults → [{adults:2},{adults:2}] (double + double) vs a single 4-sleeper is a meaningfully different search. Without rooms or occupancies[], the server prices ONE room for all the adults (adults 4 alone is a single 4-sleeper, never two doubles) and search_criteria in the result says so; with rooms, it spreads the adults evenly across that many rooms. Do NOT combine with occupancies[], use one or the other.
children
array<integer> | null
No
Shorthand: ages of all children across all rooms. If children are present, prefer occupancies[] so the caller controls which room each child goes in (ages affect pricing and some providers reject invalid age/room combinations).
rooms
integer | null
No
Shorthand: number of rooms (the platform auto-distributes adults + children). Use when the user named a room count but not the per-room split.
currency
string | null
No
ISO 4217 currency code (e.g. “EUR”, “USD”, “GBP”, “JPY”). ALWAYS set this, omitting it falls back to USD which is rarely what users actually want. Infer from the strongest signal available: (1) the user’s explicit ask (“show me prices in pounds”), (2) the conversation language/locale (French → EUR, Japanese → JPY, German → EUR, Spanish/Catalan/Italian/Portuguese → EUR, English UK → GBP, English US → USD), (3) the destination country (Italy/France/Germany → EUR, UK → GBP, Japan → JPY, US → USD). When in doubt between two plausible currencies, prefer the one matching the user’s likely home country.
guest_nationality
string | null
No
Guest nationality (ISO 3166-1 alpha-2, uppercase, e.g. “FR”). Affects rate availability + tax handling at search time. Separate from traveler nationality used for booking documents.
filters
object | null
No
Optional filter overrides applied on top of the tenant default filter set. Every property filter of a destination search is applied as sent; they do not apply to a search that names a hotel.
trip_id
string | null
No
Existing trip_id. Accepted on every surface for schema consistency; this surface does not use it.
sort_by
enum ("recommended" | "lowest") | null
No
Order of the hotels of a destination search (Mode B). “recommended”, the default, is the hotel source’s own recommended order (popularity, review quality, content completeness). “lowest” is cheapest per night first: send it when the user asks for the cheapest hotels or to sort by price. Mode A ignores it.
user_intent
string
No
The end user’s current request in their own words, e.g. “help me with my travel plans”. Pass it as-is when short; otherwise condense the goal and constraints into 1-2 sentences. Strip personal identifiers (names, emails, phone numbers, addresses, payment details), replace them with placeholders like “[name]”. Optional. Jinko uses it to understand demand, and hotel_search uses it to rank hotel results against what the user asked for (e.g. “quiet, with a gym, near Times Square”), so keep the user’s stated preferences in it.
Each hotel’s rooms[].rates[] includes a trip_item_token starting with htl_. Pass it to trip(add_item), hotels coexist with flight items in the same trip.What a hotel result actually carries. Use these names, not the ones a generic hotel API would suggest:
The single hero image. There is no images[] array on a search result; use hotel_details for the full gallery.
thumbnail
Small image. Notthumbnail_url.
country
Lowercase ISO 3166-1 alpha-2, e.g. "fr". Notcountry_code, which is a request field on destination.
Country codes are matched case-insensitively on the request, but lowercase is what comes back, so prefer lowercase everywhere for round-trip consistency.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Jinko Platform","description":"Connect your AI agent to flights, hotels, car rentals, and bookings through MCP, REST API, TypeScript SDK, or CLI.","colors":{"primary":"#FF6363","light":"#FF807C","dark":"#BA4B4A"},"logo":{"light":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0","dark":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0"},"favicon":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/favicon.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=770e72a193924011a067dcacdcb654cf","navbar":{"links":[{"href":"https://dashboard.gojinko.com","label":"Dashboard"}],"primary":{"type":"button","label":"Get API Key","href":"https://dashboard.gojinko.com/developers/keys"}},"footer":{"socials":{"website":"https://gojinko.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"jinko-dev","hasAudioNarration":false,"actualSubdomain":"jinko-dev","customDomains":["docs.dev.gojinko.com"],"gitSource":{"type":"github","owner":"jinkoso","repo":"jinko-dev-platform","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6aeece39c11f500273ffd5ec","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":63},{"language":"default","tag":"CLI","count":49},{"language":"default","tag":"Flights","count":43},{"language":"default","tag":"Documentation","count":42},{"language":"default","tag":"MCP","count":23},{"language":"default","tag":"Manage","count":20},{"language":"default","tag":"Trip \u0026 Payment","count":19},{"language":"default","tag":"Discovery","count":17},{"language":"default","tag":"Hotels","count":16},{"language":"default","tag":"Travel Demand","count":14}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"tools/hotel-search","slug":"/tools/hotel-search","pageMetadata":{"title":"Hotel Search","description":"Search live hotel inventory and rates","href":"/tools/hotel-search"},"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: \"Search live hotel inventory and rates\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,em:`em`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Accordion,CodeBlock,Heading,Table}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Search live hotel inventory and nightly rates for a destination and stay window. It handles requests like “three nights in Lisbon next weekend for two adults” or “family room in Rome with one child in August”. Each result includes an `,_jsx(_components.code,{children:`htl_*`}),` offer token you can hand to the trip tool to start a booking.`]}),`\n`,_jsx(Accordion,{title:`Tool description (what the LLM sees)`,defaultOpen:false,id:`tool-description-what-the-llm-sees`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`83`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`83`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Search live hotel inventory and rates.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`CONTINUATION:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- To load more from a prior result, send { next_handle } by itself: it continues the same search. Do not repeat destination, dates, occupancy, currency, sort_by, filters, user_intent or trip_id.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`FIRST SEARCH REQUIRED:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- destination: object, two distinct modes. Mode A (rate lookup): { hotel_name (+ optional country_code, city_name) } or { hotel_ids }. Mode B (hotel search): { query }, { city_name + country_code }, or { latitude + longitude (+ radius_km) }.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- checkin, checkout: the user's stay dates in YYYY-MM-DD. Check-in must be today or later at the hotel; send timezone (the user's IANA time zone) so a stay that starts tonight is accepted. Check-out must be after check-in.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`OCCUPANCY (state it whenever the user gave a party):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- either { occupancies: [{ adults, children_ages? }, ...] } (one entry per room) OR shorthand { adults, children?, rooms? }, not both.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- When the user stated no party at all, you may search without one: the search then runs for 2 adults per room (1 room unless rooms says otherwise) and search_criteria.occupancy.source is \"server_default\". Tell the user the prices are for 2 adults in 1 room, and confirm the real party before trip(add_item), search again if it differs. A booking is priced for the party of the search.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`TWO MODES, pick deliberately:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`MODE A (rate lookup, the user named a specific hotel):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- { hotel_name }: free-text hotel name (\"Hotel Calimala\", \"The St. Regis Rome\", \"Hôtel Costes\"). The server matches the name against its hotel catalog. ALWAYS pair with country_code AND city_name when known, lookup precision drops sharply on common names without scope. Returns 422 HOTEL_NAME_LOW_CONFIDENCE if no candidate scores ≥ 0.7; see \"ERROR HANDLING\" below.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- { hotel_ids }: re-shop a known set (from a prior search result).`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`In Mode A: property filters (min_rating, min_star_rating, max_star_rating, min_reviews, hotel_type_ids, chain_ids, facility_ids) do not apply: the named hotel is priced as if they were not sent (the user named the property). The same holds when a query is read as one hotel (destination_resolution.shape hotel_name). filters.max_budget_per_night applies. filters.max_results does not limit Mode A: every named hotel that has rates is returned. The response includes nearby_alternatives, up to 40 hotels within ~3km of the matched property, in the same response shape so the user can compare.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`MODE B (hotel search, the user is exploring a destination):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- { query }: a natural-language destination (city, POI, island or region). The platform parses it once into city + country or coordinates and applies shared location normalization; raw query text is never sent to a supplier.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- { city_name + country_code }: when the user named a city, even if ambiguous. Best when the destination has a primary city (\"Mahón, ES\" for Menorca; \"Florence, IT\" for Tuscany). Spell the city as an English-language booking site would, \"Munich\"/\"Florence\"/\"Rome\"/\"Vienna\", NOT \"München\"/\"Firenze\"/\"Roma\"/\"Wien\", but keep the local form where that IS the international one (\"Regensburg\", \"Nürnberg\", \"Lyon\"), and never an archaic exonym (\"Leghorn\", \"Ratisbon\"). When the user wrote the city in another language, translate it for this field only; keep their spelling when you talk back to them.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- { latitude + longitude + radius_km }: when exact coordinates and the desired area are already known; radius_km is the half-side of the square searched, up to 50.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ERROR HANDLING, 422 HOTEL_NAME_LOW_CONFIDENCE (Mode A only):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`When { hotel_name } fuzzy lookup finds no candidate ≥ 0.7, the response body is:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` { \"error\": { \"code\": \"HOTEL_NAME_LOW_CONFIDENCE\", \"message\": \"...\", \"top_candidates\": [{hotel_id, name, city, score}], \"suggested_retry\": { \"destination\": {...} } } }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`This is ACTIONABLE, not fatal. Pick one:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 1. Top candidate matches what the user meant (typo/spelling) → confirm with the user, then retry with { hotel_ids: [\"\u003ctop.hotel_id>\"] }.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 2. None of the candidates fit → ask the user \"I couldn't pin down 'X', want me to search all hotels in \u003ccity> instead?\" then retry with suggested_retry.destination.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 3. User likely meant a different city → ask to clarify, then retry hotel_name with corrected country_code/city_name.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Don't silently auto-pick a low-confidence candidate, booking the wrong hotel is worse than asking one clarifying question.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ERROR HANDLING, 422 DESTINATION_LOW_CONFIDENCE (Mode B city_name+country_code only):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`When the city has no exact catalog match but close candidates exist, top_candidates are CITIES ({city, country_code, hotel_count, score}), not hotels: confirm an obvious typo and retry with that candidate's city_name + country_code (it resolves exactly), ask the user when several fit, and never report the city has no hotels.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`destination_resolution comes back on every successful search and says HOW the destination resolved (exact / fuzzy / provider_matched / fallback_string); the text summary's opening \"Searched: …\" line, when present, means the match was fuzzy, fell back to a literal string, resolved to a different city than requested, or the platform located a place that is not a city (an island, region, district, landmark, station, address or airport). When destination_resolution.resolved_place is set, the platform located the place itself: tell the user that place, with its place_type when it is not a city, as where you searched. When destination_resolution.alternatives is set, the destination may name another place too (the same name in another country or state, the island rather than its town): name them, ask which one the user meant before booking, and search another by sending its latitude, longitude and radius_km.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SANITY-CHECK THE CITY GROUP (Mode B city_name, an \"exact\" match can still be the wrong group):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`destination_resolution.catalog_hotel_count is how many properties the matched city group holds. A count in the single or low double digits for a city you would expect to be large does NOT mean the city is small, it means you matched a near-empty duplicate group. \"Roma\" holds 3 properties where \"Rome\" holds 20,706; \"Firenze\" holds 1 where \"Florence\" holds 6,986; \"Wien\" holds 7 where \"Vienna\" holds 4,580. Treat it as a DESTINATION problem: retry with the English-booking-site spelling, or with { latitude + longitude + radius_km }.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`This overrides empty_reason. \"no_availability_for_dates\" is computed against the matched group alone, so a wrong-spelling match reports a sold-out city that actually has thousands of rooms, never tell the user a city is full, or that only N hotels exist there, on the strength of a small group.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`FIRST SEARCH OPTIONAL:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- currency (ISO 4217), guest_nationality (ISO 3166-1 alpha-2)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- sort_by: \"recommended\" (default) or \"lowest\" (cheapest per night first). Mode B only.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- filters: { min_rating, min_star_rating, max_star_rating, min_reviews, hotel_type_ids, chain_ids, facility_ids, max_results, max_budget_per_night }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- filters.facility_ids / filters.hotel_type_ids take NAMES (\"pool\", \"spa\", \"parking\"; \"hostel\", \"ryokan\", \"chalet\"), the accepted names are listed on each parameter. For a facility the user requires, send that one name. A name outside the list is rejected with the accepted names. Every property filter of a destination search is applied as sent.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- filters.max_budget_per_night: per-night per-room price cap (request currency) for \"under $150/night\" asks. Hotels whose CHEAPEST rate fits are kept with ALL their rates, on every page. Also applies in Mode A.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DESTINATION AND OCCUPANCY EXAMPLES:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Add checkin and checkout for the user's actual stay to each example below.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. Free-text city search:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` { \"destination\": { \"query\": \"Paris\" }, \"adults\": 2 }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. Two-room family with kids:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` { \"destination\": { \"city_name\": \"Barcelona\", \"country_code\": \"es\" },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"occupancies\": [{ \"adults\": 2 }, { \"adults\": 1, \"children_ages\": [5, 7] }] }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`3. Island/region with known coordinates:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` { \"destination\": { \"latitude\": 39.9496, \"longitude\": 4.1102, \"radius_km\": 30 }, \"adults\": 1 }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`4. Geo-radius search around a POI:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` { \"destination\": { \"latitude\": 41.4036, \"longitude\": 2.1744, \"radius_km\": 3 }, \"adults\": 2 }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`5. Mode A, user named a specific hotel:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` { \"destination\": { \"hotel_name\": \"Hotel Calimala\", \"country_code\": \"it\", \"city_name\": \"Florence\" }, \"adults\": 2, \"currency\": \"EUR\" }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`RESPONSE:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- The text result is a summary, not JSON: hotels shown (with the total available when known), the price range and refundable split, then each hotel's stars, rating, cheapest price, rate count and hotel_id, and the rates an agent needs to choose a hotel: the cheapest rate of each board and refund-terms combination, cheapest first, one line per rate ending in trip_item_token=\u003chtl_* token> with that rate's price, board and refund terms on the same line. A hotel's dearer rates at the same board and refund terms are not printed; a closing line counts them. Every rate, listed or not, is in structuredContent with its token.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- structuredContent carries the full payload: each hotel with basic metadata (name, address, star_rating, rating, main_photo), a rooms[] list of room metadata (room_id, room_name, description, max_occupancy; rates[] is empty) and the hotel's bookable rates, once each, in offers[]: each offer has a trip_item_token (the htl_* token), board type, refund policy, cancellation schedule, taxes, total_amount_money and room_rates[] naming the room it prices (room_id, room_name, occupancy_number, occupancy). On a search of 2 or more rooms each offer's room_rates[] names the room slot it prices, one token per room, the same token repeated for identical rooms, or, when one offer covers every room, every room it books with its one token.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Order: hotels come in the order sort_by names, by default the hotel source's recommended order, or cheapest per night first with sort_by \"lowest\". Each hotel carries distance_km, its straight-line distance from the search center. When user_intent is given, hotels are re-ranked by how well each hotel matches the stated intent and carry recommendation_score (0 to 1; not a guest rating); the summary prints it on the hotel's \"AI ranking\" line. structuredContent also carries search metadata.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- structuredContent.search_criteria states what the prices were produced under, on every response (success, empty, error): destination (as sent, and resolved as the platform reported it), stay (checkin, checkout, nights), occupancy (rooms, adults, children_ages, source: request | server_default | session), currency (and whether it was defaulted), filters (requested, and as sent to the platform search, ids where the platform takes ids; every property filter of a destination search is applied as sent, and a named hotel's applied filters leave the property filters out), and on an empty page relax_first (what to change first, in order). The summary's \"Priced for:\" line repeats the party, currency and filters: read them back to the user with the prices.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Empty page: do not repeat the same call. Change one thing per call in the order relax_first gives (the \"Relax first:\" line) before telling the user there is nothing.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Short page: a \"Coverage:\" line says how many hotels have rates for the area and dates, e.g. 1 hotel. A short list is not a paging gap: widen the radius, shift the dates or try a nearby city. filters.offset is rejected once a search returned search_handle; page with next_handle instead.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Error: the text names the retry policy, whether the SAME request is worth retrying once and after how many seconds (also structuredContent.retry_after_seconds when known), or whether the request has to change. One retry at most, never a loop; if it fails again, tell the user.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`NEXT STEP: Use the trip tool with add_item and the trip_item_token (htl_* token) of the rate the user picks. Hotel items work alongside flight items in the same trip.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Flow: hotel_search → trip(add_item) → trip(upsert_travelers) → checkout`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`PRICES: rate prices, in the summary and in structuredContent, are totals for the stay.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})}),`\n`,_jsx(Heading,{level:`2`,id:`parameters`,children:`Parameters`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Name`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`next_handle`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Opaque continuation handle returned by a prior hotel_search. Send this field by itself, or with every other field null. A first request needs destination, checkin and checkout.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`destination`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`object | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Destination, provide exactly one shape; unused fields may be null or left out. Two distinct modes: MODE A (rate lookup, you know which hotel): • { hotel_ids } to re-shop a known set. • { hotel_name, country_code?, city_name? } when the user named a specific property. Server resolves via fuzzy lookup; returns 422 HOTEL_NAME_LOW_CONFIDENCE if no candidate scores ≥ 0.7. MODE B (hotel search, you’re exploring): • { query } for a natural-language destination. The platform parses it once into city + country or coordinates and never forwards the raw query to a supplier. • { city_name + country_code } for ambiguous city names or when the user named a primary city (“Mahón, ES” for Menorca). • { latitude + longitude + radius_km } when exact coordinates and the half-side of the square area are already known. In Mode A, property filters (min_rating / star / min_reviews / facility / chain / hotel_type) do not apply, the user already named the property, which is priced as if they were not sent; the same holds when a query is read as one hotel. filters.max_budget_per_night applies with hotel_ids or hotel_name.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`checkin`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Check-in date (YYYY-MM-DD).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`checkout`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`unknown | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Check-out date (YYYY-MM-DD).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`timezone`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`The user’s IANA time zone (e.g. “America/New_York”), when known. Check-in may be today there, so a stay that starts tonight is accepted.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`occupancies`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`array\u003cobject> | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`One entry per room (structured). PREFERRED whenever the party is larger than 2 adults or has children, it removes ambiguity about how guests are split across rooms. Example: [{ “adults”: 2 }, { “adults”: 1, “children_ages”: [5] }]. Do NOT combine with the shorthand fields (adults/children/rooms), use one or the other.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`adults`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`integer | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Shorthand: total adults across all rooms. Use ONLY when there is no ambiguity (1 or 2 adults = single room). For 3+ adults, or odd splits, ask the user how they want to split rooms and pass occupancies[] instead, e.g. 4 adults → [{adults:2},{adults:2}] (double + double) vs a single 4-sleeper is a meaningfully different search. Without rooms or occupancies[], the server prices ONE room for all the adults (adults 4 alone is a single 4-sleeper, never two doubles) and search_criteria in the result says so; with rooms, it spreads the adults evenly across that many rooms. Do NOT combine with occupancies[], use one or the other.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`children`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`array\u003cinteger> | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Shorthand: ages of all children across all rooms. If children are present, prefer occupancies[] so the caller controls which room each child goes in (ages affect pricing and some providers reject invalid age/room combinations).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`rooms`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`integer | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Shorthand: number of rooms (the platform auto-distributes adults + children). Use when the user named a room count but not the per-room split.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`currency`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`ISO 4217 currency code (e.g. “EUR”, “USD”, “GBP”, “JPY”). ALWAYS set this, omitting it falls back to USD which is rarely what users actually want. Infer from the strongest signal available: (1) the user’s explicit ask (“show me prices in pounds”), (2) the conversation language/locale (French → EUR, Japanese → JPY, German → EUR, Spanish/Catalan/Italian/Portuguese → EUR, English UK → GBP, English US → USD), (3) the destination country (Italy/France/Germany → EUR, UK → GBP, Japan → JPY, US → USD). When in doubt between two plausible currencies, prefer the one matching the user’s likely home country.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`guest_nationality`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Guest nationality (ISO 3166-1 alpha-2, uppercase, e.g. “FR”). Affects rate availability + tax handling at search time. Separate from traveler nationality used for booking documents.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`filters`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`object | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Optional filter overrides applied on top of the tenant default filter set. Every property filter of a destination search is applied as sent; they do not apply to a search that names a hotel.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`trip_id`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Existing trip_id. Accepted on every surface for schema consistency; this surface does not use it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sort_by`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`enum (\"recommended\" | \"lowest\") | null`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Order of the hotels of a destination search (Mode B). “recommended”, the default, is the hotel source’s own recommended order (popularity, review quality, content completeness). “lowest” is cheapest per night first: send it when the user asks for the cheapest hotels or to sort by price. Mode A ignores it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`user_intent`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`string`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`The end user’s current request in their own words, e.g. “help me with my travel plans”. Pass it as-is when short; otherwise condense the goal and constraints into 1-2 sentences. Strip personal identifiers (names, emails, phone numbers, addresses, payment details), replace them with placeholders like “[name]”. Optional. Jinko uses it to understand demand, and hotel_search uses it to rank hotel results against what the user asked for (e.g. “quiet, with a gym, near Times Square”), so keep the user’s stated preferences in it.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`examples`,children:`Examples`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Simple city search, 2 adults, 3 nights in Paris:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,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:`9`,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:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"hotel_search\"`}),_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:` \"arguments\"`}),_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:` \"destination\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"query\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Paris\"`}),_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:` \"checkin\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2027-07-15\"`}),_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:` \"checkout\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2027-07-18\"`}),_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:` \"adults\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`})]}),`\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(_components.p,{children:_jsx(_components.strong,{children:`Two rooms, kids in one:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,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:`12`,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:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"hotel_search\"`}),_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:` \"arguments\"`}),_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:` \"destination\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"city_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Barcelona\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"country_code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"es\"`}),_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:` \"checkin\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2027-08-01\"`}),_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:` \"checkout\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2027-08-05\"`}),_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:` \"occupancies\"`}),_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:`\"adults\"`}),_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:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"adults\"`}),_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:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"children_ages\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`7`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Near a coordinate with filters:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`19`,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:`19`,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:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"hotel_search\"`}),_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:` \"arguments\"`}),_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:` \"destination\"`}),_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:` \"latitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`48.8566`}),_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:` \"longitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2.3522`}),_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:` \"radius_km\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`})]}),`\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:` \"checkin\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2027-07-15\"`}),_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:` \"checkout\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2027-07-18\"`}),_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:` \"adults\"`}),_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:` \"filters\"`}),_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:` \"min_rating\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`8`}),_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:` \"min_star_rating\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_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:` \"facility_ids\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pool\"`}),_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:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"max_results\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`20`})]}),`\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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Each hotel’s `,_jsx(_components.code,{children:`rooms[].rates[]`}),` includes a `,_jsx(_components.code,{children:`trip_item_token`}),` starting with `,_jsx(_components.code,{children:`htl_`}),`. Pass it to `,_jsx(_components.code,{children:`trip(add_item)`}),`, hotels coexist with flight items in the same trip.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`What a hotel result actually carries.`}),` Use these names, not the ones a generic hotel API would suggest:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,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:`15`,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:` \"hotel_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lp1897c\"`}),_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:`\"Hôtel Le Marais\"`}),_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:` \"address\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"12 Rue de Rivoli\"`}),_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:` \"city\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Paris\"`}),_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:` \"country\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"fr\"`}),_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:` \"star_rating\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_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:` \"rating\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`8.6`}),_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:` \"review_count\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1243`}),_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:` \"main_photo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://…/large.jpg\"`}),_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:` \"thumbnail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://…/thumb.jpg\"`}),_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:` \"latitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`48.8566`}),_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:` \"longitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2.3522`}),_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:` \"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`]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Note`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`main_photo`})}),_jsxs(_components.td,{children:[`The single hero image. There is `,_jsxs(_components.strong,{children:[`no `,_jsx(_components.code,{children:`images[]`}),` array`]}),` on a search result; use `,_jsx(_components.code,{children:`hotel_details`}),` for the full gallery.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`thumbnail`})}),_jsxs(_components.td,{children:[`Small image. `,_jsx(_components.strong,{children:`Not`}),` `,_jsx(_components.code,{children:`thumbnail_url`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`country`})}),_jsxs(_components.td,{children:[`Lowercase ISO 3166-1 alpha-2, e.g. `,_jsx(_components.code,{children:`\"fr\"`}),`. `,_jsx(_components.strong,{children:`Not`}),` `,_jsx(_components.code,{children:`country_code`}),`, which is a `,_jsx(_components.em,{children:`request`}),` field on `,_jsx(_components.code,{children:`destination`}),`.`]})]})]})]}),`\n`,_jsx(_components.p,{children:`Country codes are matched case-insensitively on the request, but lowercase is what comes back, so prefer lowercase everywhere for round-trip consistency.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Hotel Search","description":"Search live hotel inventory and rates","href":"/tools/hotel-search"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Parameters","slug":"parameters","depth":2,"children":[]},{"title":"Examples","slug":"examples","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"jinko-dev","siteName":"Jinko Platform","title":"Hotel Search - Jinko Platform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-01T06:41:10.382Z","originalFileLocation":"tools/hotel-search.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=\"Search live hotel inventory and rates\">\u003cmeta data-mint-head name=\"application-name\" content=\"Jinko Platform\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Hotel Search - Jinko Platform\">\u003cmeta data-mint-head property=\"og:description\" content=\"Search live hotel inventory and rates\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Jinko Platform\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dev.gojinko.com/tools/hotel-search\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://jinko-dev.mintlify.site/_mintlify/api/og/v2?division=Hotels\u0026amp;title=Hotel+Search\u0026amp;description=Search+live+hotel+inventory+and+rates\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=fa870d9d8a4a3ce8a3e7184b8b0ae97924f739988e4c2dbd57c31c92f751c53f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Hotel Search - Jinko Platform\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Search live hotel inventory and rates\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jinko-dev.mintlify.site/_mintlify/api/og/v2?division=Hotels\u0026amp;title=Hotel+Search\u0026amp;description=Search+live+hotel+inventory+and+rates\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=fa870d9d8a4a3ce8a3e7184b8b0ae97924f739988e4c2dbd57c31c92f751c53f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Jinko Platform\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF6363\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dev.gojinko.com/tools/hotel-search\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/tools/hotel-search.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dev.gojinko.com/#organization\",\"name\":\"Jinko Platform\",\"url\":\"https://docs.dev.gojinko.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dev.gojinko.com#website\",\"name\":\"Jinko Platform\",\"url\":\"https://docs.dev.gojinko.com\",\"publisher\":{\"@id\":\"https://docs.dev.gojinko.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dev.gojinko.com/tools/hotel-search#webpage\",\"url\":\"https://docs.dev.gojinko.com/tools/hotel-search\",\"name\":\"Hotel Search\",\"description\":\"Search live hotel inventory and rates\",\"dateModified\":\"2026-11-01T06:41:10.382Z\",\"isPartOf\":{\"@id\":\"https://docs.dev.gojinko.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dev.gojinko.com/tools/hotel-search#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dev.gojinko.com/tools/hotel-search#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Jinko Platform\",\"item\":\"https://docs.dev.gojinko.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hotel Search\",\"item\":\"https://docs.dev.gojinko.com/tools/hotel-search\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dev.gojinko.com/tools/hotel-search#article\",\"headline\":\"Hotel Search\",\"name\":\"Hotel Search\",\"description\":\"Search live hotel inventory and rates\",\"url\":\"https://docs.dev.gojinko.com/tools/hotel-search\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dev.gojinko.com/tools/hotel-search#webpage\"},\"dateModified\":\"2026-11-01T06:41:10.382Z\",\"publisher\":{\"@id\":\"https://docs.dev.gojinko.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dev.gojinko.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Jinko Platform\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Jinko Platform","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"MCP","groups":[{"group":"Introduction","pages":[{"title":"Overview","href":"/tools/overview"}]},{"group":"Flights","pages":[{"group":"Discovery","pages":[{"title":"Find Destination","href":"/tools/find-destination"},{"title":"Flight Calendar","href":"/tools/flight-calendar"},{"title":"Find Dates","href":"/tools/find-dates"},{"title":"Price Monitoring","href":"/tools/price-monitoring"},{"title":"Flight Price Advice","href":"/tools/flight-price-advice"}]},{"group":"Search","pages":[{"title":"Flight Search","href":"/tools/flight-search"},{"title":"Flight Award Search (preview)","href":"/tools/flight-award-search"}]},{"group":"Manage","pages":[{"title":"Flight Refund","href":"/tools/flight-refund"},{"title":"Flight Exchange","description":"Exchanges a booked flight for a different itinerary","href":"/tools/flight-exchange"}]}]},{"group":"Hotels","pages":[{"title":"Hotel Search","href":"/tools/hotel-search"},{"title":"Hotel Details","description":"Fetch rich metadata (gallery, facilities, policies, per-room details) for a single hotel","href":"/tools/hotel-details"},{"title":"Hotel Reviews","href":"/tools/hotel-reviews"},{"title":"Cancel Hotel Booking","href":"/tools/hotel-cancel"}]},{"group":"Cars","pages":[{"title":"Search Car Rentals","href":"/tools/car-search"},{"title":"Cancel Car Rental Booking","href":"/tools/car-cancel"}]},{"group":"Trip \u0026 Payment","pages":[{"title":"Trip","href":"/tools/trip"},{"title":"Checkout Trip","href":"/tools/checkout"},{"title":"Submit Agent Payment","href":"/tools/submit-agent-payment"},{"title":"Get Trip","href":"/tools/get-trip"},{"title":"Get Booking","href":"/tools/get-booking"}]},{"group":"Marketing claim","tag":"Preview","pages":[{"title":"Claim the Best Price Guarantee","href":"/tools/claim-best-price-guarantee"},{"title":"Read a Best Price Guarantee claim","href":"/tools/get-best-price-guarantee"}]}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli/overview"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Hotel Search - Jinko Platform","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":[],"chunks":[]}