Skip to main content

What it does

The Send Webhook step fires an HTTP request to a URL you specify, carrying whatever data you choose — variable values, structured JSON, form fields, or raw text. It’s the outbound counterpart to the Webhook trigger: where the trigger listens for incoming requests, this step sends them.

When to use it

  • Notify a CRM or billing system when a campaign milestone is reached
  • Post a performance summary to a Slack incoming webhook
  • Trigger a workflow in another tool (Zapier, Make, n8n) from AffZero
  • Send bulk update data to an external API after an AI Analyze step computes it
  • Push extracted invoice data to an accounting system

Configuration

URL

The full URL to send the request to. Supports {variable} placeholders so you can dynamically include IDs or other values in the endpoint path.

Method

Choose the HTTP method: POST, GET, PUT, PATCH, or DELETE. Most webhook endpoints expect POST.

Body mode

Select how to structure the request body:
ModeDescription
Key-ValueBuild a JSON object by entering key-value pairs. Each value can be typed as string, number, boolean, or nested JSON. Supports {variable} substitution in values.
JSONWrite a raw JSON template directly. Use {variable} placeholders — they are substituted before the request is sent.
Form dataSends as application/x-www-form-urlencoded. Useful for older APIs.
RawSend any arbitrary text or string as the body (e.g. plain text, CSV).
GET and DELETE requests typically have no body. If you select these methods, the body fields are ignored.

Custom headers

Add any HTTP headers the target service requires — for example Authorization: Bearer {token} or X-API-Key: {api_key}. Header values support {variable} substitution.

Using variables

All variables from previous steps are available. Insert them anywhere: in the URL, in header values, in body values. Key-Value example:
campaign_id  →  {ai_campaign_id}
new_cost     →  {ai_new_cost}
JSON template example:
{
  "event": "cost_update",
  "campaign": "{ai_campaign_id}",
  "cost": "{ai_new_cost}",
  "timestamp": "{date_today}"
}

Responses and errors

If the server returns a non-2xx HTTP status code, the step is marked as failed and the automation stops (unless the step is followed by a Condition Check that handles failures). The response body is shown in Runs & Logs to help diagnose issues.
Most webhook services return a 200 OK immediately and process the request asynchronously. If the step fails, check that the URL is correct and the API key or auth header is valid.