Every webhook has a type field you can switch on. Types follow a resource.action convention - subscribe to exact types, namespace wildcards (kyc.*), or everything (*).

KYC events

EventDescription
kyc.createdKYC record created for a user.
kyc.status.changedVerification status transitioned (for example pendingin_progressreview).
kyc.completedVerification passed.
kyc.failedVerification failed. data.reason explains.

Example: kyc.completed

{
  "id": "evt_01HX3ZJ...",
  "type": "kyc.completed",
  "tenantId": "tnt_01HX3Z8MQW...",
  "data": {
    "userId": "usr_01HX3ZAB...",
    "status": "complete",
    "result": {
      "identity": "clear",
      "document": "clear",
      "liveness": "clear"
    },
    "completedAt": "2026-04-22T10:34:17.000Z"
  },
  "createdAt": "2026-04-22T10:34:18.000Z"
}

Transaction events

EventDescription
transaction.createdTransaction created.
transaction.invitedInvitation delivered to counterparty.
transaction.openedCounterparty opened the invite link.
transaction.acceptedCounterparty signed in and accepted.
transaction.status.changedStatus transitioned - data.from and data.to name the change.
transaction.disputedDispute opened.
transaction.dispute.updatedEvidence added or note posted.
transaction.deletedTransaction removed before funding.

Example: transaction.status.changed

{
  "id": "evt_01HX3ZU...",
  "type": "transaction.status.changed",
  "tenantId": "tnt_01HX3Z8MQW...",
  "data": {
    "transactionId": "tx_01HX3ZM...",
    "from": "accepted",
    "to": "funded",
    "changedBy": "usr_buyer_...",
    "changedAt": "2026-04-22T11:40:02.000Z"
  }
}

Source-of-funds events

EventDescription
source_of_funds.submittedUser submitted for review.
source_of_funds.reviewedReviewer issued a decision.

Example: source_of_funds.reviewed

{
  "id": "evt_01HX3ZL...",
  "type": "source_of_funds.reviewed",
  "tenantId": "tnt_01HX3Z8MQW...",
  "data": {
    "userId": "usr_01HX3ZAB...",
    "decision": "approved",
    "reviewerNotes": "Bank statements match declared salary."
  }
}

Document review events

EventDescription
document_review.submittedReview created.
document_review.approvedReviewer approved.
document_review.rejectedReviewer rejected.
document_review.revision_requestedReviewer asked for more.

Tenant events

EventDescription
tenant.createdTenant provisioned.
tenant.updatedTenant settings changed.
tenant.disabledTenant suspended.
tenant.users.inviteUser added to tenant via add-user or add-user-bulk.

API key events

EventDescription
api_key.createdNew key pair generated.
api_key.revokedKey pair revoked.
api_key.regeneratedKey pair rotated.

Payment events

EventDescription
payment_intent.succeededFunds captured.
payment_intent.failedCharge failed. data.reason explains.
payment_method.attachedNew method saved to a customer.
payment_method.detachedMethod removed.

Pattern matching

You can subscribe to any mix of:
PatternMatches
kyc.completedExactly that one event.
kyc.*Every event starting with kyc.
transaction.*Every transaction event.
*Everything - useful for audit pipelines.
Subscribing to * plus a handful of specific handlers is a common pattern: the specific handlers drive product logic, and the wildcard writes to an audit log.