Features / Routing
Auto router, fallbacks, presets. One model id, the right model.
model: "auto" picks a fast, balanced or frontier model per request. Fallback lists, saved presets and throughput routing on the same key, at each model’s price.
What it does
- model: "auto"
- Three tiers, fast, balanced and frontier, picked per request from what the request asks. Also callable as uplink/auto.
- Sticky per session
- With x-session-id, one session keeps one model for 30 minutes from its last request.
- Fallback lists
- models: up to 5 more ids tried in order when every route of the one before failed before a byte.
- Saved presets
- Model, fallbacks, parameters, system prompt and tools under one name, called as @preset/name, with version history and a console page.
- Route order
- Price, latency or throughput, per request or per key, at the same price to you.
- Spend and load limits
- Per-key concurrency, and spend limits that reset daily, weekly or monthly.
Pricing · live catalog, 2026-11-04
| Auto tier | Models today | Per 1M tokens |
|---|---|---|
| fast | Claude Haiku 5.5, GLM 5.3 Flash, GPT-6 Luna, MiniMax M3, DeepSeek V4.1 Flash | $0.0582 to $0.09 in · $0.1455 to $0.36 out |
| balanced | Claude Sonnet 5.5, GPT-6.1 Sol, Gemini 4 Argon, Kimi K3, GLM 5.3 | $0.3178 to $1.20 in · $0.9987 to $4.50 out |
| frontier | Claude Opus 5.5, GPT-6 Astra, Claude Fable 5.1, Gemini 3.1 Pro Preview, Claude Opus 5 | $1.20 to $6.00 in · $7.20 to $30.00 out |
Request example
curl · auto router
curl https://api.uplinkswitch.com/v1/chat/completions \
-H "Authorization: Bearer $UPLINK_API_KEY" \
-H "x-session-id: ticket-8812" \
-H "Content-Type: application/json" \
-d '{
"model": "auto",
"auto": {"tier_max": "balanced"},
"messages": [{"role": "user", "content": "Write a SQL query for monthly active users."}]
}'curl · fallbacks and throughput
curl https://api.uplinkswitch.com/v1/chat/completions \
-H "Authorization: Bearer $UPLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5-5",
"models": ["gpt-6.1-sol","gemini-4-argon"],
"routing": "throughput",
"messages": [{"role": "user", "content": "Summarize this thread."}]
}'curl · save a preset
curl -X PUT https://api.uplinkswitch.com/v1/presets/support-bot \
-H "Authorization: Bearer $UPLINK_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5-5",
"models": ["gpt-6.1-sol","gemini-4-argon"],
"params": {"temperature": 0.3, "max_tokens": 800},
"system_prompt": "You answer billing questions for our store.",
"system_mode": "prepend",
"description": "Support replies"
}'Python · call the preset
from openai import OpenAI
client = OpenAI(base_url="https://api.uplinkswitch.com/v1", api_key="sk-uplink-live-...")
res = client.chat.completions.create(
model="@preset/support-bot",
messages=[{"role": "user", "content": "Why was I charged twice?"}],
)
print(res.model) # the model that answered- The answer’s
modelfield and thex-uplink-modelheader name the model that answered;x-uplink-presetnames the preset. - Presets are managed with an admin key on
/v1/presets, or on the Presets page of the console.
The fallback example, priced
Each model bills at its own catalog price only when it answers; Claude Sonnet 5.5 answers first.
| Field | Model | Price per 1M tokens |
|---|---|---|
| model | Claude Sonnet 5.5 | $1.20 in · $3.00 out |
| models[0] | GPT-6.1 Sol | $0.60 in · $3.00 out |
| models[1] | Gemini 4 Argon | $0.60 in · $3.00 out |
Questions
A model from one of three tiers, decided on the gateway without an extra model call: a reasoning ask, a high reasoning effort or tools with code go to frontier; tools, code blocks, images, a JSON schema answer or a prompt over 16,000 tokens go to balanced; everything else goes to fast. auto.tier_max caps the tier. The tiers are public in GET /v1/catalog under auto_router, and today's fast tier starts with Claude Haiku 5.5.
The price of the model it chose, from that model’s page; there is no router fee. The answer’s model field and x-uplink-model name the model, and x-uplink-auto-tier its tier.
Yes, when the requests carry the same x-session-id header: that session gets the same model for 30 minutes from its last request, so an agent does not switch models mid-task.
Only after every route of the model before it failed before sending a byte. List up to 5 ids or aliases in models; each is billed at its own price when it answers, and the key’s model allowlist applies to each. A key can carry a default list in fallback_models.
A model, up to 5 fallbacks, default parameters (temperature, max_tokens, reasoning, response_format and more), a system prompt of up to 32 KB that is prepended or replaces the request’s, and tool declarations, server tools included. Fields in the request win. Call it as @preset/name, or as model@preset/name to swap the model. Every change keeps the old version.
An order for the model’s routes: price (the default), latency (quickest first token lately) or throughput (most output tokens per second over the last three hours). Set routing per request, provider.sort as OpenRouter clients send it, or routing on the key. The price you pay is the same whichever route answers.
More features
Agent tools
Web search, fetch, MCP and code.
Files and redaction
PDFs for every model.
Caching and context
Repeat answers at a tenth.
Guardrails and app sign-in
Guardrails on your traffic.
MCP gateway
One MCP endpoint
Endpoints
Embeddings, rerank, transcription.
Observability
Every session, request by request.
All features
Every group, with live prices.