Skip to content

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.

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.

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.

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://)

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

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

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
  • status
  • http_status

Auto-generated from the skill registry (load_skills()). Do not edit by hand.