---
title: The ledger
description: An append-only record of every step and decision on a case, written in the same transaction as the change it records.
section: Concepts
order: 5
---

Every case has a ledger. A row is written in the same database transaction as the change it records, so there is no change without its row and no row without its change. Rows are never edited or removed.

## What a row says

| Field | Meaning |
| --- | --- |
| `action` | What happened, as `noun.verb`: `file.received`, `gate.confirmed`, `run.ingested`, `document.approved`, `workflow.auto_filed`. |
| `actor.name` | Who decided. A person's role, the name of an API key, or `Workflow`. |
| `actor.authenticatedAs` | Whose sign-in or key authorized the write. |
| `target`, `detail` | What was touched, and the specifics. |

`name` and `authenticatedAs` differ exactly when a machine decided. A workflow can file a document but cannot sign in, so the row says `Workflow` decided, under the identity of whoever took the gate.

## Where to read it

- In the app: the ledger lens of the case.
- Over the API: `GET /applications/{id}/events`, newest first. See [reading results](/docs/api/reading-results).
- Pushed to you: [webhooks](/docs/api/webhooks) deliver ledger rows as they are written.

## Retention

A case and its ledger are removed together when the case passes the retention window. The ledger is part of what is purged, by design.
