Manual
CLI
API
Log in Get started free

Rate limiting

How many requests you can make per minute, the RateLimit headers, and the 429 response.

The API limits how many requests you can make in a minute, so one client cannot slow the service down for everybody.

Limits #

WhoLimitCounted per
A request with a token600 requests per minuteThe token
A request without a token, such as login and registration60 requests per minuteThe address the request comes from

The window is 60 seconds long and starts with the first request. When it ends, the count starts at zero.

These do not count:

  • OPTIONS requests, which browsers send before a request from another origin.
  • The webhooks of GitHub and GitLab, /integrations/github/webhook and /integrations/gitlab/webhook/{projectId}.
  • The routes that an MCP tool calls. The request to /mcp itself counts as one.

Headers #

Every response says where you stand:

HeaderMeaning
RateLimit-LimitThe number of requests allowed in the window
RateLimit-RemainingHow many are left in the window
RateLimit-ResetSeconds until the window ends
Retry-AfterOnly on 429: seconds to wait. The same as RateLimit-Reset

Browsers on other origins can read these headers.

When you are over the limit #

POST /auth/logout is never rate limited, so signing out always works.

The API answers 429 with rate_limited and does not run the request:

HTTP
HTTP/1.1 429 Too Many Requests
RateLimit-Limit: 600
RateLimit-Remaining: 0
RateLimit-Reset: 23
Retry-After: 23
JSON
{
  "type": "https://docs.continuous-translations.com/api/errors#rate_limited",
  "title": "Too Many Requests",
  "status": 429,
  "error": "rate_limited"
}

Wait Retry-After seconds and send the request again. Requests you send while you are over the limit count too, so do not retry in a tight loop.

Staying under the limit #

  • Send one push with all keys instead of a request per key. A push takes up to 20000 keys.
  • Use Pull translations for a whole language instead of reading keys one by one.
  • Use one token for one job. The limit is per token, so separate pipelines with their own project keys do not share it.