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

  1. UberLLM checks the model exists, that your prompt fits its context window, and that it supports tools if your request uses them.
  2. It reserves the estimated cost from your balance and forwards the request.
  3. 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.
  4. 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), a 429 asking to wait 5 seconds or less, any 5xx, 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-After the 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:

  • :floor and :nitro model suffixes — accepted and stripped from the model id. They do not change price or speed.
  • provider.order and provider.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 with 502 no_available_provider and nothing is charged. It does not cap what a single call costs.
  • provider.only / provider.ignore — the gateway's own route is uberllm and seller offers are seller. Listing neither in only, or both in ignore, leaves nothing to route to and the request is refused with 502 no_available_provider.

The provider object is read on the OpenAI surface (/v1/chat/completions) only; the Anthropic surface (/v1/messages) ignores it.