image

Search tells you a hotel exists. Details prices one stay. Availability is the calendar around a start date: which dates in the window can be booked, the displayed nightly price, and the minimum stay. You already have a hotel_id. You pick the first date you care about and how many days to read.

👉 To access this endpoint, you must obtain an API key: https://steadyapi.com/register


Authentication

Every call uses a Bearer token from your SteadyAPI dashboard.

Documentation:
https://docs.steadyapi.com/#authenticating-requests

headers = {
  'Authorization': 'Bearer YOUR_API_KEY'
}

Where this fits

Get hotel_id from GET /v1/booking/hotels/search-by-coordinates or from GET /v1/booking/hotels/details. This calendar does not replace details. After you find dates where available is true, send that check-in and check-out to details for the stay total, or to GET /v1/booking/hotels/rooms for room names. Reviews are a different call.


Calendar for one hotel

Endpoint: GET /v1/booking/hotels/availability

Documentation:
https://docs.steadyapi.com/#bookingcom-GETapi-v1-booking-hotels-availability

Parameters

  • hotel_id — required property id
  • start_date — required start date, YYYY-MM-DD
  • days — optional length of the window, default 28, max 90
  • language — optional, default en-us
  • adults — optional, default 2
  • rooms — optional, default 1, max 10
  • children — optional count, default 0
  • children_ages — optional comma-separated ages. When you send ages, the count must match children.
  • travel_purpose — optional integer, 1 or 2, default 2

start_date and days set the window. The default window is 28 days and the longest is 90. adults, rooms, and children change which price is displayed. travel_purpose is only 1 or 2. It is not a word. The rooms endpoint uses a different parameter, travel_reason, with the values LEISURE and BUSINESS. Do not send those words here.

Python

import requests
from datetime import date, timedelta

url = "https://api.steadyapi.com/v1/booking/hotels/availability"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {
    "hotel_id": hotel["hotel_id"],
    "start_date": (date.today() + timedelta(days=14)).isoformat(),
    "days": 14,
    "adults": 2,
    "rooms": 1,
}

response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
payload = response.json()
body = payload.get("body", {})
print(payload.get("meta", {}).get("has_availability"))
print(body.get("summary"))

for day in body.get("calendar", [])[:7]:
    print(day.get("date"), day.get("available"), day.get("price_formatted"), day.get("min_stay"))

Annotated sample

{
  "date": "2026-01-01",
  "available": true,
  "checkin": "2026-02-10",
  "price_formatted": "$74",
  "min_stay": 1,
  "is_past_date": true
}

Store date, available, price_formatted, and min_stay. A date with available false is closed for that party. min_stay is the minimum number of nights. is_past_date marks days that are already behind you when the window starts in the past. body.summary has total_days, available_days, and available_percentage for the window. meta.has_availability is the yes-or-no for the whole window. meta.period echoes start_date, the end, and days_requested.


Practical use

start_date is required. There is no default day. days above 90 is rejected. A window that begins in the past still returns those days, with is_past_date set, so drop them before you offer a stay.

When children is greater than 0 and you also send children_ages, the number of ages has to equal children. A mismatch is a 422. Omitting children_ages is allowed. The check runs only when ages are present.

The nightly string on the calendar is not the stay total. Take a date where available is true and min_stay fits the trip, then call hotel details with that check-in and check-out for price_info.display_price.amount_per_stay.

👉 Get your API key and check a calendar: https://steadyapi.com/register

How to Read TikTok Video Comments Using SteadyAPI Oct 05, 2026

How to Read TikTok Video Comments Using SteadyAPI

Read TikTok comments 20 at a time. Video 7106594312292453675 has 1269 comments. The next cursor is the string 20.

How to List MLB Teams Using SteadyAPI Oct 13, 2026

How to List MLB Teams Using SteadyAPI

List MLB clubs and store the numeric id. The roster call takes that id as teamIds.

How to Get an NHL Roster Using SteadyAPI Oct 12, 2026

How to Get an NHL Roster Using SteadyAPI

Load forwards, defensemen, and goalies for one NHL abbreviation. Player names are objects with a default field.

How to Get an AliExpress Description Using SteadyAPI Oct 12, 2026

How to Get an AliExpress Description Using SteadyAPI

Turn a product-detail description token into ordered text modules. The product id alone is not enough.