Success envelope
Successful responses wrap the payload in adata key:
data is an object for single-resource reads and an array for list endpoints.
The _meta sidecar
Most data responses include a _meta object. It never affects your quota and is
there purely for debugging and observability:
Free catalog endpoints omit
_meta entirely, collapsing to a bare { "data": ... }.
Error envelope
Errors wrap a machine-readable object in anerror key:
code— a stable, snake_case identifier. Safe to switch on in code; it does not change across releases.message— human-readable text. May change for clarity, so don’t match on it.details—null, or an object with field-specific context (validation errors, rate-limit retry hints, etc.).
HTTP status codes
Common error codes
These codes are stable across releases. Switch on them in code.
See Rate Limits & Quota for the
429 codes and
the details payloads they carry.
Empty results vs. errors
A list endpoint that finds no matching records returns200 with an empty
data array — not a 404. For covered leagues, an empty array can also mean the
data hasn’t been ingested yet rather than that nothing exists. See
Coverage → Data freshness for how to interpret this.