OP Inference

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 datazdrshortstandard (default)
Prompts and responsesNot kept, only a fingerprint7 days30 days
Media inputs you link toNot kept, only a fingerprint7 days30 days
Generated media1 hour7 days30 days
Job state7 days30 days90 days
Usage and billing records400 days400 days400 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 zdr is deleted one hour after it is stored.
  • A zdr job that has not finished within 24 hours fails with retention_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 with 400 invalid_request.