Reference
Errors
All error responses share the shape {"error":{"code","message"}}. Match on error.code, not on the message text — messages may change for clarity.
Error shape
Every non-2xx response from /api/v1 carries a stable machine-readable code under error.code. Build your retry and alerting logic against that field.
Error codes
missing_api_key401No Authorization header and no X-Api-Key header was supplied.
invalid_api_key401Credential is rejected (unknown, expired, or revoked).
validation_failed400A query or path parameter failed validation (e.g. unknown sport, non-numeric eventId, limit out of range, duplicate bookmaker filter).
forbidden403Authenticated but no product-verified bookmaker entitlement for the requested sport and transport.
live_not_enabled403Caller requested transport=live but plan entitlement does not include the Live channel.
not_found404Well-formed numeric eventId, but the event does not exist or is not visible to your organization.
rate_limit_exceeded429Hourly rate limit or monthly REST quota exhausted. Use X-RateLimit-Reset and Retry-After before retrying.
service_unavailable503Required auth, quota, or rate-limit backend is unavailable; the public API fails closed.