Skip to content

HTTP API / Notifications

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.

MethodPathSummary
GET/api/v1/me/notification-subscriptionsThe caller's channels (in-app, email, daily digest) per notification type in a workspace; defaults where unset.
PUT/api/v1/me/notification-subscriptionsSave the caller's channels for some notification types in a workspace.
GET/api/v1/me/notificationsThe caller's inbox, newest first, with the unread count; cursor paging.
POST/api/v1/me/notifications:read-allMark every unread notification of the caller as read.
POST/api/v1/me/notifications/{notificationId}:readMark one of the caller's notifications as read.
GET/api/v1/workspaces/{workspaceId}/notification-channelsThe workspace's notification channels (never their URLs or secrets).
POST/api/v1/workspaces/{workspaceId}/notification-channelsAdd 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-secretReplace a webhook's signing secret; the new one is in this response only.
POST/api/v1/workspaces/{workspaceId}/notification-channels/{channelId}:testQueue a test message to the channel; watch the delivery log or the job.
GET/api/v1/workspaces/{workspaceId}/notification-channels/{channelId}/deliveriesThe channel's delivery log, newest first (status codes and Keel errors only).

GetMyNotificationSubscriptions ​

http
GET /api/v1/me/notification-subscriptions

The caller's channels (in-app, email, daily digest) per notification type in a workspace; defaults where unset.

ParameterInTypeRequiredNotes
workspaceIdqueryuuidyes
StatusDescriptionBody
200OKNotificationSubscriptionDto[]

UpdateMyNotificationSubscriptions ​

http
PUT /api/v1/me/notification-subscriptions

Save the caller's channels for some notification types in a workspace.

Request body (application/json): UpdateNotificationSubscriptionsRequest

FieldTypeNotes
itemsNotificationSubscriptionInput[]
workspaceIduuid
StatusDescriptionBody
204No Content—

GetMyNotifications ​

http
GET /api/v1/me/notifications

The caller's inbox, newest first, with the unread count; cursor paging.

ParameterInTypeRequiredNotes
cursorquerystringno
limitqueryint32no
unreadOnlyquerybooleanno
StatusDescriptionBody
200OKNotificationInboxDto

Response 200: NotificationInboxDto

FieldTypeNotes
itemsNotificationDto[]
nextCursorstring?
unreadCountint32

MarkAllNotificationsRead ​

http
POST /api/v1/me/notifications:read-all

Mark every unread notification of the caller as read.

StatusDescriptionBody
204No Content—

MarkNotificationRead ​

http
POST /api/v1/me/notifications/{notificationId}:read

Mark one of the caller's notifications as read.

ParameterInTypeRequiredNotes
notificationIdpathuuidyes
StatusDescriptionBody
204No Content—

ListNotificationChannels ​

http
GET /api/v1/workspaces/{workspaceId}/notification-channels

The workspace's notification channels (never their URLs or secrets).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKNotificationChannelDto[]

CreateNotificationChannel ​

http
POST /api/v1/workspaces/{workspaceId}/notification-channels

Add a Slack, Teams or webhook channel. A webhook's signing secret is in this response only.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): CreateNotificationChannelRequest

FieldTypeNotes
eventTypesstring[]Notification types the channel receives (the subscribable types).
kindChannelKindOne of Slack, Teams, Webhook
namestring
urlstringThe incoming-webhook URL. Write-only: stored in the secret store, never returned or logged.
StatusDescriptionBody
201CreatedNotificationChannelCreatedDto

Response 201: NotificationChannelCreatedDto

FieldTypeNotes
iduuid
signingSecretstring?

GetNotificationChannel ​

http
GET /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}

One notification channel (never its URL or secret).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
channelIdpathuuidyes
StatusDescriptionBody
200OKNotificationChannelDto

Response 200: NotificationChannelDto

FieldTypeNotes
createdAtdate-time
enabledboolean
eventTypesstring[]
hasSigningSecretboolean
iduuid
kindChannelKindOne of Slack, Teams, Webhook
lastDeliveryAtdate-time?
lastDeliveryStatusstring?
namestring
urlHintstring
workspaceIduuid

UpdateNotificationChannel ​

http
PUT /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}

Rename, choose events, turn on/off, or replace the URL (write-only).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
channelIdpathuuidyes

Request body (application/json): UpdateNotificationChannelRequest

FieldTypeNotes
enabledboolean
eventTypesstring[]
namestring
urlstring?A new webhook URL (write-only); omit to keep the current one.
StatusDescriptionBody
204No Content—

DeleteNotificationChannel ​

http
DELETE /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}

Remove a channel; its URL and secret are deleted from the secret store.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
channelIdpathuuidyes
StatusDescriptionBody
204No Content—

RotateNotificationChannelSecret ​

http
POST /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}:rotate-secret

Replace a webhook's signing secret; the new one is in this response only.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
channelIdpathuuidyes
StatusDescriptionBody
200OKChannelSigningSecretDto

Response 200: ChannelSigningSecretDto

FieldTypeNotes
signingSecretstring

TestNotificationChannel ​

http
POST /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}:test

Queue a test message to the channel; watch the delivery log or the job.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
channelIdpathuuidyes
StatusDescriptionBody
202AcceptedChannelTestQueuedDto

Response 202: ChannelTestQueuedDto

FieldTypeNotes
deliveryIduuid
jobIduuid

ListNotificationChannelDeliveries ​

http
GET /api/v1/workspaces/{workspaceId}/notification-channels/{channelId}/deliveries

The channel's delivery log, newest first (status codes and Keel errors only).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
channelIdpathuuidyes
limitqueryint32no
StatusDescriptionBody
200OKChannelDeliveryDto[]

Anchor Keel is a working product name: one platform, a shared core and licensed modules (Keel Semantic, Keel Migrate). Documentation built from the repository — facts are derived from code, ADRs and the decisions log.