Webhooks Reference

Every subscribable team webhook event generated directly from Kanorio's notification event registry, including envelope format, HMAC-SHA256 verification headers, and sample data payloads.

All webhook POST requests share the same outer JSON envelope and carry HMAC-SHA256 signature headers.
  • X-Kanorio-Signature: t=<unix_seconds>,v1=<hex_hmac_sha256> computed over <t>.<raw_body> using your endpoint's whsec_ signing secret (during secret rotation, a second v1= is appended for 24 hours).
  • X-Kanorio-Event: Event key (e.g. collections.item.published).
  • X-Kanorio-Delivery: Unique delivery ID (id in the body) for idempotency deduplication.
  • Retry policy: Non-2xx responses or timeouts (10 s) are retried up to 6 times with exponential backoff. Endpoints that fail consecutively for 7 days are automatically paused.
Envelope example
{
  "id": "ntf_01j8x9m2k4p7q8w3",
  "event": "collections.item.published",
  "createdAt": "2026-10-21T08:30:00.000Z",
  "website": {
    "id": "ws_01",
    "name": "Sunny Bakery"
  },
  "title": "Collection item published: Sourdough Guide",
  "summary": "blog/sourdough-guide (published)",
  "actionUrl": "https://app.kanorio.com/data/blog",
  "data": {
    "collectionId": "col_01",
    "collectionKey": "blog",
    "itemId": "item_01",
    "slug": "sourdough-guide",
    "status": "published",
    "publicVersion": "1729500000000",
    "cacheTags": ["site:ws_01", "collection:blog", "item:item_01"]
  }
}

Subscribable Events (23)

Subscribe to specific events via /settings/webhooks or the Agent API (webhooks.create / webhooks.update_events).
collections.item.created
collections:manageFilter: collectionKeys

Fired when a collection item is created (includes publicVersion and cacheTags).

data payload example
{
  "collectionId": "col_01",
  "collectionKey": "blog",
  "itemId": "item_01",
  "slug": "hello-world",
  "status": "published",
  "publishedFieldData": {
    "title": "Hello World"
  },
  "channel": "agent",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "collection:blog",
    "item:item_01"
  ]
}
collections.item.updated
collections:manageFilter: collectionKeys

Fired when a collection item draft or published payload is updated.

data payload example
{
  "collectionId": "col_01",
  "collectionKey": "blog",
  "itemId": "item_01",
  "slug": "hello-world",
  "status": "published",
  "publishedFieldData": {
    "title": "Hello World"
  },
  "channel": "agent",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "collection:blog",
    "item:item_01"
  ]
}
collections.item.published
collections:manageFilter: collectionKeys

Fired when a collection item is published and visible on the Content Delivery API.

data payload example
{
  "collectionId": "col_01",
  "collectionKey": "blog",
  "itemId": "item_01",
  "slug": "hello-world",
  "status": "published",
  "publishedFieldData": {
    "title": "Hello World"
  },
  "channel": "agent",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "collection:blog",
    "item:item_01"
  ]
}
collections.item.unpublished
collections:manageFilter: collectionKeys

Fired when a collection item is unpublished and removed from the Content Delivery API.

data payload example
{
  "collectionId": "col_01",
  "collectionKey": "blog",
  "itemId": "item_01",
  "slug": "hello-world",
  "status": "published",
  "publishedFieldData": {
    "title": "Hello World"
  },
  "channel": "agent",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "collection:blog",
    "item:item_01"
  ]
}
collections.item.deleted
collections:manageFilter: collectionKeys

Fired when a collection item is permanently deleted.

data payload example
{
  "collectionId": "col_01",
  "collectionKey": "blog",
  "itemId": "item_01",
  "slug": "hello-world",
  "status": "published",
  "publishedFieldData": {
    "title": "Hello World"
  },
  "channel": "agent",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "collection:blog",
    "item:item_01"
  ]
}
collections.items.bulkChanged
collections:manageFilter: collectionKeys

Fired once per batch operation (bulkCreate, bulkUpdate, publish/unpublish batch, or CSV/JSON import).

data payload example
{
  "collectionId": "col_01",
  "collectionKey": "blog",
  "operation": "published",
  "itemIds": [
    "item_01",
    "item_02"
  ],
  "count": 2,
  "channel": "agent",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "collection:blog"
  ]
}
collections.schema.changed
collections:manageFilter: collectionKeys

Fired when a collection or its field schema is created, updated, or deleted (triggers `kanorio types` regeneration).

