Errors

Consistent JSON error bodies. Production omits validation details.

HTTP status codes

401 unauthorized          — missing/invalid API key
402 payment_required      — subscription inactive
403 forbidden             — missing scope
404 not_found             — player or match
409 duplicate_external_ref — match already ingested
422 validation_error      — bad input
429 rate_limit_exceeded   — monthly quota
503 service_unavailable   — temporary outage

Example

{
  "error": "forbidden",
  "message": "API key lacks required scopes.",
  "required_scopes": ["write:matches"]
}