Commet
  • Pricing
Log InTry out
Introduction

Subscription Events

subscription.createdsubscription.activatedsubscription.canceledsubscription.updatedsubscription.plan_changedsubscription.cancellation_scheduledsubscription.cancellation_revokedsubscription.plan_change_scheduledsubscription.plan_change_revokedsubscription.past_due

Trial Events

trial.startedtrial.convertedtrial.expiredtrial.will_endtrial.checkout_ready

Checkout Events

checkout.ready

Payment Events

payment.receivedpayment.failedpayment.recoveredpayment.refundedpayment.disputedpayment.dispute_resolved

Invoice Events

invoice.createdinvoice.upcominginvoice.overdueinvoice.voided

Payment Method Events

payment_method.attachedpayment_method.updated

Customer Events

customer.createdcustomer.updatedcustomer.state_changed

Credits & Balance Events

credits.grantedcredits.purchasedcredits.lowcredits.depletedcredits.expiredbalance.topped_upbalance.lowbalance.depleted

Quota & Usage Events

quota.threshold_reachedquota.exceededusage.recorded

Seat Events

seats.updatedseats.limit_reached

Add-on Events

addon.activatedaddon.deactivated

Payout Events

payout.availablepayout.createdpayout.paidpayout.failed
DocumentationKnowledge BaseBuild with AIAPI ReferenceWebhooks

credits.granted

Non-purchase credits were granted to a subscription.

Payload

All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.

subscriptionIdstring

The subscription ID.

customerIdstring

The customer ID. Returns your externalId if you provided one when creating the customer, otherwise returns the Commet publicId.

creditsnumber

The number of credits granted.

reasonstring

Why the credits were granted: period_reset or manual_adjustment.

{
  "event": "credits.granted",
  "timestamp": "2026-06-01T00:00:05.000Z",
  "organizationId": "org_abc123",
  "mode": "live",
  "apiVersion": "2026-06-10",
  "data": {
    "subscriptionId": "sub_1a2b3c4d",
    "customerId": "user_123",
    "credits": 500,
    "reason": "period_reset"
  }
}

When this fires

Plan-included credits are granted at the start of every billing period (reason: "period_reset"), and manual adjustments from the dashboard grant purchased credits (reason: "manual_adjustment"). Credit pack purchases are a separate flow and fire credits.purchased instead.

The idempotency key is derived from the billing operation that granted the credits, so engine retries never send a duplicate.

Use it to reset in-app usage meters at the start of a period or to confirm a support-driven credit grant reached the customer.

How is this guide?

customer.state_changed

Aggregate entitlement event — what can this customer access right now.

credits.purchased

A credit pack purchase was completed.