API Reference
Errors
The API uses conventional HTTP status codes and returns a machine-readable error code in a consistent JSON shape.
Status codes
200Success201Created400Bad Request401Unauthorized402Plan limit reached403Forbidden (missing scope)404Not Found409Conflict422Validation Error429Rate Limited500Internal ErrorError shape
Every error response has a top-level error object with a machine-readable code, a human-readable message, and — for validation failures — a field-keyed errors map.
Error codes
Branch on error.code — the value is stable across releases.
| Code | Status | When it happens |
|---|---|---|
UNAUTHORIZED | 401 | Missing or invalid API key. |
FORBIDDEN | 403 | The key lacks the scope this endpoint requires. |
API_ACCESS_REQUIRED | 403 | The organization's plan doesn't include API access — upgrade to Elite or Enterprise. |
IDEMPOTENCY_KEY_REQUIRED | 400 | A POST endpoint was called without a required Idempotency-Key header. |
BAD_REQUEST | 400 | Malformed JSON body, or an unrecognized Intervals-Version header. |
NOT_FOUND | 404 | The resource doesn't exist, or belongs to another organization. |
VALIDATION_ERROR | 422 | Query params or body failed validation — see the errors map. |
INVALID_PACE_GROUP | 422 | The paceGroup isn't one the event declares. |
PAID_RUN_REQUIRES_CHECKOUT | 422 | The run is sold through Intervals checkout — register for it via the native flow, not the API. The API registers free runs only. |
CONFLICT | 409 | An Idempotency-Key was reused with a different request body. Don't retry — fix the key. |
IDEMPOTENCY_KEY_IN_PROGRESS | 409 | A request with the same Idempotency-Key is still in flight. Safe to retry shortly. |
ALREADY_REGISTERED | 409 | That email is already registered for the event run. |
PLAN_LIMIT_EXCEEDED | 402 | A plan entitlement was exceeded. Upgrade to raise the limit. |
RATE_LIMIT_EXCEEDED | 429 | Too many requests — retry after the Retry-After header. |
INTERNAL_ERROR | 500 | Unexpected server error. Retry; if it persists, contact support with the request id. |
Request IDs
Every response includes an X-Request-Id header. Include it when contacting support so we can trace the exact request.
Common errors
Invalid API key (401)
Check that your key is active and the Bearer prefix is included in the Authorization header.
Missing scope (403)
Your key doesn’t have the scope this endpoint requires. Check the endpoint’s required scope and add it to your key in the manage portal.
Rate limited (429)
Wait the number of seconds in the Retry-After response header, then retry with exponential backoff. See the Rate Limits page for per-plan allowances.