Skip to content

Availability

GET /v1/availability answers one question: can this resource take this party, for this date range? It’s a pure read — it never creates or holds anything.

The window can be at most 92 nights. A longer window returns 400 validation_failed. If from is not before to, you get 400 invalid_window. An unknown resource returns 404 resource_not_found.

Terminal window
curl "https://api.<domain>/v1/availability?resource_id=<id>&from=2026-08-01T00:00:00Z&to=2026-08-04T00:00:00Z&party_size=2" \
-H "Authorization: Bearer sk_test_..."

The response is a boolean plus reasons:

{
"resourceId": "<id>",
"from": "2026-08-01T00:00:00Z",
"to": "2026-08-04T00:00:00Z",
"partySize": 2,
"available": false,
"reasons": ["min_stay", "closed_to_arrival"]
}
CodeMeaning
occupancy_exceededparty_size is over the resource’s capacity
reservedAnother hold or confirmed booking overlaps this window
external_blockBlocked by an external calendar (OTA). The channel manager is off today, so new blocks do not arrive.
min_stay / max_stayThe stay length breaks a rate plan’s night limits
closed_to_arrival / closed_to_departureThe rate plan doesn’t allow check-in or check-out that day
stop_sellThe operator has manually closed this date range
outside_opening_hoursHourly spaces: the space is closed, or the time does not fit in an open period
min_noticeHourly spaces: the time starts too soon
max_advanceHourly spaces: the date is too far ahead
buffer_conflictHourly spaces: the time is too close to another booking

Only GET /v1/resources/{id}/slots and a quote for an hourly space return the last four.

This same reason vocabulary reappears on POST /v1/quotes’s 409 unavailable response — see Quotes. The two surfaces share one source of truth, so a date that’s unavailable here is unavailable there too; you never need to reconcile two different reason lists.

Both sk_ and pk_ keys can call this endpoint.