Rate limits

Two independent mechanisms protect the API: a per-account requests-per-minute limit, and your plan's feature quotas (which are shared with the dashboard).

Requests per minute

Your account may make a fixed number of requests per minute — all of your API keys share this budget, so creating more keys does not raise the limit. The default is 60 requests/minute; plans can define a higher limit via the api_rpm plan setting. Every response carries the current state:

HeaderMeaning
X-RateLimit-LimitRequests allowed per minute for this key.
X-RateLimit-RemainingRequests left in the current window.
X-RateLimit-ResetSeconds until the window resets.

Handling 429 responses

When the limit is exceeded the API responds with 429, error code RATE_LIMITED, and a Retry-After header (in seconds):

429 Too Many Requests
{
  "error": "Rate limit exceeded",
  "code": "RATE_LIMITED",
  "request_id": "req_01j8..."
}

Back off for Retry-After seconds before retrying. A simple, well-behaved pattern:

  • Watch X-RateLimit-Remaining and slow down before hitting zero.
  • On 429, sleep for Retry-After seconds (plus a little jitter), then retry.
  • Cap concurrent requests across your integrations rather than fanning out unbounded.

Plan quotas are shared with the dashboard

One quota pool

API usage draws from the same plan quotas as the dashboard. A SERP refresh or a site audit costs the same whether you trigger it from the UI or from the API — there is no separate API allowance.

When a quota runs out the API returns 402 with code QUOTA_EXCEEDED (or PLAN_UPGRADE_REQUIRED if your plan does not include the feature at all), including your current usage and limit in details.

Inspecting usage

GET /v1/usage returns every quota dimension with { used, limit }, so you can budget work before starting it:

Terminal
curl https://api.zutrix.com/v1/usage \
  -H "Authorization: Bearer $ZUTRIX_API_KEY"