docs

Rate limits

120 requests per minute per API key, reported on every response.

LimitScope
120 requests per minutePer API key, shared by the REST API and the MCP server
120 requests per minutePer connected MCP app (OAuth), separately from your keys
30 descriptions per minutePer workspace: POST /v1/describe, POST /v1/audiences with a prompt, and the MCP and app equivalents

Windows are fixed minutes. Every request counts, including ones that fail or are refused.

Headers

Every authenticated response carries:

HeaderMeaning
RateLimit-LimitRequests allowed per minute (120)
RateLimit-RemainingRequests left in the current window
RateLimit-ResetSeconds until the window resets

Over the limit you get 429 rate_limited with a Retry-After header in seconds. 503 capacity_unavailable also sends Retry-After.

Handling 429

async function withRetry(call) {
  for (let attempt = 0; ; attempt++) {
    const res = await call();
    if (res.status !== 429 && res.status !== 503) return res;
    if (attempt === 4) return res;
    const wait = Number(res.headers.get("Retry-After") ?? 60);
    await new Promise((r) => setTimeout(r, wait * 1000));
  }
}

Other limits worth knowing: pages hold at most 100 items, a Reveal takes at most 1,000 leads, a batch enrichment at most 10,000 rows, and an audience at most 25 where clauses and 5 topics.

On this page