Skip to content

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.

search
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.

rate parity across five markets
# 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/search

Search a destination over a date range. Requires destination, checkin_date, checkout_date. Returns up to 50 properties, unpaginated.

POST /v1/hotels/by-name

Price one named property. Requires hotel_name and the two dates. This is the endpoint a parity check calls.

POST /v1/hotels/rooms

Room-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/resolve

Resolve a hotel name to a property identifier.

POST /v1/hotels/search

Request and response

Required

destinationstring

City or area. The field is destination, not location.

checkin_date / checkout_datestring

YYYY-MM-DD.

Optional

adultsint

Defaults to 2.

childrenint

Defaults to 0.

currencystring

Defaults to USD.

budget_per_nightnumber

Per-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_countrystring

Country to price from.

200 — response
{
  "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

PlanPer monthRequestsRate limitBeyond quota
Basic$010 / monthhard stop
Pro$102,000 / month25 / minute$0.006 per extra request
Ultra$206,500 / month25 / minute$0.003 per extra request
Mega$5025,000 / month50 / 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.