> ## Documentation Index
> Fetch the complete documentation index at: https://codebeans-cb-notifylyst.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Reports & opt-outs

> Opt-outs, the waiting list, the log of sent messages, and your headline numbers.

## Opt-outs

An **opt-out** stops alerts to an email or phone number — for your whole store, or for one variant.
Every send checks it first, whatever channel it was signed up on.

### List opt-outs

`GET /api/v1/unsubscribes` — newest first, with `email`, `phone`, `variant_id`,
`created_from` / `created_to`, `limit` and `cursor`.

```json theme={"system"}
{
  "data": [
    {
      "id": "6731f9aa…",
      "email": "shopper@example.com",
      "phone": null,
      "scope": "all",
      "product_id": null,
      "variant_id": null,
      "source": null,
      "created_at": "2026-11-10T14:02:11.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}
```

`scope` is `all` (the whole store) or `variant`. `source` is `webpush` for an opt-out from a browser.

### Opt someone out

`POST /api/v1/unsubscribes`

| Field | Notes |
| - | - |
| `email` or `phone` | One of the two. Phone in international format. |
| `variant_id` | Optional. Opts out of this variant only. Left out: the whole store. |

```bash theme={"system"}
curl -X POST "https://cb-notifylyst.cblyst.com/api/v1/unsubscribes" \
  -H "X-API-Key: nl_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "email": "shopper@example.com" }'
```

You get `201` for a new opt-out, or `200` with `"already_unsubscribed": true` if the same opt-out
already exists.

> [!WARNING]
>
> An opt-out cannot be removed through the API. Only the shopper can opt back in, from your
> storefront.

## Waiting list

`GET /api/v1/products/waitlist` — variants ranked by how many people are waiting: your restock
shortlist. The same figures as **Most wanted** in the app.

| Query | Notes |
| - | - |
| `created_from` / `created_to` | Sign-ups in this period, read in your store's time zone. Default: the last 30 days. |
| `search` | Product title or SKU. |
| `page` / `limit` | Page number (from 1) and size (1–100). |

```json theme={"system"}
{
  "data": [
    {
      "product_id": "8123456789012",
      "variant_id": "44012345678901",
      "product_title": "Linen Shirt",
      "variant_title": "M / Sand",
      "sku": "LS-M-SND",
      "waiting": 42,
      "quantity_requested": 57
    }
  ],
  "page": 1,
  "limit": 25,
  "total": 18,
  "has_more": false
}
```

## Sent messages

`GET /api/v1/notifications` — restock messages sent to subscribers. Your own alerts, summary
reports and exports are not included.

| Query | Notes |
| - | - |
| `status` | `sent`, `failed` or `pending`. |
| `channel` | `email`, `sms`, `webpush`, `whatsapp`. |
| `subscriber_id` | Every message for one sign-up. |
| `sent_from` / `sent_to` | Send date range. |
| `limit` / `cursor` | See [Paging](https://codebeans-cb-notifylyst.mintlify.site/api/authentication.md#paging). |

```json theme={"system"}
{
  "data": [
    {
      "id": "6732a1b0…",
      "subscriber_id": "6731f0c2…",
      "channel": "email",
      "recipient": "shopper@example.com",
      "status": "sent",
      "campaign_step": 1,
      "product_id": "8123456789012",
      "variant_id": "44012345678901",
      "product_title": "Linen Shirt",
      "variant_title": "M / Sand",
      "sent_at": "2026-11-11T06:00:04.000Z"
    }
  ],
  "has_more": true,
  "next_cursor": "6732a1b0…"
}
```

`campaign_step` is 1 for the first alert and 2–4 for follow-ups.

## Headline numbers

`GET /api/v1/analytics/summary?from=2026-11-01&to=2026-11-30` — the figures at the top of the
app's dashboard. `from` and `to` are read in your store's time zone; default: the last 30 days.

```json theme={"system"}
{
  "data": {
    "from": "2026-11-01",
    "to": "2026-11-30",
    "time_zone": "Asia/Kolkata",
    "signups": 312,
    "notifications_sent": 840,
    "revenue": { "direct": 4120.5, "assisted": 1310, "total": 5430.5, "currency_symbol": "$" }
  }
}
```

For what counts as **direct** and **assisted** revenue, see
[Read your analytics](https://codebeans-cb-notifylyst.mintlify.site/app/guides/read-your-analytics.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.