What every trace stores
Every request writes one trace row: which model was requested and which actually served it, the routing reason and predicted difficulty/task type, token counts, cost breakdown (provider cost vs. our fee), routing and upstream latency, fallback path, cache hit/miss, and status. This is what backs /logs and /usage, visible to your own account.
Your prompts and outputs are stored too
Traces keep a copy of your request content. For chat requests that is the full message array and the model's reply (size-bounded: a very large request has long messages truncated). For image, video, audio and other media requests it is the request parameters you sent, including the prompt and reference-file URLs, with very long values truncated. The Prompt and Completion views in /logs read from this. It is visible to your own account and to our staff for support, billing and safety review.
Separately, the
prefix_hash field is a one-way SHA-256 hash
of your multi-turn prefix, used only for cache/sticky-routing analytics. It can't be reversed back into your
text.
How long things are kept
- Trace rows (metadata plus the prompt, reply and request parameters above): kept while your account is active. There is no automatic deletion schedule yet; email contact@zeus.rocks to have them deleted.
- Generated images and videos we host: deleted 30 days after generation, and the link we return stops working at the same time. You can delete them sooner, see Data retention.
- Audio on /v1/audio/* (speech-to-text input, text-to-speech, music and sound-effect output): kept 30 days for debugging, then deleted. Send
"store": falseto keep it 24 hours instead (never sooner). - Image- and video-request input references: kept 30 days for debugging, then deleted.
store: falseapplies to generated outputs only, not to these. - Reference files uploaded for one generation call: the uploaded file is deleted after 30 minutes. When you use it in an image or video request, the request's own debugging copy (above) is kept 30 days.
- Assets you save (Studio uploads, elements, voices), review attachments and community posts: kept until you delete them or ask us to delete your account.
Every lifetime in one place, with the delete and expiry controls: Data retention. The full policy is on the Privacy Policy page.
Deleting generated outputs
Every finished image and video is copied into our storage so we can hand you a stable link. You control how long that copy lives (examples and every status code are on Data retention):
- Delete a video now:
DELETE /v1/videos/{id}permanently removes the stored file and the job then answers404. It returns409while the video is still rendering, and403(delete_not_allowed_yet) during the first 24 hours after the video was generated. It needs a key with the video scope. - Short lifetime per request: send
"store": falsetoPOST /v1/videosorPOST /v1/imagesand the output is deleted 24 hours after the job completes, or set"output_ttl_secs"(24 hours to 30 days; a shorter value is raised to 24 hours, because a video can't be deleted sooner). The finished job reportsoutput_expires_at, and after expiry it answers410. A result must be stored briefly so we can deliver it, sostore: falsemeans a short lifetime, not never stored. The timer starts when completion is first observed, either by your poll or our background check. - Bulk delete: in the request log, tick the image or video rows and choose Delete outputs. Images and videos generated in the last 24 hours are skipped.
Deleting removes the stored file and makes its link stop working. It does not remove the request-log entry (prompt, settings, cost), which we keep for billing; email contact@zeus.rocks to have that erased. We have no delete call to the model provider that generated the output, so any copy that provider holds follows its own terms. Links already issued can be opened by anyone who has them until the file is deleted, so treat them as secrets.
Attribution fields are the exception
If you send app-attribution headers
or the user field, those exact
strings (your app name, referrer, end-user id) are stored as given, since that's the point of sending them —
don't put anything in them you wouldn't want stored plainly.
The response cache
The response cache is a separate, opt-in store: it holds the full request/response body only for that entry, is always namespaced to your own org (never shared across tenants), skips tool/function-calling requests entirely, and expires on a TTL (default 5 minutes, capped at 24 hours). If you never send the opt-in header, none of this applies to you.
What the upstream provider sees
Your prompt is, of course, sent to whichever provider serves the request — that's inherent to getting a completion back. What that provider retains is governed by their own terms, not ours; the periods above apply only to the copies we hold.