Signing event

Sent to webhookUrl as a signing progresses. Deliveries carry X-Tvarka-Signature: sha256=<HMAC-SHA256 of the raw body> keyed with your webhook secret - verify it before acting - plus X-Tvarka-Idempotency-Key and X-Tvarka-Event.

Prefer X-Tvarka-Signature-V2: t=<unix seconds>,v1=<hex>, where v1 is the HMAC-SHA256 of t + "." + raw body under the same secret and t equals X-Tvarka-Timestamp. Reject deliveries whose t is more than 5 minutes from your clock: a replayed delivery fails.

Retried with backoff on 5xx and transport failures. Delivery is a convenience, never the only way to learn an outcome: polling always works, and a failed delivery never changes a signing's state.

The payload never carries a signer's identity data - no personal code, no certificate subject, no phone number. It echoes the email you supplied and nothing more.

postWebhooksigningEvent

Payload

event'signing.signer_signed' | 'signing.signer_declined' | 'signing.signer_failed' | 'signing.completed' | 'signing.declined' | 'signing.cancelled' | 'signing.expired' | 'signing.failed'
signingIdstring uuid
status'pending' | 'completed' | 'declined' | 'cancelled' | 'expired' | 'failed'

pending - at least one signer can still sign. completed - every signer signed. declined - somebody declined and nobody else can still sign. expired - the window closed first. cancelled - you retracted it. failed - the signing could not be prepared.

externalIdstring
occurredAtstring date-time
completionMode'qes_ceremony' | 'esign_ceremony' | 'sandbox_simulation'
level'esign'

Present on a simple e-signature.

Response

Acknowledged. Any 2xx stops redelivery.

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.