> ## Documentation Index
> Fetch the complete documentation index at: https://www.presolve.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Event catalog

> Every event type that can appear on the feed or be selected by a webhook subscription.

The public event catalog is exhaustive: anything not listed here is internal and never reaches the feed. Discover it programmatically with `GET /api/v1/webhook-events` (scope `events:read`), which returns each entry's `entity`, `eventType`, rollout `phase`, `requiredScope`, and `redaction` mode.

Two redaction modes apply on the read path:

* **payload-allowed** — payload and diff are returned after deep sensitive-field redaction (any string field may surface as `"[REDACTED]"`).
* **ids-only** — payload and diff are stripped entirely; you get identifiers, the event type, and `relatedIds`, and fetch details from the scoped resource endpoints.

Reading any event requires `events:read` **plus** the event's required scope below.

## Wakeup event

| Event type | Notes |
| - | - |
| `sync.events_available` | Webhook-only wakeup (never appears on the feed). Always a valid subscription selection and the default for new subscriptions. |

## Documents & folders — `documents:read`

| Event type | Entity | Redaction |
| - | - | - |
| `document.created` | `library_file` | payload-allowed |
| `document.content_replaced` | `library_file` | payload-allowed |
| `document.metadata_updated` | `library_file` | payload-allowed |
| `document.deleted` | `library_file` | payload-allowed |
| `document.restored` | `library_file` | payload-allowed |
| `document.uploaded` | `library_file` | payload-allowed |
| `folder.created` | `library_folder` | payload-allowed |
| `folder.updated` | `library_folder` | payload-allowed |
| `folder.deleted` | `library_folder` | payload-allowed |
| `folder.restored` | `library_folder` | payload-allowed |

## Cases & matters — `cases:read`

| Event type | Entity | Redaction |
| - | - | - |
| `case.created` | `case` | payload-allowed |
| `case.updated` | `case` | payload-allowed |
| `case.deleted` | `case` | payload-allowed |
| `case.status_changed` | `case` | payload-allowed |
| `case.assigned` | `case` | payload-allowed |
| `case.unassigned` | `case` | payload-allowed |
| `case.referred` | `case` | payload-allowed |
| `matter.stage_changed` | `matter` | payload-allowed |
| `matter.status_changed` | `matter` | payload-allowed |
| `matter.lifecycle_stage_changed` | `matter` | payload-allowed |
| `matter.field_changed` | `matter` | payload-allowed |

## Intake — `intake:read`

| Event type | Entity | Redaction |
| - | - | - |
| `intake.submitted` | `intake` | payload-allowed |
| `intake.field_changed` | `intake` | payload-allowed |

## Tasks — `tasks:read`

| Event type | Entity | Redaction |
| - | - | - |
| `task.created` | `task` | payload-allowed |
| `task.updated` | `task` | payload-allowed |
| `task.completed` | `task` | payload-allowed |

## Calendar — `calendar:read`

| Event type | Entity | Redaction |
| - | - | - |
| `calendar.event_created` | `calendar` | payload-allowed |
| `calendar.event_updated` | `calendar` | payload-allowed |
| `calendar.event_cancelled` | `calendar` | payload-allowed |

Calendar events are currently emitted as one aggregate event per sync batch rather than per item.

## Notes — `notes:read`

| Event type | Entity | Redaction |
| - | - | - |
| `note.created` | `case_note` | payload-allowed |
| `note.updated` | `case_note` | payload-allowed |
| `note.deleted` | `case_note` | payload-allowed |

Note payloads carry identifiers and the note title only — never the note body.

## Deadlines — `deadlines:read`

| Event type | Entity | Redaction |
| - | - | - |
| `deadline.anchor_recorded` | `deadline_anchor_record` | payload-allowed |
| `deadline.obligation_created` | `deadline_obligation` | payload-allowed |
| `deadline.resolved` | `deadline_obligation` | payload-allowed |
| `deadline.cancelled` | `deadline_obligation` | payload-allowed |
| `deadline.warning_due` | `deadline_obligation` | payload-allowed |
| `deadline.critical_due` | `deadline_obligation` | payload-allowed |
| `deadline.due` | `deadline_obligation` | payload-allowed |
| `deadline.overdue` | `deadline_obligation` | payload-allowed |

## E-sign — `esign:read`

| Event type | Entity | Redaction |
| - | - | - |
| `esign.document.completed` | `esign` | **ids-only** |

## Communications — `communications:read`

| Event type | Entity | Redaction |
| - | - | - |
| `email.message_received` | `email_message` | **ids-only** |

## Billing — `billing:read`

| Event type | Entity | Redaction |
| - | - | - |
| `expense.created` | `case_expense` | payload-allowed |
| `invoice.created` | `attorney_invoice` | payload-allowed |
| `invoice.status_changed` | `attorney_invoice` | payload-allowed |
| `lien.resolved` | `case_lien` | payload-allowed |

## Settlement funds — `funds:read`

| Event type | Entity | Redaction |
| - | - | - |
| `check.recorded` | `check` | payload-allowed |
| `check.status_changed` | `check` | payload-allowed |
| `disbursement.status_changed` | `disbursement` | payload-allowed |

## Reports & exports — `reports:read`

| Event type | Entity | Redaction |
| - | - | - |
| `export_job.completed` | `data_export_job` | payload-allowed |
| `export_job.failed` | `data_export_job` | payload-allowed |

Export-job payloads carry job identity and outcome metadata only (entity, status, row count, byte size) — never row data or storage keys.
