# offrec docs

**AI, off the record.**

offrec is zero-retention inference for frontier models. You send a prompt
through one OpenAI-compatible API, the model answers, and offrec keeps no copy of the
prompt or the answer. Every call comes back with a signed receipt that says how it
was handled.

- **Frontier models, one key.** Claude, Gemini, Gemma, DeepSeek, Kimi, Qwen and GLM
  behind `https://api.offrec.ai/v1`, priced per model.
- **Zero retention.** offrec never stores or logs your prompts or the answers. The
  models run on managed providers under zero-retention terms.
- **A receipt for every call.** Signed with Ed25519 and checkable against a public
  key, so you can verify what we say. See [receipts](/receipts).
- **OpenAI-compatible.** Change the base URL and the key. Your `tools`, `stream`
  and agent loop stay as they are.

These docs are written for the engineers and the agents wiring it up. Every page is
`curl`-able markdown; a browser gets the rendered page (`?format=md` forces
markdown).

```bash
curl https://docs.offrec.ai                # this page, as markdown
curl https://docs.offrec.ai/quickstart     # the first call, step by step
curl https://docs.offrec.ai/compliant-llm  # the full LLM API reference
curl https://docs.offrec.ai/llms.txt       # the machine-readable index
curl https://docs.offrec.ai/llms-full.txt  # every page in one document
```

## Your first call

Mint a key at [console.offrec.ai/api-keys](https://console.offrec.ai/api-keys). It
starts with `pnotp_sk_` and is shown once. A new account starts with no credits, so
add some on the console's Billing page first; a call on an empty balance returns `402`.

```bash
export PNOTP_API_KEY="pnotp_sk_..."

curl https://api.offrec.ai/v1/chat/completions \
  -H "Authorization: Bearer $PNOTP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gemini-3.1-flash-lite","messages":[{"role":"user","content":"Summarize this clause in one sentence: ..."}]}'
```

**Already on the OpenAI SDK?** Two lines change:

```python
from openai import OpenAI

client = OpenAI(base_url="https://api.offrec.ai/v1", api_key="pnotp_sk_...")
resp = client.chat.completions.create(model="claude-sonnet-5-5", messages=[...], tools=[...])
resp.receipt                                # the signed receipt, next to the answer
```

**The SDKs** (Python on PyPI, R on CRAN; both are named `pnotp`):

```python
# pip install pnotp
import pnotp
px = pnotp.Client()                         # reads PNOTP_API_KEY
out = px.chat("Summarize this clause in one sentence: ...", model="gemini-3.8-flash")
out["completion"], out["receipt"]
```

```r
# install.packages("pnotp")
library(pnotp)
out <- pnotp_chat("Summarize this clause in one sentence: ...", model = "gemini-3.8-flash")
out$receipt
```

The [quickstart](/quickstart) walks through picking a model, streaming, reading the
receipt and verifying its signature.

## The models

Every model on the list runs with zero retention. Gemini and Gemma run on Google
Cloud Vertex AI, Claude on Amazon Bedrock, and DeepSeek, Kimi, Qwen and GLM on
Fireworks AI. Every receipt names the provider that served its call.

- The default, when a call names no model: `gemini-3.1-flash-lite`.
- The lowest price: `claude-haiku-5-5`.
- The strongest: `claude-opus-5-5`, `gemini-4-argon`, `kimi-k3`.

The live list, with prices, context windows and what each model accepts, is public:

```bash
curl https://api.offrec.ai/v1/llm/pricing    # no key needed
```

The full catalog, with what each model is best for, is on
[compliant-llm](/compliant-llm#the-catalog-pick-a-model-with-the-model-field).
GPT models are not offered; they come back only once their zero-retention terms are
in place.

## What zero retention means here

- offrec never stores your prompts or the answers and never logs them. What it records
  is metered metadata: tokens, cost, model, time.
- Claude on Amazon Bedrock keeps nothing either, but the provider screens calls live
  with automated safety classifiers. That is monitoring, not retention, and the
  receipt says so: `retention_basis: zero_retention_abuse_monitored`.
- Prompt caching is optional and temporary: scoped to your account, held in memory
  only. Turn it off per call with `"prompt_cache": false`.
- offrec keeps no copy of the call, so save the receipts you need.

The details, including what zero retention does not cover, are on
[compliant-llm](/compliant-llm#zero-retention-what-it-means-and-what-it-does-not).

## Also on the platform

- **[Hosted agents](/agents).** A tool-calling loop with a zero-retention model as
  the brain.
- **[Neural networks](/neural-networks).** Design, train and deploy your own image
  classifier as an API endpoint. A side feature, still fully supported.
- **[Laya](/laya).** Typed decisions (route, triage, score, flag) with calibrated
  probabilities, via `POST /v1/decisions`.
- **[Toby](/toby).** Ask in plain English from Python or over HTTP (needs your key).
- **Labs.** Agents designed, built and run for your company by the offrec team:
  [offrec.ai/contact-us](https://offrec.ai/contact-us).

## The SDK documents itself (offline, no key)

Prefer in-package help over remembered signatures. It is generated by introspection
and matches the installed version exactly.

```python
pnotp.help()                       # overview + topic list
pnotp.help("agents")               # a topic page
pnotp.help.search("stream a chat")
pnotp.help(pnotp.Client.chat)      # any symbol's real signature + docstring
pnotp.help.errors                  # the exception catalog
pnotp.help.toby("How do I ...?")   # hosted assistant (needs key + credits)
```

## Topics

**Start**
- [quickstart](/quickstart): the first call, a model, streaming, the receipt and its signature
- [migrating](/migrating): moving LLM calls from another provider, and when not to
- [auth](/auth): account keys, environment, base URL
- [credits](/credits): balance, billing, managing account keys

**LLM API**
- [compliant-llm](/compliant-llm): the full reference. Catalog, tools, streaming, vision, caching, limits
- [receipts](/receipts): what a receipt records, and how to verify one

**Extras: agents**
- [agents](/agents): bring-your-own-brain tool-calling loop, and hosted agents
- [brains](/brains): the model endpoints an agent can use
- [tools](/tools): declare tools from typed Python functions

**Extras: neural networks**
- [neural-networks](/neural-networks): train, deploy, predict, end to end
- [training](/training): submit, wait, pause, resume, cancel
- [deployments](/deployments): upload a checkpoint, manage endpoints and keys
- [inference](/inference): call a deployment with your key or a `pnp_` key
- [compliance](/compliance): data-compliant (zero-retention) model endpoints
- [architectures](/architectures): image and tabular architecture graphs
- [laya](/laya): typed decisions with calibrated probabilities

**Reference**
- [errors](/errors): the error contract and the exception catalog
- [toby](/toby): the hosted assistant and the `/ask` endpoint
- [api](/api): the raw HTTP API
