Skip to main content

Webhooks

Webhooks let external systems react when work changes in Kanera.

Use webhooks when another system should know about changes without polling the API constantly. Common examples include:

  • Send important card activity to chat.
  • Update an external dashboard.
  • Sync changed cards to another system.
  • Trigger deployment or review workflows.
  • Record Kanera activity in an audit system.

Create webhook endpoints from Workspace settings -> API.

Workspace API settings showing webhook configuration.

Each webhook destination can receive all events or only selected event types. Leave eventTypes empty to receive every event, or provide one or more of the event type strings below.

Webhook event types

The public API exposes the current list at:

https://api.kanera.app/webhook-event-types

For self-hosted installs, open /webhook-event-types on your public API service.

AreaEvent types
Listslist:created, list:updated, list:moved, list:rebalanced, list:deleted
Custom fieldscustomField:created, customField:updated, customField:moved, customField:rebalanced, customField:deleted
Custom field optionscustomFieldOption:created, customFieldOption:updated, customFieldOption:moved, customFieldOption:rebalanced, customFieldOption:deleted
Cardscard:created, card:updated, card:moved, card:rebalanced, card:deleted
Card custom fieldscard:customFieldValue:set, card:customFieldValue:cleared
Card labels and assigneescard:labels:set, card:assignees:set
Card attachmentscard:attachment:created, card:attachment:deleted
Card checklistscard:checklist:created, card:checklist:updated, card:checklist:moved, card:checklist:rebalanced, card:checklist:deleted
Card checklist itemscard:checklistItem:created, card:checklistItem:updated, card:checklistItem:moved, card:checklistItem:rebalanced, card:checklistItem:deleted
Workspace card labelscardLabel:created, cardLabel:updated, cardLabel:moved, cardLabel:rebalanced, cardLabel:deleted
Commentscomment:created, comment:updated, comment:deleted
Comment reactionscomment:reaction:added, comment:reaction:removed
Card feedcard:feedItem:created, card:feedItem:updated, card:feedItem:deleted
Boardsboard:created, board:updated, board:moved, board:rebalanced, board:deleted
Board membersboard:member:added, board:member:removed
Workspacesworkspace:updated, workspace:deleted
Workspace membersworkspace:member:added, workspace:member:updated, workspace:member:removed
Usersuser:profile:updated
Notesnote:created, note:updated, note:moved, note:rebalanced, note:deleted, note:locked, note:unlocked

Payload format

Kanera sends each webhook as a JSON object with a stable envelope and event-specific data.

FieldMeaning
idUnique webhook event id. This matches X-Kanera-Event-Id.
typeEvent type, such as card:created.
workspaceIdWorkspace where the event occurred.
boardIdBoard where the event occurred, when the event is board-scoped.
cardIdCard involved in the event, when the event payload identifies a card.
occurredAtISO 8601 timestamp for when the event occurred.
dataFull event payload. The shape depends on type and matches the corresponding realtime event payload.

Example card:created payload:

{
"id": "7e5c982a-e6c9-4ea7-9647-b14fe73ed50a",
"type": "card:created",
"workspaceId": "a069fd45-3bb3-4928-bac9-cb574a050d20",
"boardId": "48a52a55-763e-4c64-8a76-51ac56247f5c",
"cardId": "70c39cef-1aec-44e6-a8f5-f36f765a818d",
"occurredAt": "2026-05-28T12:34:56.000Z",
"data": {
"boardId": "48a52a55-763e-4c64-8a76-51ac56247f5c",
"card": {
"id": "70c39cef-1aec-44e6-a8f5-f36f765a818d",
"boardId": "48a52a55-763e-4c64-8a76-51ac56247f5c",
"listId": "3bb3c1b3-8fc7-4807-854d-2d5ff62df147",
"title": "Prepare kickoff agenda",
"position": "1000.0000000000"
}
}
}

Webhook delivery

Kanera sends webhook deliveries as JSON and includes headers you can use to verify the request:

HeaderMeaning
X-Kanera-Event-IdUnique event id.
X-Kanera-TimestampUnix timestamp in seconds.
X-Kanera-Signaturesha256= plus an HMAC-SHA256 signature.

The signature is calculated over:

${timestamp}.${rawBody}

using the webhook endpoint secret.

Webhook deliveries are retried when the endpoint returns a non-2xx status or cannot be reached. Kanera records delivery history so you can review failures, retry deliveries, pause destinations, and rotate secrets from the workspace API settings.

Verify webhook signatures

Verify the signature before trusting the payload:

import crypto from "node:crypto";
import express from "express";

const app = express();

app.post("/kanera/webhook", express.raw({ type: "application/json" }), (req, res) => {
const timestamp = req.header("X-Kanera-Timestamp") ?? "";
const signature = req.header("X-Kanera-Signature") ?? "";
const expected = "sha256=" + crypto
.createHmac("sha256", process.env.KANERA_WEBHOOK_SECRET!)
.update(`${timestamp}.${req.body.toString("utf8")}`)
.digest("hex");

if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send("invalid signature");
}

const event = JSON.parse(req.body.toString("utf8"));
// Handle event.type, event.workspaceId, event.boardId, event.cardId, and event.data.
res.sendStatus(204);
});

Always verify against the raw request body. If your framework parses JSON before verification, the signature check may fail or become unreliable.