Errors & Status Codes · Developers
HTTP status codes returned by the Dailybot public API, their meaning, and how to recover.
The Dailybot API returns standard HTTP status codes on every response. Successful responses fall in the 2xx range; client errors in 4xx; server errors in 5xx. Every error body follows the same shape: a top-level `detail` string, and optional per-field validation errors under `errors`.
Error response envelope
Every non-2xx response is a JSON object with at minimum a `detail` field. Validation errors (400 responses on write endpoints) additionally include a per-field `errors` map. Rate limits (429) return a `Retry-After` header alongside the JSON body.
{
"detail": "Human-readable summary of what went wrong.",
"errors": {
"field_name": ["Field-level validation message."]
}
}
Status codes returned by the public API
| Status | When you get it | How to recover |
|---|---|---|
| 200 OK | Successful GET, PATCH, or a POST that returns the resource. | Nothing to do — success. |
| 201 Created | Successful POST that creates a new resource. | The resource is in the response body; note the `uuid`. |
| 202 Accepted | Request was accepted for async processing (send-message, send-email, workflow trigger). | Poll or subscribe to a webhook to know when it completes. |
| 204 No Content | Successful DELETE or PATCH where no body is returned. | No body to parse; success. |
| 400 Bad Request | Validation error. The `errors` field contains per-field messages. | Fix the payload and retry. Never retry blindly. |
| 401 Unauthorized | Missing, expired, or invalid credential. | Confirm your API key or refresh your CLI Bearer session with `dailybot login`. |
| 403 Forbidden | Credential is valid but the caller lacks permission for this action or the endpoint is CLI-only. | Check the parity matrix at [/developers/authentication#parity-guarantee](/developers/authentication#parity-guarantee). |
| 404 Not Found | Resource does not exist, or the caller cannot see it in this organization. | Verify the UUID and the scope of the credential. |
| 409 Conflict | The write conflicts with the current state (e.g. transitioning a form response to an invalid workflow state). | Re-read the resource, choose the correct next state, retry. |
| 422 Unprocessable Entity | The payload is syntactically valid but semantically invalid. | Read `detail` — the message identifies the offending field. |
| 429 Too Many Requests | Rate limit exceeded. | Respect the `Retry-After` header. See [/developers/rate-limits](/developers/rate-limits). |
| 500 Internal Server Error | Unexpected error on the Dailybot side. | Retry with exponential backoff. If it persists, contact support. |
| 502 / 503 / 504 | Upstream outage or maintenance window. | Retry with exponential backoff. |
Retry policy
Retry only on 429, 502, 503, 504, and idempotent 5xx. Never retry a 4xx blindly — the error is on your side. For 429, honor `Retry-After`; for 5xx, use exponential backoff (start at 250 ms, cap at 30 s, add jitter).