Every state change, delivered.
Fifteen event types. Signed with HMAC-SHA256. Delivered from a durable queue and retried with back-off on failure. Every attempt and its response status is recorded.
Event catalog.
All events fire from the same delivery queue, with the same headers and signing scheme.
envelope.created
envelope created
envelope.sent
sent to recipients
envelope.opened
recipient opened the link
envelope.viewed_document
recipient viewed a document
envelope.identity_verified
signer passed OTP verification
envelope.field_filled
a field was filled
envelope.document_signed
a document was signed
envelope.all_signed
all signers completed
envelope.completed
envelope completed
envelope.copied
a copy was sent to a CC recipient
envelope.reminded
a reminder was sent
envelope.declined
signer declined
envelope.expired
window closed unsigned
envelope.voided
sender voided it
envelope.recalled
sender recalled it to a draft
Payload example.
envelope.completed — the most common event. Subscribe once; on failure we retry with back-off before marking the delivery failed.
// Header — HMAC-SHA256 digest of the raw body X-VG-Signature: 4c2a9bd3…71ff // Body { "id": "evt_8f4a2c1e9b3d", "type": "envelope.completed", "created": "2026-05-02T16:48:11Z", "data": { "envelope_id": "env_8f4a2c1e9b3d", "final_pdf_url": "https://vg-sign.com/api/v1/internal/envelopes/env_8f4a/final", "sha256": "4c·a2·9b·d3·…·71·ff", "signed_by": [ { "name": "Signer One", "signed_at": "2026-04-27T14:33Z", "ip": "203.0.113.10" }, { "name": "Signer Two", "signed_at": "2026-04-28T11:02Z", "ip": "203.0.113.24" }, { "name": "Signer Three", "signed_at": "2026-05-02T16:46Z", "ip": "203.0.113.51" } ], "metadata": { "crmDealId": "deal_142" } } }
Delivery guarantees.
HMAC-SHA256 signed
Each delivery includes an X-VG-Signature header — an HMAC-SHA256 digest of the raw body. Verify it before trusting the payload.
Retry with back-off
On failure we retry up to 3 times with back-off (~1 min, 5 min, 30 min), then mark the delivery failed.
Delivery records
Every attempt and its response status is recorded, so a failed delivery can be diagnosed.
Idempotent by event id
evt_ ids are stable across retries — store them and skip duplicates.