Fired when a payment settles successfully, including initial charges, renewals and recovery attempts
All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.
The original reason for a charge and how this attempt was initiated. Recovery never replaces the original reason. Context can be null when it was not captured, including retries of historical invoices.
The invoice ID.
The human-readable invoice number.
Invoice 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.
The payment transaction ID.
The payment provider the charge was routed to: stripe, commet, or dlocal. Null for billing-only charges with no Commet ledger row.
The payment method: card, oxxo, or mercado_pago. Null when unknown.
The source of funds for this charge, when reported by the provider. Null when unavailable or unknown.
Gross amount in cents before fees.
The payment currency code.
Net amount after fees in cents.
The customer email used for this payment.
ISO 8601 datetime when the payment was received.
The original charge attempt, before recovery.
{
"event": "payment.received",
"timestamp": "2026-06-23T14:30:00.000Z",
"organizationId": "8f14e45f-ceea-4e7a-9c3d-1c2b3a4d5e6f",
"mode": "live",
"apiVersion": "2026-08-27",
"data": {
"paymentContext": {
"reason": "first_subscription_payment",
"paymentLinkId": null,
"recovery": null
},
"invoiceId": "inv_n4o5p6",
"invoiceNumber": "INV-0043",
"invoiceTotal": 9900,
"customerId": "user_123",
"subscriptionId": "sub_1a2b3c4d",
"paymentTransactionId": "txn_q7r8s9",
"provider": "stripe",
"paymentMethod": "card",
"subPaymentMethod": null,
"grossAmount": 9900,
"currency": "usd",
"orgNetAmount": 9200,
"customerEmail": "billing@acme.com",
"paidAt": "2026-04-25T00:05:00.000Z"
}
}paymentMethod identifies the method used for this charge, independently of provider. It is null when the payment attempt has no known method, and does not change when the customer updates their saved method later.
subPaymentMethod is the source of funds reported for this charge, such as account_money or credit_card within Mercado Pago. It is null when unavailable or unknown.
How is this guide?