This page will help you get started with the Rooms.aero API.
The Rooms.aero API exposes everything on rooms.aero as JSON: search an area and date range for hotels with award availability, scan every upcoming date for a loyalty program or a set of hotels, open one date to see every room type with its points and cash price and a booking link, browse the hotel directory, and list the alerts on your account. It covers Hilton Honors, World of Hyatt, IHG Rewards, Marriott Bonvoy, Choice Privileges, Wyndham Rewards and I Prefer Hotel Rewards.
The Rooms.aero API is available to Seats.aero Pro users for non-commercial purposes. Commercial use requires a written agreement; contact [email protected] with a company email address and detailed use case information.
Authorization
Send your credentials in the Partner-Authorization header on every request, exactly as you do for the Seats.aero partner API. Rooms.aero accepts the same two credentials: a Pro user's API key, or an OAuth access token from Login with Seats.aero.
Pro Users
Your Seats.aero API key works on both services. Generate or copy it from the API tab on your settings page and send it as-is, including its pro_ prefix. Changes to your key on Seats.aero take effect on Rooms.aero within about ten minutes.
OAuth Applications
If your application uses Login with Seats.aero, the access tokens it obtains work on Rooms.aero too. Send the token in the Partner-Authorization header with a Bearer prefix, for example Partner-Authorization: Bearer seats:ota:123, exactly as you would to the Seats.aero partner API. Tokens must carry the openid scope, which is the only scope Login with Seats.aero issues.
A token acts as the user who authorized it: it is subject to that user's Pro subscription and shares their Rooms.aero quota with their own API key and with every other application they have connected. Alerts listed with a token are that user's alerts. An expired or revoked token answers 401 with the error code bad_partner_token. When a token expires, refresh it as usual. If the user disconnects your application, its refresh token stops working too, so send them through the consent flow again.
Rooms.aero has its own quota of 1,000 API calls per UTC day. It is separate from your Seats.aero quota: calls here never count against Seats.aero, and calls there never count against Rooms.aero. Every response carries the current state of the quota:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Calls allowed per day (1000). |
X-RateLimit-Remaining | Calls left today. |
X-RateLimit-Reset | Seconds until the quota resets at midnight UTC. |
Once the quota is used up, requests answer 429 with the error code user_rate_limit_exceeded and a Retry-After header until the reset. The API is governed by the Seats.aero terms of use, which prohibit commercial use without written permission. Not all Pro users can access an API key; we may limit access by geographical location or for any reason in our sole discretion, and the API requires an active Pro subscription.
Content Types
The API works entirely in JSON. Every endpoint is a GET with query parameters, except Refresh Hotel, a POST with no body. Every list is wrapped in the same envelope, every error has the same shape, and hotels, availability, rooms and alerts are the same objects on every endpoint; see Concepts.
Your First Call
Find hotels with an award for any check-in date in a week of November in Tokyo, cheapest award first:
curl -G "https://rooms.aero/partnerapi/search" \
-H "Partner-Authorization: pro_YOUR_KEY" \
--data-urlencode "location=Tokyo" \
--data-urlencode "start_date=2026-11-20" \
--data-urlencode "end_date=2026-11-27" \
--data-urlencode "max_points=30000"Each result carries the hotel and its cheapest standard and suite rates. Take a hotel.id from the results into Get Availability to see every date for that hotel, then an availability id into Get Availability Details for the room types and a booking link. The program keys, brand codes and award categories you will see along the way are listed on the Concepts page.
