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:
| Mode | Description |
|---|
| Key-Value | Build 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. |
| JSON | Write a raw JSON template directly. Use {variable} placeholders — they are substituted before the request is sent. |
| Form data | Sends as application/x-www-form-urlencoded. Useful for older APIs. |
| Raw | Send 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.
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.