OpenAI-compatible API across 4 providers
Point any OpenAI SDK at your workspace's /v1 base URL and call OpenAI, Anthropic, Google Gemini, Groq, or local Ollama models with one API key. Streaming, tools, and usage metering work the same as the OpenAI API.
Quick start
- Create a workspace — sign up and you get a
<slug>.worouter.comsubdomain with $1 of starter credit. - Mint an API key on the API Keys page. It looks like
wor_live_…. - Point any OpenAI SDK at your workspace's
/v1base with that key. Switch models by changing themodelstring.
Your API base URL
https://<your-workspace>.ai.wozinga.com/v1Authorization: Bearer wor_live_…Video generation (async)
Video models (e.g. bytedance/seedance-1.5-pro) run as asynchronous tasks: create one, then poll until status is succeeded and download content.video_url. Billing uses the task's reported video tokens.
curl https://<your-workspace>.ai.wozinga.com/v1/videos/generations \
-H "Authorization: Bearer wor_live_..." \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance/seedance-1.5-pro",
"content": [{"type":"text","text":"A sailboat at sunset --resolution 720p --duration 5"}]
}'Then poll with the returned task id:
curl https://<your-workspace>.ai.wozinga.com/v1/videos/generations/cgt-2026... \ -H "Authorization: Bearer wor_live_..."
Example — curl
curl https://<your-workspace>.ai.wozinga.com/v1/chat/completions \
-H "Authorization: Bearer wor_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'Example — Python (openai SDK)
from openai import OpenAI
client = OpenAI(
base_url="https://<your-workspace>.ai.wozinga.com/v1",
api_key="wor_live_YOUR_KEY",
)
resp = client.chat.completions.create(
model="anthropic/claude-haiku-4.5",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)Example — Node (openai SDK)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://<your-workspace>.ai.wozinga.com/v1",
apiKey: "wor_live_YOUR_KEY",
});
const resp = await client.chat.completions.create({
model: "anthropic/claude-haiku-4.5",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(resp.choices[0].message.content);Streaming
Add "stream": true to any request and the response is a Server-Sent Events stream of chat.completion.chunk objects — same shape as OpenAI.
curl -N https://<your-workspace>.ai.wozinga.com/v1/chat/completions \
-H "Authorization: Bearer wor_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"stream": true,
"messages": [{"role":"user","content":"Tell me a story."}]
}'Available models (31)
Routed IDs are provider/model. Sell price is per million tokens (USD): prompt / completion. Up-to-date list comes from the live catalog.
| Routed ID | Name | Context | Sell P/C ($/M) |
|---|---|---|---|
anthropic/claude-fable-5 | Claude Fable 5 | 200000 | $10 / $50 |
anthropic/claude-haiku-4.5 | Claude Haiku 4.5 | 200000 | $1 / $5 |
anthropic/claude-opus-4.8 | Claude Opus 4.8 | 200000 | $15 / $75 |
anthropic/claude-sonnet-4.6 | Claude Sonnet 4.6 | 200000 | $3 / $15 |
anthropic/claude-sonnet-5 | Claude Sonnet 5 | 200000 | $3 / $15 |
bytedance/seed-1.6 | Seed 1.6 | 256000 | $0.25 / $2 |
bytedance/seed-1.8 | ByteDance Seed 1.8 | 256000 | $0.25 / $2 |
bytedance/seedance-1.0-pro | Seedance 1.0 Pro | 0 | $0 / $2.5 |
bytedance/seedance-1.5-pro | Seedance 1.5 Pro | 0 | $0 / $1.2 |
bytedance/seedance-2.0 | Seedance 2.0 | 0 | $0 / $1.5 |
deepseek/deepseek-r1 | DeepSeek R1 | 163840 | $1.5 / $6 |
gemini/gemini-2.0-flash | Gemini 2.0 Flash | 1000000 | $0.1 / $0.4 |
gemini/gemini-2.5-pro | Gemini 2.5 Pro | 1000000 | $1.25 / $10 |
groq/llama-3.3-70b | Llama 3.3 70B (Groq) | 128000 | $0.59 / $0.79 |
heygen/avatar-iv | HeyGen Avatar IV | 0 | $0 / $66666.67 |
heygen/avatar-standard | HeyGen Avatar (standard) | 0 | $0 / $16666.67 |
ollama/llama3.1 | Llama 3.1 (local) | 128000 | $0 / $0 |
openai/gpt-4.1 | GPT-4.1 | 1000000 | $2 / $8 |
openai/gpt-4o | GPT-4o | 128000 | $2.5 / $10 |
openai/gpt-4o-mini | GPT-4o mini | 128000 | $0.15 / $0.6 |
openai/o3-mini | o3-mini | 200000 | $1.1 / $4.4 |
wozinga/deepseek-r1 | DeepSeek R1 70B (Wozinga) | 65536 | $0 / $0 |
wozinga/qwen2.5-vl-7b | Qwen2.5-VL 7B (Wozinga) | 6144 | $0 / $0 |
wozinga/qwen3-14b | Qwen3 14B (Wozinga) | 32768 | $0 / $0 |
wozinga/qwen3-coder | Qwen3-Coder (Wozinga) | 131072 | $0 / $0 |
wozinga/qwen3-embedding-0.6b | Qwen3 Embedding 0.6B (Wozinga) | 32768 | $0 / $0 |
wozinga/whisper-large-v3 | Whisper Large v3 (Wozinga) | 0 | $0 / $0 |
xai/grok-4.20-non-reasoning | Grok 4.20 (non-reasoning) | 256000 | $1.25 / $2.5 |
xai/grok-4.20-reasoning | Grok 4.20 (reasoning) | 256000 | $1.25 / $2.5 |
xai/grok-4.3 | Grok 4.3 | 256000 | $1.25 / $2.5 |
xai/grok-imagine-video | Grok Imagine (video) | 0 | $0 / $50000 |
What's compatible?
- Chat completions:
/v1/chat/completions(streaming + non-streaming) - Model listing:
/v1/models(returns the live catalog with pricing) - Tool calls: OpenAI-shaped
tools+tool_choice; translated to each provider's native form - Usage metering: every response includes
prompt_tokens/completion_tokens; the gateway debits your workspace's credit balance accordingly - Per-key rate limits and insufficient-quota (402) responses