Read a listing’s availability calendar
Which nights one listing is open, closed or booked — night by night, by id or URL. Every night carries `available`, `bookable`, `availableForCheckin`, `availableForCheckout`, and the `minNights`/`maxNights` the host enforces for a stay starting on it, so you get not only which nights are free but how long a stay has to be to take them. Up to a year in one call: `months` goes to 12 — the source's own ceiling per request, and `months: 13` is a 400 saying so — with `-1` meaning that maximum. `from` is any date inside the first month you want and the range snaps to that whole month, so `from: "2027-03-15"` starts the calendar at `2027-03-01`. **The booking-window edge — read this before reading a run of closed nights as a closure.** Every response carries this note verbatim: `"Dates beyond the host's own booking window come back marked unavailable rather than omitted — a long unbroken run of closed nights near the end of this window usually means the window, not a closure."` The source answers every night you ask for. A host who has opened the next four months for booking still returns nights five through twelve when you ask for twelve — marked `available: false`, exactly like a night someone has booked. So a long unbroken run of closed nights at the **far end** of your range is the edge of what the host has opened, not a fully booked property: the calendar simply stops there, and the response fills the rest in rather than truncating. Scattered closed nights in the middle of an otherwise open range are real closures; a solid block running to `endDate` is the window. **A closed night that still allows checkout is the far end of a booked stay.** `available: false` with `availableForCheckout: true` and `availableForCheckin: false` is the last night of somebody else's booking: you cannot start a stay on it, but a stay could end on it. That pairing is how you find where a booking ends — walk the nights and every place `availableForCheckout` flips true inside a closed run marks a departure. Measured: 19 such nights in a 365-night pull on listing `33579922`. **No per-night pricing here.** This route answers which nights are open and how long a stay has to be; it does not price them. For a priced stay, call [`/listing-detail`](/documentation/airbnb/endpoints/listing-detail) with `checkIn` and `checkOut`. Billing: 1 credit per page fetched, reported as `pagesFetched` — and a year of calendar is one page, not twelve. Measured on 17 September 2026: `{"listing":"33579922"}` returned 200 in 0.36s with `pagesFetched: 1` and 91 nights across the three default months; the same listing with `months: -1` returned 365 nights, still `pagesFetched: 1`. An id that names no listing is a 404 with a message, exactly as on /listing-detail.
/listing-availability Availability https://api.fetchlayer.dev/airbnb/listing-availability Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
listing string required A listing: its `airbnb.com/rooms/…` URL, or its numeric id. The only required field.
from string optional The first month to read, given as **any date within it**, YYYY-MM-DD — the range snaps to that whole month, so `2027-03-15` and `2027-03-01` both start the calendar on 1 March 2027. Defaults to the current month. (default: the current month)
months integer optional How many months of calendar to return, up to 12 — that ceiling is the source's own limit per request, not ours, and asking for 13 is a 400 reading "months: Must be -1 (the maximum) or between 1 and 12". Pass -1 for the maximum. (default: 3)
format string optional Envelope format: json or markdown. (default: json)
Response Fields
listing-availability
Read a listing’s availability calendar
transport string The source. "airbnb".
notes string[] Caveats and completeness statements you can act on, in plain words. On /listing-reviews this is where the "10 of the 52" line lives; on the priced routes it is where the stay window used for pricing is stated; on /listing-availability it is where the booking-window warning lives — read it before reading a run of closed nights as a closure.
pagesFetched number Pages read, and what the request is billed at: 1 credit per page. A page costs the same whether it comes back full or half empty. /resolve-url reports 0 and is free.
listingId string The listing the calendar belongs to, echoed back — useful when you passed a URL.
startDate string The first night in the range, YYYY-MM-DD. The first of the month `from` falls in, or of the current month when you gave none.
endDate string The last night in the range. **Where a run of closed nights ends here, read the booking window before reading a closure** — see the note the response carries.
nights[].date string The night, YYYY-MM-DD. One entry per night, none skipped: 91 entries for the three default months, 365 for `months: -1`.
nights[].available boolean Whether the night is open. `false` covers both a night somebody has booked and a night beyond what the host has opened for booking — the two are not distinguished here, which is exactly why the booking-window note matters.
nights[].bookable boolean Whether the night can actually be booked. Can be `null` where the source published no answer — measured `null` on nights in the current month that have already passed.
nights[].availableForCheckin boolean Whether a stay may **start** on this night. An open night with this `false` sits inside a gap too short for the host's minimum stay.
nights[].availableForCheckout boolean **Whether a stay may end on this night — and the field that finds the end of a booking.** `true` on a night that is `available: false` and `availableForCheckin: false` is the far end of somebody else's stay: you could check out on it, you could not check in. Measured on 2026-10-13 of the example response below.
nights[].minNights number The shortest stay the host allows starting on this night. It varies night to night — 1 on some nights and 2 on others in a single measured calendar — so it is per night, not per listing.
nights[].maxNights number The longest stay allowed starting on this night. Often a very large number (1125 on the listing measured), which means "no real limit" rather than a considered cap.
Request
curl -X POST "https://api.fetchlayer.dev/airbnb/listing-availability" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"listing":"33579922"}'Response
{
"transport": "airbnb",
"notes": [
"Dates beyond the host's own booking window come back marked unavailable rather than omitted — a long unbroken run of closed nights near the end of this window usually means the window, not a closure."
],
"pagesFetched": 1,
"listingId": "33579922",
"startDate": "2026-09-01",
"endDate": "2026-11-30",
"nights": [
{
"date": "2026-10-10",
"available": false,
"bookable": false,
"availableForCheckin": false,
"availableForCheckout": false,
"minNights": 2,
"maxNights": 1125
},
{
"date": "2026-10-11",
"available": true,
"bookable": true,
"availableForCheckin": true,
"availableForCheckout": false,
"minNights": 2,
"maxNights": 1125
},
{
"date": "2026-10-12",
"available": true,
"bookable": true,
"availableForCheckin": false,
"availableForCheckout": true,
"minNights": 2,
"maxNights": 1125
},
{
"date": "2026-10-13",
"available": false,
"bookable": false,
"availableForCheckin": false,
"availableForCheckout": true,
"minNights": 2,
"maxNights": 1125
},
{
"date": "2026-10-14",
"available": false,
"bookable": false,
"availableForCheckin": false,
"availableForCheckout": false,
"minNights": 2,
"maxNights": 1125
},
{
"date": "2026-10-15",
"available": true,
"bookable": true,
"availableForCheckin": true,
"availableForCheckout": false,
"minNights": 2,
"maxNights": 1125
}
]
}