---
title: "List Notification Deliveries"
method: GET
path: "/agent_run/{run_id}/notifications"
tags: ["Pipeline Observability"]
---

# List Notification Deliveries

`GET /agent_run/{run_id}/notifications`

## Request

- Base URL: `https://api.mosaic.so`
- URL: `https://api.mosaic.so/agent_run/{run_id}/notifications`
- Auth: HTTP bearer

Page delivery attempts for one run. Use notification_configurations for effective configuration. Delivery without a recorded receipt is unknown; run completion does not prove Slack posting. Email acceptance is not proof of inbox delivery or reading.

## Path parameters

- `run_id` string, uuid, required

## Query parameters

- `limit` integer
- `cursor` string
- `from` string, date-time
- `to` string, date-time
- `updated_from` string, date-time
- `workspace_id` string, uuid
- `event` string
- `channel` string
- `status` string
- `node_id` string, uuid

## Headers

- `X-Workspace-Id` string, uuid

## Response `200`

Current organization-scoped evidence.

- object
  - `deliveries` CanvasNotificationDelivery[]
    - `id` string, uuid, required: Delivery attempt ID.
    - `agent_node_id` string, uuid, required: Runtime tile ID.
    - `event` 'on_start' | 'on_complete' | 'on_error', required
    - `channel` 'slack' | 'email', required
    - `status` 'sending' | 'delivered' | 'failed' | 'skipped', required: Persisted delivery status. delivered requires confirmed Slack root-message acceptance or all intended email recipients accepted; partial email delivery is failed.
    - `destination_id` string, nullable, required: Slack channel ID; null for email. Email addresses are not returned.
    - `provider_message_id` string, nullable, required: Slack message timestamp when confirmed; may be null.
    - `error_message` string, nullable, required: Delivery error details. Partial email failures use a summary without recipient addresses.
    - `created_at` string, date-time, required: Attempt creation time.
    - `updated_at` string, date-time, required: Attempt status update time.
    - `delivered_at` string, date-time, nullable, required: Confirmed provider acceptance time, when available.
  - `next_cursor` string, nullable: Opaque cursor for the next page; null at the end.
  - `run_id` string, uuid: Requested run ID.
  - `historical_delivery_status` 'unknown_without_receipt': No receipt means unknown delivery, including historical runs and journal outages.

## Other responses

- `400`: Invalid UUID, cursor, limit, timestamp, filter, or unsupported updated_from on batch items.
- `401`: Missing, invalid, or revoked API key.
- `403`: Insufficient API key scope, unavailable paid-plan access, or workspace header/query mismatch. Scope errors include code, required_scope, granted_scopes, retryable, and resolution. Other authorization errors retain detail.
- `404`: Requested run, trigger, or batch is absent or outside the authorized organization/workspace.
- `500`: Database or query failure. Never interpret this as an empty successful result; use bounded backoff.

---

[API](https://skmtc.dev/mosaic/apis/mosaic-ai-api.md) - [All operations](https://skmtc.dev/mosaic/apis/mosaic-ai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/mosaic/apis/mosaic-ai-api/revisions/c20e9fc606a4?raw)
