CommetCommet
GitHubDiscordStatus
Introduction

Subscription Events

subscription.createdsubscription.activatedsubscription.reactivatedsubscription.pause_scheduledsubscription.pause_updatedsubscription.pause_revokedsubscription.pausedsubscription.resumedsubscription.resume_failedsubscription.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

Plan Grant Events

plan_grant.createdplan_grant.updatedplan_grant.expiredplan_grant.revoked

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

payment.received

Fired when a payment settles successfully, including initial charges, renewals and recovery attempts

Payload

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

paymentContextobject | null

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.

invoiceIdstring

The invoice ID.

invoiceNumberstring

The human-readable invoice number.

invoiceTotalnumber

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

paymentTransactionIdstring | null

The payment transaction ID.

provider"stripe" | "commet" | "dlocal" | null

The payment provider the charge was routed to: stripe, commet, or dlocal. Null for billing-only charges with no Commet ledger row.

paymentMethodPaymentMethod | null

The payment method: card, oxxo, or mercado_pago. Null when unknown.

subPaymentMethodSubPaymentMethod | null

The source of funds for this charge, when reported by the provider. Null when unavailable or unknown.

grossAmountnumber | null

Gross amount in cents before fees.

currencystring | null

The payment currency code.

orgNetAmountnumber | null

Net amount after fees in cents.

customerEmailstring | null

The customer email used for this payment.

paidAtstringoptional

ISO 8601 datetime when the payment was received.

Examples

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?

checkout.ready

A checkout link is ready to share with the customer.

payment.failed

Fired when a subscription charge fails, including resume charges and recovery attempts