Rate Limits & Error Reference
Rate Limits
Rate limits are enforced per tenant (per API Key) within a 1-minute sliding window.
| Limit | Value |
|---|---|
| Max requests per minute | 5,000 |
| Max requests per minute (file entities*) | 500 |
| Max cumulative response size per minute | 500 MB |
*File entities include: Certificates, ArchivedCertificates, Documents, ArchivedDocuments.
When a rate limit is exceeded, the API returns HTTP status 429 Too Many Requests with a Retry-After header indicating how many seconds to wait before retrying.
OData Error Codes
| Status | Meaning | What to Do |
|---|---|---|
| 400 | Invalid request body or key mismatch | Check your request payload and key format |
| 401 | Missing or invalid API Key | Verify your API Key is correct and included in the request |
| 403 | Insufficient permissions | Your API Key may have Reader role — Writer is required for POST/PUT/PATCH/DELETE |
| 404 | Entity not found | The record with the specified key does not exist |
| 409 | Duplicate key | A record with the same primary key already exists (POST only) |
| 422 | Value too long for field | The value exceeds the field's maximum length, check the maxLength in the Swagger schema |
| 429 | Rate limit exceeded | Wait for the time indicated in the Retry-After header |
| 503 | Database unavailable | The tenant database is temporarily unavailable — try again later |
| 504 | Query timeout | The query took too long to execute, try adding filters or reducing the data scope |
GraphQL Error Codes
GraphQL always returns HTTP 200. Errors are included in the errors array of the response body.
| Code | Meaning | What to Do |
|---|---|---|
| AUTH_NOT_AUTHENTICATED | Missing or invalid API Key | Verify your API Key in the HTTP Headers |
| AUTH_INVALID_CREDENTIALS | Invalid API Key credentials | Check that the API Key value is correct |
| AUTH_FORBIDDEN | Insufficient permissions | Contact your administrator to verify your access role |
| DB_CONNECTION_FAILED | Database connection unavailable | The tenant database may be temporarily down — try again later |
| DB_TIMEOUT | Query execution timeout (30s) | Simplify your query — reduce filters, depth, or requested fields |
| DB_ERROR | General database error | Check query syntax and field names |
| NAVIGATION_NOT_CONFIGURED | Relationship not configured | The requested navigation property is not available for this entity |
| MISSING_KEY_ARGUMENT | Missing primary key in _by_pk | Provide all required key fields for the _by_pk lookup |
| REQUEST_TIMEOUT | Request cancelled or timed out | Simplify the query or try again |
| UNEXPECTED_ERROR | Unhandled error | Contact support with the full error response |