Error Structure
Errors use a uniform structure:
{ "detail": "message" }
Common Status Codes
| Code | Meaning |
|---|---|
| 400 | Bad request |
| 401 | Unauthenticated or invalid credentials |
| 403 | Forbidden / CSRF failed |
| 404 | Not found |
| 409 | Conflict (e.g. duplicate publish) |
| 429 | Too many requests |
| 500 | Internal server error |
Rate Limits
There are two layers:
- Cloudflare Worker edge limits by IP / API key.
- The tower limits again by API key hash.
The default is 20 requests per minute, configurable server-side. On 429, use the Retry-After header and wait. Do not hammer retries.