# Webhook Output

> Send workflow results to any URL as an HTTP POST with a JSON body, with named values and an optional stored credential whose secret stays on the server.

Source: https://nodaro.ai/docs/nodes/publish/webhook-output

The **Webhook Output** node sends the results of your workflow to a URL as an HTTP POST request with a JSON body. Use it to deliver a finished video, image, audio file or text to your own backend, a content management system or an automation service. You choose the names of the values it sends, and it can send a stored key with every request without ever showing the key in the workflow.

- Found in: Publish › Export
- Output: none
- API type: `webhook-output`

## When to use it
- Send a generated video's URL to a content management system when the video is ready.
- Start an automation in another service when a workflow finishes.
- Deliver results to your own API for further processing.
- Tell another system that a scheduled or triggered run has completed.

## Quick start
### Add the node

Press Tab on the canvas and choose **Publish › Export › Webhook Output**.

### Type the address

In the settings panel, type the **Webhook URL**, for example `https://example.com/webhook`. Use an `https://` address.

### Name the values to send

Under **Input Parameters**, click **Add** for each value, type its name, such as `video_url`, and choose its type. Each parameter adds an input with that name to the node.

### Connect and run

Connect each input to the node that produces its value, and click **Run**. The panel shows the HTTP status code of the delivery under **Last run**.

Workflow: A video URL and a caption are sent to your API as two named values in one JSON body.

- Generate Video → Webhook Output (video_url)
- Prompt → Webhook Output (caption)

## Inputs
The inputs depend on the parameters you define.

- **No parameters.** The node has one input. Everything connected to it is sent as a single payload.
- **One or more parameters.** The node has one input per parameter, named after it. Each value is sent under its parameter's name.

## Settings
| Setting | What it does |
| --- | --- |
| **Webhook URL** | The address that receives the POST request. |
| **Credential** | A stored key sent as a header with every request. The default is **None — send without a credential**. See [Send with a credential](#send-with-a-credential). |
| **Input Parameters** | The named values to send. Each has a name and a type: **Text**, **Image URL**, **Video URL** or **Audio URL**. |
| **Last run** | The HTTP status code of the last delivery, or **Not sent yet**. |

## What the request looks like

The node sends a POST request with a JSON body. With two parameters named `video_url` and `caption`, the body looks like this:

```json
{
"video_url": "https://cdn.example.com/results/clip.mp4",
"caption": "Our new product, in 15 seconds."
}
```

Media values are the URLs of the files, which the receiving service can download.

## Send with a credential

Many services accept a delivery only with a key in a header, such as `Authorization: Bearer ...`. Save the key once as a credential, then choose it in the node.

### Save the key

Open **Integrations › Credentials** and save a new credential with a header name, for example `Authorization`, and its secret value. The panel's **Manage credentials** link opens the same page.

### Choose who can use it

Integrations asks who can use the key. Choose **Any address** or **Only one address**. The difference is explained below.

### Choose it in the node

In the node's **Credential** menu, choose the saved credential. Every delivery from this node now carries the header.

The node stores only a reference to the credential. The secret is decrypted on the server when the request is sent and is never shown again. It never enters the workflow, an export, a template or a preset. To rotate a key, save a new value over the old one.

### Any address or only one address

| Choice | Where it works | Use it when |
| --- | --- | --- |
| **Any address** | Only on runs you start yourself: a run from the editor, and a schedule you set up in the editor. | You are still building the workflow. |
| **Only one address** | On every run, including published apps, shared workflows and triggered runs, but only when the node sends to the locked address. | The workflow runs without you, or other people run it. |

A credential that is not locked is refused on a published app, a shared workflow, a collaborator's run, a run started with an API token, a webhook trigger and a schedule created through the API. The node then fails with a clear message instead of sending without the key.

A locked credential is tied to one `https://` address. By default, the lock is that exact address. Turn on **Also allow paths under this address** to use one key for several addresses of the same service. When you choose a credential locked to an exact address, the **Webhook URL** follows it and cannot be edited.

Locking is one-way. You can change the locked address later, but you cannot remove it.

### Publishing and sharing need locked credentials

Before you publish a workflow as an app or share it for others to run, every credential it sends with must be locked to an address the node sends to, including credentials in sub-workflows. The publish and share dialogs offer to lock a credential to the node's current URL in one click.

### What a lock enforces

On every request, and on every redirect:

- The URL must match the locked address. Otherwise the request is refused before it leaves.
- A redirect to any other address is not followed. The request fails instead of continuing without the key.
- A credential that is not locked is removed from a redirect to another site.
- A credential is never sent over plain `http://`.

### Replies are hidden when a key is attached

With a credential attached, the reply body is not returned, stored or shown, only the status code. Some services repeat the request headers in their reply, and the key must not come back to the workflow.

A credential that was deleted, or that belongs to another account, fails the node. The node never sends a request without its key.

## Exported workflows

A workflow export or a template never contains a credential. When someone imports the workflow, the Webhook Output node arrives without a credential, and the importer chooses their own. Credentials are managed in the Nodaro app only.

## Tips
- **Test the address first.** Point the node at a request-inspection service while you build, and check the body before you connect your real endpoint.
- **Match the receiver's names.** Name the parameters exactly as the receiving service expects them.
- **Start runs from outside.** Pair Webhook Output with a [Webhook Trigger](https://nodaro.ai/docs/nodes/automate/webhook-trigger) or a [Schedule Trigger](https://nodaro.ai/docs/nodes/automate/schedule-trigger) for a workflow that runs without anyone in the editor.
- **Keep a copy.** Connect the same result to [Save to Storage](https://nodaro.ai/docs/nodes/publish/save-to-storage) as well.

## Troubleshooting
**The node failed after the request.** The receiving address answered with an error. The status code appears under **Last run**, and the error appears in the run history.

**The request is refused before it is sent.** Check the address. A URL that points to a private or local network address is refused. When a credential is attached, the URL must also match the credential's locked address.

**The panel warns that the URL is not the locked address.** The credential is locked to a different address, for example after an import. Click **Use the locked address**, or choose another credential.

**The node works when you run it, but fails in a published app or on a triggered run.** The credential is not locked to an address. Lock it to the node's address in **Integrations**, then run again.

## Frequently asked questions

### What does Webhook Output send?

An HTTP POST request with a JSON body. With parameters, each parameter's name is a key and the connected node's value is its value, for example a video URL. Without parameters, all connected data is sent as one payload.

### How do I send an API key or a token with the webhook?

Save the key once as a credential under Integrations, with a header name such as Authorization and its secret value. Then choose it in the node's Credential menu. The secret stays on the server and is never part of the workflow.

### Why is my credential refused on a published app or a shared workflow?

A credential that is not locked to an address works only on runs you start yourself. Lock it to the address the node sends to, and it works on published apps, shared workflows and triggered runs too.

### Why can I not see the reply from the server?

When a credential is attached, Nodaro does not return, store or show the reply, only its status code, because some servers repeat the request headers, including the key, in their reply.

### Does Webhook Output cost credits?

No. Sending a webhook is free. You pay only for the nodes that made the results.
