Error Responses
The standard error response format and the HTTP status codes used across the API, so clients can handle failures consistently and predictably.
Every error returns the same JSON shape, regardless of the status code.
Format
Two fields:
message: What went wrong, in plain language.errors(optional): Field-level validation failures. Keys are field names, values are arrays of messages.
Example: Validation Error (422)
{
"message": "The given data was invalid.",
"errors": {
"email": ["The email field is required."],
"first_name": ["The first name must be a string."]
}
}
Example: Not Found (404)
{
"message": "The requested endpoint could not be found."
}
Status Codes
The HTTP status code tells you what happened. There's no success boolean in the body.
| Code | Meaning | When |
|---|---|---|
200 |
OK | Request succeeded |
400 |
Bad Request | Malformed or unservable request |
401 |
Unauthorized | Authentication required |
403 |
Forbidden | Understood, but not allowed |
404 |
Not Found | Resource doesn't exist |
422 |
Unprocessable Entity | Validation failed |
429 |
Too Many Requests | Rate limit exceeded |
500 |
Internal Server Error | Something broke server-side |