Response format and status codes
Response format and status codes
Base success response (200, 201, 202)
Base collection response (200)
Base error response (400-500)
- error.key is mandatory and machine-readable
- error.message is human-readable and should be localized
Base deleted response (204)
HTTP 204 responses have no body.Base validation error response (422)
- parameter should use snake_case and match the request field name where possible
- message should be localized
- key should be stable and machine-readable
Base OPTIONS response
OPTIONS responses should rely on headers, not a body. Example headers:HTTP status codes
| Code | Meaning | Use when |
|---|---|---|
| 200 | OK | Standard GET, PUT, PATCH, DELETE |
| 201 | Created | New resource created (POST) |
| 202 | Accepted | Async operation started |
| 204 | No Content | Successful with no body |
| 400 | Bad Request | Validation error or bad input |
| 401 | Unauthorized | Auth missing or invalid |
| 403 | Forbidden | No permission |
| 404 | Not Found | Resource does not exist |
| 409 | Conflict | Duplicate or inconsistent data |
| 422 | Unprocessable Entity | Semantic validation failure |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Unexpected backend failure |
Rate limiting
All REST APIs should expose standardized rate-limit information via HTTP response headers. Headers:| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum number of requests allowed within the time window |
| X-RateLimit-Remaining | Requests remaining in the current window |
| X-RateLimit-Reset | UNIX timestamp (seconds) when the window resets |
| Retry-After | Seconds to wait before retrying (429 only) |