Models & routing
UberLLM sends every request to a live marketplace. On each call the marketplace matches the cheapest healthy seller for the model you asked for, and you pay the price shown, with UberLLM's 10% fee already included. You do not pick a provider; you pick a model.
Model ids
Use the model id from the catalog, e.g. deepseek/deepseek-v4-flash,
anthropic/claude-sonnet-5 or z-ai/glm-5.3. List what you can call right now:
- Authenticated:
GET https://api.uberllm.dev/v1/models(only models that can be served at this moment) - Public:
GET https://api.uberllm.dev/api/v1/public/models(with prices) - Web: uberllm.dev/models
What happens on every request
- UberLLM checks the model exists, that your prompt fits its context window, and that it supports tools if your request uses them.
- It reserves the estimated cost from your balance and forwards the request.
- The marketplace picks a seller for that one call. Seller choice is made fresh every time, so a seller that is slow or down simply stops getting picked.
- When the reply finishes, UberLLM settles at the price the marketplace reports for that call and releases the rest of the reservation.
Automatic retries
If a call fails before any content reaches you, UberLLM retries it for you. The marketplace re-matches a seller on each try, and it charges nothing for a call that failed before it was routed, so a retry costs you only time.
- Retried: no seller for the model right now (
no_sellers_for_model,no_healthy_sellers), the marketplace ran out of time to route (route_deadline_exceeded), a429asking to wait 5 seconds or less, any5xx, a connection error, or no first byte in time. - Not retried: the model doesn't exist, the request is invalid, or a billing or auth problem. Those come back at once.
- Schedule: up to 4 attempts, waiting 0.3 s, 0.9 s, then 2.7 s between
them (or the
Retry-Afterthe marketplace sent, if longer), and never more than 45 seconds in total.
Once streaming has started, nothing is retried: a failure mid-stream ends the stream and you are billed only for what was produced.
If every attempt fails you get an error instead of a reply, and the reservation is fully released. The common ones:
| HTTP | code |
When |
|---|---|---|
| 503 | no_available_provider |
Nobody is serving that model right now, even after retries. The message names the model. Try again shortly or pick another model. |
| 502 | no_available_provider |
The request could not be served for another reason (repeated upstream errors, or your provider options left nothing to route to). |
| 503 | service_unavailable |
A temporary problem on UberLLM's side. Retry in a few minutes. |
| 404 | model_not_found |
The model id isn't available. |
See Errors for the full list.
Routing options from other gateways
UberLLM accepts the routing options used by OpenRouter-style clients so existing code keeps working. Because one marketplace picks the seller for every call, most of them have no effect:
:floorand:nitromodel suffixes — accepted and stripped from the model id. They do not change price or speed.provider.orderandprovider.sort— accepted, no effect.provider.allow_fallbacks: false— turns off the automatic retries above: the first failure comes straight back to you.provider.max_price— a ceiling in USD per million tokens, as{ "prompt": 1.0, "completion": 3.0 }. It is checked against the model's listed marketplace price; if the listed price is above your ceiling, the request is refused with502 no_available_providerand nothing is charged. It does not cap what a single call costs.provider.only/provider.ignore— the gateway's own route isuberllmand seller offers areseller. Listing neither inonly, or both inignore, leaves nothing to route to and the request is refused with502 no_available_provider.
The provider object is read on the OpenAI surface (/v1/chat/completions)
only; the Anthropic surface (/v1/messages) ignores it.