Skip to main content
Two kinds of limit apply to the API and the MCP server. They are easy to confuse because both say “no” for a while; they are unrelated.

The request limit, per token

Each token may make a fixed number of requests per minute — 120 today, counted in a window that resets every minute. A request past that answers 429 rate_limited with a Retry-After header naming the seconds until the window resets, and the same number in the body as retry_after_seconds:
The counter is per token, not per workspace or per user: two tokens in the same workspace have two counters. It is also durable, so a refusal survives the application restarting; waiting is the only thing that clears it. The MCP server sits behind the same door, so a chatty assistant meets the same limit. A refused request is not “used”: it does not update the token’s last-used time.
Honour Retry-After rather than retrying on a fixed schedule. Most HTTP clients treat 429 as retryable and will wait the right time if you let them read the header.

Two more 429s

Separately, two abuse bounds answer 429 limit_reached with a sentence naming the bound that was hit. They are the same on every plan, and neither is something the plan sets:
  • 300 new links per day, per workspace. Counted the same way whether the link came from the console, the assistant or the API. The refusal carries no Retry-After header.
  • 10,000 conversions per hour, per token. The refusal carries a Retry-After header and retry_after_seconds in the body, like the request limit.
The MCP server returns the link bound’s sentence as a tool result; there is no conversions tool. Same status as the request limit, different code: branch on code, not on the status.

What is not a limit here

The product’s own chat assistant, inside the console, runs under bounds of its own so that a conversation cannot run away. Those bounds are the chat’s, not the API’s or the MCP server’s: nothing you build against either door is affected by them, and nothing here lets you change them.