Docs navigation
Errors
Error envelope and status codes
All documented API errors use the same `error` envelope with a stable `code`, human-readable `message`, and optional `details` object.
Envelope
Shared error shape
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description",
"details": {}
}
}INVALID_API_KEY401Missing, malformed, or unknown API key.
Example
{
"error": {
"code": "INVALID_API_KEY",
"message": "Missing API key. Get one at https://exerciseapi.dev/signup"
}
}RATE_LIMIT_EXCEEDED429Per-minute or daily rate limit exceeded.
Details fields: upgrade_url, current_tier, limit, window, resets_at
Example
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Per-minute rate limit exceeded (5/min). Slow down.",
"details": {
"upgrade_url": "https://exerciseapi.dev/dashboard/billing",
"current_tier": "free",
"limit": 5,
"window": "minute",
"resets_at": "2026-04-02T18:15:00.000Z"
}
}
}PAGINATION_DEPTH_EXCEEDED403Free-tier request goes beyond the first 500 results.
Details fields: upgrade_url, current_tier
Example
{
"error": {
"code": "PAGINATION_DEPTH_EXCEEDED",
"message": "Free tier limited to first 500 results. Upgrade for full access.",
"details": {
"upgrade_url": "https://exerciseapi.dev/dashboard/billing",
"current_tier": "free"
}
}
}INVALID_PARAMETER400Query parameter or path parameter validation failed.
Details fields: field, received
Example
{
"error": {
"code": "INVALID_PARAMETER",
"message": "Invalid query parameter: 'limit' Number must be less than or equal to 100",
"details": {
"field": "limit",
"received": "500"
}
}
}NOT_FOUND404Requested resource does not exist.
Example
{
"error": {
"code": "NOT_FOUND",
"message": "Exercise not found: barbell-bench-press"
}
}INTERNAL_ERROR500Unexpected server error.
Example
{
"error": {
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred"
}
}