Rate Limits
Default limits
| Limit | Value | Scope |
|---|---|---|
| Requests per minute | 60 | Per access grant |
| Requests per hour | 1,000 | Per access grant |
| Concurrent tasks | 10 | Per tenant |
| Payload size | 1 MiB | Per request |
| SSE connections | 50 | Per tenant |
| Webhook registrations | 10 | Per tenant |
Rate limit headers
Every response includes rate limit headers:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1782040800429 handling
When rate-limited, the response includes a Retry-After header:
HTTP/1.1 429 Too Many Requests
Retry-After: 30
Content-Type: application/json
{
"jsonrpc": "2.0",
"error": {
"code": -32014,
"message": "Rate limit exceeded. Retry after 30 seconds.",
"data": { "retryAfter": 30, "limit": 60, "window": "1m" }
}
}The SDK handles 429 responses automatically with exponential backoff.
Custom limits
Request higher limits via grant caveats when creating an access grant:
const grant = await client.createGrant({
type: 'agent',
capabilities: ['agents:invoke'],
caveats: {
max_calls_per_minute: 120,
},
});Last updated on