Documentation

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.

Jump in

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.

Preview FreeRouter is free to use during the preview period. You bring your own provider keys (BYOK) and pay each gateway directly — see where your keys sit.

Core Concepts

The docs use these terms consistently; the dashboard tabs they live under are in bold.

TermMeaning
FreeRouter keyThe one key your application sends, fr_live_…. It carries an API shape and a routing rule. Created under API Keys.
Provider keyA 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.
GatewayThe upstream service a provider key belongs to — OpenRouter, Vercel AI Gateway, Cloudflare AI Gateway, Requesty and the rest of the supported gateways.
API shapeThe 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 ruleHow a key's requests are distributed across gateways: a %-split, or a priority order with failover. One rule per key. See Routing Rules.
TargetOne 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 remapA per-key rewrite of one incoming model id to a fixed target and upstream_model, applied before the routing rule runs. See Model Remaps.
DecisionerAn 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 keyfr_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.
WorkspaceThe container for keys, providers, and rules.
Logs tabThe 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

How a request flows: your app sends a request with its FreeRouter key; the key's routing rule picks a target, FreeRouter swaps in the stored provider key and calls the gateway, and the response comes back normalized to the key's shape. inside FreeRouter Your app OpenAI SDK, curl FreeRouter key shape: openai Routing rule %-split or priority Provider key stored, encrypted Gateway e.g. OpenRouter Response in your key's shape back to your app, failover retried on the way if a gateway fails How a request flows: your app sends a request with its FreeRouter key; the key's routing rule picks a target, FreeRouter swaps in the stored provider key and calls the gateway, and the response comes back normalized to the key's shape. inside FreeRouter Your app OpenAI SDK, curl, any client FreeRouter key fr_live_… · shape: openai Routing rule %-split or priority with failover Provider key stored encrypted, swapped in Gateway OpenRouter, Vercel, Cloudflare, … Response normalized to your key's shape
A request in your key's shape — OpenAI-style at 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.
Next Getting Started