Appearance
Notifications API
13 operations. Paths are relative to the API host (http://localhost:5080 in local development). Every operation accepts an OIDC bearer token (Authorization: Bearer …) or a workspace API key (X-Api-Key: keel_live_…); errors are RFC 9457 Problem Details with a code (error codes). Permissions: matrix.
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/me/notification-subscriptions | The caller's channels (in-app, email, daily digest) per notification type in a workspace; defaults where unset. |
| PUT | /api/v1/me/notification-subscriptions | Save the caller's channels for some notification types in a workspace. |
| GET | /api/v1/me/notifications | The caller's inbox, newest first, with the unread count; cursor paging. |
| POST | /api/v1/me/notifications:read-all | Mark every unread notification of the caller as read. |
| POST | /api/v1/me/notifications/{notificationId}:read | Mark one of the caller's notifications as read. |
| GET | /api/v1/workspaces/{workspaceId}/notification-channels | The workspace's notification channels (never their URLs or secrets). |
| POST | /api/v1/workspaces/{workspaceId}/notification-channels | Add a Slack, Teams or webhook channel. A webhook's signing secret is in this response only. |
| GET | /api/v1/workspaces/{workspaceId}/notification-channels/{channelId} | One notification channel (never its URL or secret). |
| PUT | /api/v1/workspaces/{workspaceId}/notification-channels/{channelId} | Rename, choose events, turn on/off, or replace the URL (write-only). |
| DELETE | /api/v1/workspaces/{workspaceId}/notification-channels/{channelId} | Remove a channel; its URL and secret are deleted from the secret store. |
| POST | /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}:rotate-secret | Replace a webhook's signing secret; the new one is in this response only. |
| POST | /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}:test | Queue a test message to the channel; watch the delivery log or the job. |
| GET | /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}/deliveries | The channel's delivery log, newest first (status codes and Keel errors only). |
GetMyNotificationSubscriptions
http
GET /api/v1/me/notification-subscriptionsThe caller's channels (in-app, email, daily digest) per notification type in a workspace; defaults where unset.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | query | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | NotificationSubscriptionDto[] |
UpdateMyNotificationSubscriptions
http
PUT /api/v1/me/notification-subscriptionsSave the caller's channels for some notification types in a workspace.
Request body (application/json): UpdateNotificationSubscriptionsRequest
| Field | Type | Notes |
|---|---|---|
items | NotificationSubscriptionInput[] | |
workspaceId | uuid |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
GetMyNotifications
http
GET /api/v1/me/notificationsThe caller's inbox, newest first, with the unread count; cursor paging.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
cursor | query | string | no | |
limit | query | int32 | no | |
unreadOnly | query | boolean | no |
| Status | Description | Body |
|---|---|---|
| 200 | OK | NotificationInboxDto |
Response 200: NotificationInboxDto
| Field | Type | Notes |
|---|---|---|
items | NotificationDto[] | |
nextCursor | string? | |
unreadCount | int32 |
MarkAllNotificationsRead
http
POST /api/v1/me/notifications:read-allMark every unread notification of the caller as read.
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
MarkNotificationRead
http
POST /api/v1/me/notifications/{notificationId}:readMark one of the caller's notifications as read.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
notificationId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
ListNotificationChannels
http
GET /api/v1/workspaces/{workspaceId}/notification-channelsThe workspace's notification channels (never their URLs or secrets).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | NotificationChannelDto[] |
CreateNotificationChannel
http
POST /api/v1/workspaces/{workspaceId}/notification-channelsAdd a Slack, Teams or webhook channel. A webhook's signing secret is in this response only.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes |
Request body (application/json): CreateNotificationChannelRequest
| Field | Type | Notes |
|---|---|---|
eventTypes | string[] | Notification types the channel receives (the subscribable types). |
kind | ChannelKind | One of Slack, Teams, Webhook |
name | string | |
url | string | The incoming-webhook URL. Write-only: stored in the secret store, never returned or logged. |
| Status | Description | Body |
|---|---|---|
| 201 | Created | NotificationChannelCreatedDto |
Response 201: NotificationChannelCreatedDto
| Field | Type | Notes |
|---|---|---|
id | uuid | |
signingSecret | string? |
GetNotificationChannel
http
GET /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}One notification channel (never its URL or secret).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
channelId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | NotificationChannelDto |
Response 200: NotificationChannelDto
| Field | Type | Notes |
|---|---|---|
createdAt | date-time | |
enabled | boolean | |
eventTypes | string[] | |
hasSigningSecret | boolean | |
id | uuid | |
kind | ChannelKind | One of Slack, Teams, Webhook |
lastDeliveryAt | date-time? | |
lastDeliveryStatus | string? | |
name | string | |
urlHint | string | |
workspaceId | uuid |
UpdateNotificationChannel
http
PUT /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}Rename, choose events, turn on/off, or replace the URL (write-only).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
channelId | path | uuid | yes |
Request body (application/json): UpdateNotificationChannelRequest
| Field | Type | Notes |
|---|---|---|
enabled | boolean | |
eventTypes | string[] | |
name | string | |
url | string? | A new webhook URL (write-only); omit to keep the current one. |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
DeleteNotificationChannel
http
DELETE /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}Remove a channel; its URL and secret are deleted from the secret store.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
channelId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
RotateNotificationChannelSecret
http
POST /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}:rotate-secretReplace a webhook's signing secret; the new one is in this response only.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
channelId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ChannelSigningSecretDto |
Response 200: ChannelSigningSecretDto
| Field | Type | Notes |
|---|---|---|
signingSecret | string |
TestNotificationChannel
http
POST /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}:testQueue a test message to the channel; watch the delivery log or the job.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
channelId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 202 | Accepted | ChannelTestQueuedDto |
Response 202: ChannelTestQueuedDto
| Field | Type | Notes |
|---|---|---|
deliveryId | uuid | |
jobId | uuid |
ListNotificationChannelDeliveries
http
GET /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}/deliveriesThe channel's delivery log, newest first (status codes and Keel errors only).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
channelId | path | uuid | yes | |
limit | query | int32 | no |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ChannelDeliveryDto[] |