Error shape
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"success": false,
"error": "Validation failed.",
"code": "BAD_REQUEST",
"details": {
"fieldErrors": {
"name": ["Required"],
"phone": ["String must contain at most 32 character(s)"]
}
}
}details is present when there is something structured to say: field errors on validation, the required scope on a scope error, the allowed values on a bad filter, the conflicting record on a conflict.
Codes
| Code | Status | What to do |
|---|---|---|
BAD_REQUEST | 400 | Validation failed. details.fieldErrors maps each field to its messages. Unknown fields, bad filters, sorts and cursors also land here. |
UNAUTHORIZED | 401 | No credential, or the token is unknown, revoked, expired or no longer matches its owner's workspace. Check the token on the API Tokens page. |
INSUFFICIENT_SCOPE | 403 | The token does not hold the scope in details.required. Create a token with that access. |
FORBIDDEN | 403 | The operation is not offered for this resource (for example creating a chatroom), or a token was used on an app-only route such as token management. |
NOT_FOUND | 404 | Unknown resource name, unknown child, or a record that is not in your workspace. Records you do not own look exactly like records that do not exist. |
CONFLICT | 409 | A rule about existing data was violated, such as a second first block in a flow or a duplicate connection. details names the existing record. |
RATE_LIMITED | 429 | Too many requests for this token. Wait for the seconds in the Retry-After header. |
INTERNAL | 500 | Something failed on our side. Retry once, then contact support with the request. |
Retrying
- 400, 403, 404, 409 — do not retry; fix the request, the token or the data.
- 401 — do not retry; the token itself is the problem.
- 429 — wait for
Retry-Afterseconds, then retry. - 500 — retry once after a short pause; if it persists, contact support with the request and the time.