Hotel Price API: Every Booking Site in One Call

A made hotel bed between two lit bedside lamps in a dark room, tinted teal

A hotel price API returns what each booking site charges for the same stay. You send a place and dates. You get hotels, and for each hotel, the price at every site that sells it. Then you show the cheapest, compare two sites, or keep only the one your users trust.

This page shows that job on Ktemia’s hotel API, which is live at https://api.ktemia.com. Every number below is from a real search we ran on 10 November 2026: London, 5–7 December 2026, two adults, US market, so prices are in USD. The full contract, in seven languages with a playground, is the hotel API reference.

Key Takeaways

  • One London hotel search returned prices from 11 booking sites, from Booking.com (2,778 hotels) to Trip.com (178).
  • Send providers: ["Hotels.com"], or any other site id, and every price comes from that site only.
  • The same five-star hotel came back at nine prices from eight sellers: $749 to $1,041 for the same two nights.
  • Booking.com, Expedia, and Agoda each run their own API, and all three need partner approval. We found no public Hotels.com API.
  • Free plan: 100 API requests a month. A search plus page 1 is two.

What does a hotel price API return?

Three things, in three calls. POST /hotels/search takes a location id and dates and returns a searchToken. GET /hotels/results reads a page of hotels; each one has bestOption, the cheapest seller on the before-tax price. GET /hotels/details expands one hotel into every seller’s price, total with taxes, and booking URL.

The location id comes first. GET /hotels/locations turns “London” into 29230. A name on the search itself is rejected.

The results page of the unfiltered London search lists, in availableFilters.bookingSites, every site selling stays in this search and how many hotels each one prices:

Booking site Hotels priced (London, 5–7 Dec)
Booking.com 2,778
Agoda.com 1,516
Priceline 1,116
Hotels.com 1,110
Expedia 1,108
Super.com 577
Trip.com 178
Homestay.com 55
HomeToGo 38

Pricetravel and Preferred Hotels also appeared, with fewer than 10 hotels each. Vrbo is in the list too (1,304 properties), but it has not returned prices in our tests, so it is left out here. The provider list has every booking site we have seen across 10 cities, with the id to send.

The same hotel, nine prices

Here is one hotel from that search: Threadneedles, Autograph Collection, a five-star hotel. GET /hotels/details returned nine offers from eight sellers for the same two nights:

Seller Before tax Total with taxes
Marriott Bonvoy $749 $749 (member rate)
Priceline $749 $899
Marriott Bonvoy $749 $899
Expedia $751 $901
Hotels.com $751 $901
Booking.com $756 $899
Agoda.com $756 $899
Trip.com $756 $898
Super.com $881 $1,041

Two things stand out. First, sorting by the before-tax price and sorting by the total give different winners: Priceline ties for cheapest before tax, but Trip.com has the lowest total among the sites any guest can book. Rank on totalPrice when you show a person what they will pay. Second, the hotel’s own site appears twice: once with a member-only rate (rateType: "memberOnly", and no booking URL resolved) and once with the public rate. A member rate is real, but not every guest can book it, so label it.

How do you get prices from one booking site?

Send providers on the search, with one or more ids from availableFilters.bookingSites. Up to 10. Every hotel in the results is then priced by those sites only, and bestOption is the cheapest among them. We ran the same London weekend once per site. Each search returned 27 hotels on page 1, and every price came from the site we asked for.

Booking.com prices

providers: ["Booking.com"]. The cheapest stay on page 1 was the Holiday Inn London - Heathrow M4, jct.4: $176 before tax, $212 total. Booking.com prices the most London hotels of any site in this search, 2,778. Booking.com’s own API is the Demand API, for Managed Affiliate Partners; the line between that and a search is in Booking.com API.

Expedia prices

providers: ["Expedia"]. Same Holiday Inn, cheapest on page 1: $197 before tax, $236 total. Expedia’s own API is Rapid, and the docs say “you need to be an Expedia partner”. What that gate means for a comparison product is in Expedia API alternative.

