Routing

The right model, every request

Tell us what the request needs, chat, code, vision or reasoning, and the router picks the lowest-priced enabled model that can do it. If that model stumbles, another one catches the request.

Lowest-priced fit

chosen per request

Automatic fail-over

busy models do not fail your call

Zero code changes

as the catalog evolves

The problem

What is slowing you down today

Overpaying for easy work

Sending every request to your heaviest model is the most expensive habit in AI.

Hard-coded model names

Every change in the model landscape becomes a pull request.

One busy model, one failed request

Without fail-over, a moment of congestion becomes an error your user sees.

Capabilities

Everything you need, nothing you don't

Route by capability

Send capability in the body. Leave it out and chat is assumed.

Lowest price first

Eligible models are tried cheapest first, so routine work stays affordable.

Smart fail-over

Timeouts, rate limits and server errors move the request to the next eligible model. Errors that would fail everywhere, like a malformed request, return immediately.

Pin when you need to

Pass a model_id to use exactly that model, with no substitution.

Account default

Set a default model in settings for requests that name none.

See what served you

Every response names the model that answered, with its tokens and price.

Use cases

What teams run on it

01

Mixed workloads

Cheap models for classification, reasoning models for analysis.

02

Resilient features

User-facing calls that ride out a busy model.

03

Cost control

New lower-priced models are picked up without a deploy.

04

Strict workflows

Pinned models where output consistency matters most.

How it works

From sign-up to production

  1. 1

    Send a capability

    Add capability to your request body, for example code or vision.

  2. 2

    Let the router choose

    The lowest-priced enabled model with that capability serves the request.

  3. 3

    Check the response

    model_id and model_name tell you which model answered.

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

What capabilities can I request?

Whatever the enabled catalog offers, such as chat, code, vision and reasoning. The model catalog lists each model's capabilities.

Does fail-over cost extra?

You pay for the call that succeeds, at the price of the model that served it. Failed attempts are not billed.

Can I turn routing off?

Yes. Pass a model_id and the router uses that model only.

What if no model can serve the request?

You get a clear error. If no enabled model has the capability, the response says so.

Stop picking models by hand

Send a capability and let the router do the rest.