gateway and extensions parameters use identical structure in Chat Completions and the Response API. Pass them at the top level of the request body.
Prerequisites
- An Auriko API key
- Python 3.10+ with the OpenAI SDK (
pip install openai) or the Auriko SDK (pip install auriko)- OR Node.js 18+ with the OpenAI SDK (
npm install openai) or@auriko/sdk(npm install @auriko/sdk)
- OR Node.js 18+ with the OpenAI SDK (
Route across models
Route a request across multiple models:import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["AURIKO_API_KEY"],
base_url="https://api.auriko.ai/v1"
)
response = client.responses.create(
input="What is the capital of France?",
extra_body={
"gateway": {
"models": ["gpt-4o", "claude-sonnet-4-20250514"],
"routing": {"optimize": "cost"}
}
}
)
print(response.output_text)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.AURIKO_API_KEY,
baseURL: "https://api.auriko.ai/v1",
});
const response = await client.responses.create({
input: "What is the capital of France?",
// @ts-expect-error Auriko extension
gateway: {
models: ["gpt-4o", "claude-sonnet-4-20250514"],
routing: { optimize: "cost" },
},
});
console.log(response.output_text);
import os
from auriko import Client
client = Client(
api_key=os.environ["AURIKO_API_KEY"],
base_url="https://api.auriko.ai/v1"
)
response = client.responses.create(
input="What is the capital of France?",
gateway={
"models": ["gpt-4o", "claude-sonnet-4-20250514"],
"routing": {"optimize": "cost"}
}
)
print(response.output_text)
print(f"Provider: {response.routing_metadata.provider}")
print(f"Cost: ${response.routing_metadata.cost.usd}")
import { Client } from "@auriko/sdk";
const client = new Client({
apiKey: process.env.AURIKO_API_KEY,
baseUrl: "https://api.auriko.ai/v1",
});
const response = await client.responses.create({
input: "What is the capital of France?",
gateway: {
models: ["gpt-4o", "claude-sonnet-4-20250514"],
routing: { optimize: "cost" },
},
});
console.log(response.output_text);
console.log(`Provider: ${response.routing_metadata?.provider}`);
console.log(`Cost: $${response.routing_metadata?.cost?.usd}`);
curl https://api.auriko.ai/v1/responses \
-H "Authorization: Bearer $AURIKO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": "What is the capital of France?",
"gateway": {
"models": ["gpt-4o", "claude-sonnet-4-20250514"],
"routing": {"optimize": "cost"}
}
}'
Set routing options
Control routing strategy withgateway.routing:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["AURIKO_API_KEY"],
base_url="https://api.auriko.ai/v1"
)
response = client.responses.create(
input="Summarize the benefits of solar energy",
extra_body={
"gateway": {
"models": ["gpt-4o", "claude-sonnet-4-20250514", "gemini-2.5-flash"],
"routing": {
"optimize": "cost",
"max_cost_per_1m": 5.0,
"max_ttft_ms": 2000
}
}
}
)
print(response.output_text)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.AURIKO_API_KEY,
baseURL: "https://api.auriko.ai/v1",
});
const response = await client.responses.create({
input: "Summarize the benefits of solar energy",
// @ts-expect-error Auriko extension
gateway: {
models: ["gpt-4o", "claude-sonnet-4-20250514", "gemini-2.5-flash"],
routing: {
optimize: "cost",
max_cost_per_1m: 5.0,
max_ttft_ms: 2000,
},
},
});
console.log(response.output_text);
import os
from auriko import Client
client = Client(
api_key=os.environ["AURIKO_API_KEY"],
base_url="https://api.auriko.ai/v1"
)
response = client.responses.create(
input="Summarize the benefits of solar energy",
gateway={
"models": ["gpt-4o", "claude-sonnet-4-20250514", "gemini-2.5-flash"],
"routing": {
"optimize": "cost",
"max_cost_per_1m": 5.0,
"max_ttft_ms": 2000
}
}
)
print(response.output_text)
import { Client } from "@auriko/sdk";
const client = new Client({
apiKey: process.env.AURIKO_API_KEY,
baseUrl: "https://api.auriko.ai/v1",
});
const response = await client.responses.create({
input: "Summarize the benefits of solar energy",
gateway: {
models: ["gpt-4o", "claude-sonnet-4-20250514", "gemini-2.5-flash"],
routing: {
optimize: "cost",
max_cost_per_1m: 5.0,
max_ttft_ms: 2000,
},
},
});
console.log(response.output_text);
curl https://api.auriko.ai/v1/responses \
-H "Authorization: Bearer $AURIKO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": "Summarize the benefits of solar energy",
"gateway": {
"models": ["gpt-4o", "claude-sonnet-4-20250514", "gemini-2.5-flash"],
"routing": {
"optimize": "cost",
"max_cost_per_1m": 5.0,
"max_ttft_ms": 2000
}
}
}'
Pass provider extensions
Pass provider-specific parameters withextensions:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["AURIKO_API_KEY"],
base_url="https://api.auriko.ai/v1"
)
response = client.responses.create(
model="claude-sonnet-4-20250514",
input="Write a haiku about programming",
extra_body={
"extensions": {
"anthropic": {
"metadata": {"user_id": "user-123"}
}
}
}
)
print(response.output_text)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.AURIKO_API_KEY,
baseURL: "https://api.auriko.ai/v1",
});
const response = await client.responses.create({
model: "claude-sonnet-4-20250514",
input: "Write a haiku about programming",
// @ts-expect-error Auriko extension
extensions: {
anthropic: {
metadata: { user_id: "user-123" },
},
},
});
console.log(response.output_text);
import os
from auriko import Client
client = Client(
api_key=os.environ["AURIKO_API_KEY"],
base_url="https://api.auriko.ai/v1"
)
response = client.responses.create(
model="claude-sonnet-4-20250514",
input="Write a haiku about programming",
extensions={
"anthropic": {
"metadata": {"user_id": "user-123"}
}
}
)
print(response.output_text)
import { Client } from "@auriko/sdk";
const client = new Client({
apiKey: process.env.AURIKO_API_KEY,
baseUrl: "https://api.auriko.ai/v1",
});
const response = await client.responses.create({
model: "claude-sonnet-4-20250514",
input: "Write a haiku about programming",
extensions: {
anthropic: {
metadata: { user_id: "user-123" },
},
},
});
console.log(response.output_text);
curl https://api.auriko.ai/v1/responses \
-H "Authorization: Bearer $AURIKO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"input": "Write a haiku about programming",
"extensions": {
"anthropic": {
"metadata": {"user_id": "user-123"}
}
}
}'
Access routing metadata
Every Auriko response includes routing metadata with provider, cost, and latency details. With the Auriko SDK (Python, TypeScript):import os
from auriko import Client
client = Client(
api_key=os.environ["AURIKO_API_KEY"],
base_url="https://api.auriko.ai/v1"
)
response = client.responses.create(
model="gpt-4o",
input="Hello!"
)
meta = response.routing_metadata
print(f"Provider: {meta.provider}")
print(f"Model: {meta.provider_model_id}")
print(f"Strategy: {meta.routing_strategy}")
print(f"TTFT: {meta.ttft_ms}ms")
print(f"Throughput: {meta.throughput_tps} tps")
if meta.cost:
print(f"Cost: ${meta.cost.usd}")
import { Client } from "@auriko/sdk";
const client = new Client({
apiKey: process.env.AURIKO_API_KEY,
baseUrl: "https://api.auriko.ai/v1",
});
const response = await client.responses.create({
model: "gpt-4o",
input: "Hello!",
});
const meta = response.routing_metadata;
console.log(`Provider: ${meta?.provider}`);
console.log(`Model: ${meta?.provider_model_id}`);
console.log(`Strategy: ${meta?.routing_strategy}`);
console.log(`TTFT: ${meta?.ttft_ms}ms`);
console.log(`Throughput: ${meta?.throughput_tps} tps`);
console.log(`Cost: $${meta?.cost?.usd}`);
import os
from auriko import Client
client = Client(
api_key=os.environ["AURIKO_API_KEY"],
base_url="https://api.auriko.ai/v1"
)
stream = client.responses.create(
model="gpt-4o",
input="Hello!",
stream=True
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
meta = stream.completed_response.routing_metadata
print(f"\nProvider: {meta.provider}, Cost: ${meta.cost.usd}")
import { Client } from "@auriko/sdk";
const client = new Client({
apiKey: process.env.AURIKO_API_KEY,
baseUrl: "https://api.auriko.ai/v1",
});
const stream = await client.responses.create({
model: "gpt-4o",
input: "Hello!",
stream: true,
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
}
const meta = stream.completedResponse?.routing_metadata;
console.log(`\nProvider: ${meta?.provider}, Cost: $${meta?.cost?.usd}`);
provider, provider_model_id, model_canonical, routing_strategy, ttft_ms, throughput_tps, cost.usd.
See Routing Options, Advanced Routing, Response Metadata, and Response Headers for details.