New274+ blocks and 249+ tools are now fully documented
Trigger

Webhook Trigger

Start workflows from service-specific webhook events

The Webhook trigger provides a dedicated URL that receives HTTP POST requests from external services. When a request arrives, the workflow starts automatically with the webhook payload as input.

Overview

PropertyValue
Typewebhook
CategoryTrigger

Supported Providers

Zelaxy supports webhook triggers from the following services. Each provider has its own output schema — see the detailed sections below.

ProviderTrigger IDAuth TypeDescription
Gmailgmail_pollerOAuthTriggers on new emails
Outlookoutlook_pollerOAuthTriggers on new emails
Slackslack_webhookSigning SecretTriggers on messages, mentions, reactions
GitHubgithub_webhookWebhook SecretTriggers on push, PRs, issues
Telegramtelegram_webhookBot TokenTriggers on bot messages
WhatsAppwhatsapp_webhookVerification TokenTriggers on incoming messages
Stripestripe_webhookTriggers on payments, subscriptions
Airtableairtable_webhookOAuthTriggers on record changes
Microsoft Teamsmicrosoftteams_webhookHMAC SecretTriggers on messages and mentions
GitLabgitlab_webhookSecret TokenTriggers on pushes, merge requests, issues, pipelines
Typeformtypeform_webhookWebhook SecretTriggers on form submissions
Sentrysentry_webhookClient SecretTriggers on issues, errors, alerts
Calendlycalendly_webhookSigning KeyTriggers on bookings and cancellations
PagerDutypagerduty_webhookWebhook SecretTriggers on incident lifecycle events
Vercelvercel_webhookWebhook SecretTriggers on deployments and project changes
Zoomzoom_webhookSecret TokenTriggers on meetings, participants, recordings
Clerkclerk_webhookSvix Signing SecretTriggers on users, sessions, organizations
Cal.comcalcom_webhookWebhook SecretTriggers on bookings
Resendresend_webhookSvix Signing SecretTriggers on email delivery events
Twilio SMStwilio_webhookAuth TokenTriggers on incoming SMS/MMS
Twilio Voicetwilio_voice_webhookAuth TokenTriggers on incoming calls and call status
Attioattio_webhookTriggers on records, notes, tasks, and lists changing
Azure DevOpsazure_devops_webhookTriggers on builds, work items, and pull requests
Gonggong_webhookAuthorization tokenTriggers on calls being processed and transcripts becoming ready
Greenhousegreenhouse_webhookSecret keyTriggers on candidates being hired, rejected, or changing stage
Ashbyashby_webhookSecret tokenTriggers on applications submitted and candidates changing stage
incident.ioincidentio_webhookSvix signing secretTriggers on incidents being created, updated, or resolved
Rootlyrootly_webhookSigning secretTriggers on incidents being created, mitigated, or resolved
RevenueCatrevenuecat_webhookAuthorization header valueTriggers on purchases, renewals, cancellations, and expirations
Loopsloops_webhookTriggers on email sent, delivered, opened, clicked, and bounced
Fathomfathom_webhookTriggers when a meeting recording, summary, or transcript is ready
Graingrain_webhookTriggers on recordings completing and highlights being created
Instantlyinstantly_webhookTriggers on campaign replies, opens, clicks, and bounces
lemlistlemlist_webhookTriggers on campaign replies, opens, clicks, and bounces
Linqlinq_webhookTriggers on messages being delivered, failing, or replied to
Circlebackcircleback_webhookAuthorization valueTriggers when a meeting completes and notes or action items are ready
EmailBisonemailbison_webhookAuthorization valueTriggers on replies received and sending accounts disconnecting
Sendbluesendblue_webhookTriggers on iMessage/SMS messages received or status changing
RSSrss_poller— (polled)Triggers on new feed items
Google Formsgoogle_forms_webhookShared secretTriggers on new form responses
IMAPimap_poller— (polled)Triggers on new email, any provider
Jira Service Managementjira_service_management_webhookWebhook secretTriggers on request created/updated/commented
Genericgeneric_webhookUniversal HTTP endpoint

How It Works

  1. Activate the workflow — a unique webhook URL is generated
  2. Copy the URL and register it in the external service's webhook settings
  3. When the service sends an event, the workflow triggers
  4. Service-specific webhooks (Slack, GitHub, Telegram, etc.) flatten event data to convenient top-level properties — e.g., {{Webhook 1.event.text}}, {{Webhook 1.message.text}}
  5. Generic webhooks store the raw request body under webhook.data.payload — access fields via {{Webhook 1.webhook.data.payload.fieldName}}

Block name normalization: Block names are case-insensitive and spaces are removed. {{Webhook 1.field}}, {{webhook1.field}}, and {{WEBHOOK1.field}} all resolve to the same block.

Universal Raw Data Access (All Providers)

Every webhook trigger (regardless of provider) also stores the complete raw HTTP request under webhook.data. This provides a fallback when you need fields not covered by the provider-specific outputs:

ReferenceDescription
{{Webhook 1.webhook.data.payload}}Complete raw HTTP body
{{Webhook 1.webhook.data.payload.nested.field}}Any field from the raw body
{{Webhook 1.webhook.data.headers}}HTTP request headers
{{Webhook 1.webhook.data.method}}HTTP method (POST, etc.)

Signature verification

When you configure a signing secret for a supported provider, Zelaxy verifies every incoming delivery and rejects requests whose signature does not match (HTTP 401) — so a caller who merely knows the URL cannot fire the workflow. Verification is enforced for GitHub, Slack, Linear, Asana, GitLab, Typeform, Sentry, Calendly, PagerDuty, Vercel, Zoom, Clerk, Resend, Cal.com, Twilio, and the Atlassian/support integrations Jira, Confluence, Notion, Intercom, and Zendesk.

The scheme matches each provider's documented signing exactly — for example Intercom is HMAC-SHA1 over the body (sha1= in X-Hub-Signature), Notion and Jira/Confluence are HMAC-SHA256 hex (sha256=), and Zendesk is base64 HMAC-SHA256 over timestamp + body with a 5-minute freshness window. Notion's initial unsigned verification handshake is acknowledged automatically. Providers with no documented signing scheme are intentionally left unverified rather than guessing a scheme that would silently reject genuine deliveries — use the generic webhook's bearer token or IP allowlist for those.

Gmail

Triggers when new emails are received in a connected Gmail account. Requires OAuth with Google.

Configuration

SettingTypeDescription
Gmail AccountOAuthSelect connected Gmail account
Labels to MonitorMulti-selectGmail labels to watch (empty = all)
Label Filter BehaviorSelectINCLUDE or EXCLUDE selected labels
Mark as ReadToggleMark processed emails as read
Include Raw Email DataToggleInclude full Gmail API response

Outputs

OutputTypeDescription
email.idstringGmail message ID
email.threadIdstringGmail thread ID
email.subjectstringEmail subject line
email.fromstringSender email address
email.tostringRecipient email address
email.ccstringCC recipients
email.datestringEmail date (ISO format)
email.bodyTextstringPlain text email body
email.bodyHtmlstringHTML email body
email.labelsstringEmail labels array
email.hasAttachmentsbooleanWhether email has attachments
email.attachmentsjsonArray of attachment info (filename, mimeType, size)
timestampstringEvent timestamp
rawEmailjsonComplete raw Gmail API response (if enabled)

Sample Payload

{
  "email": {
    "id": "18e0ffabd5b5a0f4",
    "threadId": "18e0ffabd5b5a0f4",
    "subject": "Monthly Report - April 2025",
    "from": "sender@example.com",
    "to": "recipient@example.com",
    "cc": "team@example.com",
    "date": "2025-05-10T10:15:23.000Z",
    "bodyText": "Hello,\n\nPlease find attached the monthly report.\n\nBest regards",
    "bodyHtml": "<div><p>Hello,</p><p>Please find attached the monthly report.</p></div>",
    "labels": ["INBOX", "IMPORTANT"],
    "hasAttachments": true,
    "attachments": [
      { "filename": "report-april-2025.pdf", "mimeType": "application/pdf", "size": 2048576 }
    ]
  },
  "timestamp": "2025-05-10T10:15:30.123Z"
}

Usage Example

Reference in downstream blocks: {{Webhook 1.email.subject}}, {{Webhook 1.email.from}}, {{Webhook 1.email.bodyText}}

Outlook

Triggers when new emails are received in a connected Outlook/Microsoft 365 account. Requires OAuth with Microsoft.

