Notifications
REST endpoints for notifications. Bearer-auth required.
GET /api/notifications
List notifications.
Query parameters
limit(optional): Page size (1–100, default 100).after(optional): Keyset cursor — return the page after this row (next page).before(optional): Keyset cursor — return the page before this row (prev page).ids(optional): Comma-separated list of IDs. Narrows results to these IDs within the caller's accessible scope (does not bypass access checks).filter(optional): Nested filter expression (<Entity>Filter): AND/OR/NOT + per-field comparison operators + relation traversal. JSON-encoded on the query string.orderBy(optional): Multi-key sort (<Entity>OrderBy[]): array of{ field: direction }applied in order. Directions: asc/desc plus the four explicit nulls variants. JSON-encoded on the query string.workspace_id(optional): Filter notifications to this workspace.read(optional): Filter by read/unread state.include_deleted(optional): Soft-deleted notification visibility.false(default) — active rows only.true— active plus soft-deleted.only— soft-deleted only (trash view).user_id(optional): Shorthand: filter whereuserIdequals this value.type(optional): Shorthand: filter wheretypeequals this value.
Response
JSON
{
"data": [
{
"id": "<...>",
"userId": "<...>",
"workspaceId": "<...>",
"type": "<...>",
"title": "<...>",
"body": "<...>",
"data": "<...>",
"read": "<...>",
"readAt": "<...>",
"createdAt": "<...>"
}
],
"pageInfo": {
"total": "number",
"hasNextPage": "boolean",
"hasPreviousPage": "boolean",
"startCursor": "string",
"endCursor": "string"
}
}GET /api/notifications/{id}
Get a notification by ID.
Path parameters
id(required): Notification to retrieve.
Response
JSON
{
"id": "string",
"userId": "string",
"workspaceId": "string",
"type": "info | warning | error | success",
"title": "string",
"body": "string",
"data": {},
"read": "boolean",
"readAt": "string",
"createdAt": "string"
}DELETE /api/notifications/{id}
Soft-delete a notification.
Path parameters
id(required): Notification to soft-delete.
Response
JSON
{
"success": "boolean"
}DELETE /api/notifications/{id}/purge
Permanently delete a soft-deleted notification.
Path parameters
id(required): Soft-deleted notification to permanently delete.
Response
JSON
{
"success": "boolean"
}PUT /api/notifications/{id}/read
Mark notification as read
Path parameters
id(required): The notification's prefixed ID (e.g.ntf_...).
Response
JSON
{
"id": "string",
"userId": "string",
"workspaceId": "string",
"type": "info | warning | error | success",
"title": "string",
"body": "string",
"data": {},
"read": "boolean",
"readAt": "string",
"createdAt": "string"
}POST /api/notifications/{id}/restore
Restore a notification.
Path parameters
id(required): Soft-deleted notification to restore.
Response
JSON
{
"id": "string",
"userId": "string",
"workspaceId": "string",
"type": "info | warning | error | success",
"title": "string",
"body": "string",
"data": {},
"read": "boolean",
"readAt": "string",
"createdAt": "string"
}PUT /api/notifications/read-all
Mark all notifications as read
Response
JSON
{
"ok": "boolean"
}GET /api/notifications/unread-count
Get unread count
Returns the number of unread notifications for the caller.
Response
JSON
{
"count": "number"
}