WebhookPayload
The JSON envelope POSTed to your webhook endpoint when an event fires. Branch on apiVersion and eventType in your handler — never rely on field presence alone, since new event types add new shapes inside data over time.
- apienum
Version const:1requiredSchema version of this payload. Today's value is
"1". New versions will be added as the envelope or per-eventdatashapes change in backwards-incompatible ways; old payloads keep flowing under their original version. Always branch on this in your handler before readingdata.values- 1
- dataType: objectrequired
Event-specific payload. Shape depends on
eventType:workflow.*— carriesworkflowId.workflow.failedadditionally carrieserrorMessage.step.*— carriesworkflowId,stepKey,stepType.step.failedadditionally carrieserrorMessage.participant.*— carriesworkflowId,stepKey,participantEmail,participantId,envelopeKey.envelope.*— carriesworkflowId,envelopeKey.
Always check
eventType(andapiVersion) before reading specific fields offdata. - eventType: string
Id requiredStable per-event identifier — same value across retries of the same delivery. Use as your dedup key on the consumer side.
- eventType: stringenum
Type requiredType of webhook event
values- workflow
.started - workflow
.failed - workflow
.completed - workflow
.declined - workflow
.voided
- modeType: stringenumrequired
Namespace mode. Critical safety signal — branch on this to guarantee test workflows never mutate your production systems. Same value the namespace was created with.
values- test
- live
- namespaceType: string
Key requiredNamespace the event belongs to. The webhook endpoint that fired this delivery was registered in this
(orgId, namespaceKey). - orgType: string
Id requiredOrganization the event belongs to. Use for routing on the consumer side when one webhook handler URL receives events from multiple SignStack orgs (e.g., across acquisitions or sub-tenant deployments).
- timestampType: stringFormat: date-timerequired
When the event fired on the SignStack side. ISO 8601. Distinct from the
t=value in theX-Webhook-Signatureheader (which is the unix-millisecond timestamp the signature was computed against — seeVerify webhook signaturesfor verification details).