Configuration

SettingTypeDescription
Microsoft AccountOAuthSelect connected Microsoft account
Folders to MonitorMulti-selectOutlook folders to watch (empty = all)
Folder Filter BehaviorSelectINCLUDE or EXCLUDE selected folders
Mark as ReadToggleMark processed emails as read
Include Raw Email DataToggleInclude full MS Graph API response

Outputs

OutputTypeDescription
email.idstringOutlook message ID
email.conversationIdstringOutlook conversation ID
email.subjectstringEmail subject line
email.fromstringSender email address
email.tostringRecipient email address
email.ccstringCC recipients
email.datestringEmail date (ISO format)
email.bodyTextstringPlain text email body (preview)
email.bodyHtmlstringHTML email body
email.hasAttachmentsbooleanWhether email has attachments
email.isReadbooleanWhether email is read
email.folderIdstringOutlook folder ID
email.messageIdstringMessage ID for threading
email.threadIdstringThread ID for conversation threading
timestampstringEvent timestamp
rawEmailjsonComplete raw MS Graph API response (if enabled)

Sample Payload

{
  "email": {
    "id": "AAMkADg1OWUyZjg4LWJkNGYtNDFhYy04OGVjLWVkM2VhY2YzYTcwZg...",
    "conversationId": "AAQkADg1OWUyZjg4LWJkNGYtNDFhYy04OGVjLWVkM2VhY2YzYTcwZg...",
    "subject": "Quarterly Business Review - Q1 2025",
    "from": "manager@company.com",
    "to": "team@company.com",
    "cc": "stakeholders@company.com",
    "date": "2025-05-10T14:30:00Z",
    "bodyText": "Hi Team,\n\nPlease find attached the Q1 2025 business review...",
    "bodyHtml": "<div><p>Hi Team,</p><p>Please find attached the Q1 review...</p></div>",
    "hasAttachments": true,
    "isRead": false,
    "folderId": "AQMkADg1OWUyZjg4LWJkNGYtNDFhYy04OGVjAC4AAAJzE3bU",
    "messageId": "AAMkADg1OWUyZjg4...",
    "threadId": "AAQkADg1OWUyZjg4..."
  },
  "timestamp": "2025-05-10T14:30:15.123Z"
}

Usage Example

Reference in downstream blocks: {{Webhook 1.email.subject}}, {{Webhook 1.email.from}}, {{Webhook 1.email.isRead}}

Slack

Triggers on Slack events like app mentions, messages, and reactions. Requires a Slack app signing secret.

Configuration

SettingTypeDescription
Signing SecretPasswordSlack app signing secret for request validation

Outputs

OutputTypeDescription
event.event_typestringType of Slack event (e.g., app_mention, message)
event.channelstringSlack channel ID
event.channel_namestringHuman-readable channel name
event.userstringUser ID who triggered the event
event.user_namestringUsername who triggered the event
event.textstringMessage text content
event.timestampstringEvent timestamp
event.team_idstringSlack workspace/team ID
event.event_idstringUnique event identifier

Sample Payload

{
  "type": "event_callback",
  "event": {
    "type": "app_mention",
    "channel": "C0123456789",
    "user": "U0123456789",
    "text": "<@U0BOTUSER123> Hello from Slack!",
    "ts": "1234567890.123456",
    "channel_type": "channel"
  },
  "team_id": "T0123456789",
  "event_id": "Ev0123456789",
  "event_time": 1234567890
}

Usage Example

Reference in downstream blocks: {{Webhook 1.event.text}}, {{Webhook 1.event.user_name}}, {{Webhook 1.event.channel_name}}

GitHub

Triggers on GitHub events like push, pull requests, issues, and more. Supports webhook secret for signature verification.

Configuration

SettingTypeDescription
Content TypeSelectapplication/json or application/x-www-form-urlencoded
Webhook SecretPasswordSecret for signature validation (recommended)
SSL VerificationSelectenabled or disabled

Outputs

OutputTypeDescription
event_typestringType of GitHub event (e.g., push, pull_request, issues)
actionstringAction performed (e.g., opened, closed, synchronize)
branchstringBranch name extracted from ref
refstringGit reference (e.g., refs/heads/main)
beforestringSHA of the commit before the push
afterstringSHA of the commit after the push
createdbooleanWhether the push created the reference
deletedbooleanWhether the push deleted the reference
forcedbooleanWhether the push was forced
comparestringURL to compare changes
repository.namestringRepository name
repository.full_namestringFull name (owner/repo)
repository.html_urlstringRepository URL
repository.privatebooleanWhether repository is private
repository.default_branchstringDefault branch name
repository.owner.loginstringOwner username
repository.owner.avatar_urlstringOwner avatar URL
sender.loginstringUser who triggered the event
sender.idnumberSender user ID
sender.avatar_urlstringSender avatar URL
pusher.namestringPusher name
pusher.emailstringPusher email
commitsarrayArray of commit objects
commits[].idstringCommit SHA
commits[].messagestringCommit message
commits[].author.namestringCommit author name
commits[].author.emailstringCommit author email
commits[].addedarrayFiles added
commits[].removedarrayFiles removed
commits[].modifiedarrayFiles modified
head_commit.idstringHead commit SHA
head_commit.messagestringHead commit message
head_commit.timestampstringHead commit timestamp

Sample Payload (Pull Request)

{
  "action": "opened",
  "number": 1,
  "pull_request": {
    "id": 1, "number": 1, "state": "open", "title": "Update README",
    "user": { "login": "octocat", "id": 1 },
    "body": "This is a simple change to pull into main.",
    "head": { "ref": "feature-branch", "sha": "abc123" },
    "base": { "ref": "main", "sha": "def456" }
  },
  "repository": {
    "id": 35129377, "name": "public-repo", "full_name": "octocat/public-repo",
    "owner": { "login": "octocat", "id": 6752317 }
  },
  "sender": { "login": "octocat", "id": 6752317 }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.action}}, {{Webhook 1.repository.full_name}}, {{Webhook 1.sender.login}}

Telegram

Triggers on messages sent to a Telegram bot. Requires a bot token from BotFather.

Configuration

SettingTypeDescription
Bot TokenPasswordTelegram bot token from BotFather

Outputs

OutputTypeDescription
message.update_idnumberUnique identifier for the update
message.message_idnumberUnique message identifier
message.from_idnumberUser ID who sent the message
message.from_usernamestringUsername of the sender
message.from_first_namestringFirst name of the sender
message.from_last_namestringLast name of the sender
message.chat_idnumberUnique identifier for the chat
message.chat_typestringType of chat (private, group, supergroup, channel)
message.chat_titlestringTitle of the chat (for groups/channels)
message.textstringMessage text content
message.datenumberDate sent (Unix timestamp)
message.entitiesstringSpecial entities (mentions, hashtags, etc.) as JSON

Sample Payload

{
  "update_id": 123456789,
  "message": {
    "message_id": 123,
    "from": {
      "id": 987654321, "is_bot": false, "first_name": "John",
      "last_name": "Doe", "username": "johndoe"
    },
    "chat": {
      "id": 987654321, "first_name": "John", "last_name": "Doe",
      "username": "johndoe", "type": "private"
    },
    "date": 1234567890,
    "text": "Hello from Telegram!"
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.message.text}}, {{Webhook 1.message.from_username}}, {{Webhook 1.message.chat_id}}

WhatsApp

Triggers on incoming WhatsApp messages via the Business Platform. Requires a verification token.

Configuration

SettingTypeDescription
Verification TokenPasswordToken matching your WhatsApp Business Platform dashboard

Outputs

OutputTypeDescription
messageIdstringUnique message identifier
fromstringPhone number of the sender
phoneNumberIdstringWhatsApp Business phone number ID that received the message
textstringMessage text content
timestampstringMessage timestamp
rawstringComplete raw message object as JSON string

Sample Payload

{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "1234567890123456",
    "changes": [{
      "value": {
        "messaging_product": "whatsapp",
        "metadata": {
          "display_phone_number": "15551234567",
          "phone_number_id": "1234567890123456"
        },
        "contacts": [{ "profile": { "name": "John Doe" }, "wa_id": "15555551234" }],
        "messages": [{
          "from": "15555551234",
          "id": "wamid.HBgNMTU1NTU1NTEyMzQVAgASGBQz...",
          "timestamp": "1234567890",
          "text": { "body": "Hello from WhatsApp!" },
          "type": "text"
        }]
      },
      "field": "messages"
    }]
  }]
}

