IntegrationsWebhooks
Event Catalog
All 55 domain events Kaiten emits, across 10 domains — names, versioned types, what triggers each one, and the payload contract it carries.
Kaiten emits 55 domain events across 10 domains. This page lists every one of them. The events exist on every edition — the badge marks the delivery path this section documents: on Kaiten Cloud they reach your webhook endpoints; on a self-hosted stack you consume them from RabbitMQ. Same names, same types, same data on both paths.
The contract
Every event is a published contract of three fields, and a delivery can carry a fourth, optional one:
| Field | Content | Example |
|---|---|---|
name | The stable event identifier | CUSTOMER_CREATED |
type | The versioned type — the domain, a version, and the action | com.kaiten.customer.v1.created |
data | The payload: the entity as it stands after the change, or a change record | The Customer object |
headers | Optional. Metadata about the event, outside its payload: instance_id, the id of the Instance the event concerns, and traceparent, the W3C trace context of the request that produced it | { "instance_id": "c2f7…", "traceparent": "00-…-…-01" } |
headers is present when the event has metadata to carry, and a consumer should ignore the keys it does not read. instance_id is set on every event of the Instances domain. It is where a usage event names its Instance: the usage payloads identify the entitlement — EntitlementUsage the License too — and only the period rollover and the value read carry an instance_id of their own.
The Payload column below names the schema data carries. Entity snapshots (Customer, Instance, License, …) are the same objects the REST API returns, with camelCase fields; change records (InstanceStatusChanged, InstanceEntitlementCapExceeded, …) are event-specific and use snake_case fields. Every contract — field by field, with its schema — is in the generated API reference's Webhooks group, one page per event: that is the exhaustive machine view of this catalog.
Two kinds of events run through the catalog. Changes (created, updated, deleted, assigned, deployed) fire once per write. Evaluations — ENTITLEMENT_VALUE_GET, FEATURE_FLAG_EVALUATED, the usage-report outcomes — fire on every read, report, or evaluation, at your product's request rate. Subscribe an endpoint to the evaluation events deliberately.
Customers
| Event | Type | Trigger | Payload |
|---|---|---|---|
CUSTOMER_CREATED | com.kaiten.customer.v1.created | A customer is created | Customer |
CUSTOMER_UPDATED | com.kaiten.customer.v1.updated | A customer is updated | Customer |
CUSTOMER_DELETED | com.kaiten.customer.v1.deleted | A customer is deleted | Customer |
CUSTOMER_CREATION_REJECTED | com.kaiten.customer.v1.creation_rejected | A customer creation is refused because the organization has reached its customer entitlement cap; no customer is created | CustomerCreationRejected |
Instances
| Event | Type | Trigger | Payload |
|---|---|---|---|
INSTANCE_CREATED | com.kaiten.instance.v1.created | An instance is created | Instance |
INSTANCE_UPDATED | com.kaiten.instance.v1.updated | An instance is updated | Instance |
INSTANCE_DELETED | com.kaiten.instance.v1.deleted | An instance is deleted | Instance |
INSTANCE_STATUS_CHANGED | com.kaiten.instance.v1.status_changed | The operational status changes (HEALTHY, DEGRADED, INCIDENT, MAINTENANCE) | InstanceStatusChanged |
INSTANCE_LIFECYCLE_STAGE_CHANGED | com.kaiten.instance.v1.lifecycle_stage_changed | The commercial lifecycle stage changes | InstanceLifecycleStageChanged |
INSTANCE_DEPLOYED | com.kaiten.instance.v1.deployed | An instance is deployed to a deployment zone | Instance |
INSTANCE_MIGRATED | com.kaiten.instance.v1.migrated | An instance is migrated from one deployment zone to another | Instance |
INSTANCE_ENTITLEMENT_USAGE_WARNING_THRESHOLD_REACHED | com.kaiten.instance.entitlement.v1.usage_warning_threshold_reached | Usage crosses the entitlement's early-warning percentage, below the cap — once per crossing | InstanceEntitlementUsageWarningThresholdReached |
INSTANCE_ENTITLEMENT_USAGE_REACHED | com.kaiten.instance.entitlement.v1.usage_reached | Usage reaches the granted value exactly | EntitlementUsage |
INSTANCE_ENTITLEMENT_CAP_EXCEEDED | com.kaiten.instance.entitlement.v1.cap_exceeded | Usage crosses the granted value upward and stays within the grant's overage allowance (limit_cap_exceeded_overage_percent above 0) — the report is accepted, overage included; once per crossing | InstanceEntitlementCapExceeded |
ENTITLEMENT_USAGE_REPORT_ACCEPTED | com.kaiten.instance.entitlement.v1.usage_report_accepted | A usage report is persisted, including one that lands inside a grant's overage allowance | InstanceEntitlementUsageReportAccepted |
ENTITLEMENT_USAGE_REPORT_REJECTED | com.kaiten.instance.entitlement.v1.usage_report_rejected | A usage report is refused because it would take usage past the grant's maximum — the granted value at a hard cap (0), or the value plus its allowance; nothing is persisted | InstanceEntitlementUsageReportAccepted |
INSTANCE_ENTITLEMENT_USAGE_PERIOD_ROLLED_OVER | com.kaiten.instance.entitlement.v1.usage_period_rolled_over | A report closes a usage window — one event for the entitlement's stored bucket, plus one synthetic event per window skipped entirely since the last report | InstanceEntitlementUsagePeriodRolledOver |
ENTITLEMENT_VALUE_GET | com.kaiten.instance.entitlement.v1.value_get | An instance entitlement's usage value is read — a read-audit signal, not a state change | InstanceEntitlementValueGet |
Licenses
| Event | Type | Trigger | Payload |
|---|---|---|---|
LICENSE_CREATED | com.kaiten.license.v1.created | A license is created | License |
LICENSE_UPDATED | com.kaiten.license.v1.updated | A license is updated | License |
LICENSE_DELETED | com.kaiten.license.v1.deleted | A license is deleted | License |
LICENSE_PUBLISHED | com.kaiten.license.v1.published | A draft license version is published and goes on sale | License |
LICENSE_ARCHIVED | com.kaiten.license.v1.archived | A published license version is archived and withdrawn from sale | License |
LICENSE_UNARCHIVED | com.kaiten.license.v1.unarchived | An archived license version is put back on sale | License |
LICENSE_ENTITLEMENT_ASSIGNED | com.kaiten.license.entitlement.v1.assigned | An entitlement is assigned to a license | LicenseEntitlement |
LICENSE_ENTITLEMENT_UPDATED | com.kaiten.license.entitlement.v1.updated | A license entitlement's value is updated | LicenseEntitlement |
LICENSE_ENTITLEMENT_UNASSIGNED | com.kaiten.license.entitlement.v1.unassigned | An entitlement is unassigned from a license | LicenseEntitlement |
LICENSE_FAMILY_CREATED | com.kaiten.license_family.v1.created | A license is created without naming a family: its version 1 opens a new one. Recorded in the same transaction as that version's LICENSE_CREATED | LicenseFamilyView |
LICENSE_FAMILY_UPDATED | com.kaiten.license_family.v1.updated | The family starts serving another version, or none — a version published, archived or unarchived, the family's default taken or given up, or the served version deleted. Recorded with the version event that caused it; a change that leaves the served version where it was emits nothing | LicenseFamilyView |
LICENSE_FAMILY_DELETED | com.kaiten.license_family.v1.deleted | The family's last version is deleted, which deletes the family and frees its slug. Recorded in the same transaction as that version's LICENSE_DELETED | LicenseFamilyView |
A License family is the product its versions belong to. It has no write operation of its own — its first version opens it and its last one takes it away — so its three events are recorded by the version writes that change it, and they are listed here, under Licenses: the catalog keeps 10 domains. LicenseFamilyView carries the family and, in currentVersion, the version it serves — absent while the family has nothing published.
Entitlements
| Event | Type | Trigger | Payload |
|---|---|---|---|
ENTITLEMENT_CREATED | com.kaiten.entitlement.v1.created | An entitlement is created | Entitlement |
ENTITLEMENT_UPDATED | com.kaiten.entitlement.v1.updated | An entitlement is updated | Entitlement |
ENTITLEMENT_DELETED | com.kaiten.entitlement.v1.deleted | An entitlement is deleted | Entitlement |
ENTITLEMENT_GROUP_CREATED | com.kaiten.entitlement_group.v1.created | An entitlement group is created | EntitlementGroup |
ENTITLEMENT_GROUP_UPDATED | com.kaiten.entitlement_group.v1.updated | An entitlement group is updated | EntitlementGroup |
ENTITLEMENT_GROUP_DELETED | com.kaiten.entitlement_group.v1.deleted | An entitlement group is deleted | EntitlementGroup |
Feature flags
| Event | Type | Trigger | Payload |
|---|---|---|---|
FEATURE_FLAG_CREATED | com.kaiten.feature_flag.v1.created | A feature flag is created | FeatureFlag |
FEATURE_FLAG_UPDATED | com.kaiten.feature_flag.v1.updated | A feature flag is updated | FeatureFlag |
FEATURE_FLAG_DELETED | com.kaiten.feature_flag.v1.deleted | A feature flag is deleted | FeatureFlag |
FEATURE_FLAG_EVALUATED | com.kaiten.feature_flag.v1.evaluated | A flag is evaluated. The payload carries the flag, the variant, and the reason — no evaluation context, so no targeting key or user attribute is exposed | FeatureFlagEvaluated |
Components
| Event | Type | Trigger | Payload |
|---|---|---|---|
COMPONENT_CREATED | com.kaiten.component.v1.created | A component is created | Component |
COMPONENT_UPDATED | com.kaiten.component.v1.updated | A component is updated or auto-versioned | Component |
COMPONENT_DELETED | com.kaiten.component.v1.deleted | A component is deleted | Component |
Releases
| Event | Type | Trigger | Payload |
|---|---|---|---|
RELEASE_CREATED | com.kaiten.release.v1.created | A release is created | Release |
RELEASE_DELETED | com.kaiten.release.v1.deleted | A release is deleted | Release |
Deployment zones
| Event | Type | Trigger | Payload |
|---|---|---|---|
DEPLOYMENT_ZONE_CREATED | com.kaiten.deployment_zone.v1.created | A deployment zone is created | DeploymentZone |
DEPLOYMENT_ZONE_UPDATED | com.kaiten.deployment_zone.v1.updated | A deployment zone is updated | DeploymentZone |
DEPLOYMENT_ZONE_DELETED | com.kaiten.deployment_zone.v1.deleted | A deployment zone is deleted | DeploymentZone |
RELEASE_DEPLOYED | com.kaiten.deployment_zone.v1.release_deployed | A release is deployed to a deployment zone — at zone creation, or when an existing zone's release changes | Deployment |
Metadata fields
| Event | Type | Trigger | Payload |
|---|---|---|---|
METADATA_FIELD_CREATED | com.kaiten.metadata_field.v1.created | A metadata field is declared for a resource type | MetadataField |
METADATA_FIELD_UPDATED | com.kaiten.metadata_field.v1.updated | A field's label or JSON schema changes (a reordering emits METADATA_FIELD_REORDERED instead) | MetadataField |
METADATA_FIELD_ARCHIVED | com.kaiten.metadata_field.v1.archived | A field is archived and leaves the active schema composition | MetadataField |
METADATA_FIELD_UNARCHIVED | com.kaiten.metadata_field.v1.unarchived | An archived field is restored to the active schema composition | MetadataField |
METADATA_FIELD_REORDERED | com.kaiten.metadata_field.v1.reordered | The display order of a resource type's fields is rewritten | MetadataFieldReordered |
Identity
| Event | Type | Trigger | Payload |
|---|---|---|---|
SYSTEM_ORGANIZATION_TOKEN_ISSUED | com.kaiten.identity.v1.system_token_issued | A platform credential mints an organization-scoped credential for the system:kaiten platform identity inside your organization. The payload carries the minting credential and the scopes granted, never the credential value. Expect it at the rate an integration refreshes — 96 a day per process at a 15-minute lifetime, more if it refreshes before expiry | SystemTokenIssuance |
Subscribing
On Kaiten Cloud, a webhook endpoint subscribes to events by type — the second column above — and receives every event whose type is on its list, and nothing else. POST /webhooks takes those types in eventTypes and refuses an event name with 400; there is no "all events" subscription. Create the endpoint under Integrations → Webhooks or over the API; managing endpoints has both. Delivery is at least once, so a handler should be idempotent; retries and the delivery history are on delivery and retries.
The console's New Webhook dialog offers 53 of the 55 events. It leaves out ENTITLEMENT_VALUE_GET and FEATURE_FLAG_EVALUATED, which fire on every entitlement read and every flag evaluation: subscribe an endpoint to either over the API, by its type.
On a self-hosted stack, the same names arrive as the outbox row's event_name, and each message's type is the event's, which your consumer filters on — consuming events. Inside the API, one delivery of the same stream is fanned out to several in-process consumers — the audit trail, and a CRM connector for the organizations that activated one — each keeping its own record of what it has processed, so a failure in one is retried for that one alone. Your consumer is not part of that fan-out: it binds its own queue to the exchange and keeps its own record.
Where to go next
- Payload examples — worked deliveries on the Kaiten Sushi Shop
- Generated API reference, Webhooks group — one page per event, with the full
dataschema - Events and webhooks — the concept in one screen; audit trail — the same stream, kept
Managing Endpoints
Create and delete webhook endpoints on Kaiten Cloud in the console, update them over the API, and read each endpoint's signing secret — where your License includes webhooks.
Payload Examples
Worked webhook deliveries for the events most integrations start with — an entity snapshot, a grant, a usage signal, an evaluation, a deployment — on the Kaiten Sushi Shop.