Limits and errors
Rate limits, request size and the API error format.
Rate limits
| Limit | Value |
|---|---|
| Requests per token | 60 per minute |
| Requests per organisation | 300 per minute |
| Requests per IP address | 120 per minute |
When a limit is exceeded the API returns 429 Too Many Requests. Wait a moment and try again.
Request size
A request body can be up to 64 KB. A larger body returns 413 with Request body too large.
Status codes
| Status | Meaning |
|---|---|
200 | OK. Also returned for deletes, and for dry runs. |
201 | Created by a create endpoint. |
400 | The body is not a JSON object |
401 | The token is missing, invalid, disabled or expired |
403 | The token does not have the permission this endpoint needs |
404 | Unknown endpoint, or the record was not found |
413 | Request body over 64 KB |
422 | Validation failed, or the change is not allowed |
429 | Rate limit reached |
503 | Organisation integrations are turned off |
Error format
Errors are returned as JSON and always include a message.
A validation error returns 422, with every problem by field in errors.
{
"message": "The first name field is required.",
"errors": {
"first_name": ["The first name field is required."]
}
}
A change that breaks a rule returns 422 with the reason in message and error.
{
"message": "End must be after start.",
"error": "End must be after start."
}
A record that does not exist returns 404.
{
"message": "Record not found.",
"error": "Record not found."
}
A token without the permission returns 403.
{ "message": "Access token does not permit this action." }
A missing, invalid, disabled or expired token returns 401.
{ "message": "Invalid or expired access token." }
A server error hides the detail. 500 returns Integration operation failed., and other 5xx errors return Integration operation unavailable. When integrations are turned off the API returns 503.
Tool errors return 404 only when the message ends in "not found". Any other tool error returns 422.