Payload structure
All webhook payloads share a common envelope:
step.broken
Fired when Zenstep’s Smart Anchoring engine cannot find the DOM element for a step after multiple consecutive page loads.
step.recovered
Fired when a previously broken step is successfully anchored again.
flow.completed
Fired when a user completes a flow (reaches the last step and confirms).
userHash is a HMAC-SHA256 hash of the userId passed to identify(). The
raw user ID is never sent in webhook payloads.
flow.dismissed
Fired when a user explicitly dismisses a flow (clicks the X or “Skip” button).
Common data fields
| Field | Type | Description |
|---|
flowId | string | UUID of the flow |
flowName | string | Display name of the flow |
flowType | string | One of: hint, tour_step, modal_step, checklist, banner |
stepId | string | UUID of the step (where applicable) |
userHash | string | HMAC-SHA256 hash of the userId |
sessionId | string | Browser session identifier |
pageUrl | string | Full URL where the event occurred |
orgId | string | Your Zenstep organisation ID |