Rate limits
Requests are limited to 1000 per minute per API key (sliding window). Every response carries the current state:
When exceeded you get
429:
Retry-After seconds (or until X-RateLimit-Reset) and retry.
Rate-limited requests are rejected before any work happens, so they are
always safe to resend.
Batch endpoints
The/batch endpoints use a lower limit of 20 requests per minute. A
single batch performs up to 1000 operations, so the per-operation ceiling
stays comparable. A batch body is capped at 1000 items (400 over that).
This is a separate budget: batch requests are counted on their own, so
ordinary traffic on your key never consumes your batch allowance and vice
versa. X-RateLimit-Limit reflects the ceiling of whichever budget handled
the request — 1000 on standard endpoints, 20 on /batch ones.
Error shape
Every error response is JSON with anerror object carrying a stable,
machine-readable code (snake_case) and a human message:
code and message:
issues: per-field breakdown on validation failures (code: "validation_failed").suggestions: “did you mean” candidates on unknown-type404s:
unauthorized) and rate limits (rate_limited).
Status codes
Batch and participant endpoints report per-item errors inside a
2xx
response body (e.g. contact_suppressed when someone on your Do Not
Contact list is skipped). The request succeeds while individual items
fail. Always check the per-item errors array.Server errors return a generic message by design: they never echo stack
traces or payload contents. Every response includes an
X-Request-Id
header; include it when contacting support about a failed request.Related
Authentication
How API keys and the
401 responses work.Quickstart
See the request and response shapes in action.