Error Handling
Saturday uses one error format across all endpoints, modeled on Stripe’s error structure.Error format
Error types
Branch ontype for handling class, and on code for the specific case. A type can span more than one status.
A 404 carries one of two types.
not_found_error means the URL itself found no endpoint (including endpoints not available to your key), always with code: "resource_not_found". resource_not_found as a type comes from an endpoint that could not find the thing you referenced, and its code narrows it: athlete_not_found, activity_not_found, key_not_found, webhook_not_found, conversation_not_found. Handle both types as the same case unless you need the distinction. A 429 carries type: "rate_limit_error" with code: "rate_limit_exceeded" or code: "rate_limited". Switching on type means using the values in the table above.200 with the clamped values plus safety.warnings and safety.requires_human_review set. See Safety.
Retry logic
Exponential backoff
Retry-After is absent on some 429s, notably the daily call ceiling, so read it with a fallback rather than indexing it directly.
Request IDs
Every response carries anX-Request-Id header, and every error body repeats it as request_id. Quote it when reporting an issue and we can trace that exact request.
Error catalog
GET /v1/errors (no auth) lists the error codes for the features currently exposed to you.