Usage Example

Reference in downstream blocks: {{Webhook 1.text}}, {{Webhook 1.from}}, {{Webhook 1.messageId}}

Stripe

Triggers on Stripe events like successful payments, subscription changes, and more. Events are selected in the Stripe dashboard.

Configuration

No additional configuration needed — configure event types in your Stripe dashboard.

Outputs

OutputTypeDescription
idstringStripe event ID
typestringEvent type (e.g., charge.succeeded, payment_intent.succeeded)
createdstringTimestamp when event was created
datastringEvent data containing the affected Stripe object
objectstringThe Stripe object type (e.g., charge, payment_intent)
livemodestringWhether event occurred in live mode
apiVersionstringAPI version used to render this event
requeststringInfo about the request that triggered this event

Sample Payload

{
  "id": "evt_1234567890",
  "type": "charge.succeeded",
  "created": 1641234567,
  "data": {
    "object": {
      "id": "ch_1234567890", "object": "charge", "amount": 2500,
      "currency": "usd", "description": "Sample charge", "paid": true,
      "status": "succeeded", "customer": "cus_1234567890",
      "receipt_email": "customer@example.com"
    }
  },
  "object": "event",
  "livemode": false,
  "api_version": "2020-08-27",
  "request": { "id": "req_1234567890", "idempotency_key": null }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.type}}, {{Webhook 1.data}}, {{Webhook 1.id}}

Airtable

Triggers on Airtable record changes (create, update, delete). Requires OAuth with Airtable.

Configuration

SettingTypeDescription
Base IDTextAirtable Base ID (e.g., appXXXXXXXXXXXXXX)
Table IDTextTable ID within the base (e.g., tblXXXXXXXXXXXXXX)
Include Full Record DataToggleReceive complete record data, not just changes

Outputs

OutputTypeDescription
event_typestringType of event (e.g., record.created, record.updated, record.deleted)
base_idstringAirtable base identifier
table_idstringAirtable table identifier
record_idstringRecord identifier that was modified
record_datastringComplete record data (when Include Full Record Data is enabled)
changed_fieldsstringFields that were changed in the record
webhook_idstringUnique webhook identifier
timestampstringEvent timestamp

Sample Payload

{
  "webhook": { "id": "achAbCdEfGhIjKlMn" },
  "timestamp": "2023-01-01T00:00:00.000Z",
  "base": { "id": "appXXXXXXXXXXXXXX" },
  "table": { "id": "tblXXXXXXXXXXXXXX" },
  "changedTablesById": {
    "tblXXXXXXXXXXXXXX": {
      "changedRecordsById": {
        "recXXXXXXXXXXXXXX": {
          "current": {
            "id": "recXXXXXXXXXXXXXX",
            "fields": { "Name": "Sample Record", "Status": "Active" }
          },
          "previous": {
            "id": "recXXXXXXXXXXXXXX",
            "fields": { "Name": "Sample Record", "Status": "Inactive" }
          }
        }
      }
    }
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.record_id}}, {{Webhook 1.record_data}}

Microsoft Teams

Triggers on Microsoft Teams events like messages and mentions via an outgoing webhook.

Configuration

SettingTypeDescription
HMAC SecretPasswordSecurity token from Teams outgoing webhook setup

Outputs

OutputTypeDescription
typestringType of Teams message (e.g., message)
idstringUnique message identifier
timestampstringMessage timestamp
localTimestampstringLocal timestamp of the message
serviceUrlstringMicrosoft Teams service URL
channelIdstringTeams channel ID
from_idstringUser ID who sent the message
from_namestringUsername who sent the message
conversation_idstringConversation/thread ID
textstringMessage text content

Sample Payload

{
  "type": "message",
  "id": "1234567890",
  "timestamp": "2023-01-01T00:00:00.000Z",
  "localTimestamp": "2023-01-01T00:00:00.000Z",
  "serviceUrl": "https://smba.trafficmanager.net/amer/",
  "channelId": "msteams",
  "from": { "id": "29:1234567890abcdef", "name": "John Doe" },
  "conversation": { "id": "19:meeting_abcdef@thread.v2" },
  "text": "Hello Zelaxy Bot!"
}

Usage Example

Reference in downstream blocks: {{Webhook 1.text}}, {{Webhook 1.from_name}}, {{Webhook 1.conversation_id}}

Generic Webhook

Universal HTTP endpoint that accepts requests from any source. No provider-specific validation.

See the dedicated Generic Webhook page for full details, including comprehensive data access examples.

Outputs

For generic webhooks, the raw HTTP request is stored under the webhook.data namespace:

PathTypeDescription
webhook.data.payloadjsonComplete HTTP request body
webhook.data.payload.<field>anyAny field from the request body
webhook.data.headersjsonHTTP request headers
webhook.data.methodstringHTTP method (POST, PUT, etc.)
webhook.data.pathstringWebhook path identifier
webhook.data.providerstringAlways "generic"

Usage Example

If the external service sends:

{
  "event": "message.received",
  "data": {
    "provider_message_id": "msg_abc123",
    "content": "Hello world"
  }
}

Reference in downstream blocks:

  • {{Webhook 1.webhook.data.payload}} — full body
  • {{Webhook 1.webhook.data.payload.event}}"message.received"
  • {{Webhook 1.webhook.data.payload.data.provider_message_id}}"msg_abc123"
  • {{Webhook 1.webhook.data.payload.data.content}}"Hello world"
  • {{Webhook 1.webhook.data.headers}} — request headers
  • {{Webhook 1.webhook.data.method}}"POST"

GitLab

Triggers on GitLab events like pushes, merge requests, issues, pipelines, and comments. The secret token is verified on every delivery.

Configuration

SettingTypeDescription
Secret TokenPasswordSent by GitLab in X-Gitlab-Token; mismatches are rejected (recommended)
SSL VerificationSelectenabled or disabled

Outputs

OutputTypeDescription
object_kindstringEvent kind (push, merge_request, issue, pipeline, note)
event_typestringValue of the X-Gitlab-Event header (e.g. Push Hook)
event_namestringEvent name, generally matching object_kind
actionstringAction performed (e.g. open, merge, close)
branchstringBranch name extracted from ref
refstringGit reference (e.g. refs/heads/main)
beforestringSHA before the push
afterstringSHA after the push
checkout_shastringSHA of the most recent commit on ref
commit_messagestringMessage of the first commit in the push
commit_authorstringAuthor of the first commit in the push
total_commits_countnumberNumber of commits in the push
commitsarrayCommits included in the push
titlestringTitle of the merge request or issue
statestringState of the merge request or issue
urlstringURL of the changed object
object_attributesobjectChanged object for merge request, issue, pipeline, note events
project_idnumberProject ID
project_namestringProject name
project_pathstringFull project path (namespace/project)
project_urlstringProject web URL
user_idnumberID of the user who triggered the event
user_namestringDisplay name of the user
user_usernamestringUsername of the user
user_emailstringEmail of the user
projectobjectFull project object
repositoryobjectRepository information

Sample Payload (Push)

{
  "object_kind": "push",
  "event_name": "push",
  "ref": "refs/heads/main",
  "checkout_sha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
  "user_name": "John Smith",
  "user_username": "jsmith",
  "project_id": 15,
  "project": {
    "name": "Diaspora", "path_with_namespace": "mike/diaspora",
    "web_url": "http://example.com/mike/diaspora", "default_branch": "main"
  },
  "commits": [
    { "id": "da15608", "message": "fix: typos in readme", "author": { "name": "John Smith" } }
  ],
  "total_commits_count": 1
}

Usage Example

Reference in downstream blocks: {{Webhook 1.object_kind}}, {{Webhook 1.branch}}, {{Webhook 1.commit_message}}

Typeform

Triggers when a form receives a new submission. Requires a Typeform PRO or PRO+ account. The webhook secret is verified on every delivery.

Configuration

SettingTypeDescription
Webhook SecretPasswordValidates the Typeform-Signature header (recommended)

Outputs

OutputTypeDescription
event_idstringUnique ID of the webhook event
event_typestringAlways form_response for submissions
form_idstringID of the submitted form
form_titlestringTitle of the submitted form
tokenstringUnique token identifying this response
submitted_atstringWhen the form was submitted
landed_atstringWhen the respondent landed on the form
fieldsobjectAnswers keyed by question title, with values unwrapped to plain values
answersarrayRaw answers array as sent by Typeform
answer_countnumberNumber of questions answered
hiddenobjectHidden field values (e.g. UTM parameters)
definitionobjectForm definition, including the questions asked
variablesarrayTypeform variables (score, price, custom)
calculatedobjectCalculated values (e.g. score)
endingobjectEnding screen the respondent reached
rawobjectComplete original webhook payload

