Calling a Webhook

In the example above, we ask contacts to reply with their application number, then look up its status with a webhook. For a similar lookup against Airtable, see using a webhook with Airtable.

Webhooks POST flow data structured as JSON to an external service every time a contact reaches a Call Webhook action. When a contact reaches this node, we call the URL you've configured and pass it all of the variables collected up to that point in the flow. See the Flow Event webhook documentation for a full list of the values included. If your service returns a JSON object, we save its values so you can access the last webhook response in the flow using the @webhook variable prefix.

For example, the Application Status flow asks the contact for their application number, then looks up its status by POSTing it to an external service. That service responds with a JSON object similar to the following:

{
 "status": "accepted",
 "name": "Maya Patel",
 "program": "Environmental Science",
 "start_date": "August 31"
}

You can then reference these keys anywhere later in the flow using @webhook.json, for example @webhook.json.name.

Configuring a 'Call Webhook' Action

In this example, we'll show you how to add a webhook to a flow. You can follow along using the Application Status flow.

Generate a Flow Field

Create a Wait for Response action that collects the target value from your contacts and saves it as a flow result. In the example below, the Wait for Response action uses the has some text rule to collect contacts' application numbers and saves them as the Application Number flow variable. The webhook then sends this value using @results.application_number.

Make a Request

Create a Call Webhook action, choose POST from the method menu and enter your URL. In this example, the request includes Authorization and Content-Type headers and a JSON body with the application number and the contact's phone number, and the result is saved as Status Lookup:

Result variable will only store up to 640 characters.

The Status Lookup result records the response code from your service, and if your service returns JSON, you can read it using @webhook.json. The log in the simulator shows the call to your URL and the results that were set:

Evaluate the External Variable

Next, create a Split by Expression action that evaluates one of the returned values against a response rule. In the example below, the status key @webhook.json.status can only contain one of three values (accepted, pending or declined), so we can use the has_only_text rule to tell which value is present for the contact, and save the result as Application Status:

If the returned status value matches "accepted", "pending" or "declined", the contact is directed to the matching category, and each one sends a message using values from the response, such as @webhook.json.name and @webhook.json.program. Otherwise, the contact goes through the Other category.

Viewing Webhook Events

To view webhook events, open Flows and, under History in the left-hand menu, click Webhooks:

Your recent events are listed in chronological order.

Click an event to view the contents of the request and the corresponding JSON properties.

Troubleshooting

Unsuccessful requests are captured by the Failure category. We recommend connecting it to a Send Email action so you're alerted as soon as an error occurs.

Many tools can help you mimic, intercept and capture webhook requests so you can understand and fix problems. Here are a few of them:

Give it a Try

Use the simulator to test how your URL responds when it's called.

Last updated 21 October 2026