signer.acknowledged delivered to your endpoint
InkSeal sends this request to every active subscription whose events array contains signer.acknowledged, or whose events is null. Verify X-InkSeal-Signature against the raw body before doing anything else, and deduplicate on id. It fires for a recipient whose role is reviewer; such a recipient never produces signer.signed.
Headers
The event id, identical to id in the body. Deduplicate on this.
v1= followed by the lowercase hex HMAC-SHA256 of <X-InkSeal-Timestamp>.<raw body> under the subscription's secret.
Unix seconds of this delivery attempt, as a decimal string. Part of the signed string, and the value to age-check against replay.
Payload
Response
Acknowledged. Return any 2xx, with or without a body, as soon as the event is stored; do your work afterwards. Anything that is not a 2xx, including a redirect (redirects are never followed) and a response slower than the 30 second timeout, counts as a failure and is retried with exponential backoff from 60 seconds, doubling per attempt and capped at 1 hour, for at most 6 attempts. After the sixth the event is terminal and only a manual retry through POST /webhooks/{webhookId}/events/{eventId}/retry will send it again.
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.