Webhook Delivery Service · View 10 of 20 · Data
The load-bearing fields
- `delivery.idempotency_key` is stable across every attempt and every replay of that delivery. It is what makes at-least-once safe for the consumer, and it is the field the published contract names (ADR-04).
- `endpoint.ordering_mode` is a declared property, not a platform-wide default. A subscription that wants strict per-endpoint ordering accepts head-of-line blocking; one that does not, is not silently given it (ADR-05).
- `attempt.outcome_class` is one of exactly four values. The taxonomy is published, because a developer's first question is which class their failure landed in.
- `dead_letter.replayed_as` links a dead letter to the delivery that replaced it, so a replay is traceable rather than a second mystery.
Deliberate shape
- Two signing secrets per endpoint, bounded by `active_from`/`active_until` — rotation is a data property, not an operational procedure (ADR-07).
- `event.expires_at` and `dead_letter.expires_at` are TTL attributes, so retention is enforced by the store rather than by a job that can stall.
Not modelled
- Endpoint health state. It is recomputed from recent attempts rather than stored as truth, so a stale health record can never be the reason a healthy endpoint is not delivered to.
- Payload bytes. They live in object storage under `event.payload_ref`; the model holds the pointer.