Skip to content
Docs menu

Rate limits, 429s and credit guards

Limits keep one runaway agent from draining your credits or the service. They apply per API key and per OAuth connection, and depend on your plan; using the app in your browser isn't metered.

The story · 3 steps
Get an API keyFree plan: 10 free links to try (once you verify your email), then 100 free checks a month, no card.

Limits by plan

SurfaceFreeAgency plansResets
REST API60 requests an hour, read-only (GET)600 requests a minutewhen the window ends
MCP (AI assistants)not included60 calls a minute per key (Agency Pro and Scale)60 seconds after the first call

On Free, requests that change something (POST, PATCH, PUT, DELETE) return 403 with an upgrade hint; use the app instead. Admins can lower a key's per-minute rate (rate_per_min) and give it a daily cap (rate_per_day, resets 00:00 UTC) under API keys, or with update_api_key. REST and MCP are counted separately.

What counts

  • Every REST request and every MCP HTTP request counts 1.
  • MCP tools that spend credits (submit_index_job, check_index, retry_job, send_unindexed_to_indexer) weigh 5 in total.

When you hit a limit

The response is 429 with a Retry-After header (seconds). REST errors include error.retry_after and error.details (code: "rate_limited", the plan and the limit); MCP returns a JSON-RPC error. Successful API-key responses carry RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and X-RateLimit-Window (minute or hour).

http
HTTP/1.1 429 Too Many Requests
Retry-After: 23
RateLimit-Limit: 60
RateLimit-Remaining: 0

Agents should wait Retry-After seconds and retry once, not loop.

Plan limits (403 / 429 with an upgrade hint)

Features that aren't on your plan return 403 with error.details.code = "plan_required" and required_plan; limits you're over return 429 with error.details.code = "plan_limit". Both carry the feature (for example max_urls_per_job, workspaces, seats, live_checks, mcp, concurrent_jobs) and an upgrade_url. Free allows 50 URLs per push or check and 3 running at a time.

Credit guards

  • Two kinds of credits: index credits (1 per URL pushed, charged only if it gets indexed; the credit comes back automatically if it isn't indexed after 7 days) and check credits (1 per Standard check, 5 per Live check). Not enough of either returns 402 with error.details.kind.
  • Confirmation: an MCP call that would spend more than 1,000 credits returns needs_confirmation with the estimate instead of running. Ask the user, then call again with confirm_spend: true.
  • Daily credit cap per key: set daily_credit_cap on a key and calls that would take it over the cap for the UTC day return 429 with a plain explanation.
  • Hard limits: 10,000 URLs per job on paid plans; a job never spends more credits than your balance (402 otherwise).