Help improve docs quality by sharing anonymous interaction telemetry (no PII or token data).

Events & Webhook Explorer

Browse the webhook event catalog with sample payloads, and verify signatures interactively.

Verify a signature

MonetizeKit signs each delivery: HMAC-SHA256 over "{timestamp}.{rawBody}" using your endpoint secret, sent as X-MonetizeKit-Signature. Paste your values to compute and verify it — see the Webhooks guide for registering an endpoint and processing retried deliveries idempotently, and the Caching and Edge Evaluation guide for using these same events as cache-invalidation triggers.

customers

customer.created

A new customer was created in the workspace.

json
{  "id": "evt_sample_00000000",  "type": "customer.created",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "customerId": "cust_123",    "customerName": "Acme Corp",    "customerEmail": "ops@acme.test"  }}

customer.updated

A customer's attributes or plan changed.

json
{  "id": "evt_sample_00000000",  "type": "customer.updated",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "customerId": "cust_123",    "changes": [      "plan"    ]  }}

subscriptions

subscription.created

A customer subscribed to a plan.

json
{  "id": "evt_sample_00000000",  "type": "subscription.created",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "customerId": "cust_123",    "subscriptionId": "sub_123",    "planId": "plan_pro"  }}

subscription.updated

A subscription changed status, plan, or term.

json
{  "id": "evt_sample_00000000",  "type": "subscription.updated",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "subscriptionId": "sub_123",    "status": "active",    "planId": "plan_pro"  }}

subscription.canceled

A subscription was canceled.

json
{  "id": "evt_sample_00000000",  "type": "subscription.canceled",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "subscriptionId": "sub_123",    "canceledAt": "2026-06-14T00:00:00.000Z"  }}

catalog

plan.created

A new plan was created (not yet published).

json
{  "id": "evt_sample_00000000",  "type": "plan.created",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "planId": "plan_pro",    "status": "draft",    "version": 1  }}

plan.updated

A plan's definition changed (features, pricing, or limits).

json
{  "id": "evt_sample_00000000",  "type": "plan.updated",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "planId": "plan_pro",    "version": 2  }}

plan.published

A plan version was published.

json
{  "id": "evt_sample_00000000",  "type": "plan.published",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "planId": "plan_pro",    "status": "published",    "version": 3  }}

plan.archived

A plan was archived and can no longer be assigned to new customers.

json
{  "id": "evt_sample_00000000",  "type": "plan.archived",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "planId": "plan_legacy",    "status": "archived",    "version": 4  }}

feature.updated

A feature definition changed.

json
{  "id": "evt_sample_00000000",  "type": "feature.updated",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "featureId": "feat_seats",    "key": "seats"  }}

feature.deleted

A feature definition was deleted.

json
{  "id": "evt_sample_00000000",  "type": "feature.deleted",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "featureId": "feat_legacy",    "key": "legacy_feature"  }}

usage

usage.threshold

A customer crossed a soft or hard usage budget threshold.

json
{  "id": "evt_sample_00000000",  "type": "usage.threshold",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "customerId": "cust_123",    "meterId": "meter_api",    "thresholdValue": 100000,    "currentUsage": 100250  }}

credits

credit.granted

Credits were granted to a customer wallet.

json
{  "id": "evt_sample_00000000",  "type": "credit.granted",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "customerId": "cust_123",    "amount": 500,    "reason": "manual_grant"  }}

credit.depleted

A customer's credit balance reached zero.

json
{  "id": "evt_sample_00000000",  "type": "credit.depleted",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "customerId": "cust_123",    "balance": 0  }}

entitlements

entitlement.changed

A customer's effective entitlement for a feature changed (plan, add-on, or override).

json
{  "id": "evt_sample_00000000",  "type": "entitlement.changed",  "workspace_id": "ws_example",  "created_at": "2026-06-14T00:00:00.000Z",  "data": {    "customerId": "cust_123",    "featureKey": "seats",    "allowed": true,    "effectiveValue": 25  }}

Activation funnel

Beyond the webhook events above, the embed SDK posts activation-funnel telemetry to the ingestion beacon POST /api/v1/events/funnel as visitors move through your pricing widget. Send widget_view when the pricing table mounts and checkout_started when the upgrade call-to-action is clicked; the activated stage is derived server-side from the MRR movement ledger and is never posted by the widget. The request body carries event (widget_view or checkout_started), sessionId (a stable anonymous id per widget mount), and an optional planId; a successful call returns 201 with the recorded event id. Authenticate this beacon with a browser-embedded publishable key — the one write that accepts one — which is exempt from the per-key scope check because it records only an anonymous, workspace-scoped funnel-telemetry row (plus the standard first-API-call activation telemetry the API layer records for any authenticated request) and touches no tenant business data or configuration. See Authentication for the publishable-key exception.

Was this page helpful?