Commet
  • Pricing
Log InTry out
Introduction

Subscription Events

subscription.createdsubscription.activatedsubscription.reactivatedsubscription.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.retry_failedpayment.refundedpayment.disputedpayment.dispute_resolved

Payment Link Events

payment_link.createdpayment_link.completedpayment_link.failedpayment_link.canceled

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
System status
DocumentationKnowledge BaseBuild with AIAPI ReferenceWebhooks

subscription.past_due

Fired when a recurring payment fails and the subscription enters a grace window while Commet retries the charge.

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 "past_due" for this event.

invoiceIdstring

The invoice whose payment failure triggered the status.

invoiceNumberstring

The human-readable invoice number.

{
  "event": "subscription.past_due",
  "timestamp": "2026-06-23T14:30:00.000Z",
  "organizationId": "8f14e45f-ceea-4e7a-9c3d-1c2b3a4d5e6f",
  "mode": "live",
  "apiVersion": "2026-06-23",
  "data": {
    "subscriptionId": "sub_1a2b3c4d",
    "customerId": "user_123",
    "status": "past_due",
    "invoiceId": "inv_n4o5p6",
    "invoiceNumber": "INV-0043"
  }
}

When this fires

A recurring charge failed on a subscription that has been paid before. Commet sets the status to past_due and enters dunning.

past_due is a permissive grace window — features, usage, and seats keep working. Only purchases and plan changes are blocked. Usage accrues as debt during this window.

Commet retries the charge on day 1, day 3, and day 5 after the failure (3 retries). If a retry succeeds the subscription returns to active. If all 3 retries fail the subscription is canceled.

payment.failed fires alongside this event with the charge failure details (failureCode, failureMessage). Use subscription.past_due to drive your access state and payment.failed to drive recovery messaging.

First-checkout card declines do NOT trigger this event — a subscription that was never paid moves back to pending_payment instead.

How is this guide?

subscription.plan_change_revoked

Fired when a scheduled plan change is replaced before it executes.

trial.started

Fired when a subscription enters its trial period. Grant access here.