Skip to content
On this page

Reference

Rate limits

Limits apply per IP, globally, and per key. Headers tell you where you stand.

Per IP

SurfaceSustainedBurst
Global API1000 req/s4000
/v1/models and aliases200 req/s400
Auth endpoints2 req/s30
Media endpoints100 req/s200
Redeem2 req/s20

Concurrency

  • 2000 concurrent in-flight requests globally.
  • 96 concurrent in-flight requests per IP. Beyond that you get an immediate 429 with retry-after: 2, before auth or database work.

Per API key

FieldTypeDescription
rpm_limitrequests/minReturns 429 when exceeded, using an in-memory minute window.
conc_limitconcurrentConcurrent in-flight cap. Requests queue, then proceed.
daily_cap_micromicro-USDReturns 403 when spend reaches the cap. The owner gets at most one email per period.
monthly_cap_micromicro-USDSame behavior as the daily cap, on a monthly window.

Security headers

Every response carries:

server: relay
x-content-type-options: nosniff
x-frame-options: DENY
referrer-policy: no-referrer
permissions-policy: camera=(), microphone=(), geolocation=(), payment=(), usb=()
strict-transport-security: max-age=31536000; includeSubDomains

CORS is permissive (*) because the API is token-authenticated and cookieless.

Abuse controls

ControlBehaviour
Signup allowlistA server-configured set of consumer providers may create accounts; others are rejected.
One account per humanCanonical email collapses dots, +tags and case, enforced in both the backend and the auth worker.
Signup captchaVerified with the client IP and a hostname allowlist.
Signup reputationDisposable blocklist → MX → domain age (RDAP), cached 7 days.
Signup daily budgetOne created account per IP and per fingerprint per UTC day.
Sign-in throttleFailures per IP + email, then 429.
Free claim identityAccount ≥ 14 days, current guild member, fresh JWT, captcha.
Free claim uniquenessOne per fingerprint, one per IP, three per ASN.
Daily token capsPer account per model, so parallel requests cannot overshoot.
Kill switchSetting an account to suspended or throttled blocks free models with 403.

All blocks are recorded and the high-signal ones are reported to the operator channel. See Free plan for the claim flow.

Headers

x-ratelimit-limit: 4000
x-ratelimit-remaining: 3999
x-ratelimit-after: 3 # only on 429
retry-after: 3 # only on 429

Values reflect the governor layer that handled the request. The global 1000/s budget is the effective outer ceiling. On 429, use exponential backoff seeded by Retry-After, clamped to 1–60 seconds.