List notifications
/notificationsList notifications addressed to the authenticated user, newest first. Deleted notifications are excluded. With `unreadFirst=true`, unread notifications come first and are ordered newest-first within that group (useful for a header dropdown).
| Auth | Login required |
|---|
Query parameters
limitnumberNumber of items to return. Defaults to 10.
offsetnumberNumber of items to skip. Defaults to 0.
isReadbooleanFilter by read state (true / false). Both when omitted.
typestringFilter by notification type (e.g. NEW_MESSAGE, EVENT_ANNOUNCEMENT).
sincestringOnly return notifications created at or after this timestamp (ISO 8601).
unreadFirstbooleanPut unread notifications first when true.
Notes
Notifications carry no rendered text. Pick a message template from `type` and interpolate `messageParams` on the client to localize.
`metadata` carries the values needed to build a link (`roomId`, `eventId`, `eventSlug`, `communityId`, `communitySlug`, `announcementId`, …). Which keys are present depends on the notification type.
`total` and `unreadCount` reflect the same filters (including `since`). Pass the same `since` to both the badge and the list to keep the counts consistent.
Response
| Field | Type | Description |
|---|---|---|
notifications | Notification[] | Notifications. |
total | number | Total number of notifications matching the filters. |
unreadCount | number | Unread count under the same filters. |
curl https://api.4s.link/notifications \-H "Authorization: Bearer 4s_at_..."
{"notifications": [{"id": "5f2a1c40-...","userId": "9c3b7e21-...","type": "EVENT_ANNOUNCEMENT","messageParams": {"eventName": "4S Conference 2026","announcementTitle": "受付開始時刻のお知らせ"},"isRead": false,"relatedId": "0b6d4f88-...","metadata": {"eventId": "0b6d4f88-...","eventSlug": "4s-conference-2026","announcementId": "7ae2c915-..."},"createdAt": "2026-08-19T02:30:00.000Z","updatedAt": "2026-08-19T02:30:00.000Z"}],"total": 34,"unreadCount": 3}