Set up webhooks
How webhooks work in Tallyfy
Section titled “How webhooks work in Tallyfy”Tallyfy webhooks send automated JSON messages to external systems when specific workflow events happen. They POST data to URLs you define, giving you real-time integration with other apps. This guide covers how to set them up and avoid common pitfalls.
Webhook types
Section titled “Webhook types”Tallyfy has two webhook levels:
Template-level webhooks
Section titled “Template-level webhooks”Template-level webhooks fire when any step in a process is completed, when a process is launched, or when a process is completed. They send the full process data - all form fields and step statuses. Think of these as the “firehose” option.
They leave out top secret tasks, other than the task that fired the webhook. A top secret task is one that only administrators and its assignees can see. Top secret tasks lists what’s left out.
When a step has its own webhook URL set, that takes priority over the template-level webhook for that specific step.
Use cases:
- Track overall process progress in external systems
- Update dashboards when any step changes
- Capture new process launches or completions
Step-level webhooks
Section titled “Step-level webhooks”Step-level webhooks fire only when a specific step is completed. More surgical - they only trigger when that particular step is done.
Use cases:
- Send notifications at key process milestones
- Trigger follow-up actions in other systems
- Export form field data collected at a particular step
How webhook events flow
Section titled “How webhook events flow”This diagram shows how Tallyfy sends webhook data to external systems when events occur in your workflows.
What to notice:
- Two trigger types - Template-level webhooks fire on any step completion, process launch, or process completion. Step-level webhooks only fire for that specific step.
- Priority - If a step has its own webhook URL, it’s used instead of the template-level webhook for that step’s completion event.
- Organization ID header - Every webhook request carries an
X-Tallyfy-orgIDheader. It identifies the organization that sent it, but it doesn’t secure anything.
Setting up template-level webhooks
Section titled “Setting up template-level webhooks”- Navigate to the template you want to configure
- Click Edit to enter template editing mode
- Open the Advanced Settings drawer
- Find the Webhooks section
- Toggle webhook functionality on
- Enter the destination URL in the Template webhook URL field
- Note the Template alias - you’ll need it in your integration
Setting up step-level webhooks
Section titled “Setting up step-level webhooks”- Navigate to the template containing your target step
- Click Edit to enter template editing mode
- Select the specific step that should trigger the webhook
- Open the Advanced tab
- Toggle webhook functionality on
- Enter the destination URL in the webhook URL field
- Save your changes
You can also send a webhook from an automation, so it fires only when the conditions you set are met.
Example: Slack notifications via middleware
Section titled “Example: Slack notifications via middleware”Here’s how to send Slack notifications when an employee completes an onboarding step in Tallyfy.
What you’ll need
Section titled “What you’ll need”- Tallyfy account with Professional or Enterprise plan
- Middleware account (Make.com, Power Automate, n8n, or Zapier)
- Slack workspace with admin access
Step 1: Set up the middleware webhook receiver
Section titled “Step 1: Set up the middleware webhook receiver”-
Sign in to your middleware platform
-
Create a new workflow (“Zap” in Zapier, “Flow” in Power Automate, “Scenario” in Make)
-
Select Webhooks as the trigger app
-
Choose Catch Hook or When HTTP request is received as the trigger event

-
Copy the webhook URL provided by your middleware platform - you’ll paste it into Tallyfy next

Step 2: Configure the Slack message action
Section titled “Step 2: Configure the Slack message action”-
Add an action step to your workflow.
-
Select Slack as the action app.
-
Choose Send Channel Message as the action event.

-
Connect your Slack account if not already connected.
-
Select the destination channel (e.g., #general).
-
Build a message template using the webhook data fields.

-
Include details like process name, step name, and assignee.
Step 3: Configure the Tallyfy webhook
Section titled “Step 3: Configure the Tallyfy webhook”- Navigate to your onboarding template in Tallyfy.
- Enter Edit mode.
- For template-level notifications, open the Advanced Settings drawer.
- Toggle webhooks on.
- Paste the middleware webhook URL into the Template webhook URL field.
- For step-specific notifications, select the relevant step instead.
- Open the Advanced tab for that step.
- Toggle webhooks on and paste the middleware webhook URL.
- Save your changes.
Step 4: Test the integration
Section titled “Step 4: Test the integration”-
Run your onboarding process
-
Complete the relevant step
-
Verify the notification appears in your Slack channel

Security
Section titled “Security”Tallyfy includes the X-Tallyfy-orgID header in all webhook requests. It identifies the sender: compare it with your organization ID to see which Tallyfy organization a request came from. It doesn’t prove the request came from Tallyfy, because the organization ID appears in Tallyfy links such as guest links, and anyone who knows it can send the same header. The payload structure page lists every header Tallyfy sends.

Handle duplicate webhook events
Webhooks can fire multiple times for the same event. For example, if a task is completed, then reopened and completed again, you’ll get multiple notifications. Always implement idempotency handling to prevent duplicate actions. It’s much easier to handle this from the start than debug it later.
Troubleshooting
Section titled “Troubleshooting”Webhooks not firing? Here’s how to diagnose:
- Verify the URL is correct - Copy and paste it fresh, don’t type it manually
- Use a public URL - Tallyfy can’t send to
localhost, so the address must be reachable from the internet. Send it a test request with Postman first - Confirm webhook is enabled - Both the toggle AND the URL field must be set
- Check for HTTPS - Many receivers require HTTPS, not HTTP
- Look for auth requirements - Your receiver might be rejecting unauthenticated requests
- Verify step completion - Webhooks only fire when steps are actually completed (not just opened)
- Return a 2xx status code within 10 seconds - Anything else, or no answer in time, counts as a failed attempt
- Check your server logs - Look there for the incoming webhook event
Best practices
Section titled “Best practices”- Use HTTPS URLs for webhook destinations - HTTP is asking for trouble
- Read the
X-Tallyfy-orgIDheader to see which organization sent a request, but don’t treat it as proof that Tallyfy sent it - Test webhooks before relying on them in production
- Monitor webhook delivery using your middleware platform’s logs
- Build retry logic into your receiving system for reliability
- Use webhook.site or RequestBin for initial testing before connecting production systems
- Validate the payload structure on your end - don’t assume it won’t change
Starting a Tallyfy process from another system
Section titled “Starting a Tallyfy process from another system”Webhooks send data out of Tallyfy. To go the other way, and launch a process from an external form or capture a guest’s details:
- Call the API’s process launch endpoint.
- Pass the form data as kick-off form values.
- Include the guest’s email in the payload for automatic assignment.
- A webhook can tell your system when the process starts.
Related articles
Section titled “Related articles”Webhooks > Send emails using webhooks
Webhooks > Webhook payload structure