Skip to content

Content

Properties

Hotels to list and show, and one hotel in full: its rooms, their pictures and, for a stay, their rates.

GET /api/v1/properties x-api-key
GET /api/v1/properties/{id} x-api-key

The 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

city
string optional
City name.
country
string optional
ISO-2 code or a country name.
name
string optional
Match on the hotel name.
limit
integer (≤100) default 20
How many hotels to take from each source, so a page can return more rows than this.
cursor
string optional
The nextCursor from 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.
Request
curl "https://api.gatewaystream.com/api/v1/properties?city=Harare&country=ZW&limit=20" \
  -H "x-api-key: gws_sandbox_YOUR_KEY"

Response

properties
object[] optional
The hotels found, all sources together.
nextCursor
string optional
Pass back as cursor for the next page. Absent once every source is exhausted.
meta.complete
boolean optional
false when 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

propertyId
uuid optional
The Gateway Stream id. This is what propertyIds on search takes, and it is stable within an environment.
name
string optional
The hotel’s name.
stars
number | null optional
Star rating, when there is one.
city
string | null optional
City.
country
string | null optional
Country name.
image
string | 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.

Request
curl https://api.gatewaystream.com/api/v1/properties/a9702286-9b22-498d-8bc9-97471f68d798 \
  -H "x-api-key: gws_sandbox_YOUR_KEY"

Response

…
property optional
Every field of the property object above.
rooms
object[] optional
The hotel’s room types. See below.
stay
object | null optional
The stay the rates are for — null when you did not ask for one.
fromPrice
{ amount, currency } | null optional
The cheapest rate across the rooms. null without a stay, or when nothing is offered for it.
meta.complete
boolean optional
false when a source did not answer in time, so rooms, pictures or rates may be missing.

Rooms and Their Pictures

Each room

roomCode
string optional
The room’s code. The same code a search result gives that room.
roomName
string | null optional
A human-readable room name.
images
string[] optional
Pictures of this room, best first, as URLs. Empty when none are available — which is common, and not an error.
rates
Rate[] optional
What the room costs for the requested stay, each with the rateKey that 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

checkIn
string (YYYY-MM-DD) optional
First night. Required together with nights or checkOut.
nights | checkOut
integer | string optional
How long the stay is: a number of nights (1–60), or the check-out date.
adults
integer (1–10) default 2
Adults in the room that is priced.
childAges
string optional
Comma-separated ages, each 0–17 — for example 4,9.
currency
string (ISO 4217) default "USD"
Currency to quote in.
nationality
string (ISO 3166-1 alpha-2) optional
The guests’ nationality, where it changes the price.
Request
curl "https://api.gatewaystream.com/api/v1/properties/a9702286-9b22-498d-8bc9-97471f68d798?checkIn=2026-12-05&nights=2&adults=2" \
  -H "x-api-key: gws_sandbox_YOUR_KEY"
  • 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. adults and childAges describe 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 limit above 100, an id that is not a uuid, a stay with checkIn but no nights or checkOut, 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 city with country. 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.