Webhook Event Reference
Detailed payload schemas and example JSON for every ZenFlip webhook event type, including request headers and a Node.js signature verification example.
- Common Envelope
- Request Headers
- publication.created
- Payload Schema
- Example Payload
- publication.converted
- Payload Schema
- Example Payload (Success)
- Example Payload (Failure)
- publication.deleted
- Payload Schema
- Example Payload
- lead.captured
- Payload Schema
- Example Payload
- team.member_joined
- Payload Schema
- Example Payload
- export.completed
- Payload Schema
- Example Payload
- Signature Verification (Complete Example)
- Best Practices
Webhook Event Reference
This document provides the full payload schema and example JSON for each webhook event type supported by ZenFlip. All payloads follow the same top-level structure.
Common Envelope
Every webhook payload shares this structure:
Request Headers
Every webhook HTTP POST request includes these headers:
Header | Example Value |
|
|
|
|
|
|
|
|
|
|
publication.created
Fired when a new publication is created in the organization.
Payload Schema
Field | Type | Description |
| string | UUID of the new publication |
| string | Publication title |
| string | URL-friendly slug |
| string | Initial status (always |
| string | UUID of the user who created it |
Example Payload
publication.converted
Fired when a PDF conversion job completes, whether successfully or with an error.
Payload Schema
Field | Type | Description |
| string | UUID of the publication |
| string | Publication title |
| string | UUID of the version that was converted |
| integer | Sequential version number |
| string | Conversion result: |
| integer | Number of pages generated (0 if failed) |
| string | Error message (null if successful) |
| string | ISO 8601 timestamp of conversion completion |
Example Payload (Success)
Example Payload (Failure)
publication.deleted
Fired when a publication is permanently deleted.
Payload Schema
Field | Type | Description |
| string | UUID of the deleted publication |
| string | Title at time of deletion |
| string | Slug at time of deletion |
| string | UUID of the user who deleted it |
Example Payload
lead.captured
Fired when a viewer submits a lead capture form in a publication.
Payload Schema
Field | Type | Description |
| string | UUID of the captured lead |
| string | UUID of the publication |
| string | Email address submitted |
| string | Full name (null if not collected) |
| string | Company name (null if not collected) |
| string | Phone number (null if not collected) |
| object | Key-value pairs from custom form fields |
| integer | Page where the form was triggered |
| string | Trigger method: |
| string | ISO 8601 timestamp of submission |
Example Payload
team.member_joined
Fired when a team member accepts their invitation and joins the organization.
Payload Schema
Field | Type | Description |
| string | UUID of the new team member |
| string | Email address of the member |
| string | Display name |
| string | Assigned role: |
| string | UUID of the user who sent the invitation |
| string | ISO 8601 timestamp when they joined |
Example Payload
export.completed
Fired when an HTML or SCORM export job finishes processing.
Payload Schema
Field | Type | Description |
| string | UUID of the export job |
| string | UUID of the exported publication |
| string | Export format: |
| string | Result: |
| string | Pre-signed URL to download the export (null if failed, expires in 24 hours) |
| integer | Size of the export file in bytes (0 if failed) |
| string | Error message (null if successful) |
| string | ISO 8601 timestamp of completion |
Example Payload
Signature Verification (Complete Example)
Here is a complete Node.js Express server that receives and verifies ZenFlip webhooks:
Best Practices
Always verify signatures. Never trust a webhook payload without validating the
X-ZenFlip-Signatureheader.Respond quickly. Return a
200status immediately and process the event asynchronously. Webhook deliveries time out after 10 seconds.Deduplicate by delivery ID. Store processed
idvalues and skip duplicates. Retries can cause the same event to be delivered more than once.Use HTTPS endpoints. ZenFlip only sends webhooks to URLs using HTTPS.
Handle failures gracefully. If a downstream service is unavailable, queue the event for later processing rather than returning an error status.