Rate Limits
Per-minute request limits for the SendKit API, by plan and request category.
Every /v1 request counts against a per-minute limit (a sliding 60-second window). Limits are per user: all API keys a user owns, platform and workspace, share the same buckets.
Request categories
Each request falls into one category:
| Category | Which requests |
|---|---|
read | GET requests |
write | POST, PATCH, PUT, DELETE requests not listed below |
bulk | Paths containing /bulk or /import (any method) |
enrichment | POST to paths containing /enrich or /validate |
tests | POST to /inbox-placement or /blacklist-tests |
POST /v1/workspaces uses the write bucket with a limit of 5: it is rejected once you hests of any kind in the last minute.
Limits by plan
Default limits (requests per minute):
| Plan | read | write | bulk | enrichment | tests |
|---|---|---|---|---|---|
| starter | 60 | 30 | 10 | 20 | 5 |
| growth | 120 | 60 | 20 | 40 | 10 |
| scale, essential, inboxkit | 300 | 120 | 30 | 60 | 20 |
| plus | 450 | 200 | 45 | 90 | 25 |
| pro | 600 | 300 | 60 | 120 | 30 |
| agency, power | 1000 | 600 | 100 | 200 | 50 |
Some accounts have custom limits that differ from this table; where that applies it is communicated to the account directly.
Response headers
Every response carries these headers for the category the request used:
X-RateLimit-Limit: requests allowed per minuteX-RateLimit-Remaining: requests left in the current windowX-RateLimit-Reset: Unix time (seconds) when the window resets
Exceeding the limit
Going over the limit returns 429 Too Many Requests with a Retry-After header (seconds) and error code RATE_LIMIT_EXCEEDED. Wait that long before retrying.