Modellen & routering
UberLLM stuurt elk verzoek naar een beschikbare externe provider voor het model dat je hebt aangevraagd. Als de provider faalt voordat deze begint te antwoorden, wordt het verzoek opnieuw geprobeerd, en een verzoek dat dan nog steeds faalt, wordt niet gefactureerd. Elk verzoek wordt gefactureerd voor wat de provider in rekening heeft gebracht, zonder extra UberLLM-kosten, en wordt met de kosten vermeld in Dashboard → Activiteit. Je kiest een model, geen provider.
Model-ID's
Gebruik de model-ID uit de catalogus, bijv. deepseek/deepseek-v4-flash,
anthropic/claude-sonnet-5 of z-ai/glm-5.3. Hier is wat je nu kunt aanroepen:
GET https://api.uberllm.dev/v1/models: de chatmodellen waarnaar nu een verzoek kan worden gestuurd, zodat een tool die zijn modelmenu vult vanuit deze lijst (SillyTavern, LibreChat, n8n, Cline) alleen modellen toont waarmee het kan chatten. Voeg?type=video(ofimage,music,speech,transcription,audiovoor beide,chat, meerdere samengevoegd met komma's) toe voor andere soorten, of?type=allvoor elk model, eerst chat, dan afbeelding, video, muziek, spraak en transcriptie. Elke vermelding heefttype(chat,image,video,music,speech,transcription),endpoints(de paden die het bedienen) enpricing.- Elk chatmodel vermeldt ook wat het kan doen:
context_length,max_output_tokens,input_modalities(image= het leest afbeeldingen),supports_tools,supports_reasoning,supports_visionensupported_parameters(de verzoekvelden die het accepteert). Dezelfde feiten staan ook onder de namen van OpenRouter (architecture.input_modalities,top_provider.context_length,top_provider.max_completion_tokens, enpricing.prompt/pricing.completionin dollars per token), dus tools die zijn gebouwd voor de lijst van OpenRouter lezen de onze zoals deze is. GET https://api.uberllm.dev/v1/models/<model id>: één model, met zijn prijs, zijn context (chat) en, voor een mediamodel,parameters: een JSON Schema van de request body (zie Maak een video of afbeelding).- Elke vermelding, in beide antwoorden, heeft ook:
available:truewanneer een verzoek ervoor nu kan worden afgehandeld.falsebetekent dat niemand het op dit moment bedient, dus een verzoek zou worden geweigerd metno_available_provider. Kies een ander model of probeer het later opnieuw.input_modalities: wat het model accepteert. Een model dat een afbeelding nodig heeft (afbeelding naar video, referentie naar video, beeldbewerking) vermeldt"image"naast"text"; een model dat een video accepteert (upscaling) vermeldt"video".nsfw:truevoor een model gemaakt voor volwassen of ongefilterde inhoud (Lustify, de "ongecensureerde" modellen en dergelijke). Sla deze over als je product veilig moet blijven voor werk.
- Openbaar, geen sleutel:
GET https://api.uberllm.dev/api/v1/public/models(met prijzen, en dezelfdeavailable,input_modalitiesennsfwvelden) - Web: uberllm.dev/#models, en een pagina per model op
uberllm.dev/models/<model id>
Wat gebeurt er bij elk verzoek
- UberLLM controleert of het model bestaat, of je prompt in zijn context window past, en of het tools ondersteunt als je verzoek deze gebruikt.
- Het reserveert de geschatte kosten van je saldo en stuurt het verzoek door.
- Het verzoek wordt naar een beschikbare provider voor dat model gestuurd. De provider wordt
voor elke aanroep opnieuw gekozen: de goedkoopste die snel genoeg begint te antwoorden
voor de grootte van je prompt (binnen 2x van de snelst gemeten, of onder 1
seconde). Een lange gestreamde prompt gaat ook naar een tweede snelle provider wanneer de
eerste traag is met starten; je krijgt en betaalt voor één antwoord. Het benoemen van providers in
provider.only,ignoreoforder, of het instellen vansort, vervangt deze keuze. Hoe het werkt: slimme routering. - Wanneer het antwoord voltooid is, verrekent UberLLM de prijs die de marketplace rapporteert voor die aanroep en geeft de rest van de reservering vrij.
Automatische herpogingen
Als een oproep mislukt voordat er inhoud bij u terechtkomt, probeert UberLLM het opnieuw voor u. De marktplaats zoekt bij elke poging opnieuw een verkoper, en er worden geen kosten in rekening gebracht voor een oproep die mislukte voordat deze werd gerouteerd, dus een herpoging kost u alleen tijd.
- Herpoging bij: geen verkoper beschikbaar voor het model op dit moment (
no_sellers_for_model,no_healthy_sellers), de marktplaats had onvoldoende tijd om te routeren (route_deadline_exceeded), een429die vraagt om 5 seconden of minder te wachten, elke5xx, een verbindingsfout, een verkoper wiens eigen provider key of account mislukte, of geen eerste byte op tijd. - Geen herpoging bij: het model bestaat niet, de aanvraag is ongeldig, of een facturerings- of auth-probleem. Deze worden direct teruggestuurd.
- Schema: tot 4 pogingen, met een wachttijd van 0.3 s, 0.9 s, daarna 2.7 s tussen
de pogingen (of de
Retry-Afterdie de marktplaats heeft verzonden, als deze 5 seconden of minder is). Wanneer niemand het model verkoopt, komt het antwoord binnen enkele seconden terug. - Wachten op de eerste byte: een stream krijgt 10 seconden (meer voor een lange
prompt, en meer voor een model dat gewoonlijk traag is); een antwoord zonder
"stream": truekrijgt 85 seconden, omdat er niets arriveert totdat het voltooid is. Een poging die de volledige 85 seconden opgebruikt, wordt geen tweede keer afgewacht. Geen herpoging start na 150 seconden.
Zodra streaming is gestart, wordt niets opnieuw geprobeerd: een storing midden in de stream beëindigt de stream en u wordt alleen gefactureerd voor wat er is geproduceerd.
Als elke poging mislukt, krijgt u een foutmelding in plaats van een antwoord, en de reservering wordt volledig vrijgegeven. De meest voorkomende zijn:
| HTTP | code |
Wanneer |
|---|---|---|
| 503 | no_available_provider |
Niemand kon dat model op dit moment leveren, zelfs niet na herpogingen: geen verkoper, elke verkoper faalt of is te traag om te starten, of uw provider opties lieten niets over om naar te routeren. Het bericht noemt het model. Probeer het binnenkort opnieuw of kies een ander model. |
| 503 | service_unavailable |
Een tijdelijk probleem aan de kant van UberLLM. Probeer het over een paar minuten opnieuw. |
| 404 | model_not_found |
De model id is niet beschikbaar. |
Zie Errors voor de volledige lijst.
Terugvalmodellen
Stuur models met een lijst van andere model-ID's om te proberen, op volgorde, wanneer de eerste niet kan worden geleverd:
{ "model": "deepseek/deepseek-v4-flash",
"models": ["z-ai/glm-5.3", "qwen/qwen3.6-plus"],
"messages": [{ "role": "user", "content": "hi" }] }
Het volgende model wordt alleen geprobeerd wanneer niemand het vorige model op dit moment kan leveren (no_available_provider), of niemand het verkoopt binnen jouw provider.max_price.
Een verzoekfout (een ongeldige body, een onbekende model-ID in een van beide velden) en een geldweigering (saldo, sleutellimieten) worden direct beantwoord en nooit doorgegeven aan de lijst. Maximaal 5 modellen in model en models samen. Het model veld van het antwoord en de Activiteit-rij noemen het model dat heeft geantwoord. models werkt op /v1/chat/completions en op verzoeken voor afbeeldingen, video, muziek en spraak;
/v1/messages en /v1/audio/transcriptions lezen het niet.
Modelaliassen
In plaats van een model-ID kun je benoemen wat je nodig hebt, en UberLLM kiest het model bij elk verzoek:
best-price:<job>: het beschikbare model met de laagste prijs voor één gewoon verzoek. Een chatmodel wordt vergeleken op basis van de prijs per miljoen tokens, waarbij de uitvoer driemaal wordt geteld; een afbeeldingsmodel op basis van één afbeelding (één 1024×1024 afbeelding wanneer de prijs per megapixel is); een videamodel op basis van de kortste clip; een muziekmodel op basis van één nummer; een spraakmodel op basis van 1K tekens; een transcriptiemodel op basis van één minuut.fastest:<job>: het model met de laagste mediane tijd over de succesvolle verzoeken op UberLLM in de afgelopen 7 dagen (tijd tot de eerste token voor chat, tijd tot het voltooide bestand voor media), waarbij alleen modellen worden geteld met ten minste 5 van dergelijke verzoeken. Wanneer geen enkel model voldoende heeft, wordt het verzoek geweigerd met503 no_timing_data, en werktbest-price:nog steeds.
Beide kiezen alleen uit modellen die nu beschikbaar zijn: de live markt toont een gezonde verkoper ervoor, en UberLLM's laatste verzoek eraan in de afgelopen 10 minuten vond niet elke verkoper bezet of offline (dezelfde regel als available op /v1/models). Op een media route, wanneer het model dat een alias heeft gekozen antwoordt dat niemand het verzoek toch kan aannemen, gaat hetzelfde verzoek door naar het volgende model waar de alias voor staat (tot 3 modellen), en de model van het antwoord noemt degene die heeft geantwoord. Wanneer er geen model voor de taak beschikbaar is, is het antwoord 503 no_available_provider en wordt er niets in rekening gebracht.
<job> is een van chat, image, image-edit, text-to-video,
image-to-video, music, speech, transcription. Stuur een chat alias naar /v1/chat/completions of
/v1/messages, en een media alias naar de bijbehorende media route. Het model veld
van het antwoord noemt het model waarnaar het is opgelost. GET /v1/models/aliases toont elke alias die
nu wordt opgelost en het bijbehorende model; GET /v1/models/best-price:chat beschrijft het
model waar het voor staat, met alias ingesteld.
Routeringsopties
Het provider object wordt gelezen op /v1/chat/completions. Een optie die UberLLM niet kan toepassen, wordt geweigerd met 400 unsupported_routing_option en er wordt niets in rekening gebracht, zodat een verzoek nooit wordt uitgevoerd met een instelling die stilzwijgend is genegeerd.
| Optie | Wat het doet |
|---|---|
only / allow |
Alleen deze routes of providers. uberllm (de marketplace route van UberLLM) en seller (eigen aanbiedingen van verkopers) kiezen tussen onze routes. Elke andere naam, zoals openai of api.venice.ai, is een provider op de marketplace: het verzoek gaat dan via de uberllm route, die alleen aanbiedingen van die providers gebruikt. |
ignore / deny |
Nooit deze. Routenamen zoals hierboven. Providernamen (maximaal 32) worden geweigerd op de marketplace, en het verzoek gaat dan via de uberllm route. |
order |
Voorkeursvolgorde. Routenamen bepalen de volgorde van onze routes; providernamen bepalen de pogingsvolgorde van de marketplace. Het maakt een provider nooit geschikt of ongeschikt. |
sort |
price (de standaard), latency (snelst waargenomen eerst, binnen een prijsband) of uptime (meest betrouwbaar eerst, binnen dezelfde band). throughput ordent alleen onze eigen routes. |
max_price |
Het maximale dat u betaalt per miljoen tokens, in Amerikaanse dollars: { "prompt": 1.0, "completion": 3.0 }. Routes die erboven geprijsd zijn, worden overgeslagen; de marketplace route wordt aan verkopers aangeboden met ten minste zoveel korting op de catalogusprijs van het model als uw plafond vereist. Als er niets overblijft, wordt het verzoek geweigerd met 400 max_price_exceeded en wordt er niets in rekening gebracht. Wanneer u zowel prompt als completion instelt, wordt een verzoek nooit boven deze bedragen gefactureerd voor de tokens die het heeft gebruikt. |
allow_fallbacks |
false schakelt de automatische herpogingen hierboven uit; de eerste fout wordt aan u geretourneerd. |
data_collection |
Alleen "allow" (de standaard) wordt geaccepteerd. |
zdr, require_parameters |
Alleen false wordt geaccepteerd. |
De modelachtervoegsels :floor en :nitro worden geaccepteerd en verwijderd uit de model-ID; :floor sorteert op prijs en :nitro op throughput.
Voor afbeeldingen, video, muziek en spraak wordt elk verzoek naar een beschikbare externe provider voor het model gestuurd. provider.max_price is het maximale dat één eenheid (afbeelding, seconde, megapixel, minuut, 1K tekens of verzoek) mag kosten, als een getal: { "max_price": 0.05 }; het stelt ook een maximum aan de factuur. Elke andere provider optie wordt geweigerd voor media.
Tags
Stuur metadata, een object van maximaal 16 tekstwaarden (sleutels van maximaal 64 tekens zonder dubbele punt, waarden van maximaal 512), bij elk verzoek:
{ "model": "deepseek/deepseek-v4-flash", "messages": [...],
"metadata": { "project": "spring-ads", "run": "42" } }
De tags worden opgeslagen bij het verzoek en nooit naar een provider gestuurd. Ze verschijnen bij het verzoek in Dashboard → Activiteit, bij de status van een video- of muziektaak, en in de CSV-export (kolom metadata). Filter Activiteit op een tag met GET /api/v1/usage/activity?tag=project:spring-ads (herhaal tag om er meerdere te vereisen); de CSV-link gebruikt hetzelfde filter. Op /v1/messages wordt Anthropic's eigen metadata ({"user_id": "…"}) op dezelfde manier opgeslagen.