Browse the docs

Subscribers

Count and list a page's subscribers with masked destinations, import a list, and delete on request.

Subscribers belong to a page. Destinations are always masked in responses; the raw address is never returned by any endpoint. People subscribe through the public page or the public subscribe endpoint. See the subscribers guide.

List subscribers

GET/user/subscribers

Needs the subscribers.read permission, or an API key with the matching scope.

Query parameters

page_idintegerrequired
The status page to read from.
channelstring
email, sms, telegram, slack, discord, teams or webhook.
quarantinedboolean
true for addresses quarantined after bounces or complaints.
limitintegerdefault 20
Rows per page, up to 100.
offsetintegerdefault 0
Rows to skip.
Request
curl "https://api.statusbee.co/user/subscribers?page_id=4&channel=email" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "rows": [
      {
        "id": 1284,
        "page_id": 4,
        "workspace_id": 5,
        "org_id": 5,
        "channel": "email",
        "destination": "m•••••@acmecorp.com",
        "locale": null,
        "verified_at": "2026-09-14T09:02:11.000Z",
        "quarantined_at": null,
        "created_at": "2026-09-14T09:02:11.000Z"
      },
      {
        "id": 1283,
        "page_id": 4,
        "workspace_id": 5,
        "org_id": 5,
        "channel": "email",
        "destination": "o••@customer-one.example",
        "locale": null,
        "verified_at": "2026-09-14T09:02:11.000Z",
        "quarantined_at": null,
        "created_at": "2026-09-14T09:02:11.000Z"
      }
    ],
    "count": 912,
    "limit": 20,
    "offset": 0
  }
}

Count subscribers

GET/user/subscribers/counts

Needs the subscribers.read permission, or an API key with the matching scope.

Query parameters

page_idintegerrequired
The status page to read from.
Request
curl "https://api.statusbee.co/user/subscribers/counts?page_id=4" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "total": 1284,
    "by_channel": [
      {
        "channel": "email",
        "count": "912"
      },
      {
        "channel": "slack",
        "count": "201"
      },
      {
        "channel": "sms",
        "count": "133"
      },
      {
        "channel": "webhook",
        "count": "38"
      }
    ]
  }
}

Import email subscribers

POST/user/subscribers/import

Up to 1000 addresses per call, treated as already confirmed: you are vouching for their consent. Existing addresses are skipped. Email only.

Needs the subscribers.manage permission, or an API key with the matching scope.

Body

page_idintegerrequired
channelstringrequired
Must be email.
destinationsarrayrequired
Email addresses.
Request
curl -X POST "https://api.statusbee.co/user/subscribers/import" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "page_id": 4,
  "channel": "email",
  "destinations": [
    "ops@customer-one.example",
    "cto@customer-two.example"
  ]
}'
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "imported": 2,
    "failed": []
  }
}

Delete a subscriber

DELETE/user/subscribers/:id

Hard delete, for data-protection requests. No undo.

Needs the subscribers.manage permission, or an API key with the matching scope.

Path parameters

idintegerrequired
Subscriber id.
Request
curl -X DELETE "https://api.statusbee.co/user/subscribers/1284" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "deleted": 1
  }
}