Hidden limits
Limits you only discover in production are worse than no limits.
Rate limits
Every account has a requests-per-minute ceiling you can see and adjust in settings. It keeps runaway loops from running up a bill, and cached responses do not count against it.
one ceiling across all your keys
adjust in settings
a 429 with a retry hint
The problem
Limits you only discover in production are worse than no limits.
A bug in an agent can send thousands of calls before anyone looks.
If a request is throttled, you should know when to try again.
Capabilities
The limit counts requests per minute for your account, across all of your API keys and console sessions.
See and change your account's requests-per-minute ceiling in the console.
Over the limit, you get status 429 and {"error": "Rate limit reached. Try again in Ns."}, telling you how long to wait.
The cache is checked before the limit, so an identical prompt served from cache is never throttled.
When the router moves a request to another model, it is still one request against your limit.
Requests that succeed are recorded in history, so you can see your real request rate.
Use cases
Cap how fast an autonomous loop can call models.
Size worker concurrency to stay under your ceiling.
Keep one integration from starving another.
A ceiling on rate is a ceiling on how fast spend can grow.
How it works
Open Settings to see your requests-per-minute ceiling.
Wait for the time in the error message, then retry with the same Idempotency-Key.
Raise the ceiling in settings as your traffic grows.
Control
API keys are shown once at creation and stored only as a hash. Revoke any key instantly from Settings.
Every request carries its own receipt: tokens in, tokens out, latency and price. Nothing is billed that you cannot trace.
Per-account rate limits and a free monthly allowance keep experiments safe before they become production.
You choose exactly what you send. Repeat prompts can be served from your cache, and cache hits are never billed.
For developers
Send a prompt and a capability, or name a model. One bearer key, one small JSON body, and a full receipt on every response.
curl https://YOUR-DOMAIN/api/ainf/inference \
-H "Authorization: Bearer $AI_INFERENCE_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042" \
-d '{"prompt":"Summarise this ticket in one line","capability":"chat"}'Per account. All keys and console sessions on the account share it.
No. Cache is checked first, so cache hits are returned without touching the limit.
Wait the number of seconds in the error message, then retry, ideally with exponential backoff and the same Idempotency-Key.
The wait time is in the error message body. Parse it, or fall back to a short exponential backoff.
Set your ceiling in settings and ship with confidence.