# Notification channels

> Notification channels are the email addresses and webhooks a project's budget alerts are sent to.

A notification channel is a destination for budget alerts: an email address or a webhook URL. A
channel belongs to a project, and any of that project's budgets can name it in a threshold.

## Alerts by email

An email channel sends each alert as a plain-text message. Before it receives any alert, its owner
must confirm the address. Budgets sends a message with a link, and the channel stays
`pending_confirmation` until someone follows it and selects **Confirm**. This stops anyone from
signing up an address that is not theirs.

The link expires after 72 hours. You can send a new one at most every 10 minutes:

```sh
openstack budget channel confirmation resend finance
```

Budgets does not send alerts to a channel that is not confirmed. It records them as failed
instead.

## Alerts by webhook

A webhook channel sends each alert as a signed JSON `POST` to an HTTPS URL. It is ready
immediately. The URL must be reachable from the internet, and Budgets does not follow redirects.

Budgets signs every request with the channel's secret, which Budgets shows only when you create the
channel or rotate the secret. Verify the signature before you act on an alert. See
[Receive alerts with a webhook](/budgets/guides/receive-webhook-alerts).

## Delivery

Budgets delivers each alert at least once. If a delivery fails, Budgets tries again with
increasing delays for about four hours, then records the alert as failed. A rare retry can deliver
an alert you already received, so each alert carries an `id` that stays the same across attempts.

Check what was sent, and why a delivery failed:

```sh
openstack budget notification list team-monthly
```

## Removing a channel

You cannot delete a channel while a budget's threshold still names it. The API returns
`409 Conflict`. Remove the channel from the budget's thresholds first, then delete it.
