Hotel pages bury the practical questions under photos and room rates. Breakfast type, parking, and check-in rules are what a guest looks up before they commit, and they sit in a short FAQ on the property.
SteadyAPI returns that FAQ for one Booking.com hotel. The list is ordered, each answer is plain text, and the title names the property the questions belong to.
To access this endpoint, you must obtain an API key: Get your API key
The Endpoint
GET /v1/booking/hotels/faq loads the hotel details first, then requests the FAQ in the language you send. hotel_id is required. language defaults to en-us.
The sample uses hotel 2572691. meta.faq_title is “FAQs about La Quinta by Wyndham Oklahoma City Airport”, meta.total_questions is 8, and meta.has_faq is true. The first question asks what kind of breakfast is served. Its answer includes [ITEM_LIST]Continental;American;Buffet[/ITEM_LIST].
Method: GET
Endpoint: https://api.steadyapi.com/v1/booking/hotels/faq
Documentation: Booking hotel FAQ
Parameters
- hotel_id: The Booking.com hotel id, required and an integer. The sample is
2572691, the La Quinta by Wyndham Oklahoma City Airport property. This call reads hotel details for that id before it asks for the FAQ, andmeta.country_codeon the sample isus. - language: Optional language code, at most 10 characters. Leave it out and the request uses
en-us. That is the same code as English (US) on the languages endpoint. A currency code such asAUDis a currency, so it does not belong in this field.
Python Example
The script requests the sample hotel in the default language, prints the FAQ title and question count, and lists each question with its answer. Every call uses a Bearer token from your SteadyAPI dashboard. Authentication is covered in the request docs.
import requests
def get_hotel_faq(hotel_id, api_key, language="en-us"):
url = "https://api.steadyapi.com/v1/booking/hotels/faq"
headers = {"Authorization": f"Bearer {api_key}"}
params = {"hotel_id": hotel_id, "language": language}
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
payload = response.json()
if payload.get("success") is False:
print(payload.get("message"))
return
meta = payload.get("meta") or {}
print(meta.get("faq_title"))
print(f"Questions: {meta.get('total_questions')} (has_faq {meta.get('has_faq')})")
print()
for item in payload.get("body") or []:
print(f"{item.get('id')}. {item.get('question')}")
print(item.get("answer"))
print()
get_hotel_faq(2572691, "YOUR_API_KEY")
Understanding the Response
A hotel that has an FAQ returns meta and a body list. Each row is id, question, and answer. id is the position in that list, starting at 1. It is the order of the questions in this response. The sample’s first row is the breakfast question.
{
"hotel_id": "2572691",
"language": "en-us",
"country_code": "us",
"has_faq": true,
"faq_title": "FAQs about La Quinta by Wyndham Oklahoma City Airport",
"total_questions": 8,
"body": [
{
"id": 1,
"question": "What kind of breakfast is served at La Quinta by Wyndham Oklahoma City Airport?",
"answer": "Guests staying at La Quinta by Wyndham Oklahoma City Airport can enjoy a highly-rated breakfast during their stay (guest review score: 8.2).\n\nBreakfast option(s) include: [ITEM_LIST]Continental;American;Buffet[/ITEM_LIST]"
}
]
}
The sample file includes eight questions in meta.total_questions and shows this first row in full. When Booking has no FAQ block for the hotel, the response is still HTTP 200. meta.has_faq is false, and body is an object {"faq": []} rather than the question list.
Key Fields
- id: The position of the question, starting at 1. The breakfast question is
1. Keep the number with the question if you display them in order. - question and answer: The prompt and the reply. Breakfast options in this sample are wrapped as
[ITEM_LIST]Continental;American;Buffet[/ITEM_LIST]. Split that marker on semicolons when you want the three styles as a list: Continental, American, and Buffet. - faq_title and total_questions:
faq_titlenames the property, here “FAQs about La Quinta by Wyndham Oklahoma City Airport”.total_questionsis 8, the length of the question list whenhas_faqis true. - has_faq: True when the question list has rows. False, with HTTP 200, when the hotel has no FAQ. In that empty case
body.faqis an empty list. - language and country_code: The sample language is
en-usand the country code from the hotel details step isus. Hotel FAQ language usesen-us. The locations endpoint’s language default isus, which is a different code.
Practical Use Cases
Pulling breakfast options into a listing
Request hotel 2572691 and read question 1. The answer text contains [ITEM_LIST]Continental;American;Buffet[/ITEM_LIST]. Take the text between the tags and split on ; to show Continental, American, and Buffet next to the property name in faq_title.
Skipping hotels that have no FAQ
Call the same endpoint for another hotel_id. When has_faq is false the status is still 200 and body is {"faq": []}. Leave that hotel’s FAQ panel blank and continue. When has_faq is true, walk the body list from id 1 through total_questions.
Learn more or explore other endpoints: SteadyAPI Booking API