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 403 plan_not_in_path that names the upgrade, and the gateway never contacts your provider.

Two base URLs cover every surface:

SurfaceBase URLClients
OpenAI-compatiblehttps://api.recovea.ai/v1OpenAI SDKs and any OpenAI-compatible tool
Anthropic-nativehttps://api.recovea.ai/anthropicThe 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