NieuwKoppel elke agent aan UberLLM: één sleutel, elk model, voor de catalogusprijs of minder.
UberLLM

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 (of image, music, speech, transcription, audio voor beide, chat, meerdere samengevoegd met komma's) toe voor andere soorten, of ?type=all voor elk model, eerst chat, dan afbeelding, video, muziek, spraak en transcriptie. Elke vermelding heeft type (chat, image, video, music, speech, transcription), endpoints (de paden die het bedienen) en pricing.
  • Elk chatmodel vermeldt ook wat het kan doen: context_length, max_output_tokens, input_modalities (image = het leest afbeeldingen), supports_tools, supports_reasoning, supports_vision en supported_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, en pricing.prompt / pricing.completion in 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: true wanneer een verzoek ervoor nu kan worden afgehandeld. false betekent dat niemand het op dit moment bedient, dus een verzoek zou worden geweigerd met no_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: true voor 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 dezelfde available, input_modalities en nsfw velden)
  • Web: uberllm.dev/#models, en een pagina per model op uberllm.dev/models/<model id>

Wat gebeurt er bij elk verzoek

  1. UberLLM controleert of het model bestaat, of je prompt in zijn context window past, en of het tools ondersteunt als je verzoek deze gebruikt.
  2. Het reserveert de geschatte kosten van je saldo en stuurt het verzoek door.
  3. 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, ignore of order, of het instellen van sort, vervangt deze keuze. Hoe het werkt: slimme routering.
  4. 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), een 429 die vraagt om 5 seconden of minder te wachten, elke 5xx, 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-After die 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": true krijgt 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 met 503 no_timing_data, en werkt best-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.