One API Key. Zero Lock-In.
FreeRouter is a meta router for LLM inference — think ad mediation for AI. Keep the request format your app already speaks (OpenAI by default, with OpenRouter, Anthropic, and Google shapes per key), bring your own provider keys, and route every request across OpenRouter, Vercel AI Gateway, Cloudflare AI Gateway, and more with rules you control.
What is FreeRouter?
FreeRouter sits between your application and the LLM gateways you already use. You integrate against a single endpoint that speaks your app's native format — each key carries its own API shape (OpenAI by default; OpenRouter, Anthropic, or Google when that's what you call today) — and a per-key routing rule decides which gateway serves each request (see the flow). Your code never changes when you re-balance traffic or add a gateway.
The name is about freedom, not price — free from vendor lock-in. If a gateway raises prices, drops a model, or degrades, you flip a routing rule instead of rewriting your integration.
Core Concepts
The docs use these terms consistently; the dashboard tabs they live under are in bold.
| Term | Meaning |
|---|---|
| FreeRouter key | The one key your application sends, fr_live_…. It carries an API shape and a routing rule. Created under API Keys. |
| Provider key | A credential you already hold for a gateway (an OpenRouter key, say), stored encrypted under Providers and swapped into the upstream call per request. Bring-your-own-keys (BYOK): FreeRouter never resells inference. |
| Gateway | The upstream service a provider key belongs to — OpenRouter, Vercel AI Gateway, Cloudflare AI Gateway, Requesty and the rest of the supported gateways. |
| API shape | The request/response format a FreeRouter key speaks. Default is OpenAI; per key you can switch to OpenRouter, Anthropic, Google, or systemone (Decisions). See API shapes. |
| Routing rule | How a key's requests are distributed across gateways: a %-split, or a priority order with failover. One rule per key. See Routing Rules. |
| Target | One provider key listed in a routing rule — with a weight in a split, or a position in a priority order. A weight of 0 makes a target failover-only. |
| Model remap | A per-key rewrite of one incoming model id to a fixed target and upstream_model, applied before the routing rule runs. See Model Remaps. |
| Decisioner | An optional pre-router on a chat key: Jev picks which target should serve the request, and the static rule is the fallback. See Decisioner. |
| Management key | fr_mgmt_…, created under Settings. It drives the management API and the MCP server — minting FreeRouter keys, storing provider keys, setting routing — and never runs inference. |
| Workspace | The container for keys, providers, and rules. |
| Logs tab | The dashboard's per-request log: status, gateway, latency, and the attempt path (expand a row). Usage & Spend covers it. |
The Drop-In Promise
Adoption shouldn't cost you a rewrite. FreeRouter is a drop-in replacement for the API you already call — OpenAI, OpenRouter, Anthropic Messages, or Gemini generateContent:
- Change your base URL to
https://api.freerouter.com/v1. - Swap your API key for your FreeRouter key.
- Keep your request format — set the key's API shape to match and keep calling your endpoint exactly as you do today.
See the Quickstart for both paths — starting fresh or migrating — with copy-paste curl, Python, and Node examples.
How a Request Flows
https://api.freerouter.com/v1/chat/completions by default — arrives with your FreeRouter key in the Authorization header. The key's routing rule picks a target (a weighted pick for a %-split, the first healthy gateway for priority), FreeRouter swaps in the provider key stored for it, translates the body if that gateway needs it, and forwards. The answer comes back normalized to the shape your key speaks, streamed or buffered; if the gateway fails, failover retries the next target before anything reaches you. X-FreeRouter-Provider on the response names the gateway that served it.