---
title: "List the caller's notifications"
method: GET
path: "/v1/me/notifications"
tags: ["Notifications"]
---

# List the caller's notifications

`GET /v1/me/notifications`

## Request

- Base URL: `https://api.subscriby.net`
- URL: `https://api.subscriby.net/v1/me/notifications`
- Auth: HTTP bearer

```bash
curl "https://api.subscriby.net/v1/me/notifications?unread=1&class=support" \
  -H "Authorization: Bearer $SUBSCRIBY_TOKEN"
```

Newest first, paginated with `page` and `per_page` like every list. `unread=1` narrows to entries not yet read (`unread=0` to the ones already read); `class` narrows to one class; `q` to entries whose title or body contains the words.

- `class` is the alert class the creator routes on **Settings → Notifications**: `sales`, `support`, `recovery`, `billing`, `security`, `passes` or `onboarding`; `class_label` is its name in the creator's language.
- `title` and `body` are the alert's heading and one sentence of context, the same words the email used, in the creator's language at the time it was sent.
- `route` and `params` name the dashboard screen the entry opens, as a named route and its parameters, for a client that maps routes to screens; `url` is the same place resolved, for a client that does not. All three are `null` when the alert points nowhere.
- `read` is whether the creator opened it; `read_at` says when.

Every creator alert is written to the notification centre beside whatever else it sends (the email, the message on a connected account the creator routed it to on **Settings → Notifications**). The entry is shaped from the alert's email: its subject becomes the title, its first line the body, its call to action the route and URL. There is no webhook for a new entry; the alerts that matter to an integration already fire their own events (`recovery.*`, `connector.*`, `support.*`), and a Zap that wants the inbox itself polls the `notification_received` trigger.

## Query parameters

- `unread` boolean, nullable
- `class` 'sales' | 'support' | 'recovery' | 'billing' | 'security' | 'passes' | 'onboarding' | 'partner' | 'retention': The families a creator's notifications fall into, for routing. A creator picks where each class goes; the router reads their alert destinations by class. The critical classes always also go out by email, whatever the creator picked, because they are the ones that arrive when the connector the creator would otherwise read them on has just failed.
- `q` string, nullable
- `page` integer
- `per_page` integer
- `sort_by` string
- `sort_direction` 'asc' | 'desc'

## Response `200`

The page, newest first.

- object
  - `data` NotificationResource[], required: The items on this page.
    - `id` string, required: The entry's id, the value the mark-read endpoint takes.
    - `class` string, required: The alert class the creator routes on Settings → Notifications: `sales`, `support`, `recovery`, `billing`, `security`, `passes` or `onboarding`.
    - `class_label` 'Sales' | 'Support' | 'Recovery' | 'Billing' | 'Security' | 'Passes' | 'Onboarding' | 'Partner Program' | 'Revenue Recovery', required: The class's name in the creator's language.
    - `title` string, required: The alert's heading, the same words the email used, in the creator's language at the time it was sent.
    - `body` string, required: One sentence of context, the email's first line.
    - `route` string, nullable, required: The dashboard screen the entry opens, as a named route, for a client that maps routes to screens; null when the alert points nowhere.
    - `params` object, required: The named route's parameters; null when the alert points nowhere.
    - `url` string, nullable, required: The same place resolved to a URL, for a client that does not map routes; null when the alert points nowhere.
    - `read` boolean, required: Whether the creator opened the entry.
    - `read_at` string, nullable, required: When it was opened, ISO 8601; null while unread.
    - `created_at` string, nullable, required: When the alert arrived, ISO 8601.
  - `links` object, required: Links to the first, last, previous and next pages.
    - `first` string, nullable, required: The first page's URL.
    - `last` string, nullable, required: The last page's URL.
    - `prev` string, nullable, required: The previous page's URL; null on the first page.
    - `next` string, nullable, required: The next page's URL; null on the last page.
  - `meta` object, required: The paging counters for this page.
    - `current_page` integer, required: The page returned, 1-indexed.
    - `from` integer, nullable, required: The 1-indexed position of this page's first item across every page; null when the page is empty.
    - `last_page` integer, required: How many pages there are.
    - `links` object[], required: Generated paginator links.
      - `url` string, nullable, required: The page's URL; null for the ellipsis and the disabled arrows.
      - `label` string, required: The link's label: a page number, the previous or next arrow, or an ellipsis.
      - `active` boolean, required: Whether this link is the current page.
    - `path` string, nullable, required: Base path for paginator generated URLs.
    - `per_page` integer, required: Number of items shown per page.
    - `to` integer, nullable, required: Number of the last item in the slice.
    - `total` integer, required: Total number of items being paginated.

## Other responses

- `401`: `AUTHENTICATION_REQUIRED`: the request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an `sbt_test_` token on production).
- `403`: `TOKEN_MISSING_ABILITY`: the token is valid but does not carry the ability this endpoint requires; `error.context.required_ability` names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers `FORBIDDEN`, `TEAM_TIER_REQUIRED` or `CONNECTOR_TIER_REQUIRED` with the same status, and says so in its own description.
- `422`: `VALIDATION_FAILED`: the payload broke a rule, and `error.fields` maps each offending key to its messages. A refusal from the domain, such as a plan that cannot go on sale or a member who cannot be removed, uses the same code with `error.message` saying why and no `fields`. On this endpoint: `VALIDATION_FAILED`: when `class` is not one of the seven classes.
- `429`: `RATE_LIMITED`: the token has spent its 300 requests a minute or 10,000 an hour; `Retry-After` says when the next one is accepted.

---

[API](https://skmtc.dev/memberpass/apis/subscriby-rest-api.md) · [All operations](https://skmtc.dev/memberpass/apis/subscriby-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/memberpass/apis/subscriby-rest-api/revisions/59c4df91d764?raw)