Hotels.com prices

providers: ["Hotels.com"]. Same Holiday Inn: $197 before tax, $236 total - identical to Expedia on this hotel. If you searched for a Hotels.com API: we found no public one. developer.hotels.com does not resolve, and the site publishes no developer docs (checked 10 November 2026). Filtering a search to Hotels.com is the way to get its prices through an API.

Agoda prices

providers: ["Agoda.com"]. The cheapest on page 1 was the Sheraton Heathrow Hotel: $198 before tax, $237 total. Agoda prices 1,516 London hotels here, second only to Booking.com. Agoda’s Demand API asks you to pick a partnership model and pass certification before going live; its affiliate model uses the Search API only.

Priceline prices

providers: ["Priceline"]. The Holiday Inn again: $176 before tax, $212 total - the same as Booking.com, and $24 less than Expedia and Hotels.com for the same room nights.

Trip.com prices

providers: ["Trip.com"]. Best Western Heathrow Ariel T2, 3, 4: $152 before tax, the lowest of the six on page 1. Trip.com did not return a total with taxes on this hotel, so totalPrice is null. Compare totals only where both sides have one.

Read across the six: one Holiday Inn came back at $212 on two sites and $236 on two others. A single-site integration would show a person one of those numbers and no way to know about the other.

Compare two sites on every hotel

Send both: providers: ["Booking.com", "Expedia"]. bestOption is then the cheaper of the two on each hotel, and GET /hotels/details lists only those two sellers, each with a price and a booking URL. On Montcalm East, Autograph Collection, Booking.com was $606 and Expedia $608 before tax, $727 and $730 with taxes. availableFilters.bookingSites still lists every site, so you can switch with a new search.

Code: search, read the sites, filter, compare

The whole flow in Python. It finds London, runs an open search, prints the sites in the results, then searches again with two of them and prints every seller on the first hotel.

import os
import requests

API = "https://api.ktemia.com"
HEADERS = {"X-API-Key": os.environ["KTEMIA_API_KEY"]}
STAY = {"checkin": "2026-12-05", "checkout": "2026-12-07", "adults": 2}

# 1. Turn a name into a location id.
places = requests.get(f"{API}/hotels/locations", headers=HEADERS, params={"query": "London"}).json()
location = places["locations"][0]["locationId"]

# 2. Open search: which booking sites sell stays here?
token = requests.post(f"{API}/hotels/search", headers=HEADERS, json={"location": location, **STAY}).json()["searchToken"]
page = requests.get(f"{API}/hotels/results", headers=HEADERS, params={"token": token}).json()
for site in page["availableFilters"]["bookingSites"]["options"]:
    print(site["id"], site["count"])

# 3. Search again, priced by two sites only.
token = requests.post(
    f"{API}/hotels/search",
    headers=HEADERS,
    json={"location": location, **STAY, "providers": ["Booking.com", "Expedia"]},
).json()["searchToken"]
page = requests.get(f"{API}/hotels/results", headers=HEADERS, params={"token": token}).json()
hotel = page["hotels"][0]
print(hotel["name"], hotel["bestOption"]["provider"], hotel["bestOption"]["price"]["formatted"])

# 4. Every seller for that hotel, with a booking link.
details = requests.get(
    f"{API}/hotels/details", headers=HEADERS, params={"token": token, "resultId": hotel["id"]}
).json()
for option in details["bookingOptions"]:
    total = (option.get("totalPrice") or {}).get("formatted")
    print(option["provider"], option["price"]["formatted"], total, option["providerUrl"])

The filtered search in JavaScript, for Node 18 or later:

const API = "https://api.ktemia.com";
const headers = { "X-API-Key": process.env.KTEMIA_API_KEY, "Content-Type": "application/json" };

