User-facing notifications with endpoints to list, filter, and manage read state. Notifications are stored in the database and delivered alongside email through the same notification classes.
All notifications use a consistent payload: title and body. The client can render any notification type generically. The type field is available if the client needs to differentiate.
GET /account/notifications - paginated list, optional ?read=0 or ?read=1 filter, omit for allPATCH /account/notifications/{notification} - mark read or unread via { "read": true/false }POST /account/notifications/read - mark all as readSingle update is PATCH (modifying a resource). Bulk read is POST (an action). No bulk unread.
Subscription actions (subscribe, swap, cancel, resume) notify the user automatically via both email and database, regardless of whether the user or an admin initiated the change.
New classes go flat in app/Notifications/. Return ['mail', 'database'] from via(), add toArray() with title and body, and put strings in lang/en/notifications.php.