One base-URL swap. Free shadow mode shows what you'd save — eval-backed, per task. Pay only from realized savings.
Same OpenAI-compatible API. Shadow mode shows savings before you pay.
o10_sk_… key from the console.https://app.o10.io/v1 — that's the only change.model to o10/auto, or another mode below.Or pass any concrete model slug. Pin with ! to skip routing.
curl https://app.o10.io/v1/chat/completions \
-H "Authorization: Bearer o10_sk_…" \
-H "Content-Type: application/json" \
-d '{
"model": "o10/auto",
"messages": [{"role": "user", "content": "say hi"}]
}'curl https://app.o10.io/v1/chat/completions \
-H "Authorization: Bearer o10_sk_…" \
-H "Content-Type: application/json" \
-d '{
"model": "o10/auto",
"messages": [{"role": "user", "content": "say hi"}]
}'from openai import OpenAI
client = OpenAI(
base_url="https://app.o10.io/v1", # ← the only change
api_key="o10_sk_…",
)
resp = client.chat.completions.create(
model="o10/auto",
messages=[{"role": "user", "content": "say hi"}],
)
print(resp.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://app.o10.io/v1", // ← the only change
apiKey: "o10_sk_…",
});
const resp = await client.chat.completions.create({
model: "o10/auto",
messages: [{ role: "user", content: "say hi" }],
});
console.log(resp.choices[0].message.content);# Cursor → Settings → Models → OpenAI API Key # 1. Enable "Override OpenAI Base URL" and set: https://app.o10.io/v1 # 2. Paste your route key as the OpenAI API key: o10_sk_… # 3. Add a custom model named o10/auto (listed via https://app.o10.io/v1/models)
# Cline → Settings → API Provider: "OpenAI Compatible" Base URL: https://app.o10.io/v1 API Key: o10_sk_… Model ID: o10/auto
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://app.o10.io/v1",
api_key="o10_sk_…",
model="o10/auto",
)
print(llm.invoke("say hi").content)import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";
const o10 = createOpenAI({
baseURL: "https://app.o10.io/v1",
apiKey: "o10_sk_…",
});
const { text } = await generateText({
model: o10("o10/auto"),
prompt: "say hi",
});Snippets show a placeholder key — start free and your real key drops in.
Send a live request from your browser — paste an o10 route key (not a provider key). Concrete models listed here have an available AWS Bedrock host route (plus o10 smart modes). Your key stays in this tab only. Response chips include x-o10-byok when present.
Every response explains itself. That's the product.
Every response explains itself. That's the product. Open the console to try it →