Content
Properties
Hotels to list and show, and one hotel in full: its rooms, their pictures and, for a stay, their rates.
/api/v1/properties x-api-key/api/v1/properties/{id} x-api-keyThe list finds hotels; the single-property call describes one. Both work on a Gateway Stream propertyId, and every hotel the list returns can be searched and booked straight
away — nothing has to be loaded first. To search a whole city rather than list its hotels, pick
it from Destinations and use Search.
List Properties
Query parameters
citystring optional- City name.
countrystring optional- ISO-2 code or a country name.
namestring optional- Match on the hotel name.
limitinteger (≤100) default 20- How many hotels to take from each source, so a page can return more rows than this.
cursorstring optional- The
nextCursorfrom the previous page, unchanged. It is opaque — it holds the position in every source at once, and a source that has run out is not asked again.
Response
propertiesobject[] optional- The hotels found, all sources together.
nextCursorstring optional- Pass back as
cursorfor the next page. Absent once every source is exhausted. meta.completeboolean optionalfalsewhen a source did not answer in time, so the page may be shorter than it should be. Try again, or carry on with what you have — see partial results.
The Property Object
propertyIduuid optional- The Gateway Stream id. This is what
propertyIdson search takes, and it is stable within an environment. namestring optional- The hotel’s name.
starsnumber | null optional- Star rating, when there is one.
citystring | null optional- City.
countrystring | null optional- Country name.
imagestring | null optional- A representative photo URL.
Get One Property
GET /properties/{id} takes a propertyId from the list. On its own
it returns the property and its rooms, each with its pictures.
Response
…property optional- Every field of the property object above.
roomsobject[] optional- The hotel’s room types. See below.
stayobject | null optional- The stay the rates are for —
nullwhen you did not ask for one. fromPrice{ amount, currency } | null optional- The cheapest rate across the rooms.
nullwithout a stay, or when nothing is offered for it. meta.completeboolean optionalfalsewhen a source did not answer in time, so rooms, pictures or rates may be missing.
Rooms and Their Pictures
Each room
roomCodestring optional- The room’s code. The same code a search result gives that room.
roomNamestring | null optional- A human-readable room name.
imagesstring[] optional- Pictures of this room, best first, as URLs. Empty when none are available — which is common, and not an error.
ratesRate[] optional- What the room costs for the requested stay, each with the
rateKeythat books it. Empty without a stay — and also for a room that is not offered for those dates.
Adding a Stay: Rooms, Pictures and Rates Together
Add the dates and the same call prices every room, so a hotel page needs one request rather than a property lookup plus a search.
Optional query parameters
checkInstring (YYYY-MM-DD) optional- First night. Required together with
nightsorcheckOut. nights | checkOutinteger | string optional- How long the stay is: a number of nights (1–60), or the check-out date.
adultsinteger (1–10) default 2- Adults in the room that is priced.
childAgesstring optional- Comma-separated ages, each 0–17 — for example
4,9. currencystring (ISO 4217) default "USD"- Currency to quote in.
nationalitystring (ISO 3166-1 alpha-2) optional- The guests’ nationality, where it changes the price.
- Rooms that can be booked come first, cheapest first. A room with no rates for
those dates follows, in its usual order, with
rates: []. - A priced room is never dropped for lack of a picture. If a rate has no
matching room content, the room is still listed, with
images: []. - One room is priced.
adultsandchildAgesdescribe a single room. For several rooms in one stay, use Search. - The rates are the same as search's — same fields, same
rateKey, and the key books exactly as one from a search does.
A rate has the same fields here as on a search result — see Objects and enums.
Status Codes
- 200
- On the list, the results — possibly empty, and possibly short a source that was slow: check
meta.complete. On one property, the property with its rooms. - 400
validation_error - A bad parameter: a
limitabove 100, an id that is not a uuid, a stay withcheckInbut nonightsorcheckOut, a check-out on or before check-in, or a child age above 17. - 401
unauthorized - Missing or invalid
x-api-key. - 404
not_found - No such property.
Practical Notes
- Take the id from a list or a search. There is no other way to name a hotel: ids from other systems are not accepted.
- Pair
citywithcountry. City names repeat across the world; the country settles which one you mean. - Expect duplicates. The same hotel reached more than one way can be listed
more than once, each with its own
propertyId. - Large lists page, they do not stream. Walk the cursor rather than asking for everything at once.