Skip to main content

Payload

Every call is a POST with Content-Type: application/json:

{
"schemaVersion": 1,
"deliveryId": "5b0c8d4e-…",
"webhookId": "9f1e2c3a-…",
"projectId": "3f1c2d4e-…",
"createdAt": "2026-09-23T10:15:00+00:00",
"customData": { "board": 42 },
"changes": [
{
"type": "item.created", "eventId": "…", "timestamp": "2026-09-23T10:14:58Z", "actorId": "u-1",
"itemId": "…", "itemType": "Chart", "parentId": "…"
},
{ "type": "item.updated", "eventId": "…", "timestamp": "…", "actorId": "u-1", "itemId": "…" },
{ "type": "item.deleted", "eventId": "…", "timestamp": "…", "actorId": "u-1", "itemId": "…" },
{ "type": "user.added", "eventId": "…", "timestamp": "…", "actorId": "u-2", "userId": "u-7", "role": "Contributor" },
{
"type": "user.roleChanged", "eventId": "…", "timestamp": "…", "actorId": "u-2",
"userId": "u-7", "role": "Manager", "previousRole": "Contributor"
},
{
"type": "user.removed", "eventId": "…", "timestamp": "…", "actorId": "u-2",
"userId": "u-7", "previousRole": "Manager"
}
]
}
FieldDescription
schemaVersionIncreases only on breaking changes. New fields can appear at any time; ignore unknown fields.
deliveryIdIdentifies the delivered changes: unchanged when the call is retried or the same changes are delivered again. Also sent as the Webhook-Id header.
webhookId, projectIdCheck that both match the webhook you registered.
createdAtWhen the delivery was created.
customDataYour customData, unchanged. Omitted if you did not set any.
changesUp to 500 changes, in the order they happened.
changes[].typeOne of the event types.
changes[].eventIdThe change's event. Together with type and itemId or userId it identifies a change.
changes[].timestampWhen the change happened (UTC).
changes[].actorIdThe user who made the change.
itemIdThe changed item (item.*).
itemTypeChart, Presentation, PresentationStep, PresentationSubStep, CommentThread, CommentPost, Resource, Voting, … (only on item.created).
parentIdThe item the new item was created in (only on item.created).
userIdThe member the change is about (user.*).
role, previousRoleViewer, Contributor, Manager or Admin.

Users are identified by id only. Look up names through the API if you need them.

The test endpoint sends a single change { "type": "ping" }.