Rate limits

Limits that protect you, not slow you down

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.

Per account

one ceiling across all your keys

You set it

adjust in settings

Clear throttling

a 429 with a retry hint

The problem

What is slowing you down today

Hidden limits

Limits you only discover in production are worse than no limits.

Runaway loops

A bug in an agent can send thousands of calls before anyone looks.

Vague throttling errors

If a request is throttled, you should know when to try again.

Capabilities

Everything you need, nothing you don't

Requests per minute

The limit counts requests per minute for your account, across all of your API keys and console sessions.

Adjustable in settings

See and change your account's requests-per-minute ceiling in the console.

429 with a hint

Over the limit, you get status 429 and {"error": "Rate limit reached. Try again in Ns."}, telling you how long to wait.

Cache hits skip the limit

The cache is checked before the limit, so an identical prompt served from cache is never throttled.

Fail-over is not double-counted

When the router moves a request to another model, it is still one request against your limit.

Visible in history

Requests that succeed are recorded in history, so you can see your real request rate.

Use cases

What teams run on it

01

Agent guardrails

Cap how fast an autonomous loop can call models.

02

Batch pacing

Size worker concurrency to stay under your ceiling.

03

Shared accounts

Keep one integration from starving another.

04

Cost protection

A ceiling on rate is a ceiling on how fast spend can grow.

How it works

From sign-up to production

  1. 1

    Check your limit

    Open Settings to see your requests-per-minute ceiling.

  2. 2

    Handle 429

    Wait for the time in the error message, then retry with the same Idempotency-Key.

  3. 3

    Adjust as you grow

    Raise the ceiling in settings as your traffic grows.

Control

Built so you stay in charge

Keys you control

API keys are shown once at creation and stored only as a hash. Revoke any key instantly from Settings.

Spend you can see

Every request carries its own receipt: tokens in, tokens out, latency and price. Nothing is billed that you cannot trace.

Limits you set

Per-account rate limits and a free monthly allowance keep experiments safe before they become production.

Data you decide on

You choose exactly what you send. Repeat prompts can be served from your cache, and cache hits are never billed.

For developers

One endpoint. Every model.

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"}'

Questions, answered

Is the limit per key or per account?

Per account. All keys and console sessions on the account share it.

Do cached responses count?

No. Cache is checked first, so cache hits are returned without touching the limit.

How should I retry after a 429?

Wait the number of seconds in the error message, then retry, ideally with exponential backoff and the same Idempotency-Key.

Is there a header with the retry time?

The wait time is in the error message body. Parse it, or fall back to a short exponential backoff.

Build fast, with a safety net

Set your ceiling in settings and ship with confidence.