Aller au contenu

Availability for one month

GET
/v1/availability/months
curl --request GET \
--url 'https://api.useservice.app/v1/availability/months?month=example' \
--header 'Authorization: Bearer <token>'

Which days are worth opening, for every party size at once — the calendar grain. Deliberately filter-independent: no party size, no section. A projection of what was sellable at read time, not a promise. Requires the reservations:read scope.

month
required
string

YYYY-MM

excluding
string

Answer as if this hold or booking did not exist (hold_… or resv_…), same accepted ids and same refusals as on GET /v1/availability.

The calendar grain is coarser and party-size-agnostic, so one hold flips a day only when it took the last table that fits some party size across the whole service — which for a small dining room is an ordinary Saturday. Pass it, or your own hold can grey out the very day the guest is holding.

locale
string

Language for the restaurant-authored text in this response — the per-day day_message and closure. Same accepted set and same refusal as on GET /v1/availability.

Service-Version
string

Pin this request to a dated version of the contract, e.g. 2026-09-01. Omit it and the version pinned on the API key applies. A version we do not publish is a 400 bad_request with param: "Service-Version". The version that was applied comes back on the Service-Version response header, always.

Month availability returned

Media typeapplication/json

Calendar-grain availability for one month, for every party size at once. A projection, not a promise.

object
object
required

The object type: always availability_month.

string
Allowed values: availability_month
month
required

YYYY-MM.

string
days
required

Every day of the month, in order — never a sparse list.

Array<object>
object
object
required

The object type: always availability_day.

string
Allowed values: availability_day
service_date
required

The day, YYYY-MM-DD in the restaurant’s timezone.

string format: date
past
required

Already gone, allowing for an overnight service still seating.

boolean
outside_window
required

Beyond how far ahead this restaurant takes bookings.

boolean
closed
required

A closure covers this date.

boolean
closure_message
required

The closure’s message to guests, in the restaurant’s own words, when closed is true. null when the day is not closed or the restaurant wrote no message.

string
nullable
no_shifts
required

No service runs — closed, not sold out.

boolean
message_only
required

No service runs, but staff left a note to read. Open the day; do not offer times.

boolean
display_only
required

Only a display-only service remains. Selectable, but it takes no online booking.

boolean
reservation_closed
required

Every service is past its booking cutoff or simply over. Not the same as sold out.

boolean
party_sizes
required

Party sizes that could be seated somewhere on this day. EMPTY with every flag false means fully booked.

Array<integer>
sections
required

Per-seating-area breakdown; empty when the restaurant offers no seating choice online.

Array<object>
object
object
required

The object type: always availability_section.

string
Allowed values: availability_section
id
required

The seating area, as its group_id from GET /v1/sections (sec_…). It can differ from the sec_… on a reservation’s table, which names one floor plan’s row.

string
party_sizes
required

Party sizes that could be seated in this area on this day. [] when none.

Array<integer>
waitlist_party_sizes
required

Party sizes that may join the queue for this day. Independent of whether any slot survives. Always empty while the booking widget is switched off.

Array<integer>
Example
{
"object": "availability_month",
"days": [
{
"object": "availability_day",
"sections": [
{
"object": "availability_section"
}
]
}
]
}
Service-Version
string

Dated API version applied to this response

ETag
string

Pass back as If-None-Match to revalidate cheaply

Invalid month

Media typeapplication/json

The envelope every public-API error answers with, whatever the status.

object
error
required

Every error response carries this one object.

object
type
required

The broad class of the error, from the HTTP status.

  • invalid_request_error: a 400, 403, 404, 409 or 422 — something about the request to change.
  • authentication_error: a 401 — the key is missing, invalid, revoked or expired.
  • rate_limit_error: a 429 — slow down and retry.
  • api_error: any other status, a fault on our side.
string
Allowed values: invalid_request_error authentication_error rate_limit_error api_error
code
required

