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

invoice.upcoming

Predictive event fired once, 3 days before a subscription renews.

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.

statusstring

Always "active" for this event.

planIdstring

The plan ID.

planNamestring

The plan name.

billingIntervalstring | null

The billing interval (monthly, yearly).

currentPeriodEndstring

ISO 8601 datetime when the current period ends and the renewal invoice is issued.

{
  "event": "invoice.upcoming",
  "timestamp": "2026-04-22T06:00:00.000Z",
  "organizationId": "org_abc123",
  "mode": "live",
  "apiVersion": "2026-05-25",
  "data": {
    "subscriptionId": "sub_1a2b3c4d",
    "customerId": "user_123",
    "status": "active",
    "planId": "plan_pro_monthly",
    "planName": "Pro",
    "billingInterval": "monthly",
    "currentPeriodEnd": "2026-04-25T00:00:00.000Z"
  }
}

When this fires

A daily scan finds active subscriptions renewing within the next 3 days and emits this event once per renewal. The idempotency key is derived from the subscription and the renewal date, so re-running the scan never sends a duplicate.

Subscriptions with a scheduled cancellation are excluded — no renewal invoice will be issued for them.

Use it to notify the customer before they are charged. The payload intentionally carries no amount: usage-based charges are only final at renewal time, when invoice.created delivers the actual invoice.

How is this guide?

invoice.created

Fired when a new invoice is generated

invoice.overdue

An outstanding invoice passed its due date without payment.