Quickstart
From key to governed traffic in five minutes
RemKey speaks the OpenAI and Anthropic APIs. You change one base URL and one key. No new SDK, no request-header gymnastics, and every call is routed to the right-priced model, screened for secrets and injection, and written to a signed audit trail.
- Get a key. Create an account and copy your key from the
portal. Keys look like
ccr_…and are shown once, so store it like any other secret. Want to try before signing up? The live demo runs with no login. - Swap the base URL. Point your existing client at RemKey and use your
ccr_key as the API key. Nothing else in your code changes. - Send a request. Use
"model": "auto"to let the classifier pick the tier per request, or name a specific model from the catalog.
Your first request
cURL
# Same as an OpenAI call. Only the base URL and key change. curl https://remkey.ai/v1/chat/completions \ -H "Authorization: Bearer ccr_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "model": "auto", "messages": [{"role": "user", "content": "Summarize this ticket in one line."}] }'
Python
# pip install openai, then point the official SDK at RemKey. from openai import OpenAI client = OpenAI( base_url="https://api.openai.com/v1" base_url="https://remkey.ai/v1", api_key="ccr_your_key_here", ) resp = client.chat.completions.create( model="auto", # let the classifier pick the tier, or name a specific model messages=[{"role": "user", "content": "Summarize this ticket in one line."}], ) print(resp.choices[0].message.content)
Node / TypeScript
// npm install openai import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://remkey.ai/v1", apiKey: "ccr_your_key_here", }); const resp = await client.chat.completions.create({ model: "auto", messages: [{ role: "user", content: "Summarize this ticket in one line." }], }); console.log(resp.choices[0].message.content);
Using the Anthropic API instead
Already on Claude, Claude Code, or the Anthropic SDK? Point the Anthropic base URL at RemKey and keep everything else. RemKey routes and governs Anthropic-shaped traffic the same way.
# Anthropic SDK users: point ANTHROPIC_BASE_URL at RemKey instead. export ANTHROPIC_BASE_URL=https://remkey.ai export ANTHROPIC_API_KEY=ccr_your_key_here # Then your existing Anthropic client, Claude Code, or Cursor works unchanged.
What happens to every request
Classifier routing
An LLM classifier scores each prompt and routes it to the right-priced tier, so the small
prompts your team fires all day stop paying premium rates. Set model: "auto" to
hand routing to RemKey, or pin a model to opt out.
Guardrails
Every request is screened for PII (email, SSN, phone, card, API keys) and prompt injection before it reaches a provider. Screening is fail-closed: if a check can't run, the request doesn't go out.
Signed audit trail
Each request is recorded in a hash-chained, Ed25519-signed log. Export a tamper-evident bundle your security team can verify offline. It is the record a CISO asks for.
Every response is joined to the ledger
Every response carries x-remkey-event-id, the id of the row it wrote to your
tenant's hash chain, and (on non-streaming responses) x-remkey-row-hash, that row's
chain-linked hash. Log the header once and you have a join key into the signed audit export
without parsing the response body.
Two optional request fields make that ledger row more useful without any required setup:
user(or Anthropic-stylemetadata.user_id): an opaque end-user id, forwarded to the upstream provider's own abuse-monitoring surface and recorded on the ledger row. Use a stable, non-PII identifier, never an email address.session_id: an optional grouping id for multi-turn flows, recorded alongside the event.
Requests sampled for downroute verification (the quality-hold check) send the prompt to a
judge model in the background. Set x-remkey-no-verify: true on a request to opt it
out of sampling entirely, useful for flows where prompt content shouldn't leave the gateway
even for a background quality check.
Point a tool at RemKey
Using Cursor, Claude Code, Open WebUI, LangChain, or LiteLLM? Each has a one-line base-URL swap. See the integration guides. Migrating off Portkey or Helicone? The migration guides walk through the switch.
Next: browse the model catalog, manage keys and see spend in your portal, or talk to us about a governed pool for your team.