Webhook
Trigger · Stable
Start a workflow via an inbound HTTP POST with optional secret validation.
Receives an HTTP POST at /flows/webhook/<workflow_id> (the exact URL is shown in the Webhook trigger panel, ready to copy). The request JSON body is available as payload (dict or raw string). An optional shared secret can be validated in workflow settings. Good for integrations with Stripe, GitHub, or any external service that supports outbound webhooks.
When to use
Section titled “When to use”Use when an external service (Stripe, GitHub, a payment gateway, another app) needs to push data into a workflow and delivers it as an HTTP POST. The payload dict flows directly into downstream steps — no polling needed.
When not to use
Section titled “When not to use”If the trigger is an internal platform state change, use Event instead — it carries typed event keys rather than a raw payload dict. For scheduled runs use Schedule (Cron); for email-initiated runs use Incoming email. Heads-up: a run from this trigger has no signed-in user, so {{ user.* }} and {{ actor.* }} are empty. Bind any recipient or owner — a send_email to, a deal owner_actor_id, a task assigned_to — to a concrete email or actor_id, never {{ user.* }}; or collect it at run time with an Ask-a-person step.
Inputs
Section titled “Inputs”secret
Section titled “secret”string · optional
A token the sender must echo back in the X-Webhook-Secret header on every POST. Leave empty to accept any POST to the URL — fine for a quick internal test, risky once the URL might leak into logs, browser history, or a shared channel.
Example: wf_shared_9c2a1e
- ✓
wf_shared_9c2a1e— a long random token, generated once and pasted into both Routario and the sending service’s webhook config - ✗
password123— guessable — anyone who finds the URL can also guess the secret; generate a random token instead
Auto-generated from the skill registry (load_skills()). Do not edit by hand.