DevFlow
Docs/API and SDKs

REST API rate limits and 429 handling

Owner Priya Iyer · Last updated 2026-03-17 · v2.7
apirate-limit429throttlelimits

REST API rate limits

Per service-account or PAT.

the limits

TierRead req/minWrite req/min
Free6010
Pro60060
Scale6,000600
Enterprisecustomcustom

Per minute, sliding window.

headers

Every response includes:

text
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 432
X-RateLimit-Reset: 1713183871

X-RateLimit-Reset is Unix seconds.

what 429 looks like

json
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded for this service account.",
    "retry_after_ms": 4200,
    "request_id": "req_01HK..."
  }
}

retry_after_ms tells you exactly how long to wait. The HTTP Retry-After header is set to the same value in seconds.

handling

Backoff:

ts
async function call() {
  while (true) {
    const r = await fetch(url, { headers });
    if (r.status !== 429) return r;
    const retry = Number(r.headers.get('Retry-After') ?? '1');
    await new Promise(res => setTimeout(res, retry * 1000));
  }
}

The Node SDK (node-sdk) does this for you with jitter.

bulk operations

Importing many monitors at once? Use the bulk endpoints (POST /v1/monitors:bulk) — they count as a single write.

what doesn't count

Health checks (GET /v1/health) and the OAuth token endpoint don't count against the per-key limit. Webhook deliveries (FROM us TO you) are not subject to API limits — those are the webhook-integration.

hitting the ceiling regularly

If you're hitting Pro limits in steady-state, you probably want Scale, or you have a polling loop you should replace with a webhook subscription.

Related questions

Was this helpful?
Or ask the docs bot for a follow-up — the floating button bottom-right.