Modes
Comp set — POST /compset
Up to 25 hotels of one chain × one stay → the lowest rate per hotel, in one call.
Request
{ "chain": "choice", "hotel_codes": ["IL263", "IL264", "IL265"], "checkin": "2026-11-10", "los": 1, "rates": "lowest" }
| Field | Type | Notes |
|---|---|---|
hotel_codes |
1–25 codes | one chain per call |
rates |
lowest | member |
lowest (default): the lowest public rate, plus the member rate where the chain returns it for free. member: guarantees the lowest member rate too |
checkin, los, occupancy, currency, max_age |
as /shop |
Response
CompsetResponse.hotels[]: { code, name, status, min_los, lowest { bar, member, bar_after_tax, member_after_tax }, lowest_points, currency }. lowest.bar is always the lowest public rate;
member-only rates appear under lowest.member and never collapse into bar. Every rate plan of one
hotel is /shop’s job.
Native batch or fan-out
Marriott, Choice, Meliá, Radisson, Wyndham and Best Western have a native multi-hotel endpoint, so a 25-hotel comp set is about one upstream call. The others are a paced fan-out, bounded per chain so a burst never trips the source. Either way you are billed per hotel returned, not per call we made.
Billing
Billed per hotel returned at the chain’s compset rate (/chains compset_hotel_credits: 0.25 on the
1-credit chains and the OTAs, 0.5 on Radisson, Best Western and Wyndham; hotels served from cache
0.25×; error/not_found free), minimum 1 credit per call. rates: "member" adds credits per
hotel only where it needs extra upstream calls (/chains compset_extras: Radisson +2.5, Wyndham
+5.5, Best Western +0.5).
A 10-hotel Marriott comp set: 2.5 credits. A 3-hotel one: 1 credit, the minimum.
Award comp set
POST /compset/award — same request — returns lowest_points, lowest_points_cash, cash_copay,
lowest_cash, cpp and certs per hotel; chains without award points return empty rows at 0 credit.