Documentsent
Fires when a document is sent to its parties for signing. It fires again each time the document is sent again, for example after it was withdrawn and edited.
Headers
The event id. It stays the same across retries and replays, so deduplicate on it.
When sajn sent this attempt, in Unix seconds. Reject a timestamp older than your tolerance, such as five minutes.
One or more space-separated signatures, v1,<base64 HMAC-SHA256>, over <webhook-id>.<webhook-timestamp>.<raw request body>. The key is the base64 decoding of the secret after whsec_. Accept the request when any signature matches; for 24 hours after a secret rotation, there is one per secret. Any Standard Webhooks library verifies it. Webhooks created without a secret don't send this header.
The endpoint's API version, the same value as apiVersion in the body.
2026-10 Body
Event ID, also in webhook-id. It's the same on every retry, replay and endpoint that receives the event, so deduplicate on it. To read the event again, pass it to GET /api/v1/events/{id}.
document.sent When the event happened. It doesn't change across retries and replays.
The endpoint's API version, which sets the shape of data.
2026-10 SANDBOX for an event in a sandbox organization.
PRODUCTION, SANDBOX Who caused the event. Null when sajn can't attribute it: a party's action, such as signing, and most changes made in the sajn app.
Response
Return any 2xx status code within 30 seconds to acknowledge the delivery. sajn retries any other status code, a redirect, a timeout and a network error with backoff for about three days, 12 attempts in all. A 410 Gone stops the retries and pauses the webhook.

