A routing decision you can reproduce yourself.
7 signals, a score out of 100, five tiers with published thresholds. No model call, nothing learned.
Show your working.
The shipped selectModel() and the shipped price registry, running in your browser: the same function that decides where your real requests go.
The request
138 characters · ~35 input tokens
Signals 2 of 7 fired
- Message length+1550 to 199 characters
- Code0not present
- Analysis0not present
- Multi-step0not present
- Attachment0not present
- Creative writing+10matched “draft”
- Conversation depth010 messages or fewer
Sum of the signals25/100
The decision Simple query → small tier
- Tier
- Small
- Served by
- Claude Haiku 5.5
- Provider
- anthropic
- List price per M
- $0.10 in / $0.50 out
- Tokens (estimated)
- 35 in · 64 out
- Metered to you
- $0.000036
Against the priciest model your plan allows
That is arithmetic for this one prompt against this one baseline, at published rates. It is not a measured result about anybody’s traffic, and we do not have one to quote.
The same prompt, on each ceiling auto · score 25
Free
Claude Haiku 5.5
$0.000036
Team
Claude Haiku 5.5
$0.000054
This prompt scores low enough that every ceiling reaches the same tier, so every plan serves it identically. Raise the complexity and they diverge.
Token counts are estimated at ~4 characters each, output assumed at half the prompt; the ledger only ever records the provider’s reported usage. Prices are list prices verified 2026-10-16, metered at provider price, as the Free plan always is. The specification.
It comes back with the answer
Every response from /v1/chat/completions carries what the router decided and what it cost. These are the headers for the prompt above, and they change as you edit it.
< HTTP/1.1 200 OK < content-type: application/json < x-lobstack-request-id: req_8f3a1c92e0b74d16 < x-lobstack-model: claude-haiku-5-5 < x-lobstack-tier: small < x-lobstack-complexity: 25 < x-lobstack-routed: true < x-lobstack-cost-usd: 0.000036 < x-lobstack-savings-usd: 0.000674 < x-lobstack-baseline-model: claude-sonnet-5-5 < x-lobstack-baseline-reason: plan_ceiling < x-lobstack-priced: true < x-lobstack-metered: true
On stream: true these headers go out before the provider has counted a token, so the same figures ride in the final frame instead, under x_lobstack. Every field it returns.
What it is, and what it is not.
01
A heuristic, and it says so
5 regular expressions, two length tests and some integer arithmetic. It does not read meaning and it does not predict whether a model will answer well; the value is that you can reproduce every decision.
02
No headline savings number
There is no “up to 80%” on this page. A saving is only meaningful against a model you would actually have used, so the demo names its baseline and computes one prompt. We have not priced production traffic at scale and will not quote a number we have not measured.
03
Lowest tier, not cheapest model
Nex picks the lowest tier that can handle the request, then a curated model within it — models in a tier are not interchangeable in quality, so it never quietly serves the cheapest.
Honestly, about the field.
Complexity routing is not a moat: three of the four gateways we track ship it, one of them free and open source. Where they differ is what comes back.
Questions, answered.
No. Nex is Lobstack’s router. It makes no model call: it scores the request with regular expressions, two length tests and some arithmetic, then picks a tier and a model within it.
No. Nothing is learned. The scorer is versioned, ti-1.0.0 today, so the same prompt gets the same score until a new version is published with its thresholds.
No. A score above your plan’s ceiling does not fail; it is served at the ceiling tier. That is why the same prompt can be answered by different models on different plans.
A named model is served exactly. If it is above your plan, unavailable, or incompatible with your credential, the request is refused. Send
autowhen you want Nex to route.No. On your own key, calls are locked to the named model’s provider, and a request for auto is refused with a 400. Name the model you want instead.
Ask your gateway why it picked that.
Every request comes back with its own receipt, and the Console keeps the ledger. $5 of Gateway credit once after verification, whether you start with the API or the app. No card.