Skip to content

Errors

Problem details (RFC 9457) and every error code the API returns.

A request that fails answers with an HTTP status and a problem details body (RFC 9457), with the content type application/problem+json:

{
  "type": "about:blank",
  "title": "Conflict",
  "status": 409,
  "code": "booking.slot_taken",
  "detail": "The table is booked at that time.",
  "requestId": "3f2a9c01d4e5b6a7"
}
Field
statusThe HTTP status, repeated.
titleThe HTTP status text.
codeA stable, machine-readable code. Branch on this.
detailWhat went wrong, for people. It may change at any time, so don't parse it.
errorsFor validation failures: one entry per field, {location, message, value}, where location is like body.contact.phone.
requestIdThe same as the X-Request-ID header. Quote it when you contact us.

Codes are only ever added, never changed or reused. Treat a code you don't know by its HTTP status.

What to do with each status#

StatusMeaningWhat to do
400The request is malformed.Fix the request; don't retry as it is.
401No credential, or it is wrong, revoked, expired or for the other environment.Check the key; refresh an OAuth token.
403The credential is good but can't do this.See the code: a missing scope, the plan, Developer access.
404No such object, or the credential doesn't cover the venue.Don't retry.
409The request clashes with the current state.Read the object again, then decide.
413 / 415The body is too big, or isn't JSON.Fix the request.
422The request is well formed but its values are refused.See errors and the code.
429Too many requests.Wait Retry-After seconds.
5xxSomething failed on our side.Retry with backoff and the same Idempotency-Key.

Codes#

Authentication and access#

StatusCodeWhen
401auth.key_invalidThe key or token is missing, unknown, revoked or expired, or belongs to the other environment.
403auth.scope_missingThe credential lacks the scope the endpoint needs (detail names it).
403auth.plan_featureThe venue's plan doesn't include the feature this scope needs.
403auth.developer_access_offBoozie has turned the venue's Developer access off.
403auth.host_key_required/hosts/me… with a venue key that holds hosts:read but isn't bound to a host. (Org keys and OAuth tokens can't hold hosts:read, so they get auth.scope_missing.)
429rate_limitedOver the rate limit. See Retry-After.

Requests#

StatusCodeWhen
400 / 422invalid_requestThe body or a parameter fails validation: a missing or unknown field, a wrong type, a value out of range. See errors.
400cursor.invalidThe after cursor isn't one we gave you.
400idempotency.key_missingA POST without an Idempotency-Key (or one over 255 characters).
409idempotency.in_progressThe first request with this key is still running. Retry after Retry-After.
422idempotency.mismatchThis key was used with a different request.
404not_foundNo such object, or a venue the credential doesn't cover.
404route_not_foundNo such endpoint. Check the path against the reference.
409conflictA conflict without a more specific code.
500internalOur fault. Retry; if it keeps happening, contact us with the requestId.
503unavailableA part of the API isn't set up on this environment, such as GET /oauth/authorize without a consent page. Try later.

Bookings#

StatusCodeWhen
422validation.timestartsAt/endsAt are missing, the wrong way round or more than 24 hours apart.
422validation.paxThe number of guests is out of range (1–200) or doesn't suit the table.
422validation.tabletableId isn't one of the venue's tables.
422validation.dateA date that isn't a real day, has passed or is too far ahead.
422validation.customerSend either customerId or contact; or the customer isn't the venue's.
422validation.name / validation.phone / validation.emailThe contact's details are refused. Phones are E.164, such as +60123456789.
422 / 400booking.outside_hoursThe time isn't within one of the venue's sessions. Use availability.
409booking.venue_not_bookableThe venue doesn't take bookings now.
409booking.slot_takenThe table, or the customer, already has a booking at that time.
409booking.transition_not_allowedThe booking's status doesn't allow this, e.g. confirming a cancelled booking.
409booking.not_editableThe booking has started, or isn't pending or confirmed.
409booking.arrival_windowToo early or too late to mark the arrival.

Guest list#

StatusCodeWhen
409guestlist.not_runningThe venue doesn't run a guest list on Boozie.
409guestlist.closedThe list for that night is closed (past its cut-off, or not running that night).
409guestlist.fullThe list for that night is full.
409guestlist.already_listedThey're on the list for that night already.
422validation.guestThe guest's details are refused.

Webhooks#

StatusCodeWhen
400webhook.url_invalidThe URL isn't https:// with a public hostname. See the URL rules.
400webhook.events_invalidAn unknown event, or one whose read scope the credential lacks.
409webhook.too_manyThe venue has 10 endpoints already.
409webhook.endpoint_disabledThe endpoint is off; turn it on first.
409webhook.not_replayableThat delivery can't be replayed.
503webhook.not_configuredWebhooks aren't set up on this environment yet.

Sandbox#

StatusCodeWhen
404sandbox.unavailableThere is no sandbox on this environment. Boozie turns it on per environment, never on production.
422invalid_requestPOST /sandbox/keys without a real email address, or with a name over 60 characters.
429rate_limitedToo many key requests from this IP address (10 a day) or in all (200 a day). See Retry-After.
503sandbox.not_readyThe sandbox isn't set up on this environment yet. Try again later.

The OAuth token and revoke endpoints answer in RFC 6749's own format instead. See OAuth apps.

Next: Sandbox