Unified API
Keep your existing OpenAI SDK code. Change the base URL and you're live.
Stop juggling API keys and provider dashboards. Route requests across OpenAI, Anthropic, Google Gemini, Mistral and DeepSeek, track costs in real time, and switch models without changing your code.
Integration
Already using an OpenAI SDK? Point it at api.openvertexrouter.com and you're done. Works with any language or framework.
curl https://api.openvertexrouter.com/v1/chat/completions \
-H "Authorization: Bearer $OVR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{ "role": "user", "content": "Hello" }]
}'import OpenAI from "openai";
const client = new OpenAI({
// the only change
baseURL: "https://api.openvertexrouter.com/v1",
apiKey: process.env.OVR_API_KEY,
});
const completion = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [{ role: "user", content: "Hello" }],
});// app/api/chat/route.ts
import OpenAI from "openai";
const client = new OpenAI({
// the only change
baseURL: "https://api.openvertexrouter.com/v1",
apiKey: process.env.OVR_API_KEY,
});
export async function POST(req: Request) {
const { messages } = await req.json();
const completion = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages,
});
return Response.json(completion.choices[0].message);
}import os
from openai import OpenAI
client = OpenAI(
# the only change
base_url="https://api.openvertexrouter.com/v1",
api_key=os.environ["OVR_API_KEY"],
)
completion = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Hello"}],
)OpenAIClient client = OpenAIOkHttpClient.builder()
// the only change
.baseUrl("https://api.openvertexrouter.com/v1")
.apiKey(System.getenv("OVR_API_KEY"))
.build();
ChatCompletion completion = client.chat().completions().create(
ChatCompletionCreateParams.builder()
.model("anthropic/claude-sonnet-5")
.addUserMessage("Hello")
.build());client := openai.NewClient(
// the only change
option.WithBaseURL("https://api.openvertexrouter.com/v1"),
option.WithAPIKey(os.Getenv("OVR_API_KEY")),
)
completion, err := client.Chat.Completions.New(ctx,
openai.ChatCompletionNewParams{
Model: "anthropic/claude-sonnet-5",
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Hello"),
},
})$client = OpenAI::factory()
// the only change
->withBaseUri('https://api.openvertexrouter.com/v1')
->withApiKey(getenv('OVR_API_KEY'))
->make();
$completion = $client->chat()->create([
'model' => 'anthropic/claude-sonnet-5',
'messages' => [['role' => 'user', 'content' => 'Hello']],
]);client = OpenAI::Client.new(
# the only change
uri_base: "https://api.openvertexrouter.com/v1",
access_token: ENV["OVR_API_KEY"]
)
completion = client.chat(parameters: {
model: "anthropic/claude-sonnet-5",
messages: [{ role: "user", content: "Hello" }]
})How it works
Each call runs on infrastructure allocated to your account alone, with isolated provider keys. No shared gateway, no noisy neighbours. Choose between a single instance sized to your workload (Business) and several instances running in parallel behind a load balancer (Enterprise).
Why teams switch
providers, one endpoint
OpenAI, Anthropic, Google, Mistral, DeepSeek and more — behind one key.
models
From ten providers. Switch models by changing a string.
cost efficiency
Intelligent caching, routing strategies.
uptime
Battle-tested infrastructure built for reliability, even at scale.
Platform capabilities
Eight capabilities that turn a pile of provider accounts into one gateway you can actually govern.
Keep your existing OpenAI SDK code. Change the base URL and you're live.
OpenAI, Anthropic, Google, Mistral and DeepSeek through one integration. Switch models by changing a string.
Your own gateway instance, sized to your workload, with isolated provider keys.
Prepaid balances with hard caps. Every request is pre-authorized before it leaves.
Per-key spend limits, with alerts at 80, 90 and 100% of budget.
Provider and model routing with built-in key failover, following the rules you set.
Real-time spend and token metrics for every request your team sends.
Break down usage and spend by provider and model to spot expensive outliers quickly.
Pricing
The same structure on both: a monthly subscription plus provider usage. Only the numbers change with your volume.