const search = await fetch(`${API}/hotels/search`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    location: "29230", // London, from /hotels/locations
    checkin: "2026-12-05",
    checkout: "2026-12-07",
    adults: 2,
    providers: ["Hotels.com"],
  }),
}).then((res) => res.json());

const page = await fetch(`${API}/hotels/results?token=${encodeURIComponent(search.searchToken)}`, { headers }).then(
  (res) => res.json(),
);
for (const hotel of page.hotels) {
  console.log(hotel.name, hotel.bestOption.provider, hotel.bestOption.price.formatted);
}

Send the key as X-API-Key from a server, never from browser JavaScript. Use future dates: a check-in before today returns 400. cURL, Go, Java, Ruby, and PHP versions of every call are in the API reference, and Providers opens it with any site already filled in.

Use it from Claude Code, Codex, or Cursor

The hotel-search skill in Ktemiaa/ktemia-skills runs the same calls from a coding agent. Ask “hotels in London 5–7 December, only Booking.com prices” and it looks up the place, searches, reads the booking sites, and filters on a second search. It asks when a place or date is missing instead of guessing. In Claude Code:

/plugin marketplace add Ktemiaa/ktemia-skills
/plugin install ktemia@ktemia

Codex and Cursor install steps are in the repository README.

What the official hotel APIs require

Each large booking site has its own API, and each one is a partner program, not an open key. As of 10 November 2026:

API Access Scope
Booking.com Demand API “Register as a Booking.com Managed Affiliate Partner”, then a key and an affiliate id Search and book
Expedia Rapid API “You need to be an Expedia partner”; production after a site review Search and book
Agoda Demand API Pick a partnership model; certification before going live Search; book on fulfillment models
Hotels.com No public developer API found -

We could not load Priceline’s partner pages; they block automated access, so check them in a browser. Trip.com runs an affiliate program at trip.com/partners.

Those APIs are the right call when you want to sell rooms and take payment. When the job is to compare what every site charges and send the guest to book, one search across all of them is less work than four partner integrations. That is the distinction Ktemia draws: search and compare, not reservation. A search is not a booking; that is in the terms.

What does a free hotel API include?

The pricing page lists Free at $0 with 100 API requests a month. Pro is $29.99 for 20,000 requests at 20 per second. Business is $299 for 250,000 at 250 per second. The monthly pool is shared across flights, hotels, and cars. A hotel search plus page 1 is two requests; a filtered second search is two more; details is one.

Hotels are one of three verticals on the same key. For how the rest fits - flights, cars, and what each API returns - see best travel API and the hotels use case.

FAQ

Is there a Hotels.com API?

We found no public Hotels.com developer API. developer.hotels.com does not resolve, and hotels.com publishes no developer docs (checked 10 November 2026). Hotels.com prices do appear in a Ktemia hotel search; send providers: ["Hotels.com"] to keep only them.

Is there a free hotel price API?

Ktemia's Free plan includes 100 API requests a month, shared across flights, hotels, and cars. A hotel search costs two requests for page 1: one to start the search, one to read the results. Booking.com, Expedia, and Agoda APIs need partner approval first.

Can I get prices from only one booking site?

Yes. Send providers with the site's id, for example ["Booking.com"] or ["Agoda.com"]. Every hotel in the results is then priced by that site only. The ids come from availableFilters.bookingSites on a previous results page. Up to 10 at once.

Does a hotel price API book the room?

Not this one. Ktemia returns prices and a booking link for each seller. The traveller books on that seller's site. Booking.com Demand API, Expedia Rapid, and Agoda's fulfillment models can book, after partner approval.

Why does the same hotel cost different amounts on different sites?

Each site sets its own rate, fees, and member deals. On one London hotel we captured nine offers from eight sellers: totals from $749 to $1,041 for the same two nights. A hotel price API is how you see that spread without opening nine tabs.

Stop switching tabs to find a better deal.

One search. Flights, hotels, cars, and real estate - compared instantly.