Error Response Format
Every error response body is a JSON object containing a single top-levelerror key with three fields:
Error Response Body
string
requis
A stable, machine-readable string that identifies the specific error. Use this field in your error-handling logic rather than parsing the human-readable
message. Error codes do not change between API versions.string
requis
A human-readable description of what went wrong. This message is intended for developers during debugging and is not guaranteed to remain stable across releases — do not rely on it programmatically.
object
An optional object containing structured supplementary information about the error. For validation errors, this object includes a field-by-field breakdown of which inputs failed and why. For other error types, this object may be empty (
{}).HTTP Status Codes
The Zolt API uses standard HTTP status codes. The table below covers every code you may encounter across all endpoints.Common Error Codes
Eacherror.code value below describes a specific failure condition, explains why it occurs, and tells you exactly what to do about it.
forbidden
forbidden
HTTP Status:
403What it means: The API key was recognized and is active, but it does not have the scope required for the action you attempted. For example, a read-scoped key cannot create or delete resources.How to resolve it:- Check the scope assigned to the API key you are using (visible in Settings → Developer → API Keys).
- If the key needs broader permissions, revoke it and generate a new key with the
writeoradminscope, as appropriate. - Review the Authentication page for a full breakdown of what each scope permits.
not_found
not_found
HTTP Status:
404What it means: The resource referenced in the request URL does not exist. This could mean the ID is wrong, the resource has been deleted, or the resource belongs to a different workspace than the one your API key is scoped to.How to resolve it:- Double-check that the resource ID in the URL is correct and was not corrupted in transit (e.g., truncated or URL-encoded incorrectly).
- Confirm the resource has not been deleted by checking the Zolt UI or using a
GETrequest to list resources of that type. - Ensure the API key you are using belongs to the same workspace that owns the resource.
validation_error
validation_error
HTTP Status:
400 or 422What it means: One or more fields in your request body failed validation. A 400 is returned when the request is structurally invalid (e.g., missing a required field or sending the wrong data type). A 422 is returned when the data is structurally valid but fails business logic rules (e.g., a task’s due date is before its start date).How to resolve it:- Inspect
error.details.fieldsin the response body for a field-by-field list of what failed and why. - Cross-reference the failing fields against the endpoint’s parameter documentation to confirm the correct types, formats, and constraints.
- Ensure date strings are formatted as ISO 8601 (e.g.,
2024-06-01T09:00:00Z) and enum values are from the documented allowed set.
rate_limit_exceeded
rate_limit_exceeded
HTTP Status:
429What it means: Your workspace has sent more requests in the current one-minute window than its plan allows. All further requests are blocked until the window resets.How to resolve it:- Read the
X-RateLimit-Resetheader in the429response to determine when the current window expires, then wait until after that Unix timestamp before retrying. - Implement exponential backoff with jitter in your retry logic so your integration recovers gracefully without hammering the API. See the Rate Limits page for a ready-to-use code example.
- Consider caching frequently read resources and replacing polling loops with webhook subscriptions to reduce your overall request volume.
- If your integration legitimately requires a higher sustained request volume, upgrade your workspace plan or contact support@zolt.io to request a custom limit.