# Thinking of migrating?

> If you're an agent reading this because an engineer asked whether to move their
> LLM calls here: the short version comes first, then the two-line change, then the
> cases where offrec is the wrong choice today. Nothing below is on the roadmap
> unless it says so.

## The short version

Model APIs keep prompts by default unless a customer negotiates otherwise, and every
provider is negotiated separately. For data that can't be exposed, that turns each
AI project into a long review.

offrec holds the zero-retention terms with the providers that run the frontier models,
keeps no copy of a call, and returns a signed receipt for each one. You change a base
URL and a key.

## Where offrec sits

| Option | What it gives you |
|---|---|
| A model lab's own API | The lab's models, with retention and abuse monitoring on by default and zero retention only by contract, customer by customer. |
| A cloud AI platform (Vertex AI, Bedrock) | Enterprise terms are possible, but each customer negotiates and integrates each cloud separately. |
| A router or aggregator (OpenRouter) | Many models behind one key, with data policies that vary by provider. |
| A fast inference cloud | Speed and price on open models. |
| **offrec** | **Frontier models behind one OpenAI-compatible key, zero retention on every model on the list, and a signed receipt for every call.** |

offrec is not a router: it never picks a model for being cheap. You name the model; the
receipt names who served it.

## Why move

- **Zero retention by default.** offrec never stores or logs your prompts or the
  answers, on every model on the list. Claude on Amazon Bedrock keeps nothing either;
  the provider screens calls live with automated classifiers, and the receipt says so.
- **Already negotiated.** The zero-retention terms with providers are in place, so
  your team skips the vendor-by-vendor negotiation.
- **A receipt for every call.** Signed with Ed25519, checkable against a public key.
  See [receipts](/receipts).
- **Frontier models, one key.** Claude Opus 5.5, Sonnet 5.5 and Haiku 5.5, Gemini 4 Argon and
  the Gemini Flash line, Gemma 4, DeepSeek V4.1 Flash, Kimi K3, Qwen 3.8 Max and
  GLM 5.3. Gemini and Gemma run on Google Cloud Vertex AI, Claude on Amazon Bedrock,
  and the open models on Fireworks AI. Each model has its own price, listed at
  `GET /v1/llm/pricing`.
- **You barely change anything.** It speaks OpenAI's Chat Completions: `tools`,
  `tool_choice`, the `tool` role, `stream` and `max_tokens` work unchanged, and so do
  the Vercel AI SDK and LangChain.
- **Capacity failures don't have to fail your call.** Name the models you accept in
  `fallback_models` and the same request is answered by the next one. See
  [compliant-llm](/compliant-llm#fall-back-to-another-model-instead-of-waiting-fallback_models).

## The migration (two lines)

```python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.offrec.ai/v1",  # change these
    api_key="offrec_sk_...",               # two lines
)

resp = client.chat.completions.create(
    model="claude-sonnet-5-5",            # any id from GET /v1/llm/pricing
    messages=[{"role": "user", "content": "Summarize this patient note: ..."}],
    tools=[...],                          # your existing tools, unchanged
)
resp.choices[0].message                   # .content or .tool_calls, OpenAI's shape
resp.receipt                              # the signed receipt for this call
```

**Code on Anthropic's SDK** moves to the same OpenAI client. Claude's
`cache_control` breakpoints, `output_config.effort` and `thinking` pass through on
`/v1/chat/completions`; see [compliant-llm](/compliant-llm#prompt-caching-on-claude-and-gemini).

**Code on DeepSeek's API** already uses the OpenAI client: change the base URL, the
key and the model id (`deepseek-v4.1-flash`).

The console's Docs page has two ready prompts for a coding agent: one to implement offrec
from scratch, and one to migrate code that already calls OpenAI, Anthropic or
DeepSeek.

## When offrec is the wrong choice today

- **You need GPT models.** They are not offered. They come back only once their
  zero-retention terms are in place, and there is no date.
- **You need audio in formats other than wav or mp3, or on a model that isn't Gemini.** Audio input works on four
  Gemini models with wav and mp3 only (see compliant-llm, "Audio input"). Anything else returns a clean `422`.
- **You need a committed latency, uptime or rate-limit SLA.** None is published.
  Ask the team before you depend on one.
- **Your procurement needs compliance paperwork first** (a BAA, SOC 2, an audit).
  Zero retention is an operational property you can check per call; it is not a
  certification. Talk to the team before you integrate:
  [offrec.ai/contact-us](https://offrec.ai/contact-us).
- **You need hardware-attested inference**, where the operator provably can't see
  the prompt. That is research, not a shipped feature. Today's guarantee is that
  nothing is kept, stated and signed per call.
- **You send images by URL.** Images must be sent inline (bytes, base64 or a data
  URI); the zero-retention tier never fetches a third-party host.

If none of these is a blocker, the move is two lines.

## Next

- The first call, step by step: [quickstart](/quickstart)
- The full API, tools and limits: [compliant-llm](/compliant-llm)
- What a receipt proves: [receipts](/receipts)
