Rate limit

Every app, key and workspace has its own allowance: an app stuck in an error loop never slows down the customer's real users.

CallerLimitCounted per
App token (OAuth)600 / minuteapp
API key600 / minutekey
A user's MCP connection600 / minuteconnection
Whole workspace (by plan)Workspace limit by planworkspace
Requests with a token6,000 / minuteIP address
Requests without a token300 / minuteIP address
Sign-in, token requests10 / minuteIP address

Workspace limit by plan

All calls of one workspace (users, apps, keys) share one bucket that refills evenly every minute.

PlanLimit
Trial100 / minute
Basic / Standard300 / minute
Professional1,500 / minute
Enterprise10,000 / minute

Heavy operations

Exports, reports and file imports have their own, tighter limits.

Limit
Data export30 / minute
Reports20 / hour
File import5 / hour

Headers

HeaderMeaning
X-RateLimit-LimitThe workspace bucket size per minute.
X-RateLimit-RemainingCalls left.
X-RateLimit-ResetSeconds until the bucket is full again.
X-RateLimit-WarningOnly below 20%: slow down.
Retry-AfterOnly on 429: wait that many seconds, then retry.
429
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 60

{
  "type": "https://nextx.vn/errors/rate-limit-exceeded",
  "status": 429,
  "errorCode": "gateway.rate_limited",
  "retryable": true
}
On 429, read Retry-After and retry after it; never retry immediately in a loop. Need changes as they happen? Use webhooks instead of polling every few seconds.