← back to blog

Introducing MonoRouter: Route AI Through Your Existing Subscriptions

We built MonoRouter because paying for Claude twice didn't make sense. Here's what it does and why we think it matters.

Every developer we talked to had the same problem. They were paying for Claude Pro or Max for the web UI, and then paying again for API access to use Claude in their code. Two bills for the same model.

MonoRouter fixes that. It's a proxy that routes your SDK and agent calls through your existing Claude subscription. No API keys, no usage-based billing, no surprises at the end of the month.

How It Works

MonoRouter sits between your code and Claude. When your SDK sends a request, MonoRouter routes it through one of your connected Claude sessions — the same ones you use in the browser. From Claude's perspective, it's just another conversation. From your code's perspective, it's just the Anthropic API.

You change two environment variables — and everything else stays the same. Same SDK, same tools, same prompts.

Before (direct Anthropic API)

export ANTHROPIC_API_KEY="sk-ant-api03-..."
# Billed per token. $3/MTok input, $15/MTok output for Sonnet.

After (through MonoRouter)

export ANTHROPIC_API_KEY="mr_live_7f3a..."
export ANTHROPIC_BASE_URL="https://api.monorouter.dev/v1"
# No per-token charges. Uses your existing Claude subscription.

That's the entire change. Your Python scripts, TypeScript projects, LangChain agents — they all pick up the new values automatically:

import anthropic

# This code doesn't change at all.
# The SDK reads ANTHROPIC_API_KEY and ANTHROPIC_BASE_URL
# from the environment and routes through MonoRouter.
client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain quicksort in Python"}]
)
print(message.content[0].text)

In TypeScript it's the same story:

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();
// reads ANTHROPIC_BASE_URL automatically

const msg = await client.messages.create({
  model: "claude-sonnet-4-20250514",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Review this PR diff" }],
});

No SDK forks. No wrapper libraries. No custom HTTP clients. The official Anthropic SDKs already support custom base URLs — MonoRouter just takes advantage of that.

What This Means for Your Bill

If you're on Claude Pro ($20/month) or Max ($100/month), you already have access to Claude. MonoRouter lets you use that access from your terminal, your IDE, your CI pipeline, or anywhere else you write code.

Here's a quick example. A solo developer using Claude Sonnet for ~4 hours of coding per day generates roughly 2M input tokens and 400K output tokens per month. Through the API, that's:

  • Input: 2M × $3/MTok = $6
  • Output: 400K × $15/MTok = $6
  • Total: ~$12/month on top of your subscription

Not catastrophic for one person. But add Opus calls, scale to a team, or throw CI pipelines into the mix, and it compounds fast. MonoRouter flattens that variable cost to zero.

What's Next

We're starting with Claude because that's what we use every day. Support for OpenAI routing is already in early testing. We're also building team features — shared session pools, usage dashboards, and admin controls.

If you've ever looked at an API bill and thought "I'm already paying for this," MonoRouter is for you. Sign up at monorouter.dev and start routing in under a minute.