---
title: Delivery history and retries
description: See whether an alert actually arrived — and what Glowo does when a channel is failing.
sidebar:
  label: Delivery history
---

{/* Source of truth: packages/shared/src/routes.ts —
    notifications.deliveries. Retry/circuit-breaker/dead-letter behaviour:
    packages/api/src/notifications/infrastructure/
    notification-delivery-drainer.service.ts */}

"Did the alert actually go out?" is a question you want answered before an
incident, not during one. Every delivery attempt is recorded.

```http
GET /notifications/<channel-id>/deliveries
```

In the dashboard this is the **Deliveries** view on a notification channel.

## What a delivery record tells you

- Which event and which monitor it was for.
- Which attempt this was.
- Whether it succeeded, and the error if not.
- When it happened.

## Retries

A failed delivery is retried. Retries carry the **same** `X-Glowo-Delivery-Id`
and an incremented `X-Glowo-Attempt`, which is why
[webhook receivers must deduplicate](/alerting/webhook) on the delivery ID.

After repeated failures a delivery is dead-lettered — kept, visible, and no
longer retried.

## Circuit breakers

Each channel has its own circuit breaker. When a channel fails persistently,
Glowo stops hammering it and backs off.

This is per channel, so a Slack webhook that has been deleted cannot slow down
or block your email and SMS alerts for the same incident. Channels fan out
independently, and one broken integration never suppresses the others.

## When alerts stop arriving

1. **Check delivery history for that channel**

    If deliveries are being attempted and failing, the problem is between Glowo
    and the provider — a revoked token, a deleted webhook, a changed URL.

2. **If there are no delivery records at all**

    Nothing was ever sent, so the problem is upstream of delivery. Work through
    the list in [How alerting works](/alerting) — unconfirmed failure,
    maintenance window, acknowledgement, event subscription, scoping, or a
    disabled channel.

3. **Send a test**

    The **Test** action uses the real configuration and delivery path, which
    separates "the integration is broken" from "the alert never fired".

:::note
Make testing your channels routine rather than something you do once at setup. A
revoked Slack token or a rotated PagerDuty key is completely silent until the
outage that needed it.
:::
