Choose a router
Choose a model automatically for cost, speed, coding, uncensored conversations, TEE inference, or free access.
A router is a model ID that chooses a concrete model for each request. Use it
where an app asks for a model name, or as model in a Chat Completions request.
The choice can change between requests as models and available routes change.
| Model ID | Use it for | How it chooses |
|---|---|---|
/auto (also anonrouter/auto) | General automatic selection | Uses your routing strategy, allowed model pool, and privacy preferences. See intelligent routing. |
anonrouter/cheap | Lower-cost requests | Chooses a healthy, eligible model with enough capability for the task, then favors lower expected cost. |
anonrouter/fast | Faster responses | Favors healthy, capable models using measured response time where available, then configured model preferences and latency estimates. |
anonrouter/coding | Programming tasks | Chooses among a curated set of coding models, considering quality, reliability, and cost. |
anonrouter/uncensored | Uncensored conversations | Chooses among a curated set of uncensored or abliterated models, considering quality, reliability, and cost. |
anonrouter/tee | Plaintext inference on TEE routes | Chooses only routes classified as TEE, considering quality, reliability, and cost. |
anonrouter/free | Free inference | Chooses an available free model. Requires account opt-in and uses Anonymous routes, with no paid fallback. See free models. |
An exact creator/model ID | A specific model | Keeps the model fixed; provider routing chooses who serves it. |
Cheap does not mean the cheapest model regardless of capability. Fast does not promise a latency or choose a model solely from a name: when sufficient recent measurements exist, it considers both time to first token and expected generation time. Actual cost and speed depend on the selected model and your request.
For a stable ID that follows reviewed releases within one family, use a
Latest model alias, such as
~deepseek/deepseek-flash-latest. Unlike a router, it resolves to one reviewed
model target rather than selecting across families.
Send a request
With a compatibility-enabled key, set the router ID as the model:
curl https://api.anonrouter.ai/v1/chat/completions \
-H "Authorization: Bearer $ANONROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anonrouter/coding",
"messages": [{"role": "user", "content": "Explain this TypeScript error."}],
"max_tokens": 1024
}'In the private ticket flow, issue the ticket for the same router ID, then send that ID in the completion body with the ticket. Send the same provider policy and output limit at both steps. A paid router needs a positive available balance; its selected model is billed at the serving route's listed prices, including any applicable long-context prices. The router itself has no single fixed per-token price.
Privacy and saved settings
Paid routers honor your workspace privacy boundary, model pool, provider restrictions, request filters, and price constraints. They do not widen a workspace boundary to find a candidate. A router with no eligible member returns an error instead of silently choosing outside those settings.
Cheap and Fast favor price or speed for provider selection when you omit a
request provider policy. Coding, Uncensored, and TEE use the workspace provider
sort. You can narrow selection with routing.allow, routing.exclude,
routing.privacy_classes, or a provider policy, subject to the workspace's
restrictions. An explicit routing.strategy does not change a named router's
purpose; use /auto to choose between cost, balanced, and quality strategies.
The TEE Router sends ordinary plaintext requests to TEE routes. It does not perform client-side encryption or make a stock OpenAI client verify attestation. E2EE uses an explicit model and a separate verification and encryption flow. Read TEE verification and E2EE inference before relying on those guarantees.
For the Free Router, enabling free models on the account is consent to Anonymous routing: the provider can see and may retain prompts. A request or workspace that requires stronger privacy is refused. Free requests never become paid requests when capacity runs out.
What served the request
The response's model is the concrete model that served the request, not the
logical router ID. Response headers identify the selection:
x-anonrouter-selected-model: the selected model.x-anonrouter-routing: auto: a model was selected automatically.x-anonrouter-provider: the serving provider.x-anonrouter-privacy-class: the serving route's privacy tier.
Provider fallback for a paid router stays on the chosen model and within that router's eligible routes. It does not change to another model. Explicit cross-model fallback lists in compatibility mode have their own fallback contract.
Constraints and errors
Paid named routers are for plaintext chat. Use an explicit model for reasoning controls or E2EE. Tools, streaming, and image input narrow the eligible pool to routes that can serve the request. See context limits for output caps and context errors.
| Error | Meaning |
|---|---|
400 reasoning_requires_explicit_model | Select a concrete model before setting reasoning controls. |
400 router_excluded_by_settings | Your model, provider, or routing settings exclude the router's members. |
400 router_no_capable_model | No eligible member supports the request's required capabilities. |
403 privacy_boundary_not_met | No eligible member meets the workspace's privacy boundary. |
503 router_route_unavailable | No eligible route can serve this router request now. |
For free access and capacity errors, use the separate free-model error table.
Or hand the whole thing to your agent
One prompt carries the entire setup. Give it to your agent, review what it configures, and you are done.