# HTTP Webhook

> Set up an HTTP Webhook, as a trigger or a wait step, with its fields and the request data it outputs.

**HTTP Webhook** connects a workflow to any app that can send a webhook, a request that the app sends to a web address when something happens. The node gives you that address. You paste it into the other app, and each request it sends reaches the workflow.

The node appears in two places, and works the same way in both:

- **As a trigger**, in the **Change trigger** list: each request starts a new run.
- **As a wait step**, in **Add node > Wait for event**: the run pauses at the node until a request arrives, then continues.

## Set it up

1. Add the node, as a trigger or as a wait step.
2. In **Connection**, select an HTTP Webhook connection, or create one. [Connection](#connection) describes its fields.
3. Copy the webhook URL from the box at the top of the panel, and paste it into the webhook settings of the other app.
4. Optionally, add a **Filter**, so only matching requests count:
   1. Select **Add condition** or **Add group**.
   2. Choose **All (AND)** or **Any (OR)**.
5. Deploy the workflow. Requests reach it only after it's deployed.

## Fields

| Field | Required | Description |
|---|---|---|
| Webhook URL | — | The address to paste into the other app. Each node has its own. |
| **Connection** | Yes | The HTTP Webhook connection that receives the requests. **Refresh Schema** reloads the shape of the incoming data. |
| **Filter** | No | Conditions that a request must match. Requests that don't match are ignored. |
| **Input arguments** | No | Trigger only. Values that other nodes read under `$vars.<node ID>.output`. |

## Connection

An HTTP Webhook connection receives the requests of one app. The webhook URL is created with the connection, so the node shows it only after the connection exists. [Create a connection](create-a-connection.md) describes how to create a connection from the node. On the **Connect to HTTP Webhook** page, fill in these fields:

| Field | What to enter |
|---|---|
| **Folder in which connection is stored** | The folder that holds the connection. |
| **What application is this webhook for?** | A name for the app that sends the requests, such as `Stripe-prod`. It also becomes the connection identifier. |
| **Authentication Type** | **None**, or **Header Based Authentication** to accept only requests that carry a header and value that you choose. Set the same header in the other app. |
| **Challenge location** | **No challenge**, or where the app sends its verification challenge: **Header**, **Body**, or **Query parameter**. |

With **Header Based Authentication**, a request without the matching header is rejected with the HTTP status 401.

Some apps, such as Slack, WhatsApp, and Stripe, check the webhook URL before they send events. They send a challenge, a value that the URL must return. If the app does this, select where the challenge arrives in **Challenge location**, then fill in the fields that appear, as the webhook documentation of the app describes. WhatsApp, for example, sends the challenge in the `hub.challenge` query parameter, and expects it back as plain text.

## Output

The node's output is the request that the other app sent. Until the first request arrives, the node doesn't know its shape, so send one test request before you reference its fields in later nodes.

## Next steps

- [Triggers](triggers.md): the other ways to start a workflow.
- [Delay](node-delay.md): pause a run for a set time instead.
- [Deploy a workflow](deploy-a-workflow.md): make the webhook live.
- [Community](community.md): ask questions and share workflows with other builders on the UiPath Forum.
