The protocolIntroducing $CREDIT, tokenized inferenceExplore ›
surplus
Account

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.

HeaderValueMeaning
x-surplus-data-retentionnoneSurplus kept no content from this request.
x-surplus-upstreamopenrouter-zdr | surplus-pod | phala-teeWhich of the paths above served it.
x-surplus-request-iduuidMatches the billing row in GET /api/v1/usage, the only record kept.
x-surplus-pii-redactedcountHow many values x-surplus-redact replaced. Only when you sent it.
x-surplus-tee-receiptreceipt idOn tee/ responses: fetch the signed receipt at GET /api/v1/tee/receipts/{id}.
x-e2ee-appliedtrueOn 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.