Event catalog

Every event an outbound webhook can subscribe to, with payload examples and the attributes that matter, plus the additional events that only workflows can react to.

Outbound webhooks can subscribe to 12 events: create and update for six resources. The authoritative list for your org comes from the API:

get/v1/outbound-webhooks/events
200 OK
{
  "events": [
    "kustomer.conversation.create",
    "kustomer.conversation.update",
    "kustomer.customer.create",
    "kustomer.customer.update",
    "…"
  ]
}

Subscribable events

EventFires whendata.type
kustomer.customer.createA customer is created by an agent, the API, chat, an import or a channelcustomer
kustomer.customer.updateAny customer attribute changes, including activity timestampscustomer
kustomer.conversation.createA conversation is createdconversation
kustomer.conversation.updateStatus, assignment, tags, custom attributes, or message counts and timestamps changeconversation
kustomer.message.createA message is sent or received on any channelmessage
kustomer.message.updateA message changes, for example its delivery statusmessage
kustomer.user.createA user (agent or machine user) is addeduser
kustomer.user.updateA user's profile, roles or teams changeuser
kustomer.team.createA team is createdteam
kustomer.team.updateA team's name or members changeteam
kustomer.tag.createA tag is createdtag
kustomer.tag.updateA tag is renamed, recolored or deletedtag

On create events, changes is null. Webhooks don't include delete events; detect deletions by reconciling with search using includeDeleted.

Payloads

Payloads are trimmed below. The real data is the full resource, the same as GET /v1/<resource>/{id} returns.

kustomer.customer.update
{
  "id": "6717c2a4e5b1f00012ab3500",
  "name": "kustomer.customer.update",
  "org": "5f8481c6a22ab5b9d5f2dd8a",
  "partition": "5f8481c6a22ab5b9d5f2dd8a",
  "data": {
    "type": "customer",
    "id": "6717c29de5b1f00012ab34b9",
    "attributes": {
      "name": "Jane Doe",
      "displayName": "Jane Doe",
      "externalId": "crm-10427",
      "emails": [{ "type": "home", "email": "jane@example.com", "verified": false }],
      "phones": [{ "type": "mobile", "phone": "+15555550123", "verified": false }],
      "tags": [],
      "custom": { "loyaltyTierStr": "gold" },
      "conversationCounts": { "open": 1, "snoozed": 0, "done": 4, "all": 5 },
      "lastActivityAt": "2026-10-21T15:00:02.118Z",
      "updatedAt": "2026-10-21T15:00:02.130Z"
    },
    "relationships": {},
    "links": { "self": "/v1/customers/6717c29de5b1f00012ab34b9" }
  },
  "createdAt": "2026-10-21T15:00:02.151Z",
  "changes": {
    "attributes": {
      "custom": { "op": "replace", "before": { "loyaltyTierStr": "silver" }, "after": { "loyaltyTierStr": "gold" } },
      "updatedAt": { "op": "replace", "before": "2026-10-20T09:12:44.001Z", "after": "2026-10-21T15:00:02.130Z" }
    },
    "relationships": {}
  },
  "client": "api"
}

Recipes

function closed(event: KustomerEvent) {
  const status = event.changes?.attributes?.status
  return event.name === 'kustomer.conversation.update' && status?.after === 'done' && status.before !== 'done'
}

Events available to workflows only

Workflows can react to more events than webhooks can. To push any of these to your systems, build a workflow with that trigger and a REST API step.

TriggerFires when
kustomer.company.create, kustomer.company.updateA company is created or changes
kustomer.note.create, kustomer.note.updateAn internal note is added or edited
kustomer.kobject.<klass>.create, kustomer.kobject.<klass>.updateA custom object of that Klass is created or changes, for example kustomer.kobject.ecomm-order.update
kustomer.draft.createA draft reply is created
kustomer.internal_thread.create, kustomer.internal_message.createAn internal thread or a message in one is created
kustomer.hooks.<form|web|email>.<hookId>.receiveAn inbound hook receives data
kustomer.workflow.<workflowId>.callAnother workflow calls or schedules a callable workflow

See Triggers and actions for what each trigger outputs.