Route + trace your first LLM call through Orbitrage in under two minutes.
Orbitrage is the convenience layer for LLM apps: point your existing OpenAI (or
Anthropic) client at our gateway and every call is routed to the best model
and traced in your dashboard — cost, tokens, latency, tools, and the full
run graph. No SDK rewrite, no OpenTelemetry.
1
Install the latest SDK
The SDK is a thin header-injector; openai is the only peer you need
(Orbitrage speaks OpenAI format).
pip install -U orbitrage openai
npm install orbitrage@latest openai
2
Initialize with your key — and a user id
Call init()once, at the top of your program. Always pass a
user_id so every call is attributed to the end-user who triggered it —
this is what powers per-user cost, usage, and analytics in the dashboard.
import os, orbitrageorbitrage.init( os.environ["ORBITRAGE_API_KEY"], user_id="customer_42", # attribute calls to THIS end-user)
import { orbitrage } from "orbitrage";await orbitrage.init({ apiKey: process.env.ORBITRAGE_API_KEY, userId: "customer_42", // attribute calls to THIS end-user});
Get your orb_ key from app.orbitrage.ai →
API Keys. The SDK points your client at https://api.orbitrage.ai/v1
and injects the key for you — even if you already have OPENAI_API_KEY set.
3
Make a call — pick a model, or let Orbitrage route
Use the OpenAI client exactly as you always have. Name a direct model
(recommended while you build — predictable behavior), or use model="auto"
to let Orbitrage route to the cheapest capable model.
from openai import OpenAIclient = OpenAI() # base_url + key set for youresp = client.chat.completions.create( model="glm-5.2", # direct model — try "minimax-m3" for speed/cost messages=[{"role": "user", "content": "Write a haiku about routing."}],)print(resp.choices[0].message.content)
import OpenAI from "openai";const client = new OpenAI(); // baseURL + key set for youconst resp = await client.chat.completions.create({ model: "glm-5.2", // direct model — try "minimax-m3" for speed/cost messages: [{ role: "user", content: "Write a haiku about routing." }],});console.log(resp.choices[0].message.content);
Open app.orbitrage.ai/workflows — your
call appears with the model, provider, tokens, cost, latency, and (for
multi-step agents) the full run graph, all attributed to customer_42.
Each run is reconstructed node-by-node — LLM calls, sub-agents, and managed tools.
Picking a model
You write
What happens
model="glm-5.2"
Pinned — strong general model with a 1M context. Predictable; great for tools + quality.
model="minimax-m3"
Pinned — fast and cheap. A great default for high volume.
model="gpt-oss-20b"
Pinned — small, cheap, reliable tool-calling.
model="auto"
Auto routing — Orbitrage scores the prompt and picks the cheapest capable model. See Routing.
model="claude-sonnet-4-6"
Pinned to a frontier model. Needs your own Anthropic key — see below.
Start with a direct model while you build, then switch to model="auto"
once you want Orbitrage to optimize cost for you. With auto, give reasoning
models room — set max_tokens ≥ 512 so the answer isn’t truncated by the
model’s internal reasoning budget.
Frontier models need your own key
Every open-weight model above runs on Orbitrage’s infrastructure and bills to your
credits. The closed frontier lines — claude-*, gpt-* (except gpt-oss-*),
gemini-* and grok-* — are BYOK-only: save and enable a key for that vendor
on the Models page, and the call goes straight
to the provider on your key while Orbitrage charges $0 for the tokens.Call one without an enabled key and you get a clear error instead of a surprise
bill — Orbitrage never silently falls back to pooled inference:
{ "error": { "message": "claude-sonnet-4-6 is a bring-your-own-key model. Add and enable an Anthropic key on the Models page to use it.", "type": "permission_error", "code": "byok_key_required", "requested_model": "claude-sonnet-4-6", "provider": "anthropic" }}
model="auto" never produces this error — it only routes to models your
organization can actually reach. See BYOK.
Attributing every call to a user
user_id is the single most useful thing to get right — it unlocks per-user
analytics. Set it once for a script, or switch it per request in a server.
# One user for the whole process:orbitrage.init(api_key, user_id=current_user.id)# Or switch per request in a long-running server — then build a NEW client# (already-constructed clients have copied their headers):orbitrage.set_user(current_user.id)client = OpenAI()
// One user for the whole process:await orbitrage.init({ apiKey, userId: currentUser.id });// Or switch per request — then build a NEW client:orbitrage.setUser(currentUser.id);const client = new OpenAI();
LangChain, LangGraph, CrewAI, Agno, LlamaIndex, and the Vercel AI SDK all use an
OpenAI-compatible client under the hood — point them at the gateway and you get
the same routing + tracing. Copy-paste setups:
LangChain
CrewAI
Agno
LlamaIndex
Vercel AI SDK
OpenAI / Anthropic SDK
Next steps
Tool calling
Client tools + hosted managed tools (web search, scrape, calculator) — no keys to wire.
Streaming
Token-by-token streaming, fully traced.
Routing
How auto scores prompts and picks models.
Models
The full catalog of direct model names.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Orbitrage","description":"The convenience layer for LLM apps — one line for routing + observability.","colors":{"primary":"#FF5400","light":"#FF7A3D","dark":"#FF5400"},"logo":{"light":"https://mintcdn.com/orbitrage/08JKSC5O9Go6lGjo/logo/light.svg?fit=max\u0026auto=format\u0026n=08JKSC5O9Go6lGjo\u0026q=85\u0026s=d57e0ad7f6dd71df1f9c918cffc68c06","dark":"https://mintcdn.com/orbitrage/08JKSC5O9Go6lGjo/logo/dark.svg?fit=max\u0026auto=format\u0026n=08JKSC5O9Go6lGjo\u0026q=85\u0026s=40f41fb48fc10b6d0ea926d98f0c9636","href":"https://orbitrage.ai"},"favicon":"https://mintcdn.com/orbitrage/08JKSC5O9Go6lGjo/favicon.svg?fit=max\u0026auto=format\u0026n=08JKSC5O9Go6lGjo\u0026q=85\u0026s=056392cbe4e989ee07d52eff4033e05e","navbar":{"links":[{"href":"https://app.orbitrage.ai","label":"Dashboard"}],"primary":{"type":"button","label":"Get API key","href":"https://app.orbitrage.ai/keys"}},"footer":{"socials":{"website":"https://orbitrage.ai","github":"https://github.com/abhyudaypatel/orbitrage"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"orbitrage","hasAudioNarration":false,"actualSubdomain":"orbitrage","customDomains":["docs.orbitrage.ai"],"gitSource":{"type":"github","owner":"abhyudaypatel","repo":"orbitrage","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae9595e37dad6e4be6b7b36:success","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Documentation","count":35},{"language":"default","tag":"Core Concepts","count":9},{"language":"default","tag":"Integrations","count":8},{"language":"default","tag":"Examples","count":6},{"language":"default","tag":"API Reference","count":5},{"language":"default","tag":"Endpoints","count":4},{"language":"default","tag":"Platform","count":4},{"language":"default","tag":"Account \u0026 Billing","count":2},{"language":"default","tag":"Dashboard","count":2},{"language":"default","tag":"Get Started","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"quickstart","slug":"/quickstart","pageMetadata":{"title":"Quickstart","description":"Route + trace your first LLM call through Orbitrage in under two minutes.","href":"/quickstart"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Route + trace your first LLM call through Orbitrage in under two minutes.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,CodeGroup,Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Tip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Orbitrage is the convenience layer for LLM apps: point your existing OpenAI (or\nAnthropic) client at our gateway and every call is `,_jsx(_components.strong,{children:`routed`}),` to the best model\nand `,_jsx(_components.strong,{children:`traced`}),` in your dashboard — cost, tokens, latency, tools, and the full\nrun graph. No SDK rewrite, no OpenTelemetry.`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Install the latest SDK`,children:[_jsxs(_components.p,{children:[`The SDK is a thin header-injector; `,_jsx(_components.code,{children:`openai`}),` is the only peer you need\n(Orbitrage speaks OpenAI format).`]}),_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Python`,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pip`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -U`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` orbitrage`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` openai`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Node.js`,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` orbitrage@latest`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` openai`})]}),`\n`]})})})]})]}),_jsxs(Step,{title:`Initialize with your key — and a user id`,children:[_jsxs(_components.p,{children:[`Call `,_jsx(_components.code,{children:`init()`}),` `,_jsx(_components.strong,{children:`once`}),`, at the top of your program. Always pass a\n`,_jsx(_components.strong,{children:_jsx(_components.code,{children:`user_id`})}),` so every call is attributed to the end-user who triggered it —\nthis is what powers per-user cost, usage, and analytics in the dashboard.`]}),_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Python`,numberOfLines:`6`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` os, orbitrage`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`orbitrage.init(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` os.environ[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ORBITRAGE_API_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` user_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"customer_42\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# attribute calls to THIS end-user`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Node.js`,numberOfLines:`6`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`orbitrage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"orbitrage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` orbitrage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`init`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` apiKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`ORBITRAGE_API_KEY`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` userId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"customer_42\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// attribute calls to THIS end-user`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Get your `,_jsx(_components.code,{children:`orb_`}),` key from `,_jsx(_components.a,{href:`https://app.orbitrage.ai`,children:`app.orbitrage.ai`}),` →\n`,_jsx(_components.strong,{children:`API Keys`}),`. The SDK points your client at `,_jsx(_components.code,{children:`https://api.orbitrage.ai/v1`}),`\nand injects the key for you — even if you already have `,_jsx(_components.code,{children:`OPENAI_API_KEY`}),` set.`]})})]}),_jsxs(Step,{title:`Make a call — pick a model, or let Orbitrage route`,children:[_jsxs(_components.p,{children:[`Use the OpenAI client exactly as you always have. Name a `,_jsx(_components.strong,{children:`direct model`}),`\n(recommended while you build — predictable behavior), or use `,_jsx(_components.code,{children:`model=\"auto\"`}),`\nto let Orbitrage route to the cheapest capable model.`]}),_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Python`,numberOfLines:`8`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` openai `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` OpenAI`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` OpenAI() `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# base_url + key set for you`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`resp `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` client.chat.completions.create(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` model`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"glm-5.2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# direct model — try \"minimax-m3\" for speed/cost`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` messages`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"role\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"user\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"content\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Write a haiku about routing.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(resp.choices[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`].message.content)`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Node.js`,numberOfLines:`8`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` OpenAI`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"openai\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` OpenAI`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// baseURL + key set for you`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` resp`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`chat`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`completions`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`create`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` model:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"glm-5.2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// direct model — try \"minimax-m3\" for speed/cost`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` messages:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [{ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`role:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"user\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`content:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Write a haiku about routing.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`resp`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`choices`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`].`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`content`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.orbitrage.ai/v1/chat/completions`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$ORBITRAGE_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"x-orbitrage-end-user-id: customer_42\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"model\":\"glm-5.2\",\"messages\":[{\"role\":\"user\",\"content\":\"Write a haiku about routing.\"}]}'`})]}),`\n`]})})})]})]}),_jsxs(Step,{title:`See it in the dashboard`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.a,{href:`https://app.orbitrage.ai/workflows`,children:`app.orbitrage.ai/workflows`}),` — your\ncall appears with the model, provider, tokens, cost, latency, and (for\nmulti-step agents) the full run graph, all attributed to `,_jsx(_components.code,{children:`customer_42`}),`.`]}),_jsx(Frame,{caption:`Each run is reconstructed node-by-node — LLM calls, sub-agents, and managed tools.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/orbitrage/nK2Q4BMDsPhLiujI/workflow_nodes.png?fit=max\u0026auto=format\u0026n=nK2Q4BMDsPhLiujI\u0026q=85\u0026s=2b0215dd694ca38e1066a629c5031150`,alt:`Orbitrage workflow run graph`,\"data-og-width\":`1586`,width:`1586`,\"data-og-height\":`959`,height:`959`,\"data-path\":`workflow_nodes.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/orbitrage/nK2Q4BMDsPhLiujI/workflow_nodes.png?w=280\u0026fit=max\u0026auto=format\u0026n=nK2Q4BMDsPhLiujI\u0026q=85\u0026s=b034b5e0c7461e7dbe2d66fab4a68b41 280w, https://mintcdn.com/orbitrage/nK2Q4BMDsPhLiujI/workflow_nodes.png?w=560\u0026fit=max\u0026auto=format\u0026n=nK2Q4BMDsPhLiujI\u0026q=85\u0026s=6b228b51b5f2ff6e4f964c434c9f89ce 560w, https://mintcdn.com/orbitrage/nK2Q4BMDsPhLiujI/workflow_nodes.png?w=840\u0026fit=max\u0026auto=format\u0026n=nK2Q4BMDsPhLiujI\u0026q=85\u0026s=1ba7020e2649e3ce83472e2f5f0158a5 840w, https://mintcdn.com/orbitrage/nK2Q4BMDsPhLiujI/workflow_nodes.png?w=1100\u0026fit=max\u0026auto=format\u0026n=nK2Q4BMDsPhLiujI\u0026q=85\u0026s=ad64ef33245a006f9c250487fb1e03b8 1100w, https://mintcdn.com/orbitrage/nK2Q4BMDsPhLiujI/workflow_nodes.png?w=1650\u0026fit=max\u0026auto=format\u0026n=nK2Q4BMDsPhLiujI\u0026q=85\u0026s=80c735670201b432f5b647631e283e09 1650w, https://mintcdn.com/orbitrage/nK2Q4BMDsPhLiujI/workflow_nodes.png?w=2500\u0026fit=max\u0026auto=format\u0026n=nK2Q4BMDsPhLiujI\u0026q=85\u0026s=b03d954816c6a60dd680536114253497 2500w`})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`picking-a-model`,children:`Picking a model`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`You write`}),_jsx(_components.th,{children:`What happens`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`model=\"glm-5.2\"`})}),_jsx(_components.td,{children:`Pinned — strong general model with a 1M context. Predictable; great for tools + quality.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`model=\"minimax-m3\"`})}),_jsx(_components.td,{children:`Pinned — fast and cheap. A great default for high volume.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`model=\"gpt-oss-20b\"`})}),_jsx(_components.td,{children:`Pinned — small, cheap, reliable tool-calling.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`model=\"auto\"`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Auto routing`}),` — Orbitrage scores the prompt and picks the cheapest capable model. See `,_jsx(_components.a,{href:`/concepts/routing`,children:`Routing`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`model=\"claude-sonnet-4-6\"`})}),_jsxs(_components.td,{children:[`Pinned to a `,_jsx(_components.strong,{children:`frontier`}),` model. Needs your own Anthropic key — see below.`]})]})]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Start with a `,_jsx(_components.strong,{children:`direct model`}),` while you build, then switch to `,_jsx(_components.code,{children:`model=\"auto\"`}),`\nonce you want Orbitrage to optimize cost for you. With `,_jsx(_components.code,{children:`auto`}),`, give reasoning\nmodels room — set `,_jsx(_components.code,{children:`max_tokens`}),` ≥ 512 so the answer isn’t truncated by the\nmodel’s internal reasoning budget.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`frontier-models-need-your-own-key`,children:`Frontier models need your own key`}),`\n`,_jsxs(_components.p,{children:[`Every open-weight model above runs on Orbitrage’s infrastructure and bills to your\ncredits. The closed frontier lines — `,_jsx(_components.code,{children:`claude-*`}),`, `,_jsx(_components.code,{children:`gpt-*`}),` (except `,_jsx(_components.code,{children:`gpt-oss-*`}),`),\n`,_jsx(_components.code,{children:`gemini-*`}),` and `,_jsx(_components.code,{children:`grok-*`}),` — are `,_jsx(_components.strong,{children:`BYOK-only`}),`: save and enable a key for that vendor\non the `,_jsx(_components.a,{href:`https://app.orbitrage.ai/models`,children:`Models page`}),`, and the call goes straight\nto the provider on your key while Orbitrage charges `,_jsx(_components.strong,{children:`$0`}),` for the tokens.`]}),`\n`,_jsx(_components.p,{children:`Call one without an enabled key and you get a clear error instead of a surprise\nbill — Orbitrage never silently falls back to pooled inference:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"claude-sonnet-4-6 is a bring-your-own-key model. Add and enable an Anthropic key on the Models page to use it.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"permission_error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"byok_key_required\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"requested_model\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"claude-sonnet-4-6\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"provider\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"anthropic\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`model=\"auto\"`}),` never produces this error — it only routes to models your\norganization can actually reach. See `,_jsx(_components.a,{href:`/concepts/byok`,children:`BYOK`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`attributing-every-call-to-a-user`,children:`Attributing every call to a user`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`user_id`}),` is the single most useful thing to get right — it unlocks per-user\nanalytics. Set it once for a script, or switch it per request in a server.`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Python`,numberOfLines:`7`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# One user for the whole process:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`orbitrage.init(api_key, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`user_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`current_user.id)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Or switch per request in a long-running server — then build a NEW client`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# (already-constructed clients have copied their headers):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`orbitrage.set_user(current_user.id)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` OpenAI()`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Node.js`,numberOfLines:`6`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// One user for the whole process:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` orbitrage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`init`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`apiKey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`userId:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` currentUser`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Or switch per request — then build a NEW client:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`orbitrage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setUser`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`currentUser`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` OpenAI`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/examples/per-user-attribution`,children:`Per-user attribution`}),` for the server pattern.`]}),`\n`,_jsx(Heading,{level:`2`,id:`already-using-a-framework`,children:`Already using a framework?`}),`\n`,_jsx(_components.p,{children:`LangChain, LangGraph, CrewAI, Agno, LlamaIndex, and the Vercel AI SDK all use an\nOpenAI-compatible client under the hood — point them at the gateway and you get\nthe same routing + tracing. Copy-paste setups:`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`LangChain`,icon:`link`,href:`/integrations/langchain`}),_jsx(Card,{title:`CrewAI`,icon:`users`,href:`/integrations/crewai`}),_jsx(Card,{title:`Agno`,icon:`robot`,href:`/integrations/agno`}),_jsx(Card,{title:`LlamaIndex`,icon:`layer-group`,href:`/integrations/llamaindex`}),_jsx(Card,{title:`Vercel AI SDK`,icon:`bolt`,href:`/integrations/vercel-ai`}),_jsx(Card,{title:`OpenAI / Anthropic SDK`,icon:`code`,href:`/integrations/openai`})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Tool calling`,icon:`wrench`,href:`/examples/tool-calling`,children:_jsxs(_components.p,{children:[`Client tools + hosted `,_jsx(_components.strong,{children:`managed tools`}),` (web search, scrape, calculator) — no keys to wire.`]})}),_jsx(Card,{title:`Streaming`,icon:`gauge-high`,href:`/examples/streaming`,children:_jsx(_components.p,{children:`Token-by-token streaming, fully traced.`})}),_jsx(Card,{title:`Routing`,icon:`route`,href:`/concepts/routing`,children:_jsxs(_components.p,{children:[`How `,_jsx(_components.code,{children:`auto`}),` scores prompts and picks models.`]})}),_jsx(Card,{title:`Models`,icon:`layer-group`,href:`/concepts/models`,children:_jsx(_components.p,{children:`The full catalog of direct model names.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Quickstart","description":"Route + trace your first LLM call through Orbitrage in under two minutes.","href":"/quickstart"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Picking a model","slug":"picking-a-model","depth":2,"children":[{"title":"Frontier models need your own key","slug":"frontier-models-need-your-own-key","depth":3,"children":[]}]},{"title":"Attributing every call to a user","slug":"attributing-every-call-to-a-user","depth":2,"children":[]},{"title":"Already using a framework?","slug":"already-using-a-framework","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"orbitrage","siteName":"Orbitrage","title":"Quickstart - Orbitrage","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-20T09:42:10.398Z","originalFileLocation":"quickstart.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Route + trace your first LLM call through Orbitrage in under two minutes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Orbitrage\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Quickstart - Orbitrage\">\u003cmeta data-mint-head property=\"og:description\" content=\"Route + trace your first LLM call through Orbitrage in under two minutes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Orbitrage\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.orbitrage.ai/quickstart\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://orbitrage.mintlify.site/_mintlify/api/og/v2?division=Get+Started\u0026amp;title=Quickstart\u0026amp;description=Route+%2B+trace+your+first+LLM+call+through+Orbitrage+in+under+two+minutes.\u0026amp;theme=e652b9a0a1f9d75bba4032d2\u0026amp;signature=24b188fb3ad57c2fdd53405e44d1879fb58bdc543481e524e1dc7f4f2f98cbe9\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Quickstart - Orbitrage\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Route + trace your first LLM call through Orbitrage in under two minutes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://orbitrage.mintlify.site/_mintlify/api/og/v2?division=Get+Started\u0026amp;title=Quickstart\u0026amp;description=Route+%2B+trace+your+first+LLM+call+through+Orbitrage+in+under+two+minutes.\u0026amp;theme=e652b9a0a1f9d75bba4032d2\u0026amp;signature=24b188fb3ad57c2fdd53405e44d1879fb58bdc543481e524e1dc7f4f2f98cbe9\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/orbitrage/8o3ergVuF_6sV6m5/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Orbitrage\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF5400\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.orbitrage.ai/quickstart\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/quickstart.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.orbitrage.ai/#organization\",\"name\":\"Orbitrage\",\"url\":\"https://docs.orbitrage.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/orbitrage/08JKSC5O9Go6lGjo/logo/light.svg?fit=max\u0026auto=format\u0026n=08JKSC5O9Go6lGjo\u0026q=85\u0026s=d57e0ad7f6dd71df1f9c918cffc68c06\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.orbitrage.ai#website\",\"name\":\"Orbitrage\",\"url\":\"https://docs.orbitrage.ai\",\"publisher\":{\"@id\":\"https://docs.orbitrage.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.orbitrage.ai/quickstart#webpage\",\"url\":\"https://docs.orbitrage.ai/quickstart\",\"name\":\"Quickstart\",\"description\":\"Route + trace your first LLM call through Orbitrage in under two minutes.\",\"dateModified\":\"2026-07-20T09:42:10.398Z\",\"isPartOf\":{\"@id\":\"https://docs.orbitrage.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.orbitrage.ai/quickstart#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.orbitrage.ai/quickstart#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Get Started\",\"item\":\"https://docs.orbitrage.ai/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quickstart\",\"item\":\"https://docs.orbitrage.ai/quickstart\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.orbitrage.ai/quickstart#article\",\"headline\":\"Quickstart\",\"name\":\"Quickstart\",\"description\":\"Route + trace your first LLM call through Orbitrage in under two minutes.\",\"url\":\"https://docs.orbitrage.ai/quickstart\",\"mainEntityOfPage\":{\"@id\":\"https://docs.orbitrage.ai/quickstart#webpage\"},\"dateModified\":\"2026-07-20T09:42:10.398Z\",\"publisher\":{\"@id\":\"https://docs.orbitrage.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.orbitrage.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Orbitrage\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Orbitrage\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/quickstart.md","siteName":"Orbitrage","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Introduction","description":"The convenience layer for LLM apps — routing + observability in one line.","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Core Concepts","pages":[{"title":"How it works","description":"The architecture end to end — the router engine, telemetry, and dashboard.","href":"/concepts/how-it-works"},{"title":"Routing","href":"/concepts/routing"},{"title":"Models","href":"/concepts/models"},{"title":"Observability","href":"/concepts/observability"},{"title":"The Intelligence layer","href":"/concepts/intelligence"},{"title":"Bring your own key (BYOK)","href":"/concepts/byok"},{"title":"Tools Gateway","href":"/concepts/tools-gateway"},{"title":"Outage Shield","href":"/concepts/outage-shield"},{"title":"Guardrails","href":"/concepts/guardrails"}]},{"group":"SDKs","pages":[{"title":"Python SDK","href":"/sdks/python"},{"title":"Node.js SDK","href":"/sdks/node"}]},{"group":"Integrations","pages":[{"title":"OpenAI","href":"/integrations/openai"},{"title":"Anthropic (Claude)","href":"/integrations/anthropic"},{"title":"LangChain","href":"/integrations/langchain"},{"title":"LangGraph","href":"/integrations/langgraph"},{"title":"CrewAI","href":"/integrations/crewai"},{"title":"Agno","href":"/integrations/agno"},{"title":"LlamaIndex","href":"/integrations/llamaindex"},{"title":"Vercel AI SDK","href":"/integrations/vercel-ai"}]},{"group":"Examples","pages":[{"title":"Tool calling","href":"/examples/tool-calling"},{"title":"Streaming","href":"/examples/streaming"},{"title":"Image generation","href":"/examples/images"},{"title":"Audio — speech-to-text \u0026 text-to-speech","href":"/examples/audio"},{"title":"Multimodal workflow","href":"/examples/multimodal-workflow"},{"title":"Per-user attribution","href":"/examples/per-user-attribution"}]},{"group":"Dashboard","pages":[{"title":"Dashboard tour","href":"/dashboard/overview"},{"title":"Router","href":"/dashboard/router"}]},{"group":"Platform","pages":[{"title":"Ask Analytics","href":"/platform/ask-analytics"},{"title":"MCP server","href":"/platform/mcp"},{"title":"Slack","href":"/platform/slack"},{"title":"Alerts \u0026 anomalies","href":"/platform/alerts"}]},{"group":"Account \u0026 Billing","pages":[{"title":"API keys","href":"/account/api-keys"},{"title":"Plans \u0026 billing","href":"/account/billing"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Quickstart - Orbitrage","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-D2acuaLg.js","DynamicMarkdown-Co5nikxh.js","zoom-image-lightbox-BbK2OBGL.js","lightbox-handle-r17bVUz3.js"]}