WebhookDeliveryResp
A single webhook delivery — the event payload that was sent (or queued to be sent), the customer endpoint's response, and the retry history. Each delivery corresponds to ONE event firing against ONE webhook endpoint; a single event that fans out to N configs creates N deliveries.
- attemptsType: array object[] · WebhookDeliveryAttempt[]
All delivery attempts made for this event. Each entry records the response (status code, body, error) and how long the request took, plus an
attemptNumberyou can sort by. Length grows up toretryConfig.maxAttempts.One delivery attempt against the customer's webhook URL. Records the HTTP response (status code + body, truncated for storage) or the error if the request couldn't complete (DNS, connection reset, timeout). Always at least one attempt; subsequent attempts appear here as the retry policy fires.
- attemptedType: stringFormat: date-time
At When the attempt was made
- attemptType: integer
Number Attempt number (1-based)
- durationType: integer
Request duration in milliseconds
- errorType: string
Message Reason the attempt failed when no HTTP response was received (e.g.,
ETIMEDOUT,ECONNREFUSED,getaddrinfo ENOTFOUND). Absent when the customer endpoint did respond — checkresponseStatusthen. - responseType: string
Body Customer endpoint's response body, truncated. Absent when the request couldn't complete.
- responseType: integer
Status HTTP status code returned by the customer endpoint. Absent when the request couldn't complete (network error, timeout) — see
errorMessageinstead.
- createdType: stringFormat: date-time
At When the event fired and the delivery was queued. Treat this as the event's wall-clock time on the SignStack side — usually within a few hundred ms of the underlying workflow / step / envelope transition.
- envelopeType: string
Key Envelope key that triggered this event, when applicable.
- eventType: string
Id Pattern: ^evt_[0-9a-z]{26}$Stable per-event identifier — included in the payload as
eventId. Same across retries of the same delivery; consumers can use it to dedupe. Prefixed lowercase ULID, e.g.evt_01jv8m7qfj6xj9gkz7a4s2h8e. - eventType: stringenum
Type The event type that triggered this delivery. See
WebhookEventTypefor the full set.values- workflow
.started - workflow
.failed - workflow
.completed - workflow
.declined - workflow
.voided
- idType: string
Pattern: ^wd_[0-9a-z]{26}$Unique identifier for the delivery. Prefixed lowercase ULID, e.g.
wd_01jv8m7qfj6xj9gkz7a4s2h8e. - nextType: stringFormat: date-time
Retry At When the next retry will fire, when
status: pendingand at least one attempt has failed. Absent onsuccess,failed, and on the first attempt before any failure. - participantType: string
Email Email of the participant the event is about, when applicable.
- payloadType: object
The JSON envelope POSTed to your webhook endpoint when an event fires. Branch on
apiVersionandeventTypein your handler — never rely on field presence alone, since new event types add new shapes insidedataover 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 Pattern: ^evt_[0-9a-z]{26}$requiredStable per-event identifier — same value across retries of the same delivery. Use as your dedup key on the consumer side. Prefixed lowercase ULID, e.g.
evt_01jv8m7qfj6xj9gkz7a4s2h8e. - 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 Pattern: ^org_[0-9a-z]{26}$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). Prefixed lowercase ULID, e.g.
org_01jv8m7qfj6xj9gkz7a4s2h8e. - 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).
- statusType: stringenum
Delivery state:
pending— queued or in-flight; will be retried per the webhook's retry policy on transient failure (timeout, 5xx, network error).success— the customer endpoint returned2xxon some attempt.failed— every attempt has failed and the retry budget (maxAttempts/maxRetryDuration) is exhausted. The delivery will not be retried further unless explicitly redriven.
values- pending
- success
- failed
- stepType: string
Key Workflow step key that triggered this event, when applicable (e.g.,
step.completed,participant.signing_completed). Absent for envelope- or workflow-level events. - updatedType: stringFormat: date-time
At Last touched timestamp — bumps on every attempt and on
statustransitions (pending → success/pending → failed). Equal to the most recentattempts[].attemptedAtonce at least one attempt has run. - webhookType: string
Endpoint Id Pattern: ^we_[0-9a-z]{26}$Webhook endpoint this delivery belongs to. Prefixed lowercase ULID, e.g.
we_01jv8m7qfj6xj9gkz7a4s2h8e. - workflowType: string
Id Pattern: ^wf_[0-9a-z]{26}$ID of the workflow that triggered this event, when applicable. Absent for events not tied to a workflow. Prefixed lowercase ULID, e.g.
wf_01jv8m7qfj6xj9gkz7a4s2h8e.
