Modes
Rates — POST /shop
One hotel × one stay → every room × rate plan, public and member, with the after-tax figure on each row.
Request
{ "chain": "hyatt", "hotel_code": "CHIZP", "checkin": "2026-11-10", "los": 1,
"occupancy": { "adults": 2, "children": [], "rooms": 1 }, "currency": "USD" }
| Field | Type | Notes |
|---|---|---|
chain |
id | one of the 16 ids on Chains & coverage |
hotel_code |
string | the chain’s own property code, 1–16 letters/digits/-/_ |
checkin |
YYYY-MM-DD |
a date already past in every timezone (earlier than yesterday UTC) is invalid_request, never billed |
los |
int 1–30 | nights; default 1 |
occupancy |
object | adults 1–8 (default 2), children ages 0–17 (up to 8), rooms 1–8 (default 1) |
currency |
ISO 4217 | default USD |
rate_filters |
array | subset of bar member advance_purchase package corporate aaa senior government other |
max_age |
int sec | max acceptable cache age; omitted = any cached answer within the TTL; 0 = always live |
Response
ShopResponse: chain, hotel {code,name,brand,currency}, checkin, los, occupancy,
status (available / sold_out / closed / restricted_los / not_found / error), min_los
where the chain states a minimum stay, rates[], lowest, shopped_at, source, cache_age_sec.
Each row of rates[] carries room_code, room_name, bed_type, rate_code, rate_name,
rate_type, member_only, refundable, cancel_deadline, meal_plan, price_per_night
(native basis), price_per_night_after_tax (comparable), price_total, taxes_fees_total,
tax_included, currency, rooms_left, and points_per_night / points_total / cash_copay on
chains that return points inline.
lowest keys: bar (lowest public), member (lowest member-only), bar_after_tax,
member_after_tax. A key is absent when no rate supplies it. A member rate never collapses into
bar.
A real response, trimmed, is on the home page and on each chain page.
Billing
Billed the chain’s shop weight per live shop (see /chains shop_credits); cache hits 0.25×;
errors free. max_age (sec) caps cache staleness; max_age=0 forces live.
Notes
sold_out,closedandrestricted_losare answers — the hotel exists, it is not selling that stay. They are billed;not_foundanderrorare not.- A live single-hotel lookup typically takes 1–10 seconds. Schedule bulk work; do not put it in a request path.
- The OTAs answer this call too, with their own hotel id as the code.