INVALID_JSON | 400 | The body is not JSON | {"error":"Request body must be valid JSON.","code":"INVALID_JSON","requestId":"req_000000000000000000000001"} |
VALIDATION_FAILED | 400 | A value fails its rule; field names it where one is named | {"error":"locationId must be a UUID.","code":"VALIDATION_FAILED","field":"locationId","requestId":"req_000000000000000000000002"} |
INVALID_START_TIME | 400 | startTime does not parse | {"error":"Booking start time is not a valid ISO date.","code":"INVALID_START_TIME","requestId":"req_000000000000000000000003"} |
PAST_START_TIME | 400 | startTime is in the past | {"error":"Booking start time is in the past.","code":"PAST_START_TIME","requestId":"req_000000000000000000000004"} |
INVALID_LOCATION | 400 | The branch does not offer the service | {"error":"This service is not offered at the requested location.","code":"INVALID_LOCATION","requestId":"req_000000000000000000000005"} |
INVALID_DATE_RANGE | 400 | A date bound does not parse | {"error":"startDate and endDate must be valid ISO dates.","code":"INVALID_DATE_RANGE","requestId":"req_000000000000000000000006"} |
INVALID_CURSOR | 400 | The cursor does not decode or belongs to other filters | {"error":"The cursor is not valid for this list and these filters. Start again from the first page.","code":"INVALID_CURSOR","requestId":"req_000000000000000000000007"} |
IDEMPOTENCY_KEY_INVALID | 400 | The Idempotency-Key is malformed | {"error":"Idempotency-Key must be 1 to 255 printable ASCII characters; a UUID is recommended.","code":"IDEMPOTENCY_KEY_INVALID","requestId":"req_000000000000000000000008"} |
UNAUTHORIZED | 401 | No key, or a key that does not verify: the one collapsed refusal | {"error":"Invalid API key.","code":"UNAUTHORIZED","requestId":"req_00000000000000000000000a"} |
DEPOSIT_REQUIRED | 402 | The service's effective booking protection includes a deposit and Stripe is live | {"error":"A deposit is required for this service. Bookings for this service must be made through the consumer booking flow.","code":"DEPOSIT_REQUIRED","requestId":"req_000000000000000000000017"} |
CARD_CAPTURE_REQUIRED | 402 | The service's effective booking protection is card capture and Stripe is live | {"error":"This service requires a saved payment method and consent before booking. Bookings for this service must be made through the consumer booking flow.","code":"CARD_CAPTURE_REQUIRED","requestId":"req_000000000000000000000018"} |
FORBIDDEN | 403 | A read only key attempting a write | {"error":"This API key does not have the bookings:write scope.","code":"FORBIDDEN","requiredScope":"bookings:write","requestId":"req_00000000000000000000000d"} |
NOT_FOUND | 404 | Not yours, gone, archived, or not a UUID; the API never says which | {"error":"Booking not found.","code":"NOT_FOUND","requestId":"req_000000000000000000000010"} |
BOOKING_OVERLAP | 409 | Another booking has the slot | {"error":"This time slot is already booked.","code":"BOOKING_OVERLAP","requestId":"req_000000000000000000000011"} |
BOOKING_COMPLETED | 409 | A completed booking cannot be cancelled or rescheduled through the API | {"error":"This booking is completed and cannot be cancelled through the API.","code":"BOOKING_COMPLETED","requestId":"req_000000000000000000000013"} |
BOOKING_NO_SHOW | 409 | A no show booking cannot be cancelled or rescheduled through the API | {"error":"This booking was marked as a no show and cannot be cancelled through the API.","code":"BOOKING_NO_SHOW","requestId":"req_000000000000000000000014"} |
BOOKING_CANCELLED | 409 | A cancelled booking cannot be rescheduled | {"error":"This booking is cancelled and cannot be rescheduled.","code":"BOOKING_CANCELLED","requestId":"req_000000000000000000000015"} |
SLOT_HELD | 409 | A customer is mid checkout for the slot | {"error":"Someone else is booking this time right now. It frees up in a few minutes if they do not complete their booking. Please choose another time or try again shortly.","code":"SLOT_HELD","requestId":"req_000000000000000000000016"} |
IDEMPOTENCY_REQUEST_IN_PROGRESS | 409 | A retry while the first request is still running | {"error":"A request with this idempotency key is still being processed. Retry shortly.","code":"IDEMPOTENCY_REQUEST_IN_PROGRESS","requestId":"req_000000000000000000000012"} |
IDEMPOTENCY_KEY_REUSED | 422 | The same key with a different request | {"error":"This idempotency key was used for a different request. Use a new key for a new request.","code":"IDEMPOTENCY_KEY_REUSED","requestId":"req_00000000000000000000000f"} |
RATE_LIMIT_EXCEEDED | 429 | The key's sliding sixty second allowance is spent; X-RateLimit-Limit is present | {"error":"Rate limit exceeded.","code":"RATE_LIMIT_EXCEEDED","requestId":"req_000000000000000000000019"} |
INTERNAL_ERROR | 500 | An unexpected failure; the body carries no internal detail | {"error":"Could not list bookings. Please try again.","code":"INTERNAL_ERROR","requestId":"req_00000000000000000000001b"} |