fields is the convenient one: Typeform's raw answers array keys each value by its answer type and references questions by opaque field id. Zelaxy unwraps that for you, so {{Webhook 1.fields.What is your email?}} just works.

Sample Payload

{
  "event_id": "01HZ8X2Q9Y3M4N5P6R7S8T9V0W",
  "event_type": "form_response",
  "form_response": {
    "form_id": "lT4Z3j",
    "token": "a3a12ec67a1365927098a606107fac15",
    "submitted_at": "2024-01-15T13:14:15Z",
    "definition": {
      "id": "lT4Z3j", "title": "Customer Feedback",
      "fields": [{ "id": "DlXFaesGBpoF", "type": "email", "title": "What is your email?" }]
    },
    "answers": [
      { "type": "email", "email": "ada@example.com", "field": { "id": "DlXFaesGBpoF", "type": "email" } }
    ],
    "hidden": {}
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.form_title}}, {{Webhook 1.fields.What is your email?}}, {{Webhook 1.answer_count}}

Sentry

Triggers on Sentry issues, error events, and alert rules. The client secret is verified on every delivery.

Configuration

SettingTypeDescription
Client SecretPasswordFrom your Sentry internal integration; validates Sentry-Hook-Signature (recommended)

Outputs

OutputTypeDescription
actionstringAction that occurred (created, resolved, assigned, ignored)
resourcestringValue of the Sentry-Hook-Resource header (issue, error, event_alert)
issue_idstringIssue ID
issue_titlestringIssue title
issue_urlstringPermalink to the issue in Sentry
short_idstringShort identifier (e.g. MY-PROJECT-1)
culpritstringWhere the issue occurred
levelstringSeverity (error, warning, info, fatal)
statusstringIssue status (unresolved, resolved, ignored)
event_countstringNumber of times the issue occurred
user_countnumberNumber of users affected
first_seenstringWhen the issue was first seen
last_seenstringWhen the issue was last seen
project_slugstringSlug of the owning project
error_idstringEvent ID (error events)
error_messagestringError message (error events)
environmentstringEnvironment the event came from
actor_namestringWho or what triggered the event
dataobjectFull event payload as sent by Sentry
rawobjectComplete original webhook payload

Sample Payload (Issue Created)

{
  "action": "created",
  "data": {
    "issue": {
      "id": "1234567890", "shortId": "MY-PROJECT-1",
      "title": "TypeError: Cannot read property 'id' of undefined",
      "culprit": "app/routes/checkout in handler",
      "status": "unresolved", "level": "error", "count": "3", "userCount": 2,
      "permalink": "https://sentry.io/organizations/my-org/issues/1234567890/",
      "project": { "slug": "my-project" }
    }
  },
  "actor": { "type": "application", "id": "sentry", "name": "Sentry" }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.issue_title}}, {{Webhook 1.level}}, {{Webhook 1.issue_url}}

Calendly

Triggers when an invitee books or cancels a meeting, or submits a routing form. The signing key is verified on every delivery.

Calendly webhooks are created through its API, not the dashboard. You need a Personal Access Token and a POST to https://api.calendly.com/webhook_subscriptions — the signing_key in the response is what goes in the config field below.

Configuration

SettingTypeDescription
Webhook Signing KeyPasswordReturned when the subscription is created; validates Calendly-Webhook-Signature (recommended)

Outputs

OutputTypeDescription
eventstringinvitee.created, invitee.canceled, or routing_form_submission.created
invitee_namestringInvitee full name
invitee_emailstringInvitee email address
invitee_timezonestringInvitee timezone
invitee_statusstringInvitee status (active, canceled)
invitee_uristringCalendly URI for the invitee
reschedule_urlstringURL the invitee can use to reschedule
cancel_urlstringURL the invitee can use to cancel
rescheduledbooleanWhether the booking was rescheduled
event_namestringName of the scheduled event
event_uristringCalendly URI for the scheduled event
event_statusstringScheduled event status
start_timestringEvent start time
end_timestringEvent end time
locationobjectWhere the meeting takes place
join_urlstringConferencing join URL, when available
cancellationobjectCancellation details (invitee.canceled)
cancel_reasonstringReason given for the cancellation
answersobjectBooking answers keyed by question text
questions_and_answersarrayRaw booking questions and answers
trackingobjectUTM and Salesforce tracking parameters
payloadobjectFull payload object as sent by Calendly
rawobjectComplete original webhook payload

Sample Payload (Invitee Created)

{
  "event": "invitee.created",
  "created_at": "2024-01-15T13:14:15.000000Z",
  "payload": {
    "email": "ada@example.com", "name": "Ada Lovelace",
    "status": "active", "timezone": "America/New_York", "rescheduled": false,
    "questions_and_answers": [
      { "question": "What would you like to discuss?", "answer": "Pricing", "position": 0 }
    ],
    "scheduled_event": {
      "name": "30 Minute Meeting", "status": "active",
      "start_time": "2024-01-20T15:00:00.000000Z",
      "end_time": "2024-01-20T15:30:00.000000Z",
      "location": { "type": "google_conference", "join_url": "https://meet.google.com/abc-defg-hij" }
    }
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.invitee_email}}, {{Webhook 1.start_time}}, {{Webhook 1.join_url}}

PagerDuty

Triggers on incident lifecycle events — triggered, acknowledged, escalated, reassigned, resolved. The webhook secret is verified on every delivery.

Configuration

SettingTypeDescription
Webhook SecretPasswordShown once when the subscription is created; validates X-PagerDuty-Signature (recommended)

Outputs

OutputTypeDescription
event_typestringe.g. incident.triggered, incident.resolved
event_idstringUnique ID of the webhook event
occurred_atstringWhen the event occurred
incident_idstringIncident ID
incident_numbernumberHuman-facing incident number
titlestringIncident title
statusstringIncident status (triggered, acknowledged, resolved)
urgencystringIncident urgency (high, low)
prioritystringIncident priority, when set
html_urlstringLink to the incident in PagerDuty
created_atstringWhen the incident was created
service_idstringID of the affected service
service_namestringName of the affected service
escalation_policystringEscalation policy name, when present
assigneesarrayUsers currently assigned
assignee_namesarrayNames of the assigned users
agent_namestringWho performed the action, when present
incidentobjectFull incident object as sent by PagerDuty
rawobjectComplete original webhook payload

PagerDuty sends more than one signature during a secret rotation. Zelaxy accepts the delivery if any of them matches, so rotating a secret does not drop events.

Sample Payload (Incident Triggered)

{
  "event": {
    "id": "01DPXQZG4Z3ZBQ0N2T0Q9W8XYZ",
    "event_type": "incident.triggered",
    "occurred_at": "2024-01-15T13:14:15.000Z",
    "agent": { "summary": "Ada Lovelace" },
    "data": {
      "id": "PABCDEF", "number": 1234, "title": "Checkout API returning 500s",
      "status": "triggered", "urgency": "high",
      "html_url": "https://acme.pagerduty.com/incidents/PABCDEF",
      "service": { "id": "PSVC123", "summary": "Checkout API" },
      "assignees": [{ "id": "PXXXXXX", "summary": "Ada Lovelace" }]
    }
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.title}}, {{Webhook 1.urgency}}, {{Webhook 1.assignee_names}}

Vercel

Triggers on deployment and project events. The webhook secret is verified on every delivery.

Configuration

SettingTypeDescription
Webhook SecretPasswordShown when the webhook is created; validates x-vercel-signature (recommended)

Outputs

OutputTypeDescription
event_typestringe.g. deployment.created, deployment.ready, deployment.error
event_idstringUnique ID of the webhook event
created_atnumberEvent creation timestamp (epoch ms)
regionstringRegion the event came from
deployment_idstringDeployment ID
deployment_urlstringDeployment URL
deployment_namestringDeployment name
targetstringDeployment target (production, preview)
inspector_urlstringLink to the deployment in Vercel
project_idstringProject ID
project_namestringProject name
team_idstringTeam ID, when the project belongs to a team
user_idstringID of the user who triggered the event
git_branchstringBranch the deployment was built from
git_shastringCommit SHA the deployment was built from
git_messagestringCommit message the deployment was built from
payloadobjectFull payload object as sent by Vercel
rawobjectComplete original webhook payload

