Rate Limits
API requests are rate-limited per API key based on your plan:| Plan | Requests per Minute |
|---|---|
| Pro | 100 |
| Business | 500 |
429 Too Many Requests with a Retry-After header indicating how many seconds to wait:
Error Codes
All error responses follow the same format:| HTTP Status | Code | Description |
|---|---|---|
400 | VALIDATION_ERROR | Invalid request body, missing required fields, or bad parameter format |
401 | UNAUTHORIZED | Missing, invalid, or expired API key |
403 | FORBIDDEN | API key lacks the required scope for this endpoint |
403 | PLAN_REQUIRED | Your plan does not include API access (upgrade to Pro or Business) |
403 | KEY_LIMIT_REACHED | Maximum number of API keys for your plan |
404 | NOT_FOUND | Resource does not exist or you do not have access to it |
413 | PAYLOAD_TOO_LARGE | Request body exceeds the maximum size (10 MB) |
429 | RATE_LIMITED | Too many requests — see Rate Limits above |
500 | INTERNAL_ERROR | Unexpected server error — contact support if persistent |
Pagination
All list endpoints support cursor-based pagination withlimit and offset parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 50 | Number of results per page (max 100) |
offset | integer | 0 | Number of results to skip |
Response Format
| Field | Description |
|---|---|
data | Array of results for the current page |
total | Total number of matching results across all pages |
limit | The limit value used for this request |
offset | The offset value used for this request |
Iterating Through Pages
To fetch all results, incrementoffset by limit until offset >= total:
Best Practices
Cache responses when possible
Cache responses when possible
If your integration reads the same documents repeatedly, cache the results locally and use webhooks to invalidate the cache when data changes.
Use specific scopes
Use specific scopes
Grant each API key only the scopes it needs. A read-only dashboard integration should not have
documents:write.Handle errors gracefully
Handle errors gracefully
Always check the HTTP status code and
code field. Display meaningful messages to users instead of raw error strings.Respect rate limits
Respect rate limits
Use the
Retry-After header and implement backoff. Batch operations where possible to reduce request count.