Drop-in (one-line base URL swap)
The lowest-friction way to use Recovea: change one setting — the base URL — and keep your existing SDK, your code, and your provider account. There is nothing to install. Recovea speaks the OpenAI and Anthropic wire protocols, so the official SDKs and the Claude Code CLI work unmodified; you just point them at Recovea.
What changes, and what doesn't. You point your client's base URL at Recovea and send a Recovea key (
rcv_live_…in production,rcv_test_…for sandbox). Your provider key is bring-your-own: you paste it into the platform once, and Recovea signs the upstream call with it and takes no margin on provider spend. Reverting is the same one line in reverse — point the base URL back at your provider and traffic flows direct.
The drop-in routes on a Business workspace. Live routing (and metering and the optimizations below) runs on a Business plan. The Free plan is scan-and-observe only — a free spend scan plus a read-only dashboard — and does not route live traffic: a Free key on a routed path returns a guided
403plan_not_in_paththat names the upgrade, and the gateway never contacts your provider.
Two base URLs cover every surface:
| Surface | Base URL | Clients |
|---|---|---|
| OpenAI-compatible | https://api.recovea.ai/v1 | OpenAI SDKs and any OpenAI-compatible tool |
| Anthropic-native | https://api.recovea.ai/anthropic | The Anthropic SDK and Claude Code |
OpenAI SDK
Override base_url on the client (or set the environment variable and change no code at all). Everything else — request shapes, streaming, tools, errors — is byte-for-byte the OpenAI API.
from openai import OpenAI
client = OpenAI(
base_url="https://api.recovea.ai/v1", # the one line that changes
api_key="rcv_live_…", # your Recovea key (provider key stays in the platform)
)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.recovea.ai/v1", // the one line that changes
apiKey: process.env.RECOVEA_API_KEY, // your Recovea key
});
Env-var only (no code change)
If your code already reads the standard OpenAI variables, you touch no source:
export OPENAI_BASE_URL="https://api.recovea.ai/v1"
export OPENAI_API_KEY="rcv_live_…"
Anthropic SDK
Point the official Anthropic SDK at the /anthropic surface. It sends your key on x-api-key (an Authorization: Bearer rcv_… header is also accepted), and Recovea re-signs the upstream call with your stored Anthropic key.
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.recovea.ai/anthropic", # the one line that changes
api_key="rcv_live_…", # your Recovea key
)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://api.recovea.ai/anthropic", // the one line that changes
apiKey: process.env.RECOVEA_API_KEY, // your Recovea key
});
Env-var only (no code change)
export ANTHROPIC_BASE_URL="https://api.recovea.ai/anthropic"
export ANTHROPIC_API_KEY="rcv_live_…"
Claude Code
Claude Code reads ANTHROPIC_BASE_URL. Point it at the /anthropic surface, set your Recovea key, and start Claude Code as usual — no flags, no patches. The surface accepts the key on either x-api-key or Authorization: Bearer, so ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN both work.
export ANTHROPIC_BASE_URL="https://api.recovea.ai/anthropic"
export ANTHROPIC_API_KEY="rcv_live_…" # your Recovea key
claude # run Claude Code as you normally would
What each surface gives you
Recovea meters every request on both surfaces against a frozen baseline and writes it to an auditable cost ledger. Beyond that baseline, the two surfaces differ today:
/v1 (OpenAI-compatible) — metering plus the optimizations that serve traffic today:
- Exact-response cache (live) — an identical request returns the stored response.
- In-flight dedup / single-flight (live) — identical concurrent requests coalesce onto one upstream call.
- Batch API migration (planned)
- Model routing / cascade (planned)
- Tier-1 source-side slim (planned)
/anthropic (Anthropic SDK and Claude Code) — metering only today. This surface lets you see every call against the frozen baseline, cap spend with a workspace kill-switch, and get a re-derivable receipt in the cost ledger. No levers are active here yet, so Recovea does not reduce your Claude Code or agentic bill on this surface — baseline equals realized. The first agentic lever, prompt-cache prefix hygiene, is built and wired on this surface but not yet flipped on by default, so it does not affect your bill today; further agentic-traffic optimizations are planned.
Smoke-test with curl
# /v1 (OpenAI-compatible)
curl https://api.recovea.ai/v1/chat/completions \
-H "Authorization: Bearer rcv_live_…" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "ping"}]}'
# /anthropic (Anthropic-native)
curl https://api.recovea.ai/anthropic/v1/messages \
-H "x-api-key: rcv_live_…" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model": "claude-opus-4-8", "max_tokens": 32, "messages": [{"role": "user", "content": "ping"}]}'
If anything in Recovea's layer fails, the request flows straight through to your provider on your own key — it is fail-open. And it is reversible in one line: point your base URL back at your provider.
Next
- Quickstart: your first request in under five minutes
- Authentication: how Recovea keys work (
rcv_live_/rcv_test_) - Libraries & SDKs: every official SDK and the OpenRouter long tail
- How Recovea works: the gateway, the meter, and the cost ledger