git_branch, git_sha, and git_message resolve across GitHub, GitLab, and Bitbucket — Vercel keys this metadata differently per git provider.

Sample Payload (Deployment Ready)

{
  "id": "uev_1234567890abcdef",
  "type": "deployment.ready",
  "createdAt": 1705324455000,
  "region": "iad1",
  "payload": {
    "team": { "id": "team_abc123" },
    "project": { "id": "prj_abc123", "name": "zelaxy-web" },
    "deployment": {
      "id": "dpl_abc123", "name": "zelaxy-web",
      "url": "zelaxy-web-abc123.vercel.app", "target": "production",
      "meta": {
        "githubCommitRef": "main",
        "githubCommitSha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
        "githubCommitMessage": "fix: correct minor typos in readme"
      }
    }
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.deployment_url}}, {{Webhook 1.git_branch}}

Zoom

Triggers on Zoom meeting, participant, and recording events. The Secret Token is required — Zoom validates the endpoint by calling it before the webhook can be enabled.

Enter the Secret Token before clicking Validate in Zoom. Zoom's validation handshake calls your endpoint and expects a token-derived response; without the token configured, validation fails and the webhook cannot be turned on. Zelaxy answers this handshake automatically.

Configuration

SettingTypeDescription
Secret TokenPasswordFrom your Zoom app credentials; required for endpoint validation and delivery verification

Outputs

OutputTypeDescription
event_typestringe.g. meeting.started, meeting.ended, recording.completed
event_tsnumberEvent timestamp (epoch ms)
account_idstringZoom account ID
meeting_idstringMeeting ID
meeting_uuidstringMeeting UUID (unique per occurrence)
topicstringMeeting topic
host_idstringMeeting host ID
start_timestringMeeting start time
end_timestringMeeting end time
durationnumberDuration in minutes
join_urlstringMeeting join URL
participant_namestringParticipant name (participant events)
participant_emailstringParticipant email
participant_idstringParticipant user ID
join_timestringWhen the participant joined
leave_timestringWhen the participant left
recording_filesarrayRecording files (recording.completed)
share_urlstringRecording share URL
objectobjectFull object as sent by Zoom
rawobjectComplete original payload

Sample Payload (Meeting Started)

{
  "event": "meeting.started",
  "event_ts": 1705324455000,
  "payload": {
    "account_id": "abc123",
    "object": {
      "id": "81234567890", "uuid": "aBcDeFgHiJk==",
      "topic": "Weekly Standup", "host_id": "xyz789",
      "start_time": "2024-01-15T13:00:00Z", "duration": 30
    }
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.topic}}, {{Webhook 1.participant_name}}

Clerk

Triggers on Clerk user, session, and organization events. Clerk signs deliveries with Svix.

Configuration

SettingTypeDescription
Signing SecretPasswordFrom the Clerk webhook endpoint; starts with whsec_ (recommended)

Outputs

OutputTypeDescription
event_typestringe.g. user.created, user.updated, session.created
object_idstringID of the user, session, or organization
emailstringPrimary email address (user events)
first_namestringUser first name
last_namestringUser last name
full_namestringFirst and last name joined
usernamestringUsername, when set
image_urlstringUser avatar URL
user_idstringRelated user ID (session and membership events)
organizationobjectOrganization (membership events)
namestringOrganization name (organization events)
slugstringOrganization slug
created_atnumberRecord creation timestamp
updated_atnumberRecord update timestamp
dataobjectFull data object as sent by Clerk
rawobjectComplete original payload

email resolves the account's primary address via primary_email_address_id, not simply the first entry in email_addresses — those differ once a user adds a second address.

Sample Payload (User Created)

{
  "type": "user.created",
  "object": "event",
  "data": {
    "id": "user_2abc123",
    "first_name": "Ada", "last_name": "Lovelace", "username": "ada",
    "primary_email_address_id": "idn_2abc",
    "email_addresses": [{ "id": "idn_2abc", "email_address": "ada@example.com" }],
    "created_at": 1705324455000
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.email}}, {{Webhook 1.full_name}}

Cal.com

Triggers on Cal.com booking events — created, rescheduled, cancelled, and meeting ended.

Configuration

SettingTypeDescription
Webhook SecretPasswordSet the same value in Cal.com; validates x-cal-signature-256 (recommended)

Outputs

OutputTypeDescription
event_typestringe.g. BOOKING_CREATED, BOOKING_CANCELLED, BOOKING_RESCHEDULED
booking_idstringBooking ID
uidstringBooking UID
titlestringBooking title
event_type_namestringName of the booked event type
start_timestringBooking start time
end_timestringBooking end time
organizer_namestringOrganizer name
organizer_emailstringOrganizer email
attendee_namestringPrimary attendee name
attendee_emailstringPrimary attendee email
attendee_timezonestringPrimary attendee timezone
attendeesarrayAll attendees
locationstringBooking location
statusstringBooking status
cancellation_reasonstringReason given when cancelled
meeting_urlstringVideo meeting URL, when available
answersobjectBooking answers, unwrapped to plain values
responsesobjectRaw responses object as sent by Cal.com
rawobjectComplete original payload

Cal.com wraps each booking answer as { label, value }. answers unwraps that for you, so {{Webhook 1.answers.name}} gives the value directly; responses keeps the raw shape.

Sample Payload (Booking Created)

{
  "triggerEvent": "BOOKING_CREATED",
  "createdAt": "2024-01-15T13:14:15.000Z",
  "payload": {
    "bookingId": 123456, "uid": "abc123xyz",
    "title": "30 Min Meeting between Ada and Alan",
    "startTime": "2024-01-20T15:00:00Z", "endTime": "2024-01-20T15:30:00Z",
    "status": "ACCEPTED",
    "organizer": { "name": "Ada Lovelace", "email": "ada@example.com" },
    "attendees": [{ "name": "Alan Turing", "email": "alan@example.com" }],
    "responses": { "name": { "label": "your_name", "value": "Alan Turing" } }
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.title}}, {{Webhook 1.attendee_email}}, {{Webhook 1.answers.name}}

Resend

Triggers on Resend email delivery events. Resend signs deliveries with Svix.

Configuration

SettingTypeDescription
Signing SecretPasswordFrom the Resend webhook; starts with whsec_ (recommended)

Outputs

OutputTypeDescription
event_typestringemail.sent, email.delivered, email.opened, email.clicked, email.bounced, email.complained
created_atstringWhen the event occurred
email_idstringID of the email
fromstringSender address
toarrayRecipient addresses
to_emailstringFirst recipient, for convenience
subjectstringEmail subject
click_linkstringClicked URL (email.clicked)
click_timestampstringWhen the link was clicked
bounce_typestringBounce type (email.bounced)
bounce_messagestringBounce message
failure_reasonstringFailure reason
dataobjectFull data object as sent by Resend
rawobjectComplete original payload

Sample Payload (Email Delivered)

{
  "type": "email.delivered",
  "created_at": "2024-01-15T13:14:15.000Z",
  "data": {
    "email_id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
    "from": "noreply@zelaxy.in",
    "to": ["ada@example.com"],
    "subject": "Welcome to Zelaxy"
  }
}

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.to_email}}, {{Webhook 1.subject}}

Twilio SMS

Triggers when your Twilio number receives an SMS or MMS.

Twilio is the one provider here that posts application/x-www-form-urlencoded fields rather than JSON, and it does not sign the body — it signs the request URL plus the sorted parameters, with HMAC SHA-1. Zelaxy handles both, including reconstructing the public URL when running behind a proxy.

Configuration

SettingTypeDescription
Auth TokenPasswordYour Twilio account Auth Token; validates X-Twilio-Signature (recommended)

Outputs

OutputTypeDescription
fromstringSender phone number (E.164)
tostringYour Twilio number that received the message
bodystringMessage text (also used as the workflow input)
message_sidstringUnique message identifier
account_sidstringTwilio account identifier
message_statusstringMessage status (e.g. received)
num_medianumberNumber of media attachments
mediaarrayAttachments, each with url and content_type
from_citystringSender city, when resolvable
from_statestringSender state
from_countrystringSender country
error_codestringError code, when Twilio reports one
rawobjectAll form fields exactly as Twilio sent them

Twilio spreads MMS attachments across numbered fields (MediaUrl0, MediaContentType0, MediaUrl1, …). Zelaxy collects them into the media array so you can loop over them.

Sample Payload

