Getting started
Chains & coverage
The 11 chains and 5 OTAs, what each returns, and the chain ids to put in a request.
Chain ids
chain in every request is one of these ids. GET /v1/chains returns the same list with live
capability flags and credit weights.
| id | Source | Program | Member | Points | Native calendar | Credits/shop |
|---|---|---|---|---|---|---|
marriott | Marriott | Marriott Bonvoy | ✓ | ✓ | ✓ | 1 |
hilton | Hilton | Hilton Honors | ✓ | ✓ | ✓ | 1 |
hyatt | Hyatt | World of Hyatt | ✓ | ✓ | ✓ (availability + points only, no cash) | 1 |
ihg | IHG | IHG One Rewards | ✓ | ✓ | ✓ | 1 |
choice | Choice | Choice Privileges | ✓ | ✓ | ✓ | 1 |
radisson | Radisson | Radisson Rewards | ✓ | ✓ | ✓ | 3 |
iprefer | I Prefer | I Prefer (Preferred Hotels) | ✓ | ✓ | ✓ | 1 |
wyndham | Wyndham | Wyndham Rewards | ✓ | – (login-gated at the source) | ✓ | 6 |
melia | Meliá | Meliá Rewards | ✓ | – (login-gated at the source) | ✓ (availability only) | 1 |
bestwestern | Best Western | Best Western Rewards | ✓ | ✓ | ✓ | 5 |
premierinn | Premier Inn | — | n/a | n/a | ✓ | 1 |
booking | Booking.com (OTA) | Genius, reported apart | ✓ | – | – | 1 |
expedia | Expedia (OTA) | Member Price, reported apart | ✓ | – | – | 1 |
hotelscom | Hotels.com (OTA) | Member Price, reported apart | ✓ | – | – | 1 |
ctrip | Trip.com (OTA) | — | – | – | – | 1 |
agoda | Agoda (OTA) | Member deal, reported apart | ✓ | – | – | 1 |
Points are login-gated at the source on Meliá and Wyndham, and Premier Inn is cash-only; those
fields come back empty rather than estimated. Wyndham names rooms and rate plans by code only
(room_code / rate_code, names empty) — that is how its booking system answers an anonymous shop;
codes are stable per property.
Hotel codes
Every rate endpoint takes the chain’s own property code — Marriott CHIRL, Hyatt CHIZP, IHG
CHIMM, Hilton CHITDHX, Choice IL263. They are not guessable, so GET /v1/hotels?chain=…&q=…
exists to produce them: a city, an address or a landmark in, the chain’s hotels around that point out,
nearest first, with name, brand, address and coordinates where the chain’s own search publishes them
(Marriott’s returns codes and distances only). An OTA’s code is its own hotel id — the number in its
URL, or the id a /parity channel row returns.
Tax basis
price_per_night is in each chain’s native basis and tax_included says which: true for Hyatt,
IHG, Meliá, Premier Inn and Radisson; false for Hilton, Marriott, Choice, Best Western, I Prefer and
Wyndham. price_per_night_after_tax is the comparable figure, derived per chain from fields verified
against live payloads and null only where the source carries no tax data — never estimated. Compare
across chains, and against the OTAs, on the *_after_tax fields.
The OTAs as sources
booking, expedia, hotelscom, ctrip and agoda take the same /shop, /calendar and
/compset calls as a chain, with the OTA’s hotel id as the code and the OTA’s own tax-inclusive
price. They carry no points and no hotel-code search. POST /ota/{source}/shop is the same call
with raw: true available for the upstream bodies.
Freshness
Live at request time, or a cache a few minutes old — source and cache_age_sec are on every
response; max_age in the request bounds the staleness you accept (0 = live). The
status page shows measured uptime and latency per source.