> For the complete documentation index, see [llms.txt](https://skymerse.gitbook.io/notamify-api/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://skymerse.gitbook.io/notamify-api/notam-watcher/watcher-notam-lifecycle.md).

# Watcher NOTAM Lifecycle

Lifecycle notifications tell you when a NOTAM previously delivered to a listener is later cancelled (`NOTAMC`) or replaced (`NOTAMR`).

## Enable lifecycle notifications

Set `lifecycle.enabled` on a production listener:

```json
{
  "lifecycle": {
    "enabled": true,
    "types": ["CANCELLED", "REPLACED"]
  }
}
```

`types` is optional:

* `CANCELLED` sends cancellation follow-ups.
* `REPLACED` sends replacement follow-ups.
* Omitting `types` enables both.

## When notifications are sent

A lifecycle notification is eligible when:

* the listener is active and in `prod` mode
* lifecycle notifications are enabled
* the listener successfully received the original NOTAM on that delivery channel
* the event type is allowed by `lifecycle.types`

Normal listener filters are not evaluated again. Webhook follow-ups require a successful earlier webhook delivery; email follow-ups require a successful earlier email delivery.

## Webhook payload

```json
{
  "listener_id": "listener-1",
  "kind": "lifecycle",
  "event_id": "event-id",
  "notam": {
    "id": "replacement-notam-id",
    "notam_number": "A1300/26",
    "notam_type": "R"
  },
  "change": {
    "changed_notam_id": "original-notam-id",
    "notam_type": "R"
  },
  "sent_at": "2026-03-06T12:00:00Z"
}
```

For lifecycle payloads:

* `notam` is the cancellation or replacement NOTAM.
* `change.changed_notam_id` identifies the previously delivered NOTAM.
* `change.notam_type` is `C` for cancellation or `R` for replacement.
* `event_id` identifies this delivery event.

See [Watcher API Webhook messages](/notamify-api/notam-watcher/watcher-api-webhook-messages.md) for the complete payload schema.

## Integration notes

* `filters.notam_type` controls normal interpretation deliveries only. It does not enable lifecycle notifications.
* A replacement NOTAM can arrive once as `kind: "lifecycle"` and again as `kind: "interpretation"` if it also matches the listener's normal filters.
* Use `event_id` and `kind` for event identity; do not deduplicate only by `notam.id`.
* Delivery order between lifecycle and interpretation events is not guaranteed.
* Lifecycle notifications do not consume shipment credits.
