Registration webhook

For engineers receiving lead data from Zellify funnels. You'll have a verified webhook endpoint receiving live funnel registrations. You need an HTTPS endpoint and the ability to verify HMAC-SHA256 signatures.

Overview#

The Registration webhook fires when a funnel visitor submits their email at the Registration step and clicks the button to advance. It delivers the email, the quiz answers collected before that step, and session context including app_user_id.

Registration happens before payment. Use this webhook for lead capture, early account creation, abandoned-cart follow-up, and pre-qualification — not for granting access.

For granting access after payment: See Payment events and the integration guides. The Registration webhook is not the right signal for entitlement decisions.

Configuration#

  1. Open Dashboard → Settings → Developers
  2. Click Configure under Registration Webhook
  3. Enter your endpoint URL
  4. Save and store the webhook secret somewhere safe — you'll need it to verify signatures

Request#

  • Method: POST
  • Content-Type: application/json
  • Signature header: X-Webhook-Signature — HMAC-SHA256 of the raw request body, hex-encoded, keyed with your webhook secret

Payload#

example.json
1{2  "email": "[email protected]",3  "answers": {4    "age": { "value": 35, "pageSlug": "page-1", "questionText": "How old are you?" },5    "gender": { "value": "2", "label": "Female", "pageSlug": "page-2", "questionText": "Your gender?" }6  },7  "context": {8    "appUserId": "ac17064d-4edf-5acc-8487-d8dd4e5b1ac5",9    "funnelId": "46",10    "campaignId": "12",11    "experimentId": null,12    "experimentTag": null,13    "organizationId": "529719da-d8e7-4c36-ae52-1cf9f6630c39",14    "pageLocation": "/f/46/page-2",15    "ip": "95.104.11.250",16    "userAgent": "Mozilla/5.0 ...",17    "sessionToken": null18  }19}

See the Payload reference for every field, every type, every resolution rule — and how to export the Variables Schema from your funnel to give your backend a typed picture of every question.

`answers` keys are Component IDs: 

The keys inside answers (age, gender above) are the Component IDs you set on each question component in the funnel builder. Sidebar Custom Variables drive funnel personalization but don't affect this payload. To rename a key, change the Component ID on the question.

For choice questions, value is an auto-generated option ID. Each entry also includes an optional label with the option's display text. For multiselect, that's a comma-joined string of the selected labels. If you need an array of labels or a per-option mapping, export the Variables Schema.

Signature verification#

Verify before parsing the body. The signature is HMAC-SHA256(secret, rawRequestBody) as a lowercase hex string.

Always verify first: Do not parse the body until the signature is verified. Use a constant-time comparison (timingSafeEqual / compare_digest / hmac.Equal) — never === on the raw strings.

Errors and retries#

ResponseBehaviour
2xxZellify treats the webhook as delivered.
non-2xxZellify retries with exponential backoff.
Timeout (>15s default)Zellify retries.

Delivery logs#

Every delivery attempt is recorded and viewable in Dashboard → Settings → Developers under Delivery Logs.

Each row shows the time, event name, response status code, success/failed status, and request duration. Filter by All / Successful / Failed and search by recipient email.

Click a row to expand and see:

  • The webhook URL the request was sent to
  • The error message (for failed deliveries)
  • The full request payload (JSON)
  • The response body returned by your endpoint (truncated to 1024 characters)

Resend#

Each row has a Resend button that re-sends the original payload to your currently configured webhook URL with a fresh HMAC signature. The resend is recorded as a new log entry with event_name: "resend" so you can see whether the retry succeeded.

Use this for:

  • Replaying deliveries after fixing a bug in your endpoint
  • Re-triggering a registration that hit a transient outage
  • Confirming a fix works against real production payloads

The signature is recomputed from your current webhook secret, so resends made after a secret rotation will sign with the new key.

Rate limits#

Not rate-limited for normal funnel traffic. High-volume replays from the dashboard may queue.

Payload reference
Every field, type, and resolution rule — plus the Variables Schema export.
Variables Schema
Typed metadata for every question in your funnel.
app_user_id
Link this webhook to payments and your product.
Early account creation
Pair this webhook with payment events to pre-create accounts.
Free funnel with deep link
Use this webhook without payments for lead routing.