data payload example
{
  "collectionId": "col_01",
  "collectionKey": "teachers",
  "operation": "updated",
  "addedFieldIds": [
    "linkedin_url"
  ],
  "updatedFieldIds": [],
  "removedFieldIds": [],
  "titleFieldId": "name",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "collection:teachers"
  ]
}
content.site.published
content:edit

Fired when a site is published, invalidating pages, globals, and redirects caches.

data payload example
{
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "pages",
    "globals",
    "redirects"
  ]
}
content.page.published
content:edit

Fired when a page is published on the site.

data payload example
{
  "pageId": "page_01",
  "slug": "/about",
  "previousSlug": "/about-us",
  "pageType": "generic",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "pages",
    "page:page_01",
    "redirects"
  ]
}
content.page.updated
content:edit

Fired when a published page's content or slug is updated (includes previousSlug when renamed).

data payload example
{
  "pageId": "page_01",
  "slug": "/about",
  "previousSlug": "/about-us",
  "pageType": "generic",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "pages",
    "page:page_01",
    "redirects"
  ]
}
content.page.unpublished
content:edit

Fired when a page is unpublished or hidden.

data payload example
{
  "pageId": "page_01",
  "slug": "/about",
  "previousSlug": "/about-us",
  "pageType": "generic",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "pages",
    "page:page_01",
    "redirects"
  ]
}
content.page.deleted
content:edit

Fired when a page is deleted.

data payload example
{
  "pageId": "page_01",
  "slug": "/about",
  "previousSlug": "/about-us",
  "pageType": "generic",
  "publicVersion": "1729500000000",
  "cacheTags": [
    "site:ws_01",
    "pages",
    "page:page_01",
    "redirects"
  ]
}
customers.form.submitted
marketing:manageFilter: formIds

Fired when a visitor submits an online form (notifies team and webhooks).

data payload example
{
  "formId": "form_01",
  "formName": "Contact Us",
  "submissionId": "sub_01",
  "contactId": "cnt_01",
  "answers": {
    "name": "Alex",
    "email": "alex@example.com"
  }
}
customers.sendingDomain.degraded
messaging:settings

Fired when a verified custom sender domain fails DNS verification and campaign sending is paused.

data payload example
{
  "websiteId": "ws_01",
  "eventKey": "customers.sendingDomain.degraded"
}
customers.messagingQuota.alert
billing:manage

Fired when monthly messaging quota is exhausted, auto-upgraded, or add-on billing fails.

data payload example
{
  "websiteId": "ws_01",
  "eventKey": "customers.messagingQuota.alert"
}
customers.teamDestination.disabled
site:integrations

Fired when a team notification destination (webhook or email) is automatically paused after repeated delivery failures.

data payload example
{
  "websiteId": "ws_01",
  "eventKey": "customers.teamDestination.disabled"
}
deliverables.entitlement.granted
customers:manage

Fired when a contact is granted access (Entitlement) to a deliverable or unit.

data payload example
{
  "entitlementId": "ent_01",
  "contactId": "cnt_01",
  "deliverableId": "deliv_01",
  "deliverableKey": "react-course",
  "source": "ORDER_LINE"
}
deliverables.entitlement.revoked
customers:manage

Fired when a contact's Entitlement is revoked (e.g. refund or manual revocation).

data payload example
{
  "entitlementId": "ent_01",
  "contactId": "cnt_01",
  "deliverableId": "deliv_01",
  "deliverableKey": "react-course",
  "source": "ORDER_LINE"
}
deliverables.progress.completed
customers:view

Fired when a learner completes a deliverable according to its completion rule.

data payload example
{
  "contactId": "cnt_01",
  "deliverableId": "deliv_01",
  "deliverableKey": "react-course",
  "unitId": "unit_01"
}
ec.order.paid
commerce:manage

Fired when an order payment succeeds and is captured.

data payload example
{
  "orderId": "ord_01",
  "orderNumber": 1001,
  "amount": 2900,
  "currency": "USD",
  "customerEmail": "buyer@example.com"
}
ec.shipment.statusChanged
commerce:manage

Fired when a shipment status transitions (in transit, arrived at store, delivered, or exception).

data payload example
{
  "websiteId": "ws_01",
  "eventKey": "ec.shipment.statusChanged"
}
site.analytics.milestone
analytics:view

Fired when cumulative site pageviews reach a milestone.

data payload example
{
  "websiteId": "ws_01",
  "eventKey": "site.analytics.milestone"
}
site.storageQuota.alert
billing:manage

Fired when site storage reaches 80%, is exhausted, auto-upgrades, or add-on payment fails.

data payload example
{
  "websiteId": "ws_01",
  "eventKey": "site.storageQuota.alert"
}