Live hotel rates — from whichever market you ask as.
Real-time Booking.com pricing over REST, with one field most hotel APIs do not have: proxy_country. Price the same room as a buyer in Germany, Brazil or Japan and you can see rate parity instead of assuming it.
POST https://api.flightpowers.com/v1/hotels/search
x-api-key: <your RapidAPI key>
content-type: application/json
{
"destination": "Paris",
"checkin_date": "2026-09-22",
"checkout_date": "2026-09-25",
"adults": 2,
"filters": ["free_cancellation", "stars_4"],
"proxy_country": "de"
}The field that does the work
proxy_country turns one price into a comparison.
Hotel rates are not one number. The same room on the same night is quoted differently depending on the market a shopper appears to be in — that is the whole reason rate-parity monitoring exists. Every hotels endpoint takes an optional proxy_country and routes that request through a residential proxy exiting there.
# The same property and dates, priced from several markets.
# Each country is one request.
for country in ["us", "gb", "de", "br", "jp"]:
r = requests.post(
"https://api.flightpowers.com/v1/hotels/by-name",
headers={"x-api-key": KEY}, # server-side only
json={
"hotel_name": "Hotel Example Paris",
"checkin_date": "2026-09-22",
"checkout_date": "2026-09-25",
"proxy_country": country,
},
timeout=180,
)
print(country, r.json())This is what makes three otherwise-hard jobs into ordinary API calls: rate-parity monitoring for a hotel or chain, geo-pricing analysis for an OTA, and market-by-market competitive pricing for a revenue manager.
Each market is one request, so a five-market check on one property costs five requests from your quota. Omit the field and the request uses a global rotating pool.
Worth knowing
The value is passed through to the proxy provider rather than checked against a fixed list of supported countries. Test the specific markets you plan to monitor before you build a report on them.
Endpoints
Four ways in
POST /v1/hotels/searchSearch a destination over a date range. Requires destination, checkin_date, checkout_date. Returns up to 50 properties, unpaginated.
POST /v1/hotels/by-namePrice one named property. Requires hotel_name and the two dates. This is the endpoint a parity check calls.
POST /v1/hotels/roomsRoom-by-room breakdown for a known property, including meal plan and per-rate occupancy. Requires hotel_booking_id and the two dates.
POST /v1/hotels/resolveResolve a hotel name to a property identifier.
POST /v1/hotels/search
Request and response
Required
destinationstringCity or area. The field is destination, not location.
checkin_date / checkout_datestringYYYY-MM-DD.
Optional
adultsintDefaults to 2.
childrenintDefaults to 0.
currencystringDefaults to USD.
budget_per_nightnumberPer-night ceiling. Note the unit: price in the response is the stay total.
filtersstring[]Any of the 24 values below. An unrecognised value returns a 400 listing all of them.
proxy_countrystringCountry to price from.
{
"destination": "Paris",
"checkin_date": "2026-09-22",
"checkout_date": "2026-09-25",
"applied_filters": ["free_cancellation", "stars_4"],
"budget_per_night": null,
"properties": [
{
"name": "Hotel Example",
"price_string": "US$742",
"price": 742,
"review_score": 8.4,
"review_count": 701,
"room_type": "Superior Double Room",
"location": "8th arr.",
"image_url": "https://cf.bstatic.com/...",
"link": "https://www.booking.com/hotel/fr/example.html",
"nights": 3,
"adults": 2,
"children": 0
}
]
}filters
24 search filters, matching Booking’s own facets.
Pass them as an array on any search. Anything outside this list is rejected with a 400 that names the valid values.
- free_cancellation
- breakfast_included
- breakfast_and_lunch
- breakfast_and_dinner
- all_meals_included
- all_inclusive
- free_wifi
- swimming_pool
- gym
- review_score_7
- review_score_8
- review_score_9
- private_bathroom
- air_conditioning
- parking
- front_desk_24h
- stars_3
- stars_4
- stars_5
- pets_allowed
- adults_only
- sauna
- very_good_breakfast
- accepts_online_payment
Pricing
Plans on RapidAPI
| Plan | Per month | Requests | Rate limit | Beyond quota |
|---|---|---|---|---|
| Basic | $0 | 10 / month | — | hard stop |
| Pro | $10 | 2,000 / month | 25 / minute | $0.006 per extra request |
| Ultra | $20 | 6,500 / month | 25 / minute | $0.003 per extra request |
| Mega | $50 | 25,000 / month | 50 / minute | $0.002 per extra request |
Read from the live RapidAPI listing on 2026-08-25. RapidAPI bills; one call to any endpoint counts as one request. Check the listing for the current figures before you commit.
Hotels API questions
- What does proxy_country actually change?
- It routes that one request through a residential proxy exiting in the country you name, so the rates returned are the rates a resident of that market is shown. Omit it and the request goes through a global rotating pool. It is accepted on every hotels endpoint. The value is a country code passed through to the proxy provider; it is not validated against a fixed list, so test the markets you care about before relying on them in production.
- How do I build a rate-parity check?
- Call /v1/hotels/by-name once per market with the same hotel_name and the same date range, varying only proxy_country, and compare the prices. Each market is one billed request. That is the whole mechanism — the difficulty in rate parity is getting a truthful price from each market, which is what the proxy is for.
- The field is destination, not location?
- Yes. /v1/hotels/search requires destination, checkin_date and checkout_date. Sending location instead returns a 400 naming the three fields it needs. Confusingly, location does appear in the response, as the neighbourhood of each property.
- Is price per night or for the stay?
- On /v1/hotels/search, price is the total for the whole stay and nights tells you how many nights that covers — divide if you want a nightly rate. The optional budget_per_night filter, by contrast, is per night. Two different units in one response, so read the field names carefully.
- How many properties come back?
- Up to 50 per search, and there is no pagination. Narrow with filters and budget_per_night rather than expecting to page through a destination.
- What happens when nothing matches?
- A search with no matching properties returns 404 with a message, not an empty list. Handle 404 as a normal outcome rather than as an error condition.