From LiteLLM
If you’re already using the OpenAI SDK to talk to a LiteLLM proxy, you can drop that proxy and point straight at Verlon. The SDK stays exactly the same.From OpenRouter
OpenRouter is drop-in for the OpenAI SDK too, so the swap is nearly identical:gpt-4o, claude-sonnet-4-5, gemini-2.0-flash, etc.) — see the supported LLMs list for the full inventory. Routing rules, spend caps, and quality monitoring live in the Verlon dashboard.
From a hand-rolled gateway
If you built your own proxy that forwards to provider APIs, the win is bigger than a config swap — you’re deleting code, not just re-pointing it. The pattern:- Keep your existing SDK client code exactly as-is. No call-site changes.
- Point it at
https://api.verlon.ai/v1and use a Verlon API key. - Delete your routing / retry / fallback / cost-tracking code. Verlon handles them.
- Configure any custom routing rules in the dashboard once, not per-service.
Anthropic SDK users
Same story on the other side. If your app talks to Anthropic-hosted Claude via the Anthropic SDK, point it at Verlon and get routing, failover, and quality monitoring — with access to every other model in the registry, not just Claude. Details in the Anthropic guide.Migrating off the Verlon SDK’s inference methods
Inference moved to the format you already know: call Verlon’s drop-in routes with the official provider SDKs. The Verlon SDK remains for agent tracing and the model registry, and plugs those same official SDKs into tracing viaclientOptions().
The gateway also serves
/v1/responses (OpenAI Responses API) and /v1/messages (@anthropic-ai/sdk). Every drop-in route authenticates with your Verlon API key as the Bearer token. Address your gate any of three ways: a gateId body field, an X-Verlon-Gate-Id header, or the gate UUID in the model string (optionally <gate-uuid>/<task> to also name a task). Inside a trace scope, task.clientOptions('openai') handles all of it for you — see the SDK overview.
Video is an async surface on the gateway, exactly like OpenAI’s: videos.create() returns a job, poll videos.retrieve() until completed, then videos.downloadContent() streams the bytes. OCR keeps Mistral’s own shape — a document in, markdown pages out.
Before-and-after for the common case:

