> ## Documentation Index
> Fetch the complete documentation index at: https://commet.co/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# payment.received

> Se dispara cuando un pago se completa con éxito, incluidos cobros iniciales, renovaciones e intentos de recuperación

## paymentContext

El motivo original del cobro y cómo se inició este intento. La recuperación nunca reemplaza el motivo original. El contexto puede ser null si no se capturó, incluso en reintentos de facturas históricas.

<Accordion title="Campos y motivos de pago">
  ### `reason`

  `string`

  El motivo original, que se conserva entre intentos de pago.

  ### `paymentLinkId`

  `string | null`

  El ID público del enlace de pago, o null si el cobro no se originó en uno. Es independiente del motivo y de la forma de recuperación.

  ### `recovery`

  `object | null`

  Es null cuando el cobro no recupera una suscripción. payment\_recovery identifica la recuperación manual de una suscripción vencida, la vuelta después de una cancelación por impago o el reintento de una reanudación fallida. Reintentar el checkout inicial o un pago único no es recuperación. dunning\_retry identifica un reintento automático de cobro, no de entrega del webhook.

  ### `recovery.attempt`

  `integer`

  La posición del reintento de cobro en el calendario de dunning, empezando en 1. El rechazo original no es un reintento. Sólo aparece en dunning\_retry.

  ### `recovery.maxAttempts`

  `integer`

  El total de reintentos automáticos aplicable al cobro cuando empezó el intento. No representa los reintentos restantes. Sólo aparece en dunning\_retry.

  | reason | Cuándo se usa |
  | - | - |
  | `first_subscription_payment` | El pago inicial de una suscripción. |
  | `trial_conversion` | El pago al finalizar un período de prueba gratuito. |
  | `recurring_billing` | Una renovación de la suscripción. |
  | `plan_change` | Un cobro por un cambio de plan. |
  | `reactivation` | Un cobro para reactivar una suscripción cancelada. |
  | `subscription_resume` | Un cobro para reanudar una suscripción pausada. |
  | `one_time_payment` | Un pago único, incluidos los enlaces de pago. |
  | `overage` | Un cobro por consumo que supera lo incluido en el plan. |
  | `adjustment` | Un cobro de una factura de ajuste. |
</Accordion>

<AccordionGroup>
  <Accordion title="Primer intento">
    El intento original de cobro, antes de la recuperación.

    ```json Primer intento
    {
      "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"
      }
    }
    ```
  </Accordion>

  <Accordion title="Recuperación manual">
    El cliente recupera una suscripción con un pago vencido. El motivo original del cobro se conserva.

    ```json Recuperación manual
    {
      "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": "recurring_billing",
          "paymentLinkId": null,
          "recovery": {
            "type": "payment_recovery"
          }
        },
        "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"
      }
    }
    ```
  </Accordion>

  <Accordion title="Reintentos de dunning">
    El segundo reintento automático de un cobro por reanudación, de cuatro permitidos. El motivo sigue siendo subscription\_resume.

    ```json Reintentos de dunning
    {
      "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": "subscription_resume",
          "paymentLinkId": null,
          "recovery": {
            "type": "dunning_retry",
            "attempt": 2,
            "maxAttempts": 4
          }
        },
        "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"
      }
    }
    ```
  </Accordion>

  <Accordion title="Sin contexto">
    No se capturó el contexto del cobro. No deduzcas el motivo original a partir del estado actual de la suscripción.

    ```json Sin contexto
    {
      "event": "payment.received",
      "timestamp": "2026-06-23T14:30:00.000Z",
      "organizationId": "8f14e45f-ceea-4e7a-9c3d-1c2b3a4d5e6f",
      "mode": "live",
      "apiVersion": "2026-08-27",
      "data": {
        "paymentContext": 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"
      }
    }
    ```
  </Accordion>
</AccordionGroup>

`paymentMethod` indica el medio usado en este cobro, independientemente de `provider`. Es `null` si no se conoce el medio del intento y no cambia cuando el cliente actualiza su medio guardado.

`subPaymentMethod` indica de dónde salieron los fondos de este cobro, por ejemplo `account_money` o `credit_card` dentro de Mercado Pago. Es `null` si falta el dato o no se reconoce.


## OpenAPI

````yaml /openapi/es/webhooks/2026-08-27.json webhook payment.received
openapi: 3.1.0
info:
  title: Commet Webhooks
  version: '2026-08-27'
  description: >-
    Outbound webhook events emitted by the Commet API. Each event is delivered
    as a signed POST to your configured endpoints.
servers: []
security: []
paths: {}

````

## Related topics

- [invoice.overdue](/docs/es/webhooks/invoice-overdue.md)
- [subscription.activated](/docs/es/webhooks/subscription-activated.md)
- [Create webhook endpoint](/docs/es/api-reference/webhooks/create-webhook-endpoint.md)
- [Update webhook endpoint](/docs/es/api-reference/webhooks/update-webhook-endpoint.md)
- [payment.disputed](/docs/es/webhooks/payment-disputed.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.