Quickstart · curl only

Verify the passthrough in 30 seconds. No SDK. No account.

You should not have to trust a new in-path proxy on faith. So before you wire anything or hand us a single credential, confirm two things with plain curl: the endpoint is live and OpenAI-shaped, and switching to it is a one-line base_url change you can revert instantly.

Step 1 · no account, no key

Confirm the endpoint, give us nothing.

This call is an unauthenticated GET to the public API root. It hands us no key and no data. You are checking the host is up and speaks JSON, the way api.openai.com/ does.

is it live? (no key)
curl https://api.recovea.ai/

# HTTP 200, a small JSON welcome.
# No Authorization header. We learn nothing about you.

Now look at the only thing that changes to route through Recovea. You keep your provider's own SDK and your own keys. You change the host. That is the entire integration.

the one line that changes
- base_url = "https://api.openai.com/v1"
+ base_url = "https://api.recovea.ai/v1"

# Revert is the same one line, any time.
Step 2 · a real call (free key, no card)

Route one request. Diff the body against your provider.

To send live traffic, Recovea authenticates you with a free rcv_ key (sign in, no card). You bring your own provider key, which we store encrypted and pass through. The response body is byte-for-byte your provider's. We add an x-request-id and an x-recovea-trace-id so every call is auditable back to your ledger.

one request, OpenAI wire format
curl https://api.recovea.ai/v1/chat/completions \
  -H "Authorization: Bearer $RECOVEA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "ping"}]
  }'

# The response is identical to your provider's. We never alter the body.
# Compare it to the same call against api.openai.com if you want proof.
A 401 is by design

A request with no rcv_ key returns 401. Auth is the deliberate fail-closed exception: we refuse rather than serve an unauthenticated call. That is the gateway working, not breaking.

Free is observe-only

Free is a spend scan plus an observe-only dashboard. A routed call on a plan that is not in-path returns a labeled 403 plan_not_in_path that names the upgrade. Live routing starts on a paid plan.

Other providers

Anthropic runs natively on /anthropic with the Anthropic SDK. The OpenRouter long tail runs on /v1 under vendor/model ids. See the full docs.

What you hand us, exactly

Your keys pass through. Your prompts are never stored.

We never store prompt or response bodies, and we never train on your traffic. The full body-free field list, lifted from the code that writes it, is published so you can check it rather than believe it.

See exactly what we store
One-line revert, any time Fail-open: a lever fault is never your 5xx

Confirmed it is just a base_url? Good. Now make it yours.

Start free with a scan and an observe-only dashboard. No card. Point a base_url at us when you are ready, and point it back in one line if you are not.