Open-Source & Self-Hostable

LLM proxy with automatic fallback

Drop-in OpenAI-compatible proxy that routes requests across providers with automatic fallback. Change the base URL once — then swap providers, reorder chains, and adjust models on the fly from the dashboard.

The only code change you'll ever make
import OpenAI

client = OpenAI(
  base_url="https://your-dodo.com/r/my-router/v1",
  api_key="sk-dodo-..."
)

# That's it. Requests now route through your fallback chain.
response = client.chat.completions.create(
  model="auto",
  messages=[{"role": "user", "content": "Hello!"}]
)

Configure once in code. Manage everything from the UI. Zero redeployments.

Features

Configure once in code.
Manage everything in the UI.

Route requests across providers, automatically fall back on failures, and reorder your chain on the fly — all from the dashboard.

Automatic Fallback Chain

Configure an ordered list of providers and models. If one fails (rate limit, outage, timeout), the next takes over automatically.

Streaming Support

Full SSE streaming with partial content preservation. If a stream fails mid-way, the next provider continues from where it left off.

Zero-Code Provider Management

Change the base_url in your code once. After that, everything is managed from the dashboard — swap providers, reorder your fallback chain, change models, adjust temperature — all without redeploying your app.

Swap providers on the fly Reorder fallback chain No redeploy needed OpenAI-compatible

Real-Time Dashboard

Monitor success rates, latency percentiles (p50/p95/p99), token usage, and per-model leaderboards. Auto-refreshes live.

Detailed Request Logs

Every request is logged with full routing chain details, per-step latency, token counts, cost tracking, request/response bodies, and tool calls.

Secure Key Management

Your provider API keys are stored in Infisical (external secrets manager), never in the database. Router keys are SHA256-hashed with a pepper.

Tool Calls & Thinking

Full support for function/tool calling and extended thinking modes. Automatic detection and normalization across providers.

Cost Tracking

Automatic cost estimation per request in USD. Track spend by provider, model, and router with aggregated analytics.

Real-Time Log Streaming

Watch requests flow through your routers in real-time via WebSockets. Instant visibility into routing decisions and fallback events.

See It In Action

Real-time observability built in

Every request is tracked with detailed logs, routing chain visualization, and live analytics — no extra setup required.

Dashboard

Live

Total Requests

12,847

+14.2%

Success Rate

99.7%

23 fallbacks recovered

p95 Latency

340ms

-8%

Total Tokens

4.2M

$12.84 cost

Request Logs

Streaming
Time Status Provider / Model Latency
14:23:01 success z.ai / GLM-5 285ms
14:22:58 fallback z.ai Moonshot / Kimi-K2 1,240ms
14:22:55 success z.ai / GLM-5.1 412ms
14:22:51 success Moonshot / Kimi-K2.5 198ms

Request Detail

req_a3f8...

Performance

Total Latency1,240ms
Provider Time1,195ms
DodoRouter Overhead45ms (3.6%)
Time to First Byte180ms
Prompt / Completion412 / 480

Routing Chain

1 z.ai / GLM-5
error 520ms

HTTP 429: Rate limit exceeded

2 Moonshot / Kimi-K2
success 675ms

How It Works

One code change.
Then it's all UI.

1

Add Your Provider Keys

Register your API keys for z.ai, Moonshot, and more. Keys are stored securely in Infisical — never in the database.

2

Build Your Router in the UI

Create a router, then add routing steps: pick provider, model, temperature, and drag to reorder your fallback chain. All from the dashboard.

ONLY CODE CHANGE
3

Change 1 Line & You're Done

Update your OpenAI SDK's base_url to your router endpoint. That's it. From now on, every change happens in the dashboard.

Fallback Flow

Your App

OpenAI SDK

Dodo Router

Proxy + Fallback

z.ai / GLM-5

or fallback

Moonshot / Kimi-K2

Dashboard Management

Your code stays the same.
The dashboard does the rest.

After the initial URL change, everything is configured from the UI. Swap providers, reorder chains, change models — no redeploy, no code changes.

Edit Router

my-production-router

Active

Routing Steps (drag to reorder)

1
z.ai / GLM-5.1 temp: 0.7
Primary
2
Moonshot / Kimi-K2.5 temp: 0.7
Fallback
3
z.ai / GLM-5 temp: 0.7
Last Resort
Reorder by drag & drop
Swap models instantly
Changes take effect immediately
No redeploy needed

Supported Providers

Route across the best LLMs

Mix and match providers in your fallback chain. More adapters coming soon.

Z

z.ai

Standard & Coding plans

GLM-5.1 GLM-5 GLM-5 Turbo GLM-4.7 GLM-4.6 GLM-4.5
M

Moonshot AI

Kimi models with thinking mode

Kimi-K2.5 Kimi-K2 Moonshot v1-8K Moonshot v1-32K Moonshot v1-128K

Pricing

Simple, usage-based pricing

You bring your own provider API keys. We just route and observe. No token markup — you pay provider costs directly.

Free

For side projects and experiments

$0 /month
  • Up to 1,000 requests/month
  • 1 router with fallback chain
  • 7-day request log retention
  • Real-time dashboard
  • Cost tracking
Get Started Free
POPULAR

Pro

For production apps and teams

$19 /month

+ $2 per 10K requests

  • Unlimited requests
  • Unlimited routers
  • 90-day request log retention
  • Full dashboard & analytics
  • Streaming support
  • Tool calls & thinking mode
  • Priority support
Start Pro Trial

Enterprise

For teams with custom requirements

Custom
  • Everything in Pro
  • Unlimited log retention
  • Self-hosted deployment option
  • Custom SLA & uptime guarantee
  • SSO & team management
  • Dedicated support & onboarding
Contact Us

All plans include streaming support, tool calls, cost tracking, and real-time logs. No token markup — you pay your provider directly.

One URL change.
Then manage everything from the UI.

Set up your fallback chain in minutes. Swap providers, reorder models, and adjust settings on the fly — all from the dashboard. No code changes after the initial setup.