45 lines
1.1 KiB
Markdown
45 lines
1.1 KiB
Markdown
# Notifications
|
|
|
|
Real-time notification infrastructure with WebSocket delivery and
|
|
optional email transport.
|
|
|
|
### CRUD
|
|
|
|
```
|
|
GET /notifications → paginated list
|
|
GET /notifications/unread-count → { "count": 5 }
|
|
PATCH /notifications/:id/read → mark one as read
|
|
POST /notifications/mark-all-read → mark all as read
|
|
DELETE /notifications/:id
|
|
```
|
|
|
|
Notification object:
|
|
|
|
```json
|
|
{
|
|
"id": "uuid",
|
|
"user_id": "uuid",
|
|
"type": "role.fallback|memory.extracted|system.announcement|...",
|
|
"title": "Role Fallback Triggered",
|
|
"body": "Primary model unavailable, using fallback",
|
|
"metadata": {},
|
|
"read": false,
|
|
"created_at": "..."
|
|
}
|
|
```
|
|
|
|
### Preferences
|
|
|
|
Users control per-type delivery:
|
|
|
|
```
|
|
GET /notifications/preferences → { "preferences": [...] }
|
|
PUT /notifications/preferences/:type ← { "in_app": true, "email": false }
|
|
DELETE /notifications/preferences/:type → reset to default
|
|
```
|
|
|
|
Resolution: specific type pref → user wildcard `*` pref → system
|
|
default (`in_app=true`, `email=false`).
|
|
|
|
---
|