Audit Export
Export your audit log for compliance and analysis.
Formats
Events can be exported as CSV or JSON.
How to Export
Click the CSV or JSON export buttons on your app's Requests page. The default range is 30 days and
days accepts up to 365, but you can only export what has not yet
been pruned: retention is 30 days on Starter, 90 on Growth and 2 years on Compliance, after which events are deleted
permanently. If you need an audit trail that outlives that window, export before it closes. Export is
available on every plan.
Dashboard export URL
GET /dashboard/apps/:app_id/export?format=json&days=30
This URL needs a logged-in browser session; it is not callable with a Bearer token, so there is no
programmatic export today. It also accepts period=1h,
24h or 7d in place of
days.
Exported fields
CSV has a fixed set of columns, in this order:
id,type,event_id,request_id,environment,provider,model,timestamp,decision,prompt_text,output_text,unavailable_fields
JSON returns {"events": [...]}, where each event has
id, type,
event_id, request_id,
environment, provider,
model, metadata,
payload and timestamp.
Token counts, cost and violations are not separate columns. In JSON they are inside
payload โ usage
and cost_usd on an
ai.response โ and violations are their own
policy.violation events, exported as rows like any other.
CSV carries neither metadata nor
payload, so use JSON if you need them.
The export contains your stored content in clear. Both formats decrypt every encrypted
field on the way out, after any redaction your rules applied, so the file leaves SignalVault's encryption
behind โ treat it as sensitive.
In CSV the prompt and response are the prompt_text and
output_text columns. In JSON, mind the key names: every payload key ending in
_encrypted, such as payload.prompt_text_encrypted or
payload.tool_input_encrypted, holds plaintext, despite what it is called.
If a stored value cannot be decrypted, it is exported empty and its key is listed in the row's
unavailable_fields.