checkout.ready
A checkout link is ready to share with the customer.
Payload
All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.
The subscription ID.
The customer ID. Returns your externalId if you provided one when creating the customer, otherwise returns the Commet publicId.
The invoice this checkout collects.
The human-readable invoice number.
Invoice total in cents (100 = $1.00).
The invoice currency code.
The hosted checkout URL to share with the customer.
{
"event": "checkout.ready",
"timestamp": "2026-03-25T14:30:05.000Z",
"organizationId": "org_abc123",
"mode": "live",
"apiVersion": "2026-06-10",
"data": {
"subscriptionId": "sub_1a2b3c4d",
"customerId": "user_123",
"invoiceId": "inv_k1l2m3",
"invoiceNumber": "INV-0042",
"invoiceTotal": 9900,
"invoiceCurrency": "usd",
"checkoutUrl": "https://pay.commet.co/checkout/tok_9f8e7d6c"
}
}When this fires
When a subscription is created without a payment method on file, Commet generates a hosted checkout link for the first invoice and fires this event as soon as the link is ready. Commet also emails the link to the customer — this webhook lets you deliver it through your own channels (in-app banner, chat, SMS) instead of relying on email alone.
The link stays valid until the invoice is paid or voided. Trials with their own checkout flow fire trial.checkout_ready instead.
Use the checkoutUrl to put the payment link in front of the customer wherever they already are.
How is this guide?