Share opened or revoked
Close the loop in your matter file when the auditor actually saw the pack, or when you pulled it back.
Events
These are the live organisation contracts, not sketches. Endpoints version with /v1. Recipients still do not use your Bearer token. For authentication, files and shares, use the pages beside this one.
Register a destination
Scope webhooks. Signing secrets are shown once. Later reads tell you that a secret exists, not what it is. Administrators can list deliveries and replay one that your side missed.
POST /v1/webhooks
Authorization: Bearer …
Idempotency-Key: 7a1f3b…
Content-Type: application/json
{
"url": "https://example.com/casewelt/events",
"types": ["share.content_read", "share.revoked"]
}
Errors
Operations need to know whether the body was wrong, policy said no, governance blocked the state change, or the share has already ended. Problem documents carry a short code as well as the HTTP status.
HTTP/1.1 403 Forbidden
Content-Type: application/problem+json
{
"title": "Forbidden",
"status": 403,
"code": "policy_denied",
"correlation_id": "94f0…"
}When a delivery arrives
GET and POST /v1/webhooks manage destinations. Signing secrets are shown once. Reads later tell you that a secret exists, not what it is. Administrators can list deliveries and replay one that your side missed.
Authenticate the sender over the timestamp and body before trusting the event.
Reject messages whose timestamp falls outside the accepted skew.
At-least-once delivery means receiving the same event again is a normal recovery path.
Return success only after the event has reached the boundary your system considers safe.
Webhook signing secrets are credentials. Do not write them into application logs.
Timeouts and server failures lead to bounded retry, then a delivery you can replay by hand.
Event envelope
Consumers route on type and identifiers. They do not parse a sentence. The body is not the file bytes. Those still come through Casewelt transfer if you are allowed to have them.
{
"id": "evt_01…",
"type": "share.content_read",
"occurred_at": "2026-08-19T11:04:00Z",
"object_id": "fil_01…",
"share_id": "shr_01…"
}Types you will actually subscribe to
Close the loop in your matter file when the auditor actually saw the pack, or when you pulled it back.
A file request completed. Kick the next step without polling the folder.
An envelope was sent, a signer finished, or the completed version filed.
Someone tried a share that must not happen. Your monitoring should see a denial, not a missing success.
Records teams need that as an event, not as a rumour from a helpdesk ticket.
Stop filling a dead letter with uploads that will never be accepted.
Integration contract
Bring the URL that should receive opens. We will sign a delivery, retry it, and show a replay from the console.