{
  "MessageSid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "AccountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "From": "+15551234567",
  "To": "+15559876543",
  "Body": "Hello from Twilio",
  "NumMedia": "0",
  "FromCity": "SAN FRANCISCO",
  "SmsStatus": "received"
}

Usage Example

Reference in downstream blocks: {{Webhook 1.from}}, {{Webhook 1.body}}, {{Webhook 1.media}}

Twilio Voice

Triggers when your Twilio number receives a call, or when a call status or recording changes.

Twilio expects TwiML in response to script a call. Zelaxy acknowledges the webhook and starts your workflow, so use this to react to calls — log, notify, enrich — rather than to drive the call flow itself.

Configuration

SettingTypeDescription
Auth TokenPasswordYour Twilio account Auth Token; validates X-Twilio-Signature (recommended)

Outputs

OutputTypeDescription
fromstringCaller phone number (E.164)
tostringYour Twilio number that received the call
call_sidstringUnique call identifier
account_sidstringTwilio account identifier
call_statusstringringing, in-progress, completed, busy, failed, no-answer
directionstringCall direction (inbound, outbound-api)
call_durationstringDuration in seconds, when completed
recording_urlstringRecording URL, for recording callbacks
recording_sidstringRecording identifier
recording_durationstringRecording duration in seconds
from_citystringCaller city, when resolvable
rawobjectAll form fields exactly as Twilio sent them

Sample Payload

{
  "CallSid": "CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "AccountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "From": "+15551234567",
  "To": "+15559876543",
  "CallStatus": "ringing",
  "Direction": "inbound"
}

Usage Example

Reference in downstream blocks: {{Webhook 1.from}}, {{Webhook 1.call_status}}, {{Webhook 1.recording_url}}

Attio

Triggers on records, notes, tasks, and lists changing.

Attio batches events into one delivery. The top-level fields describe the first event; read events to handle them all.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringEvent type (record.created, record.updated, note.created)
webhook_idstringWebhook subscription ID
record_idstringID of the affected record
object_idstringAttio object ID
actor_typestringWho performed the change
actor_idstringActor ID
eventsarrayAll events in the delivery
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.webhook_id}}, {{Webhook 1.record_id}}

Azure DevOps

Triggers on builds, work items, and pull requests.

Azure DevOps returns work item fields under dotted keys like System.Title. Zelaxy lifts those into work_item_title / work_item_state so you do not have to quote them.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringe.g. build.complete, workitem.created
messagestringEvent summary (also the workflow input)
build_numberstringBuild number
build_resultstringsucceeded, failed, canceled
work_item_idnumberWork item ID
work_item_titlestringWork item title
work_item_statestringWork item state
pull_request_idnumberPull request ID
projectstringProject name
resourceobjectFull resource object
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.message}}, {{Webhook 1.build_number}}

Gong

Triggers on calls being processed and transcripts becoming ready.

Gong does not sign the body — it sends whatever Authorization header you configure on the automation rule, and Zelaxy compares it in constant time.

Configuration

SettingTypeDescription
SecretPasswordAuthorization token — validated on every delivery

Outputs

OutputTypeDescription
event_typestringEvent type sent by the Gong rule
call_idstringGong call ID
call_titlestringCall title
call_urlstringLink to the call
startedstringWhen the call started
durationnumberDuration in seconds
participantsarrayCall participants
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.call_id}}, {{Webhook 1.call_title}}

Greenhouse

Triggers on candidates being hired, rejected, or changing stage.

Greenhouse signs with the Signature: sha256 <hex> form — note the space, not an =.

Configuration

SettingTypeDescription
SecretPasswordSecret key — validated on every delivery

Outputs

OutputTypeDescription
event_typestringe.g. candidate_hired, candidate_stage_change
candidate_idnumberCandidate ID
candidate_namestringCandidate full name
candidate_emailstringCandidate primary email
application_idnumberApplication ID
job_idnumberJob ID
job_namestringJob name
stagestringCurrent stage
statusstringApplication status
payloadobjectFull payload object
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.candidate_id}}, {{Webhook 1.candidate_name}}

Ashby

Triggers on applications submitted and candidates changing stage.

Configuration

SettingTypeDescription
SecretPasswordSecret token — validated on every delivery

Outputs

OutputTypeDescription
event_typestringe.g. applicationSubmit, candidateStageChange
candidate_idstringCandidate ID
candidate_namestringCandidate name
candidate_emailstringCandidate primary email
application_idstringApplication ID
job_titlestringJob title
stagestringCurrent interview stage
statusstringApplication status
dataobjectFull data object
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.candidate_id}}, {{Webhook 1.candidate_name}}

incident.io

Triggers on incidents being created, updated, or resolved.

incident.io signs with Svix, the same scheme as Clerk and Resend. Zelaxy reads public_data, private_data, or data, whichever the event carries.

Configuration

SettingTypeDescription
SecretPasswordSvix signing secret — validated on every delivery

Outputs

OutputTypeDescription
event_typestringe.g. public_incident.incident_created_v2
incident_idstringIncident ID
incident_namestringIncident name
incident_statusstringIncident status
severitystringIncident severity
summarystringIncident summary
permalinkstringLink to the incident
referencestringReference (e.g. INC-123)
created_atstringWhen it was created
dataobjectFull event data
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.incident_id}}, {{Webhook 1.incident_name}}

Rootly

Triggers on incidents being created, mitigated, or resolved.

Rootly uses a JSON:API shape (data.attributes.*). Zelaxy flattens it so you reference incident_title rather than walking the envelope.

Configuration

SettingTypeDescription
SecretPasswordSigning secret — validated on every delivery

Outputs

OutputTypeDescription
event_typestringe.g. incident.created, incident.resolved
incident_idstringIncident ID
incident_titlestringIncident title
incident_statusstringIncident status
severitystringIncident severity
summarystringIncident summary
urlstringLink to the incident
created_atstringWhen it was created
dataobjectFull data object
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.incident_id}}, {{Webhook 1.incident_title}}

RevenueCat

Triggers on purchases, renewals, cancellations, and expirations.

RevenueCat does not sign the body — it sends the exact Authorization header value you configure. Check environment before acting: sandbox events look identical to production ones.

Configuration

SettingTypeDescription
SecretPasswordAuthorization header value — validated on every delivery

Outputs

OutputTypeDescription
event_typestringINITIAL_PURCHASE, RENEWAL, CANCELLATION, EXPIRATION
event_idstringUnique event ID
app_user_idstringYour app user ID
product_idstringProduct identifier
entitlement_idsarrayEntitlements affected
storestringAPP_STORE, PLAY_STORE, STRIPE
environmentstringSANDBOX or PRODUCTION
period_typestringTRIAL, INTRO, NORMAL
pricenumberPrice paid
currencystringCurrency code
expiration_at_msnumberExpiry (epoch ms)
purchased_at_msnumberPurchase time (epoch ms)
cancel_reasonstringCancellation reason
eventobjectFull event object
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.event_id}}, {{Webhook 1.app_user_id}}

Loops

Triggers on email sent, delivered, opened, clicked, and bounced.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringe.g. email.opened, email.clicked
emailstringRecipient email
contact_idstringLoops contact ID
campaign_idstringCampaign ID
campaign_namestringCampaign name
email_message_idstringMessage ID
link_urlstringClicked link
timestampstringWhen it occurred
dataobjectFull data object
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.email}}, {{Webhook 1.contact_id}}

Fathom

Triggers when a meeting recording, summary, or transcript is ready.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringEvent type reported by Fathom
meeting_idstringMeeting ID
meeting_titlestringMeeting title
recording_urlstringLink to the recording
share_urlstringShareable link
scheduled_start_timestringScheduled start
summarystringAI summary
transcriptstringTranscript
inviteesarrayMeeting invitees
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.meeting_id}}, {{Webhook 1.meeting_title}}

Grain

Triggers on recordings completing and highlights being created.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringrecording.completed, highlight.created
recording_idstringRecording ID
recording_titlestringRecording title
recording_urlstringLink to the recording
highlight_idstringHighlight ID
highlight_textstringHighlight text
start_datetimestringRecording start
end_datetimestringRecording end
participantsarrayParticipants
dataobjectFull data object
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.recording_id}}, {{Webhook 1.recording_title}}

Instantly

