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.overdue

An outstanding invoice passed its due date without payment.

Payload

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

invoiceIdstring

The invoice ID.

invoiceNumberstring

The human-readable invoice number.

invoiceStatusstring

Always "outstanding" for this event.

periodStartstring | null

ISO 8601 start of the billing period.

periodEndstring | null

ISO 8601 end of the billing period.

issueDatestring | null

ISO 8601 date the invoice was issued.

dueDatestring

ISO 8601 date the invoice was due — now in the past.

currencystring

The invoice currency code.

subtotalnumber

Subtotal in cents (100 = $1.00).

totalnumber

Total in cents (100 = $1.00).

customerIdstring

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

subscriptionIdstring | null

The subscription ID, if the invoice is linked to a subscription.

{
  "event": "invoice.overdue",
  "timestamp": "2026-05-02T06:00:00.000Z",
  "organizationId": "org_abc123",
  "mode": "live",
  "apiVersion": "2026-05-25",
  "data": {
    "invoiceId": "inv_n4o5p6",
    "invoiceNumber": "INV-0043",
    "invoiceStatus": "outstanding",
    "periodStart": "2026-04-25T00:00:00.000Z",
    "periodEnd": "2026-05-25T00:00:00.000Z",
    "issueDate": "2026-04-25T00:00:00.000Z",
    "dueDate": "2026-04-25T00:00:00.000Z",
    "currency": "usd",
    "subtotal": 9900,
    "total": 9900,
    "customerId": "user_123",
    "subscriptionId": "sub_1a2b3c4d"
  }
}

When this fires

A daily scan finds outstanding invoices whose dueDate is in the past and emits this event once per invoice. The idempotency key is derived from the invoice, so re-running the scan never sends a duplicate.

The invoice keeps its "outstanding" status — overdue is a fact about the due date, not a new status. If the invoice is later paid or voided, payment.received or invoice.voided reflects the outcome.

Use it to start your own dunning flow: email the customer, show an in-app banner, or flag the account for follow-up.

How is this guide?

invoice.upcoming

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

invoice.voided

An invoice was voided and will not be collected.