Send webhook
Step · Stable
Fire an outbound HTTP request to an external URL.
Fires an outbound HTTP request with a JSON payload assembled from Jinja2 templates or context keys. Use for push integrations with external services where no dedicated module exists — e.g. Slack incoming webhooks, n8n triggers, or internal microservice pings.
When to use
Section titled “When to use”Use to push data to an external service when no dedicated module exists — Slack incoming webhook, n8n trigger, a custom microservice endpoint. The payload is a Jinja2 template so any upstream context key can be wired into the outbound body.
When not to use
Section titled “When not to use”If you need to make a structured HTTP call and read the response body into context for downstream steps, use HTTP Fetch instead — Send webhook does not surface the response. For sending email use Send email; for WhatsApp use Send WhatsApp.
Inputs
Section titled “Inputs”string · required
The full destination URL, including scheme. Usually a literal — template it only if the destination genuinely varies per run.
Example: https://hooks.example.com/incoming/abc123
- ✓
https://hooks.example.com/incoming/abc123— a literal HTTPS endpoint, e.g. a Slack incoming webhook - ✗
hooks.example.com/incoming/abc123— missing the scheme — must start with https:// (or http://)
method
Section titled “method”choice · optional · one of GET, POST, PUT, PATCH, DELETE, HEAD
The HTTP verb. Almost every receiving webhook expects POST; use GET only for a pure ping with no body.
Example: POST
- ✓
POST— the default for delivering a JSON payload - ✗
post— must be uppercase — one of the exact listed option values
payload
Section titled “payload”string · optional
The request body as a Jinja2 template — render to whatever shape the receiver expects (JSON, form-encoded, plain text). Template refs resolve against the run context before sending.
Example: {"text": "{{ trigger.subject }} from {{ trigger.from }}"}
- ✓
{"text": "{{ trigger.subject }} from {{ trigger.from }}"}— a Slack-incoming-webhook-shaped JSON body - ✗
{"text": {{ trigger.subject }}}— missing quotes around the templated value — renders invalid JSON unless the subject is a bare number; wrap template refs in strings
connection_id
Section titled “connection_id”choice · optional
Options are populated per-tenant from Settings → Integrations → Connections. Applies the stored auth headers/token automatically so the payload/URL do not need to carry a secret. Leave empty for an unauthenticated destination.
Example: stripe-partner-api
- ✓
stripe-partner-api— reuses a saved connection’s auth headers - ✗
{{ trigger.connection }}— connection is picked from the saved list at save time, not templated at run time
Outputs
Section titled “Outputs”Auto-generated from the skill registry (load_skills()). Do not edit by hand.