The specific error, stable and machine-readable, e.g. not_found. Branch on this, not on message.

string
message
required

A human-readable explanation for the developer. Its wording can change.

string
param

The request parameter the error is about, when there is one — e.g. expand or limit. Absent — not null — when the error names no field.

string
doc_url
required

A link to this code in the errors reference. Always present.

string
Example
{
"error": {
"type": "invalid_request_error"
}
}

Missing or invalid API key

Media typeapplication/json

The envelope every public-API error answers with, whatever the status.

object
error
required

Every error response carries this one object.

object
type
required

The broad class of the error, from the HTTP status.

  • invalid_request_error: a 400, 403, 404, 409 or 422 — something about the request to change.
  • authentication_error: a 401 — the key is missing, invalid, revoked or expired.
  • rate_limit_error: a 429 — slow down and retry.
  • api_error: any other status, a fault on our side.
string
Allowed values: invalid_request_error authentication_error rate_limit_error api_error
code
required

The specific error, stable and machine-readable, e.g. not_found. Branch on this, not on message.

string
message
required

A human-readable explanation for the developer. Its wording can change.

string
param

The request parameter the error is about, when there is one — e.g. expand or limit. Absent — not null — when the error names no field.

string
doc_url
required

A link to this code in the errors reference. Always present.

string
Example
{
"error": {
"type": "invalid_request_error"
}
}

The API key does not carry the reservations:read scope

Media typeapplication/json

The envelope every public-API error answers with, whatever the status.

object
error
required

Every error response carries this one object.

object
type
required

The broad class of the error, from the HTTP status.

  • invalid_request_error: a 400, 403, 404, 409 or 422 — something about the request to change.
  • authentication_error: a 401 — the key is missing, invalid, revoked or expired.
  • rate_limit_error: a 429 — slow down and retry.
  • api_error: any other status, a fault on our side.
string
Allowed values: invalid_request_error authentication_error rate_limit_error api_error
code
required

The specific error, stable and machine-readable, e.g. not_found. Branch on this, not on message.

string
message
required

A human-readable explanation for the developer. Its wording can change.

string
param

The request parameter the error is about, when there is one — e.g. expand or limit. Absent — not null — when the error names no field.

string
doc_url
required

A link to this code in the errors reference. Always present.

string
Example
{
"error": {
"type": "invalid_request_error"
}
}
X-Request-Id
string

Unique id for this request. Quote it to support: it is how a specific call is found in our logs. Generated per request, or echoed from the X-Request-Id you sent.

Too many requests on the read budget

Media typeapplication/json

The envelope every public-API error answers with, whatever the status.

object
error
required

Every error response carries this one object.

object
type
required

The broad class of the error, from the HTTP status.

  • invalid_request_error: a 400, 403, 404, 409 or 422 — something about the request to change.
  • authentication_error: a 401 — the key is missing, invalid, revoked or expired.
  • rate_limit_error: a 429 — slow down and retry.
  • api_error: any other status, a fault on our side.
string
Allowed values: invalid_request_error authentication_error rate_limit_error api_error
code
required

The specific error, stable and machine-readable, e.g. not_found. Branch on this, not on message.

string
message
required

A human-readable explanation for the developer. Its wording can change.

string
param

The request parameter the error is about, when there is one — e.g. expand or limit. Absent — not null — when the error names no field.

string
doc_url
required

A link to this code in the errors reference. Always present.

string
Example
{
"error": {
"type": "invalid_request_error"
}
}
RateLimit-Limit
integer

Requests permitted in the read burst

RateLimit-Remaining
integer

Requests remaining in the read burst

RateLimit-Reset
integer

Seconds until the read bucket refills

RateLimit-Resource
string

Which budget the numbers describe. read here.

Retry-After
integer

Seconds to wait before retrying

X-Request-Id
string

Unique id for this request. Quote it to support: it is how a specific call is found in our logs. Generated per request, or echoed from the X-Request-Id you sent.