Getting started

Rate limits

Abuse throttles on credentials, and an admission gate on generation.

Contents

There is no general per-second request quota. Two narrower mechanisms exist, and they behave differently enough that a client should handle them separately.

Credential throttles, 429#

Login, registration, password reset, email change, verification resend and refresh are each counted in a rolling window. The counters are database-backed, so they survive a restart and are shared across every server process, a client cannot escape one by reconnecting.

Response 429
{ "detail": "Too many failed login attempts. Try again later." }

Failed logins are counted against the normalised email address, so alternating capitalisation does not reset the counter. Other throttles are counted per IP. A 429 is not retryable in a tight loop; wait out the window.

Generation admission, 503#

The document endpoints share a bounded pool of concurrent workers plus a queue. When both are full, further requests are rejected at the door rather than queued indefinitely. A request that will not be served for four minutes is worse than one that fails in four milliseconds.

Response 503
Retry-After: 10

{
  "detail": {
    "code": "ai_busy",
    "message": "The AI service is handling too many requests right now. Please try again in a few seconds."
  }
}
This one is safe to retry

ai_busy means the request was never started, so retrying cannot duplicate work or double-count usage. Honour Retry-After and back off; higher plans are admitted from a reserved band at the top of the same pool, so a paid account sees this rarely.