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

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

ISO 8601 start of the billing period.

periodEndstring

ISO 8601 end of the billing period.

issueDatestring

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-06-23T14:30:00.000Z",
  "organizationId": "8f14e45f-ceea-4e7a-9c3d-1c2b3a4d5e6f",
  "mode": "live",
  "apiVersion": "2026-07-11",
  "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.