Skip to content

Rate limits

Limits are per account, in requests per minute:

PlanLimit
Free trial20 rpm
Monthly ($5)200 rpm
Annual ($54)300 rpm
Enterpriseup to 1,500 rpm

Items per call on the free trial

Free-trial keys return at most 5 items per list call, whatever limit asks for. When a request was lowered, the response carries an X-Limit-Capped header with the ceiling (meta.limit_capped through the MCP server). Paid plans get the full limit, up to 50 per synchronous call.

When you hit the limit

You get 429 rate_limited. The message names your plan and its per-minute limit:

{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for plan 'monthly' (200/min)",
"request_id": "req_01JZX4M8Q2TE9W"
}
}

The response does not include a Retry-After header, so back off on your own schedule. Doubling the wait from 2 seconds over five attempts spans about a minute, which covers the window:

async function withBackoff(fn) {
for (let attempt = 0; attempt < 5; attempt++) {
const resp = await fn();
if (resp.status !== 429) return resp;
const wait = 2 ** attempt * 2000 + Math.random() * 500;
await new Promise((r) => setTimeout(r, wait));
}
throw new Error("rate limit retries exhausted");
}

Tips

  • Rate limits count requests, not credits — one list call returning 50 comments is one request.
  • Run a small pool of concurrent workers (4 is plenty on the monthly plan) instead of firing every request at once.
  • Keep limit at 50 or lower per call.
  • Need more than 300 rpm? Contact us about volume plans.

Next: Pagination · Errors