> For the complete documentation index, see [llms.txt](https://docs.rootcause.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rootcause.ai/more-details/applications/application-modules/sendnotification.md).

# Send Notification

> Post an alert to Slack or a webhook when an upstream branch fires.

Posts a message to a webhook or a Slack channel when the flow reaches it.

Every in-port is required, which is what makes this fire only when something upstream actually emitted: a Conditional branch that did not match never produces its port, so the alert never sends. Unconnected ports are invisible to that check, which is why three kinds can coexist here — wire the one that suits, leave the others alone.

## At a glance

|                          |                        |
| ------------------------ | ---------------------- |
| Module type              | `SendNotification`     |
| Category                 | Outputs                |
| Default tier             | `durable`              |
| Runs on                  | `reactive`, `durable`  |
| Starts a flow            | no                     |
| Holds a body             | no                     |
| Keeps state between runs | no                     |
| Available in             | every application type |

## Parameters

### `channel`

`NotificationChannel` · required · defaults to `"webhook"`

Post to a raw webhook, or to Slack.

### `targetUrl`

`string` · required · defaults to `""`

The webhook or Slack URL to post to; it must resolve to a public address (egress guard).

### `messageTemplate`

`string` · required · defaults to `""`

The message; `{{...}}` interpolates from whichever in-port is wired.

### `includePayload`

`boolean` · required · defaults to `false`

Send the `payload` port's JSON alongside the rendered message.

### `timeoutSeconds`

`number` · required · defaults to `15`

Seconds to wait for the channel to accept the message.

### `credentialSlotId`

`string` · optional

The slot holding the channel's credentials, when it needs any.

## Inputs

| Port      | Kind        | Required | Description                                                                                                                           |
| --------- | ----------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `on`      | `event`     | no       | Implicit on every module that does not itself start a flow: wire an event here to make this module the start of what that event runs. |
| `data`    | `dataframe` | yes      | Rows to render into `messageTemplate`.                                                                                                |
| `payload` | `json`      | yes      | A JSON body to render, or to send as-is when `includePayload` is set.                                                                 |
| `trigger` | `signal`    | yes      | A bare signal, for when the message needs no input at all.                                                                            |

## Outputs

| Port     | Kind   | Connects to                | Description                                                               |
| -------- | ------ | -------------------------- | ------------------------------------------------------------------------- |
| `result` | `json` | `json`, `scalar`, `signal` | What the channel answered, so a failure to deliver is visible in the run. |

***

[← All application modules](/more-details/applications/application-modules.md)
