Rate limits and quota
Each workspace has a limit of requests per minute and a quota of input tokens per month.
Two limits apply to each workspace. All API keys of the workspace share both limits.
| Limit | Value | Period | Error at the limit |
|---|---|---|---|
| Requests per minute | 300 for a new workspace | The clock minute. The count starts again at second 0 of each minute. | 429 rate_limited |
| Input tokens per month | The default of the region for a new workspace | The calendar month in the time zone of the region. | 429 monthly_quota_exceeded |
To see how many input tokens your workspace has left, read the X-Quota-Tokens-Remaining header of a 200 response. To raise a limit, email support. The Settings page of the console shows the support email and the time a limit change takes, in the Support section.
What each request uses
- The Check API compares a request with the monthly quota first, then with the requests of the minute.
- A request within both limits uses one request of the minute. It uses that request even when it fails later, for example with
503. - A
400, a401, or a429uses no request of the minute. - Only a
200uses input tokens. It uses the number indata.inputTokens. The quota counts the same input tokens as the limit of a text. See Input tokens. - A request is within the monthly quota when the workspace used fewer tokens than its quota before the request. So the request that uses up the quota can go over it.
X-Quota-Tokens-Remainingis then0, and it is never below0.
Headers
| Header | Responses | Description |
|---|---|---|
X-RateLimit-Remaining | 200, both 429 | The requests left in the current minute, after this request. |
X-RateLimit-Reset | 200, 429 rate_limited | The seconds until the count of the minute starts again. At least 1. |
X-Quota-Tokens-Remaining | 200, both 429 | The input tokens left this month, after this request. Never below 0. Always 0 on monthly_quota_exceeded. |
X-Quota-Reset | 200, both 429 | The time when the monthly quota starts again, in ISO 8601 with the offset of the region, such as 2026-12-01T00:00:00+09:00. |
Retry-After | Both 429 | The seconds to wait before the next request. |
Other responses have none of these headers.
Two kinds of 429
rate_limited | monthly_quota_exceeded | |
|---|---|---|
| Cause | Too many requests in the current minute | No input tokens left this month |
Retry-After | The seconds until the next minute | The seconds until X-Quota-Reset |
X-RateLimit-Reset | Present | Absent |
| What your app should do | Wait Retry-After seconds, then retry. | Stop sending requests until X-Quota-Reset, or email support to raise the quota. |
Branch on code before you retry
A retry library that follows Retry-After waits until the next month on monthly_quota_exceeded. Read code first, and retry only rate_limited.
When a request reaches both limits, the Check API answers monthly_quota_exceeded.
{
"data": null,
"code": "rate_limited",
"message": "Too many requests. Try again later.",
"errorId": "FMS429",
"traceId": "req_01M6JYA150XXPBT8B1XBN7JGYE"
}{
"data": null,
"code": "monthly_quota_exceeded",
"message": "Monthly quota reached. 0 input tokens left. The quota resets at 2026-12-01T00:00:00+09:00. To raise it, email <support email>.",
"errorId": "FMQ01",
"traceId": "req_01M6JYA05RWZ7MD83RZVAFNZ8B"
}The message of monthly_quota_exceeded contains the support email of your region. The sample shows <support email> in its place.