book.scan.failed

A stored book scan could not finish (an unresolvable assumption profile, or three failed attempts).

postWebhookbook.scan.failed

Headers

x-worthune-event'household.computed' | 'household.updated' | 'household.archived' | 'household.decision' | 'household.drift' | 'book.scan.completed' | 'book.scan.failed' | 'facts.changed' | 'assumption-profile.published' | 'calendar.deadline' | 'mandate.proposal' | 'mandate.question' | 'proposal.approved' | 'proposal.rejected' | 'proposal.expired' | 'proposal.superseded' | 'ledger.entry' | 'mandate.paused' | 'mandate.ended' required
x-worthune-deliverystring required

Stable across retries of one event to one endpoint; deduplicate on it.

x-worthune-timestampstring required

Unix seconds at this attempt (fresh on each retry); reject stale timestamps on your side.

x-worthune-signaturestring required

'sha256=' + hex(HMAC-SHA256(secret, ${timestamp}.${rawBody})).

x-worthune-signature-previousstring

For 24 hours after a secret rotation: the same signature under the previous secret.

Payload

kind'book.scan.failed' required
timestampinteger required

Unix seconds; equals the x-worthune-timestamp header.

Response

Receipt. Any non-2xx (or a redirect, or a 5-second timeout) is a failed attempt, retried up to five more times with backoff. An event's first failed attempt counts toward auto-disable — 10 consecutive failed events disable the endpoint; any successful delivery resets the count.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.