Triggers on campaign replies, opens, clicks, and bounces.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringreply_received, email_opened, link_clicked
campaign_idstringCampaign ID
campaign_namestringCampaign name
lead_emailstringLead email
lead_first_namestringLead first name
lead_last_namestringLead last name
lead_companystringLead company
email_accountstringSending account
reply_textstringReply body
reply_subjectstringReply subject
timestampstringWhen it occurred
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.campaign_id}}, {{Webhook 1.campaign_name}}

lemlist

Triggers on campaign replies, opens, clicks, and bounces.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringemailsReplied, emailsOpened, emailsClicked
campaign_idstringCampaign ID
campaign_namestringCampaign name
lead_emailstringLead email
lead_first_namestringLead first name
lead_companystringLead company
sequence_stepnumberSequence step
textstringReply text
created_atstringWhen it occurred
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.campaign_id}}, {{Webhook 1.campaign_name}}

Linq

Triggers on messages being delivered, failing, or replied to.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringmessage.delivered, message.failed, message.received
message_idstringMessage ID
statusstringMessage status
fromstringSender
tostringRecipient
bodystringMessage body (also the workflow input)
error_messagestringError message
timestampstringWhen it occurred
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.message_id}}, {{Webhook 1.status}}

Circleback

Triggers when a meeting completes and notes or action items are ready.

Configuration

SettingTypeDescription
SecretPasswordAuthorization value — validated on every delivery

Outputs

OutputTypeDescription
event_typestringmeeting.completed, meeting.notes.ready
meeting_idstringMeeting ID
meeting_namestringMeeting name
meeting_urlstringLink to the meeting
start_timestringMeeting start
end_timestringMeeting end
notesstringMeeting notes
action_itemsarrayExtracted action items
attendeesarrayMeeting attendees
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.meeting_id}}, {{Webhook 1.meeting_name}}

EmailBison

Triggers on replies received and sending accounts disconnecting.

Configuration

SettingTypeDescription
SecretPasswordAuthorization value — validated on every delivery

Outputs

OutputTypeDescription
event_typestringreply_received, email_account_disconnected
campaign_idstringCampaign ID
campaign_namestringCampaign name
lead_emailstringLead email
email_accountstringSending account
subjectstringEmail subject
reply_textstringReply body
timestampstringWhen it occurred
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.campaign_id}}, {{Webhook 1.campaign_name}}

Sendblue

Triggers on iMessage/SMS messages received or status changing.

Sendblue does not send an explicit event name. Zelaxy derives event_type from is_outbound: inbound messages become message.received, outbound status callbacks become message.status_updated.

Configuration

This provider does not sign or authenticate its webhooks. Treat the webhook URL as the secret — it is unguessable, but anyone who has it can start your workflow. Use the provider's IP allowlist if it offers one.

Outputs

OutputTypeDescription
event_typestringmessage.received or message.status_updated
message_handlestringMessage handle
from_numberstringSender number
to_numberstringRecipient number
contentstringMessage content (also the workflow input)
statusstringMessage status
error_messagestringError message
is_outboundbooleanWhether outbound
media_urlstringMedia URL
date_sentstringWhen sent
rawobjectComplete original payload

Usage Example

Reference in downstream blocks: {{Webhook 1.event_type}}, {{Webhook 1.message_handle}}, {{Webhook 1.from_number}}

RSS

Triggers once per new item published to an RSS or Atom feed.

RSS is polled, not pushed — it is the only trigger here with no webhook URL to register. You give Zelaxy a feed URL and it checks the feed for you.

Connecting a feed does not replay its history. The first poll records what is already published and triggers nothing; only items appearing afterwards start a run. Without that, adding a feed would immediately fire your workflow once for every post ever published.

Configuration

SettingTypeDescription
Feed URLTextThe RSS or Atom feed to watch (required)

Outputs

OutputTypeDescription
titlestringItem title (also the workflow input)
linkstringItem link
descriptionstringItem description or summary
pub_datestringPublication date as given by the feed
item_idstringStable item identifier (guid, id, or link)
feed_urlstringThe feed the item came from
itemobjectThe parsed item object
rawobjectComplete payload as delivered by the poller

How it behaves

  • Runs once per new item, oldest first, so a burst of posts arrives in publication order.
  • Items are identified by their guid (falling back to id, then link, then title), so editing a title or link in place does not re-trigger.
  • At most 10 items fire per poll of a feed, so a feed that publishes a large backlog cannot flood your workflow.
  • Recent item ids are remembered, so an item that briefly drops out of the feed window and comes back is not treated as new.

Sample Payload

{
  "feedUrl": "https://example.com/feed.xml",
  "item": {
    "id": "https://example.com/posts/hello-world",
    "title": "Hello world",
    "link": "https://example.com/posts/hello-world",
    "pubDate": "Mon, 15 Jan 2024 13:14:15 GMT",
    "description": "Our first post."
  }
}

Usage Example

Reference in downstream blocks: {{RSS 1.title}}, {{RSS 1.link}}, {{RSS 1.description}}

Google Forms

Triggers when a form receives a new response.

Google Forms has no native webhooks. You connect it with a short Apps Script that runs on submit and posts to Zelaxy. The script is below — this is the one trigger that needs code on your side.

Configuration

SettingTypeDescription
Shared SecretPasswordThe script sends this as a Bearer token; mismatches are rejected (recommended)

Setup

  1. Open your form, click the three-dot menu > Apps Script.
  2. Paste the script below, replacing WEBHOOK_URL and SHARED_SECRET with the values from the trigger.
  3. In the Apps Script editor open Triggers (clock icon) > Add Trigger: function onFormSubmit, event source From form, event type On form submit.
  4. Authorise the script when prompted, then submit a test response.
function onFormSubmit(e) {
  const WEBHOOK_URL = "<your webhook URL>";
  const SHARED_SECRET = "<your shared secret>";

  const formResponse = e.response;
  const itemResponses = formResponse.getItemResponses();

  const answers = {};
  for (var i = 0; i < itemResponses.length; i++) {
    answers[itemResponses[i].getItem().getTitle()] = itemResponses[i].getResponse();
  }

  const payload = {
    provider: "google_forms",
    formId: e.source.getId(),
    responseId: formResponse.getId(),
    createTime: formResponse.getTimestamp().toISOString(),
    lastSubmittedTime: formResponse.getTimestamp().toISOString(),
    answers: answers
  };

  UrlFetchApp.fetch(WEBHOOK_URL, {
    method: "post",
    contentType: "application/json",
    headers: { "Authorization": "Bearer " + SHARED_SECRET },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });
}

Outputs

OutputTypeDescription
form_idstringGoogle Form ID
response_idstringUnique response identifier
create_timestringWhen the response was created
last_submitted_timestringWhen it was last submitted
answersobjectAnswers keyed by question title
answer_countnumberNumber of questions answered
rawobjectComplete original payload

answers is keyed by the question title, so a question titled "What is your email?" is {{Webhook 1.answers.What is your email?}}. Renaming a question in the form changes the key.

Usage Example

Reference in downstream blocks: {{Webhook 1.form_id}}, {{Webhook 1.answers.What is your email?}}, {{Webhook 1.answer_count}}

IMAP

Triggers when a new email arrives in a mailbox. Works with any IMAP provider — Gmail, Outlook, Yahoo, Fastmail, or a self-hosted server.

Use an app password, not your account password. Gmail and Outlook refuse account passwords over IMAP once 2FA is enabled. Gmail: enable IMAP in Settings > Forwarding and POP/IMAP, then create one at myaccount.google.com/apppasswords.

IMAP is polled — there is no webhook URL. Zelaxy connects to your mailbox on a schedule. Connecting a mailbox does not replay existing mail: the first poll records where the mailbox is and triggers nothing.

Configuration

SettingTypeDescription
IMAP HostTexte.g. imap.gmail.com, outlook.office365.com (required)
PortNumber993 for SSL/TLS, 143 for STARTTLS (required)
Use SSL/TLSSwitchLeave on for 993
UsernameTextUsually your full email address (required)
PasswordPasswordAn app password (required)
MailboxTextFolder to watch, defaults to INBOX
Mark as readSwitchMark each email read once it has started a run

Outputs

OutputTypeDescription
subjectstringEmail subject (also the workflow input)
fromstringSender email address
from_namestringSender display name
toarrayRecipient addresses
ccarrayCC addresses
datestringEmail date in ISO format
message_idstringRFC Message-ID header
uidnumberIMAP UID within the mailbox
body_textstringPlain text body, when available
mailboxstringMailbox the email arrived in
has_attachmentsbooleanWhether the email has attachments
rawobjectComplete payload as delivered by the poller

