Skip to main content

Webhooks

Webhooks let Preface notify an external URL whenever a visitor submits the gate form on one of your demos. Use webhooks to push lead data into your CRM, trigger automation workflows in tools like Zapier, Make, or n8n, or connect to any system that accepts an HTTP request.

Screenshot placeholder

A screenshot of the Webhooks tab in demo settings, showing a configured webhook with a Test button will go here.

note

Webhooks are available on the Growth and Scale plans. On other plans, the Webhooks tab shows a preview of the feature.

Adding a webhook

  1. Open a demo and click Settings in the toolbar
  2. Go to the Webhooks tab
  3. Click Add webhook
  4. Fill in the form:
    • Label — a friendly name for this webhook (e.g. "HubSpot", "Zapier CRM")
    • URL — the endpoint to send the request to (must be HTTPS)
    • MethodPOST or GET (POST is recommended for most integrations)
    • Authentication — see Authentication below
  5. Click Save webhook

Each demo can have up to the number of webhooks defined by your instance's MAX_WEBHOOKS_PER_DEMO limit (default: 3).

Authentication

Preface supports three authentication options:

TypeDescription
NoneNo authentication headers are added
HTTP Basic AuthSends a standard Authorization: Basic … header using the username and password you provide
Custom headerSends a single custom header with a name and value you specify — use this for bearer tokens, API keys, or any proprietary auth scheme (e.g. X-Api-Key: abc123 or Authorization: Bearer abc123)

Passwords and header values are encrypted at rest and are never returned to the browser after saving.

Enabling and disabling webhooks

Each webhook has an enable toggle. Disabled webhooks are stored but never fire, even when gate submissions occur. Use this to temporarily pause a webhook without deleting it.

Testing a webhook

Click the Test button on any webhook to send a sample payload to the configured URL immediately. The result is shown inline:

  • Green — the endpoint responded with an HTTP 2xx status
  • Red — the endpoint returned an error status or the request failed entirely, with the status code and any error message shown
tip

Use the Test button after adding or editing a webhook to confirm your endpoint is reachable and your authentication is correct before your first real submission.

Payload

Every webhook request sends a JSON body with the following structure:

{
"event": "gate_submission",
"demo": {
"id": "demo-uuid",
"title": "My Product Demo",
"slug": "my-product-demo"
},
"lead": {
"email": "[email protected]",
"fields": {
"name": "Jane Smith",
"company": "Acme Corp"
},
"submitted_at": "2026-01-15T10:30:00+00:00"
}
}
FieldDescription
eventAlways gate_submission
demo.idThe internal UUID of the demo
demo.titleThe demo's title
demo.slugThe demo's URL slug
lead.emailThe email address submitted
lead.fieldsAny additional gate fields (name, company, phone, etc.) as key/value pairs
lead.submitted_atISO 8601 timestamp of the submission

Delivery

Webhooks are fired asynchronously after the gate form is submitted — the visitor receives their session token immediately and the webhook is dispatched in the background.

Preface will attempt delivery up to 3 times with a backoff of 10 seconds, then 60 seconds between retries, before giving up.

important

If ALLOW_WEBHOOKS is set to false on your instance, no webhooks will fire regardless of their configuration in the UI.

Deleting a webhook

Click the delete icon on the webhook row. This permanently removes the webhook and stops all future deliveries.