Quickstart

UberLLM is a single endpoint for every model. It speaks the OpenAI and Anthropic wire formats, so most tools and SDKs work by changing one setting: the base URL. Your existing code stays the same.

  • OpenAI-compatible base URL: https://api.uberllm.dev/v1
  • Anthropic-compatible base URL: https://api.uberllm.dev (endpoint /v1/messages)

1. Create an API key

  1. Sign in at uberllm.dev and open Dashboard → Keys.
  2. Click Create key, name it, and (optionally) set a spend limit or per-minute rate limit.
  3. Copy the key — it is shown once. Keys look like ull_ followed by 43 characters (ull_R7f2...). Store it in an environment variable, never in source control.
export UBERLLM_API_KEY="ull_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

2. Add credits

Inference is prepaid. Open Dashboard → Credits and top up (minimum $5) via Stripe. There is no markup on inference — you pay the provider's token price. A 5% fee applies only to the credit purchase itself. See Pricing.

3. Make your first call

Point any OpenAI-compatible client at https://api.uberllm.dev/v1 with your ull_ key as the API key.

curl (streaming)

curl -N https://api.uberllm.dev/v1/chat/completions \
  -H "Authorization: Bearer $UBERLLM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek/deepseek-v3.1",
    "stream": true,
    "messages": [{"role": "user", "content": "Say hello in one sentence."}]
  }'

Python (official openai SDK)

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.uberllm.dev/v1",
    api_key=os.environ["UBERLLM_API_KEY"],
)

stream = client.chat.completions.create(
    model="deepseek/deepseek-v3.1",
    messages=[{"role": "user", "content": "Say hello in one sentence."}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)

TypeScript (official openai SDK)

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.uberllm.dev/v1",
  apiKey: process.env.UBERLLM_API_KEY,
});

const stream = await client.chat.completions.create({
  model: "deepseek/deepseek-v3.1",
  messages: [{ role: "user", content: "Say hello in one sentence." }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

4. Confirm it worked

Open Dashboard → Activity. You will see the request logged with the model, the provider it was routed to, token counts, latency, and the exact cost deducted from your balance.

Next steps