How it behaves

  • Runs once per new email, oldest first, capped at 25 per poll so a backlog cannot flood a workflow.
  • Tracks position by IMAP UID. If the server changes UIDVALIDITY — which invalidates every UID it ever issued — Zelaxy detects it, resyncs to the current end of the mailbox, and does not replay the mailbox.
  • If a workflow run fails to dispatch, the cursor is not advanced past it, so it is retried on the next poll rather than lost.
  • Dropped connections and throttling are treated as normal and retried on the next poll.

Sample Payload

{
  "mailbox": "INBOX",
  "email": {
    "uid": 1042,
    "messageId": "<CAF=abc123@mail.example.com>",
    "subject": "Invoice #4102",
    "from": { "address": "billing@vendor.com", "name": "Vendor Billing" },
    "to": ["ada@example.com"],
    "date": "2024-01-15T13:14:15.000Z",
    "hasAttachments": true
  }
}

Usage Example

Reference in downstream blocks: {{IMAP 1.subject}}, {{IMAP 1.from}}, {{IMAP 1.body_text}}

Jira Service Management

Triggers when a service desk request is created, updated, commented on, or resolved.

Configuration

SettingTypeDescription
Webhook SecretPasswordJira sends it as a Bearer token; mismatches are rejected (recommended)

Setup

  1. In Jira, go to Settings > System > WebHooks and click Create a WebHook.
  2. Paste the Webhook URL into the URL field and the Webhook Secret into the Secret field.
  3. Tick the Issue events you want (created, updated, deleted) and Comment > created for comment events.
  4. Optionally add a JQL filter such as project = SUP so only your service desk fires the workflow.

Outputs

OutputTypeDescription
event_typestringjira:issue_created, jira:issue_updated, comment_created
issue_event_typestringMore specific name, e.g. issue_commented
issue_keystringIssue key, e.g. SUP-123
summarystringRequest summary (also the workflow input)
descriptionstringRequest description
statusstringCurrent status name
prioritystringPriority name
request_typestringCustomer request type, when present
reporter_name / reporter_emailstringReporter
assignee_namestringAssignee
project_keystringProject key
user_namestringWho caused the event
comment_bodystringComment text (comment events)
comment_authorstringComment author
comment_publicbooleanWhether the customer can see the comment
changelogobjectWhat changed (update events)
issueobjectFull issue object
rawobjectComplete original payload

comment_public reflects JSM's jsdPublic flag. Internal comments look identical to customer replies in the payload apart from this field — check it before echoing a comment anywhere customer-facing.

Usage Example

Reference in downstream blocks: {{Webhook 1.issue_key}}, {{Webhook 1.summary}}, {{Webhook 1.comment_body}}

Data Access Reference

Variable Syntax

All webhook data is accessed using the {{BlockName.path.to.field}} template syntax inside any connected downstream block (Agent, Function, API, Condition, etc.).

{{Webhook 1.path.to.field}}
  • Block name = the label on the canvas (default: Webhook 1)
  • Path = dot-separated property path into the block output
  • Block names are normalized: case-insensitive, spaces removed (Webhook 1 = webhook1)

Provider-Specific vs Raw Data Access

ProviderConvenient Access (Flattened)Raw Access (Always Available)
Gmail{{Webhook 1.email.subject}}{{Webhook 1.webhook.data.payload}}
Outlook{{Webhook 1.email.subject}}{{Webhook 1.webhook.data.payload}}
Slack{{Webhook 1.event.text}}{{Webhook 1.webhook.data.payload}}
GitHub{{Webhook 1.action}}{{Webhook 1.webhook.data.payload}}
Telegram{{Webhook 1.message.text}}{{Webhook 1.webhook.data.payload}}
WhatsApp{{Webhook 1.whatsapp.data.text}}{{Webhook 1.webhook.data.payload}}
Stripe{{Webhook 1.type}}{{Webhook 1.webhook.data.payload}}
Microsoft Teams{{Webhook 1.text}}{{Webhook 1.webhook.data.payload}}
GenericN/A — use raw access{{Webhook 1.webhook.data.payload.field}}

Nested Field Access

Use dots to traverse nested objects:

{{Webhook 1.webhook.data.payload.data.provider_message_id}}

This resolves the path: outputwebhookdatapayloaddataprovider_message_id

Array Access

Use bracket notation to access array elements:

{{Webhook 1.webhook.data.payload.items[0].name}}

Common Generic Webhook Patterns

What you wantReference
Full HTTP body{{Webhook 1.webhook.data.payload}}
Top-level body field{{Webhook 1.webhook.data.payload.fieldName}}
Nested body field{{Webhook 1.webhook.data.payload.parent.child}}
Array element{{Webhook 1.webhook.data.payload.items[0]}}
HTTP headers{{Webhook 1.webhook.data.headers}}
HTTP method{{Webhook 1.webhook.data.method}}

Security

  • Always set a webhook secret — validates that requests come from the actual service
  • HTTPS only — all webhook URLs use HTTPS
  • Signature verification — Zelaxy validates webhook signatures automatically for supported providers

Tips

  • Each workflow has a unique URL — don't share it publicly
  • Test with curl: curl -X POST https://your-webhook-url -H "Content-Type: application/json" -d '{"test": true}'
  • Retry handling — some services retry failed webhooks; ensure your workflow is idempotent

On this page

Webhook Trigger
Overview
Supported Providers
How It Works
Universal Raw Data Access (All Providers)
Signature verification
Gmail
Configuration
Outputs
Sample Payload
Usage Example
Outlook
Configuration
Outputs
Sample Payload
Usage Example
Slack
Configuration
Outputs
Sample Payload
Usage Example
GitHub
Configuration
Outputs
Sample Payload (Pull Request)
Usage Example
Telegram
Configuration
Outputs
Sample Payload
Usage Example
WhatsApp
Configuration
Outputs
Sample Payload
Usage Example
Stripe
Configuration
Outputs
Sample Payload
Usage Example
Airtable
Configuration
Outputs
Sample Payload
Usage Example
Microsoft Teams
Configuration
Outputs
Sample Payload
Usage Example
Generic Webhook
Outputs
Usage Example
GitLab
Configuration
Outputs
Sample Payload (Push)
Usage Example
Typeform
Configuration
Outputs
Sample Payload
Usage Example
Sentry
Configuration
Outputs
Sample Payload (Issue Created)
Usage Example
Calendly
Configuration
Outputs
Sample Payload (Invitee Created)
Usage Example
PagerDuty
Configuration
Outputs
Sample Payload (Incident Triggered)
Usage Example
Vercel
Configuration
Outputs
Sample Payload (Deployment Ready)
Usage Example
Zoom
Configuration
Outputs
Sample Payload (Meeting Started)
Usage Example
Clerk
Configuration
Outputs
Sample Payload (User Created)
Usage Example
Cal.com
Configuration
Outputs
Sample Payload (Booking Created)
Usage Example
Resend
Configuration
Outputs
Sample Payload (Email Delivered)
Usage Example
Twilio SMS
Configuration
Outputs
Sample Payload
Usage Example
Twilio Voice
Configuration
Outputs
Sample Payload
Usage Example
Attio
Configuration
Outputs
Usage Example
Azure DevOps
Configuration
Outputs
Usage Example
Gong
Configuration
Outputs
Usage Example
Greenhouse
Configuration
Outputs
Usage Example
Ashby
Configuration
Outputs
Usage Example
incident.io
Configuration
Outputs
Usage Example
Rootly
Configuration
Outputs
Usage Example
RevenueCat
Configuration
Outputs
Usage Example
Loops
Configuration
Outputs
Usage Example
Fathom
Configuration
Outputs
Usage Example
Grain
Configuration
Outputs
Usage Example
Instantly
Configuration
Outputs
Usage Example
lemlist
Configuration
Outputs
Usage Example
Linq
Configuration
Outputs
Usage Example
Circleback
Configuration
Outputs
Usage Example
EmailBison
Configuration
Outputs
Usage Example
Sendblue
Configuration
Outputs
Usage Example
RSS
Configuration
Outputs
How it behaves
Sample Payload
Usage Example
Google Forms
Configuration
Setup
Outputs
Usage Example
IMAP
Configuration
Outputs
How it behaves
Sample Payload
Usage Example
Jira Service Management
Configuration
Setup
Outputs
Usage Example
Data Access Reference
Variable Syntax
Provider-Specific vs Raw Data Access
Nested Field Access
Array Access
Common Generic Webhook Patterns
Security
Tips