Rate limits
Every limit has two windows: a short burst window and a rolling day. Going over either one
answers 429.
| What | Counted per | Burst | Per day |
|---|---|---|---|
POST /v1/contacts |
API key | 100 per 10 seconds | 200,000 |
POST /v1/webinar-registrants |
API key, per registrant | 600 per 60 seconds | 100,000 |
GET /v1/api-v1 (website analytics) |
Workspace | 100 per 10 seconds | 200,000 |
MCP (/mcp) |
Workspace; a write tool call counts 2 | 100 per 10 seconds | 200,000 |
| Inbound webhook with a secret token | Webhook and sender IP | 100 per 10 seconds | 200,000 |
| Inbound webhook without a token | Webhook and sender IP | 40 per 60 seconds | 5,000 |
Limits can be raised for a workspace that needs more. Contact [email protected].
Headers
Section titled “Headers”Successful responses carry the current state:
| Header | Meaning |
|---|---|
X-RateLimit-Limit |
Requests allowed in the burst window |
X-RateLimit-Remaining |
Requests left in the burst window |
X-RateLimit-Reset |
When the burst window resets (Unix seconds) |
X-RateLimit-Daily-Limit |
Requests allowed per day |
X-RateLimit-Daily-Remaining |
Requests left today |
X-RateLimit-Daily-Reset |
When the day window resets (Unix seconds) |
When you get a 429
Section titled “When you get a 429”HTTP/1.1 429 Too Many RequestsRetry-After: 7
{ "error": "rate_limited", "message": "Too many requests", "retry_after": 7 }Wait Retry-After seconds, then retry. For bulk work, keep a steady pace below the burst limit
instead of sending everything at once, and send webinar registrants in batches of up to 100.
