Data retention
How long we keep what you send and what we generate, and how to keep nothing.
Every request runs under a retention class. The class decides how long each kind of data is kept, in every place we store it: the job store, media output, logs and telemetry. Your account, workspace or key sets the class, and a request can make it stricter.
Classes
| Kept data | zdr | short | standard (default) |
|---|---|---|---|
| Prompts and responses | Not kept, only a fingerprint | 7 days | 30 days |
| Media inputs you link to | Not kept, only a fingerprint | 7 days | 30 days |
| Generated media | 1 hour | 7 days | 30 days |
| Job state | 7 days | 30 days | 90 days |
| Usage and billing records | 400 days | 400 days | 400 days |
Usage records hold token counts, prices and ids, never content. We keep them for billing and invoices whatever the class.
What deleted means
When a period ends, the data is deleted, not hidden. Generated media is removed together with every
stored copy of the file. If a deletion fails, a storage rule removes zdr media and its copies
within a day, and media of the other classes within 30 days.
Encrypted database backups are kept for up to 35 days, so that the service can be recovered after
an outage. Job state and usage records deleted under the periods above can remain in those backups
until the backups expire. Backups are used only to recover the service. zdr content is never in
them, because it is never stored.
Prompts and responses are stored at all only when content logging is on. See below.
Choose a stricter class for one request
curl https://api.opinference.com/v1/chat/completions \
-H "Authorization: Bearer $OP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-oss-120b",
"messages": [{"role": "user", "content": "Say hi."}],
"op": {"retention": "zdr"}
}'op.retention accepts zdr, short or standard. Any other value is refused with
400 invalid_request. A class looser than the one your key already has is refused with
400 policy_conflict.
Zero data retention
zdr keeps no prompt, response or input. Two things follow for media jobs:
- Download the output promptly. Generated media under
zdris deleted one hour after it is stored. - A
zdrjob that has not finished within 24 hours fails withretention_expired, because nothing about it may be kept longer.
zdr controls what we keep. To also require that the endpoint serving your request keeps
nothing, send "provider": {"zdr": true}. To exclude endpoints that may train on your inputs,
send "provider": {"data_collection": "deny"}. No endpoint qualifies for "zdr": true today, so
that filter fails every request. See Provider preferences.
Content logging
Content logging stores the prompts and responses of text requests so you can read them on the dashboard's Requests page. It is off unless you turn it on.
- It is a workspace setting, on the Requests page. An organisation that turned it off cannot have it turned on by a workspace.
- It never applies under
zdr. - Each request and each response is stored up to 256 KiB.
- A request can turn it off for itself with
"op": {"content_logging": "off"}. It cannot turn it on: any other value is refused with400 invalid_request.