Conventions

Rate limits

Requests per minute per key and per workspace, sized by plan, with RateLimit headers on every response.

Provisional numbers

The limits below are the launch values and may change before the API leaves preview. Read the live values from the RateLimit-* headers or GET /v2/me rather than hard-coding them.

The limits

Each request spends one token from two buckets: one for the key and one for the whole workspace. A request goes through only when both have a token.

PlanWorkspaceEach key
Growth600 requests per minute300 per minute
Scale3,000 requests per minute1,500 per minute
FreeThe API is not included

Each key gets half the workspace budget, so one runaway integration cannot starve the others. Buckets refill continuously, not at the top of the minute: a key on Growth gets a token back every 200 ms.

API traffic is not metered or billed separately. It counts against your plan's normal limits and usage, like work done in the console.

Headers

Every /v2 response that reached the limiter carries:

RateLimit-Limit: 300
RateLimit-Remaining: 287
RateLimit-Reset: 3
Header
RateLimit-LimitRequests per minute in the tighter of your two buckets
RateLimit-RemainingTokens left in that bucket
RateLimit-ResetSeconds until that bucket is full again

GET /v2/me returns both buckets in rateLimit, including workspaceLimit and workspaceRemaining.

When you hit it

HTTP/1.1 429 Too Many Requests
Retry-After: 2
RateLimit-Limit: 300
RateLimit-Remaining: 0
RateLimit-Reset: 60
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit reached. Retry after 2 s.",
    "details": { "limit": 300, "workspaceLimit": 600 },
    "requestId": "…"
  }
}

Wait Retry-After seconds, then retry. A refused request spends no token, but requests to a route the key cannot call still count: the limit is checked before the scope.

Staying under

  • Page with limit=100 instead of many small pages.
  • Use webhooks instead of polling for changes.
  • Spread batch jobs over time, and give each integration its own key.
  • Back off on 429 with jitter, so many workers do not retry in the same instant.

Gauge also applies a per-IP safety limit in front of the API, to protect the platform from floods. Normal integrations never meet it.

On this page