Webhook Step
A webhook step sends prospect data when a prospect reaches a chosen point in your sequence. Use it for CRM updates, Slack notifications, or workflows in Make, Zapier, n8n, or your own service.
The step supports two separate requests:
| Destination | Request |
|---|---|
Your team’s enabled endpoints subscribed to webhook.step.reached or All events | A signed event with version, event ID, prospect data, and step details |
| The step’s optional URL | The existing unsigned step payload |
Existing steps with a URL keep that destination and payload. They also send the signed event to matching team endpoints. A URL configured in both places receives both requests, with different bodies. If no team endpoint matches, Vaam sends no signed event.
Set up a webhook step
Section titled “Set up a webhook step”- Open your sequence in the editor.
- Click Add step and select Webhook.
- If you see Delivery, select Team webhook endpoints or Team webhook endpoints and a step URL.
- For the second option, enter an HTTPS address in Step URL.
- Optionally add a Label and Notes.
- Save the step.
Team webhook endpoints is the default for a new step when team webhooks are available. An existing URL opens under Team webhook endpoints and a step URL.
If you see only Endpoint, your account does not have the team webhook controls. Enter a URL to save the step. This also applies when you edit a shared step that has no URL. Vaam adds no URL automatically.
An admin or owner sets up team endpoints in Settings → Webhooks. Subscribe to webhook.step.reached under Sequence lifecycle, or select All events. Existing All events subscriptions include this event automatically. See Webhooks.
The step uses the fixed event name webhook.step.reached. You cannot choose a team endpoint for one step, define another event name, or customize the JSON template.
Signed event payload
Section titled “Signed event payload”Team endpoints receive the signed event envelope. Its event is webhook.step.reached, and its data contains:
{ "stepId": "step012", "title": "Notify CRM", "information": "Send to HubSpot for follow-up", "sequenceId": "seq789", "sequenceName": "Enterprise Outreach Q1"}The Label becomes title; Notes becomes information. Empty optional fields can be absent.
The step, sequence, and prospect details are the values when Vaam builds the event, which can be shortly after the step runs. Retries and redelivery send the same body. Verify the request with your endpoint’s signing secret.
Step URL payload
Section titled “Step URL payload”The step URL receives an unsigned JSON POST with Content-Type: application/json. It has no signed-event ID or version:
{ "event": "webhook.step.reached", "timestamp": "2025-01-15T10:30:00.000Z", "prospect": { "id": "abc123", "firstname": "Jane", "lastname": "Doe", "email": "jane@example.com", "company": "Acme Inc", "jobtitle": "VP Sales", "phone": "+1234567890", "linkedinProfileUrl": "https://linkedin.com/in/janedoe", "tags": ["enterprise", "inbound"], "custom": "custom field 1 value", "custom2": "custom field 2 value", "custom3": "custom field 3 value" }, "enrollment": { "id": "enr456", "sequenceId": "seq789", "sequenceName": "Enterprise Outreach Q1" }, "step": { "id": "step012", "title": "Notify CRM", "information": "Send to HubSpot for follow-up" }}The URL, label, and notes are the values when the step runs. Each attempt sends the current prospect and sequence information, so the timestamp and prospect values can change between attempts. Missing optional values can be absent from the JSON.
Sequence progress and timing
Section titled “Sequence progress and timing”The sequence moves on without waiting for either receiver’s response. A completed step in sequence history does not confirm delivery. Delivery success or failure does not change the prospect’s sequence status or completed-step history.
If you pause or stop a prospect before a step runs, Vaam sends nothing for that step. Requests that are already queued can still go out.
A webhook step at the start of a sequence, and a webhook step with a delay, need scheduled processing on Vaam’s side, even with no delay. Contact support to confirm that it is ready before you use either setup.
A webhook at the start of a sequence does not apply its configured delay when you add a prospect. Avoid using that delay to control the first send. A webhook immediately after a condition at the start of a sequence can also be skipped. Place it after a supported action step instead.
Retries and failure handling
Section titled “Retries and failure handling”Both destinations work independently. A failed step URL does not prevent signed delivery, and a signed-event failure does not prevent the step URL request.
| Request | Attempts and failure visibility |
|---|---|
| Step URL | 3 total attempts, including the first, with exponential backoff. After final failure, Vaam attempts to email the teammate running the step. This can differ from the sequence owner. |
| Signed endpoint | Up to 7 total attempts, including the first. The 6 retries use delays of 30 seconds, 1, 2, 4, 8, and 16 minutes. The endpoint’s delivery log shows success or final failure. |
Both requests use a 10-second response timeout. A network error, timeout, or non-2xx response fails an attempt. Signed requests do not follow redirects.
A signed event can fail before Vaam sends it to your endpoints. The delivery log then has no entry for it.
Delivery can be duplicated or lost. Vaam does not guarantee receipt, exactly-once delivery, or event order. Use the signed event’s id to discard repeats of that event. Separate requests can produce different IDs for the same step. Make your receiver safe to call more than once.
URL requirements
Section titled “URL requirements”Use an HTTPS URL with a valid public hostname. Private or internal addresses fail delivery checks. Team endpoints also reject Vaam domains. See webhook URL requirements.
Response limits
Section titled “Response limits”The webhook step is one-way. Vaam does not use the receiver’s response to branch, skip, stop, or otherwise control the sequence. It cannot run a custom external check and continue based on the result.
Use a manual step when you need to run an external check and decide whether to continue from your Task list.