Skip to content

Errors ​

Every error response is JSON with a stable error code and a human-readable message:

json
{ "error": "HOLD_EXPIRED", "message": "Hold has expired", "request_id": "…" }

Branch on the HTTP status and the error code together: some codes come with more than one status (for example UNAUTHORIZED is 401 for a bad key and 403 for another partner's booking). Do not parse message; it can change. VALIDATION_ERROR responses also carry details, a list of { field, message, in }.

These are the codes a partner can receive. A code not listed here is not part of the contract; treat it by its HTTP status.

HTTPerrorMeaning
400IDEMPOTENCY_KEY_REQUIREDA cancel or refund (or partner hold cancel) was sent without idempotency_key.
400INVALID_WEBHOOK_ENDPOINTThe webhook endpoint_url is not https, or its host does not resolve to a public address.
400, 409SLOT_NOT_AVAILABLE409: the slot is held or booked, or overlaps one. 400: the window is not bookable at all (off the slot grid, outside opening hours, a resource the venue does not have); details.reason says why.
400VALIDATION_ERRORThe request failed validation. details lists each field, the problem and where it was (body, query, params).
401, 403UNAUTHORIZED401: the key is missing, unknown, revoked or expired. 403: the key is valid but the hold or booking belongs to another partner.
403VENUE_NOT_AUTHORIZEDThe key is valid and owns the hold or booking, but its venue is not (or no longer) granted to you.
404BOOKING_NOT_FOUNDNo booking with this id is visible to you (including another partner's booking).
404HOLD_NOT_FOUNDNo hold with this id is visible to you.
404VENUE_NOT_FOUNDThe venue does not exist or is not granted to you. The two cases are deliberately the same answer.
404WEBHOOK_NOT_FOUNDNo webhook subscription with this id belongs to you.
409HOLD_EXPIREDThe hold passed hold_expiry_at. It cannot be confirmed; place a new hold.
409IDEMPOTENCY_KEY_MISMATCHThis idempotency key was already used for a different request (another hold or booking, another operation, or different hold parameters).
409INVALID_HOLD_STATEThe hold or booking is not in a state that allows this operation (for example confirming a cancelled hold).
409PACKAGE_CREDIT_UNAVAILABLEA credit-funded confirm found no active package you sold to this customer at this venue. Nothing was booked or deducted; the hold stays active.
409TRANSFORMATION_CONFLICTA shared or combined court conflicts with this window (for example the full pitch is booked while you hold a half).
409VENUE_NOT_ACTIVEThe venue is paused or archived and takes no new holds.
409WAITLIST_ENTRY_CONFLICTThe customer is already waiting for this venue, resource and date through another channel. Nothing was created or changed.
429RATE_LIMIT_EXCEEDEDThe key exceeded its rate limit. Wait Retry-After seconds.
500INTERNAL_ERRORAn unexpected server error.

Which operation returns which status is in the OpenAPI reference.

Start in the sandbox. Production access is granted after certification. Access requests and integration support: [email protected]