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.
The invoice ID.
The human-readable invoice number.
Always "outstanding" for this event.
ISO 8601 start of the billing period.
ISO 8601 end of the billing period.
ISO 8601 date the invoice was issued.
ISO 8601 date the invoice was due — now in the past.
The invoice currency code.
Subtotal in cents (100 = $1.00).
Total in cents (100 = $1.00).
The customer ID. Returns your externalId if you provided one when creating the customer, otherwise returns the Commet publicId.
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?