One line, explained
Every line has the same five keys. Only detail varies, and it varies by the source that produced the event.
{"ts":"2026-08-14T19:39:39.740Z","event":"verify","source":"decision-log","key_id":"9f42c1a0b7e35d81","detail":{"decision":"yes","circuit_id":"yesno","proof_id":"prf_9c2d18a6","proof_digest":"aeec8191...","decision_source":"verify"}}
tsISO-8601 timestamp in UTC. Lines are sorted ascending, which means an append to your index never arrives out of order within one response.
eventOne of eleven names. Use it as the primary dimension in a dashboard.
sourceWhich internal record produced the line: key-usage-log, decision-log, audit-merkle, spent-registry, managed-keys or webhooks.
key_idThe API key that triggered it, or null where the record has no key attached, such as a spend recorded at a gate.
detailFields specific to the source. Map the ones you care about at ingest and keep the rest as a raw object.
The format=json variant wraps the same lines in a header: generated_at, the since and until you asked for, count, truncated, the available formats and the events array. That header is what makes it usable as a standalone exhibit, because it states the window rather than leaving it to a filename.