Rate Limits¶
Canviq rate limits are applied per API key. Limits reset on a rolling window.
Limits by Key Type¶
| Key type | Requests | Window |
|---|---|---|
pk_org_live_ (standard) | 100 | 1 minute |
pk_org_live_ (bulk import) | Contact support | — |
| Anonymous (public board) | 30 | 1 minute |
Bulk import rate limits are available on request for data migration use cases. Contact [email protected].
Rate Limit Headers¶
Every API response includes rate limit headers:
| Header | Value |
|---|---|
X-RateLimit-Limit | Total requests allowed in the window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp (seconds) when the window resets |
When You're Rate Limited¶
A 429 Too Many Requests response:
{
"error": "rate_limited",
"message": "Rate limit exceeded. Retry after 23 seconds.",
"retry_after": 23,
"limit": 100,
"window": "1 minute"
}
The response also includes a Retry-After header with the number of seconds to wait.
Best Practices¶
Check X-RateLimit-Remaining before making bursts of requests. If it's near zero, pause until X-RateLimit-Reset.
Back off on 429 — don't immediately retry. Use the retry_after value from the response or the Retry-After header.
Use server-side calls — making API calls from your backend means one key handles all your users. Client-side calls from many users can exhaust limits quickly.
Batch where possible — the category creation endpoint accepts an array; prefer one request over many.
MCP Agent Rate Limits¶
If you're using the MCP Server, agent API keys have separate limits:
| Tier | Requests | Window |
|---|---|---|
| Standard | 60 | 1 minute |
| Professional | 300 | 1 minute |
| Enterprise | 1000 | 1 minute |
Custom limits can be configured per-agent via agent policies.