Integrations
OpenAI Python SDK
Call GPT, Claude, Gemini and every other model in the catalog from the official openai Python package.
The official openai Python SDK works against ToRouter without changes — point base_url at the gateway, swap in your ToRouter key, and the OpenAI Chat Completions / Responses / Embeddings / Images APIs route to OpenAI, Anthropic, Google and every other upstream behind one endpoint.
Configuration
| Field | Value |
|---|---|
| Base URL | https://portal.torouter.ai/v1 |
| API key | sk-*** (create one at the ToRouter console) |
| Model | gpt-5, claude-opus-4-7, gemini-2.5-pro, ... (see the catalog) |
Environment variables OPENAI_BASE_URL and OPENAI_API_KEY are picked up automatically if you prefer not to pass them in code.
Code
from openai import OpenAI
client = OpenAI(
base_url="https://portal.torouter.ai/v1",
api_key="sk-***",
)
resp = client.chat.completions.create(
model="gpt-5",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)from openai import OpenAI
client = OpenAI(
base_url="https://portal.torouter.ai/v1",
api_key="sk-***",
)
stream = client.chat.completions.create(
model="claude-opus-4-7",
messages=[{"role": "user", "content": "Stream me a haiku"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
print(delta, end="", flush=True)curl https://portal.torouter.ai/v1/chat/completions \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5","messages":[{"role":"user","content":"Hello"}]}'Gotchas
OPENAI_BASE_URLoverrides the SDK default; if your shell already has it set to a different proxy, the constructor argument wins.- Do not append a trailing slash — use
/v1, not/v1/. The SDK joins paths and a trailing slash silently produces 404s. - The Responses API is available on the same base URL (
POST /v1/responses); the SDK'sclient.responses.create(...)works unchanged.