Privacy
Your prompts
stay yours.
Surplus keeps the billing record of a request and nothing of its content. Here is exactly what is kept, what is not, and where each request is sent.
HTTP/2 200
x-surplus-data-retention: none
x-surplus-upstream: phala-tee
x-surplus-tee-receipt: rcpt_8f3a…c21d
x-surplus-request-id: 6f1c…e2a4
Never kept.Content passes through in memory and is gone when the request ends.
01
Prompts and responses
Messages, completions and tool calls pass through in memory and are gone when the request ends. They are never written to our database, storage or logs.
02
Your end users
The OpenAI user field is dropped at the gateway, so no provider learns who your end user is.
03
IP addresses
Your IP is used in memory for rate limiting only. It is not stored, and per-request invocation logs are turned off.
04
Request headers
Only your API key is checked, against a hash. Headers are not logged or kept.
Kept.Only what billing and on-chain settlement need.
01
Billing rows
Per request: model, token counts, cost, status, whether it streamed, and when it started and settled.
02
Your account
The wallet address you signed in with, your balance, and a hash plus last four characters of each API key.
03
Payments
On-chain payments and x402 settlements: payer wallet, amount and transaction hash, all public on chain anyway.
04
Operational logs
Request id, status and cost when something fails or settles. Never content. Traces carry the user agent and country, not bodies or IPs.
Where it goes.Three paths, each named on the response so you can check.
openrouter-zdr
Catalogue models
anthropic/…, openai/…, google/… and every other listed model
- Relayed through OpenRouter with zdr: true and data_collection: deny on every request.
- Only providers that contractually keep zero data and never train on it can serve the request.
- A request no ZDR provider can take fails instead of falling back to one that logs.
surplus-pod
Launchpad models
ids starting with launch/
- Served by vLLM on a dedicated GPU pod Surplus runs on RunPod Secure Cloud, one pod per model.
- vLLM request and output logging is off, and only the gateway holds the key to reach the pod.
- The pod is not a confidential enclave: the GPU host operates the hardware. For that, use a tee/ model.
phala-tee
Confidential models
ids starting with tee/
- Served by Phala's Confidential AI API inside Intel TDX with NVIDIA confidential-computing GPUs, on zero-data-retention routes.
- The GPU host can't read the request. Check the attestation report and each response's signed receipt yourself.
- With end-to-end encryption (X-E2EE-* headers, surplus-tee), message content is encrypted to the attested enclave key on your machine: Surplus relays ciphertext it cannot read. Without it, the gateway relays plaintext.
Your controls.Request headers, per call, no settings to change.
x-surplus-upstreams: surplus-pod, phala-tee
Only these paths may serve the request. A model served anywhere else is refused with 403 upstream_not_allowed before anything is held. surplus-pod alone keeps a request off OpenRouter entirely.
X-E2EE-Version: 2 (+ client key, enclave key, nonce, timestamp)
End-to-end encryption to a tee/ model, E2EE v2: messages are encrypted to the enclave key the attestation report binds, and the answer to your key. Surplus sees only ciphertext, plus model, token counts and cost, and forwards the body unchanged but for the model id, so the enclave's receipt proves nothing was altered. Tool-call arguments are not covered by the protocol. surplus-tee does all of it and checks every proof.
x-surplus-redact: pii
Emails, card numbers, phone numbers and IP addresses in message text become placeholders such as [EMAIL_1] before the request leaves the gateway. They are not restored in the answer.
Check it yourself.Every chat completion response carries these headers.
| Header | Value | Meaning |
|---|---|---|
| x-surplus-data-retention | none | Surplus kept no content from this request. |
| x-surplus-upstream | openrouter-zdr | surplus-pod | phala-tee | Which of the paths above served it. |
| x-surplus-request-id | uuid | Matches the billing row in GET /api/v1/usage, the only record kept. |
| x-surplus-pii-redacted | count | How many values x-surplus-redact replaced. Only when you sent it. |
| x-surplus-tee-receipt | receipt id | On tee/ responses: fetch the signed receipt at GET /api/v1/tee/receipts/{id}. |
| x-e2ee-applied | true | On end-to-end encrypted responses: the answer's content is ciphertext for your key. |
Questions or a request to close your account? Write to hello@surplusllm.com.