One rate limit for the account, an honest retry-after, a 503 at capacity
- The per-minute rate limit is now counted once for the whole account, rather than separately by each machine answering your requests. No plan figure changed — what changed is that the published figure is now the figure, in both directions, instead of a floor with undocumented headroom above it that moved with how busy we were.
- retry-after on a rate-limit 429 is a real number of seconds instead of a constant 1: the time until your window turns over, between 1 and 60. Sleep the value you are given — a fixed one-second retry lands inside the same window and is refused again. An expensive call on a small plan is told a correspondingly longer wait.
- A new refusal. When the service is saturated it now answers 503 immediately, with a body of "server is at capacity; retry shortly" and a retry-after, rather than holding the request in a queue until it times out. The request never ran, so it costs nothing, and it is retryable — unlike the other 503, which means no shard could serve the request and carries no retry-after. The body text and that header are how you tell them apart.
- Unauthenticated traffic is now limited per calling address, and so are calls presenting a key that does not authenticate. The description routes — /describe, /openapi.json, /mcp/tools.json, /llms.txt, /skill.md, /guides/{slug} — stay open and cost no credits; a flood from one address is answered 429 with a retry-after. Open, not unmetered.
- Opening an MCP session still costs no credits — initialize, the initialized notification, tools/list and ping are never billed and never touch your credits-a-minute window — but session frames now have a generous per-minute allowance of their own, so free no longer means unlimited. A client that opens a session once and reuses it will not meet it.
- Every limit parameter is now published with a maximum of 100. A value above it is clamped rather than rejected, and the match count still reports the real total.
- GET /metrics and GET /shards are no longer part of the public API and have been removed from the OpenAPI document. Nothing a caller needs went with them: a 503 from a search route is what tells you the data plane rather than your request is the problem.