Rate limits

Open as markdown

For AI agents: the docs index is at /llms.txt, and every page is also served as markdown at its URL plus .md.

Each API key may make 200 requests per 10 seconds. The limit is the same for every plan and every operation under /v1.

How it works#

  • Each key has a bucket that holds up to 200 requests. A request takes one. The bucket refills continuously at 20 requests per second.
  • A burst of up to 200 requests succeeds at once. After that you can sustain 20 requests per second.
  • The limit is per key, not per account or per IP address.
  • The public endpoints /health, /plans, /openapi.json and /llms.txt are not rate limited.
  • Requests that fail authentication are not counted.
  • Each API server process keeps its own buckets in memory. If more than one process serves the API, the limit applies to each process separately.

Response headers#

Every authenticated response carries these headers.

HeaderMeaning
X-RateLimit-LimitThe bucket size, 200.
X-RateLimit-RemainingWhole requests left right now, after this one.
X-RateLimit-ResetUnix time in seconds when the bucket is full again.
Retry-AfterOnly on a refused request: seconds to wait before retrying.

When you are limited#

The API answers HTTP 429 with the rate_limited code and retryable: true. Wait for Retry-After seconds and retry. See Errors.

JSON
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests for this API key.",
    "fix": "Wait the number of seconds in the Retry-After header, then retry. Spread requests out to stay under the X-RateLimit-Limit value.",
    "docs_url": "/docs/errors#rate_limited",
    "retryable": true,
    "request_id": "req_Qx7RtVw3ZbN1pEs9fKd2Lm"
  }
}
JavaScript
async function withRetry(send, attempts = 4) {
  for (let i = 0; i < attempts; i += 1) {
    const res = await send();
    if (res.status !== 429) return res;
    const wait = Number(res.headers.get('retry-after') ?? 1);
    await new Promise((resolve) => setTimeout(resolve, wait * 1000));
  }
  throw new Error('still rate limited');
}

Other limits#

LimitValueError when exceeded
Request body size256 KiBpayload_too_large
Prospects per import request500invalid_input
Steps in a sequence6invalid_input
Variants per step4invalid_input
Days between steps0 to 30, and at least 1 after the first stepinvalid_input
Reply body length20,000 charactersinvalid_input
Domains, mailboxes and active campaignsBy plan, see Credits and billingplan_limit
Documentation menu