Modes
Parity — POST /parity
The direct rate of one hotel beside Booking.com, Expedia, Hotels.com, Trip.com and Agoda for the same stay — the gap per channel, the cheapest, the deepest undercut.
Request
{ "chain": "choice", "hotel_code": "IL263", "checkin": "2026-11-10", "los": 1,
"channels": ["booking", "expedia", "hotelscom", "ctrip", "agoda"] }
| Field | Type | Notes |
|---|---|---|
chain |
a hotel chain id | the OTAs are the channels, not the chain |
hotel_code, checkin, los (1–14), occupancy, currency, max_age |
as /shop |
|
channels |
1–5 OTA ids | default all five |
ids |
object | the hotel’s id on a channel when you know it ({"booking":"…"}); overrides the map for this call, nothing stored |
min_confidence |
0–1 | mapped ids under this confidence are not used; default 0.6 |
resolve |
bool | look up missing ids live before shopping; default true |
The OTA listing is found for you: an id map from the chain’s code to each OTA’s hotel id, filled from
Google Hotels’ own cross-source match the first time a hotel is seen (confidence 0.85), then the
sources’ own typeaheads. GET /hotels/{chain}/{code}/ids returns the map on its own.
Response
ParityResponse: direct { status, public, member, points { lowest_points, cpp }, rates, source, credits }, channels[] each { channel, id, confidence, status, public, member, vs_direct { diff_per_night, diff_pct, cheaper }, rates, skipped, credits }, cheapest { channel, per_night, basis }, verdict (direct_lowest / ota_undercuts / equal / no_direct_rate /
no_channel_rate), max_undercut_pct, comparison_note, credits { direct, channels, ids, total }.
Each figure carries basis: after_tax when the side has an after-tax number (the comparable one),
native when it only has its own. The comparison is per night, after tax wherever both sides carry
it, and public rates only — Genius and Member Price are reported in member, as the chain’s member
rate is, and never enter the gap. A channel in another currency is shown but not compared.
Measured on this hotel (the home page’s example): direct 118.70 after tax, member 106.83, 20,000
points; Booking.com 119.76 (+0.89 %), Expedia 97.00 (−18.28 %), Hotels.com 97.00, Agoda 107
(native), Trip.com no listing matched → verdict ota_undercuts, max_undercut_pct 18.28.
Billing
Billed as the shops it made (each chain’s weight, cached 0.25×) plus 1 credit when ids were resolved live. A channel with no listing for the hotel costs nothing. Five channels on a Marriott hotel: at most 7 credits, typically less once cached.
Monitoring it
For a standing alert, POST /watches with condition: "undercut" fires a signed webhook when the
named channel sells the same nights under the direct public rate by at least min_pct. See the
API reference.