Short answer
If your product calls more than one model, you don't need a separate account, SDK, key and bill for each vendor. Point the official OpenAI SDK at one OpenAI-compatible gateway and pick the model per request by name:
- One client, one key:
base_url="https://api.teamorouter.com/v1"and a TeamoRouter key. DeepSeek, Gemini, Claude and GPT models all answer on/v1/chat/completions. - Route by task: cheap high-volume work to
deepseek-flash, long documents and images to Gemini, code to Claude, general reasoning to GPT. Changing models is a string, not a new integration. - One balance: prepaid from $5, billed per token, no subscription. Pay by card or with USDT, USDC or ETH.
New accounts start with a $0 balance — top up before your first request. Top up from $5. If a request returns 402 (400 on the OpenAI format) with "wallet balance is insufficient", your balance is empty — your base URL and key are fine. Top up and retry.
Get one API key for every model
Why one OpenAI-compatible endpoint
Wiring each vendor directly means a DeepSeek account, a Google Cloud project, an Anthropic Console organization and an OpenAI organization — each with its own SDK, key rotation, rate limits, invoices and, in some countries, region checks. For a small team shipping a product, that's four integrations to maintain before you've compared a single answer.
With one OpenAI-compatible endpoint:
- Your code uses one client library and one request shape.
- Trying a different model is a config change you can A/B test.
- Spend for every model lands in one balance, with usage you can split by key.
If you're still choosing a gateway, see the LLM gateway selection guide. This article is about wiring several models into your own product.
Which model for which task
Official prices per million tokens, from each vendor's pricing page:
| Task | Model ID | Why | Official price (input / output) |
|---|---|---|---|
| High-volume, cheap: classification, extraction, short chat | deepseek-flash |
Lowest cost per token | $0.15 / $0.60 off-peak, $0.30 / $1.20 peak (DeepSeek) |
| Long documents, screenshots, mixed text and images | gemini-3.8-flash |
Fast Flash model with multimodal input | $0.75 / $3.75 through December 31, 2026 (Google) |
| Harder long-context analysis | gemini-3.1-pro-preview |
Gemini Pro tier | $2.00 / $12.00 for prompts up to 200K tokens (Google) |
| Code generation, code review, agents | claude-sonnet-5-5 |
Strong at code and tool use | $2 / $10 (Anthropic) |
| The hardest coding tasks | claude-opus-5-5 |
Anthropic's top generally available Opus | $4 / $20 |
| General reasoning and writing | gpt-6.1-sol |
Close to GPT-6 Astra at lower cost | $2 / $10 (OpenAI) |
DeepSeek's peak hours are 01:00–04:00 and 06:00–10:00 UTC on weekdays; batch jobs scheduled outside them cost half. TeamoRouter's current prices for all of these are on the pricing page and each model page.
Python: one client, models by task
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.teamorouter.com/v1", api_key=os.environ["TEAMO_API_KEY"])
MODELS = {
"bulk": "deepseek-flash",
"long_context": "gemini-3.8-flash",
"code": "claude-sonnet-5-5",
"reasoning": "gpt-6.1-sol",
}
def ask(task: str, prompt: str) -> str:
response = client.chat.completions.create(
model=MODELS[task],
messages=[{"role": "user", "content": prompt}],
max_tokens=1024,
)
return response.choices[0].message.content
print(ask("bulk", "Classify this ticket as billing, bug or feature request: 'I was charged twice.'"))
print(ask("code", "Write a Python function that retries an HTTP call with exponential backoff."))
A simple fallback. If one model is unavailable or slow for a moment, retry on another:
from openai import APIError
def ask_with_fallback(prompt: str, models=("claude-sonnet-5-5", "gpt-6.1-sol")) -> str:
last_error = None
for model in models:
try:
r = client.chat.completions.create(model=model, messages=[{"role": "user", "content": prompt}], timeout=60)
return r.choices[0].message.content
except APIError as e:
last_error = e
raise last_error
Node.js: same idea
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.teamorouter.com/v1", apiKey: process.env.TEAMO_API_KEY });
const MODELS = { bulk: "deepseek-flash", longContext: "gemini-3.8-flash", code: "claude-sonnet-5-5", reasoning: "gpt-6.1-sol" };
export async function ask(task, prompt) {
const r = await client.chat.completions.create({
model: MODELS[task],
messages: [{ role: "user", content: prompt }],
max_tokens: 1024,
});
return r.choices[0].message.content;
}
Streaming works the same way: pass stream: true (Node) or stream=True (Python). If part of your stack already speaks Anthropic's or Gemini's native format, the same key works there too; see the API integration guide.
Keys, usage and cost control
- One key per service or environment. Create separate keys for production, staging and each internal tool in the dashboard. If a key leaks, you revoke one key, not everything.
- See spend per key. The usage page can be filtered by key, so you can tell which feature or customer is driving cost.
- Keep model names in config. Read them from environment variables so you can switch a task to a cheaper or stronger model without a redeploy.
- Cap output. Set
max_tokensper task; summaries rarely need 4,000 tokens.
Paying for usage
No subscription and no per-vendor accounts: you top up one balance from $5 and pay only for the tokens you use, by card or with USDT, USDC or ETH from any exchange or wallet (how crypto top-ups work).
FAQ
Do I need accounts with DeepSeek, Google, Anthropic and OpenAI?
No. You call every model with one TeamoRouter key; no vendor accounts or vendor API keys are involved.
Does every model work with the OpenAI SDK?
Yes, through /v1/chat/completions with the model ID as the only difference. GPT models also support the Responses API (/v1/responses).
Can I switch a task to another model without changing code?
Yes, if you read model names from configuration as in the examples. The request and response format stays the same.
How do I keep costs predictable?
Send high-volume work to the cheapest model that's good enough, cap max_tokens, schedule DeepSeek batch jobs off-peak, and watch spend per key in the dashboard.