Rate limits

Requests per minute by plan, what a 429 looks like, and how to back off.

Limits are per account, in requests per minute:

PlanLimit
Free20
Monthly200
Annual300

Free keys also 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 (meta.limit_capped through the MCP server). Paid plans get the full limit.

Over the limit you get 429 rate_limited; the message names the plan and its limit. There is no Retry-After header, so back off on your own schedule. Doubling from two seconds over five attempts spans about a minute:

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

Limits count requests, not credits: one list call returning 50 comments is one request. A small pool of concurrent workers beats firing everything at once. Need more? Email support@instadata.dev.