---
title: "List the caller's notification inbox"
method: GET
path: "/me/notifications"
---

# List the caller's notification inbox

`GET /me/notifications`

## Request

- Base URL: `https://craaft.io/api/v1`
- URL: `https://craaft.io/api/v1/me/notifications`
- Auth: HTTP bearer

Returns an envelope, not a bare array: `{"items": [...], "nextBefore":
"<RFC3339Nano>" | null}`. See `NotificationList` for why `nextBefore`
(not the last item's `createdAt`) is the cursor to pass back.

## Query parameters

- `before` string, date-time
- `limit` integer
- `unread` '1'

## Response `200`

OK

- NotificationList: The GET /me/notifications response envelope (not a bare array).
  - `items` NotificationRow[], required
    - `ids` string[], required: Underlying notification ids folded into this row.
    - `kind` 'mention' | 'assigned' | 'comment' | 'moved' | 'updated' | 'group', required: "group" when this row folds together multiple unread comment/moved/updated notifications on one card; otherwise the single underlying kind.
    - `kinds` string[], required: The underlying kind of each id in `ids`, same order.
    - `details` string[], required: Per-notification detail, meaning depends on kind: `"card"` or `"comment"` for mention, `"column"` or `"board"` for moved, an update-kind string for updated, `""` for assigned/comment.
    - `card` NotificationCardRef, required
      - `id` string, uuid, required
      - `title` string, required
      - `projectId` string, uuid, required
      - `projectName` string, required
      - `archived` boolean, required
    - `actors` NotificationActor[], required: Distinct actors behind this row's notification(s), in the order first seen.
      - `id` string, uuid, required
      - `name` string, required
    - `excerpt` string: Comment body or similar context, truncated to 280 characters. Omitted when there's nothing to show.
    - `count` integer, required: Number of underlying notifications folded into this row (1 unless kind is "group").
    - `createdAt` string, date-time, required: For a group, the newest member's timestamp, not the oldest. Not a pagination cursor - see `nextBefore` on GET /me/notifications.
    - `seen` boolean, required
    - `read` boolean, required
  - `nextBefore` string, date-time, nullable, required: Cursor for the next page - pass back as `?before=`. Null when there's nothing older to fetch. This is the `createdAt` of the OLDEST raw notification fetched for this page, before grouping - grouping can make a page hold fewer than `limit` items, so the last item's `createdAt` is NOT a usable cursor (it can be a group's newest member, and re-fetching from it would re-show rows already returned).

## Other responses

- `400`: `before` isn't a valid RFC3339 time
- `401`: Missing or invalid token

---

[API](https://skmtc.dev/craaft/apis/craaft-api.md) · [All operations](https://skmtc.dev/craaft/apis/craaft-api/llms.txt) · [OpenAPI document](https://skmtc.dev/craaft/apis/craaft-api/revisions/3a1e9d30d7dc?raw)
