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

# Contracargo de tarjeta

> El proveedor de pagos informó un contracargo sobre un cargo que ya se había procesado.

Se dispara cuando el proveedor de pagos informa un **contracargo** sobre una orden ya procesada: el titular de la tarjeta desconoció el cargo o su banco lo revirtió.

<Warning>
  Este evento llega sobre un cobro que **ya diste por bueno**. Si marcaste la deuda como pagada, aquí tienes que revertir ese estado en tu sistema.
</Warning>

|                           |                                         |
| ------------------------- | --------------------------------------- |
| **`type`**                | `CARD_PAYMENT_CHARGEBACK`               |
| **`status`**              | No aplica: este evento no trae `status` |
| **Llave de idempotencia** | `operationId`                           |

## El payload

| Campo              | Tipo           | Presente | Descripción                                                                                          |
| ------------------ | -------------- | -------- | ---------------------------------------------------------------------------------------------------- |
| `type`             | String         | Siempre  | Siempre `"CARD_PAYMENT_CHARGEBACK"`.                                                                 |
| `operationId`      | String         | Siempre  | Identificador de la orden afectada.                                                                  |
| `chargebackReason` | String \| null | Variable | Motivo del contracargo, del catálogo cerrado de abajo. `null` cuando el proveedor no informa motivo. |
| `chargebackDate`   | String         | Siempre  | Fecha del contracargo, en ISO 8601.                                                                  |
| `amount`           | Number         | Siempre  | Monto del contracargo.                                                                               |
| `currency`         | String         | Siempre  | Moneda del contracargo, por ejemplo `"MXN"`.                                                         |
| `companyCode`      | String \| null | Siempre  | Código de la empresa. La clave siempre viene; el valor puede ser `null`.                             |
| `companyName`      | String \| null | Siempre  | Nombre de la empresa. Mismo criterio que `companyCode`.                                              |
| `hash`             | String \| null | Siempre  | Hash de verificación. `null` si no tienes llave pública configurada.                                 |

<Note>
  Este payload **no trae `status`**, porque un contracargo no describe el estado de un pago sino un hecho posterior sobre un cargo ya procesado. Tampoco trae `bank`: eso es de los eventos de débito bancario.
</Note>

## Motivos del contracargo

`chargebackReason` es un **catálogo cerrado**, a diferencia del [contracargo de débito bancario](/es/webhooks/contracargo-de-debito), donde es texto libre. Puedes ramificar tu lógica sobre estos valores con confianza.

Los valores posibles son `FRAUD`, `DUPLICATE`, `NOT_AS_DESCRIBED`, `NOT_RECEIVED` y `UNRECOGNIZED`. El motivo lo informa el proveedor de pagos.

<Tip>
  El motivo llega **siempre en mayúsculas**, en su forma canónica, sin importar cómo lo haya escrito el proveedor. Un motivo fuera del catálogo se rechaza en validación y la notificación no se entrega, así que nunca vas a recibir un valor inesperado en este campo. Lo que sí puede llegar es `null`.
</Tip>

## Ejemplos

<CodeGroup>
  ```json Contracargo por fraude theme={null}
  {
    "type": "CARD_PAYMENT_CHARGEBACK",
    "operationId": "ORD-88888",
    "chargebackReason": "FRAUD",
    "chargebackDate": "2026-07-09T14:30:00Z",
    "amount": 25000,
    "currency": "MXN",
    "companyCode": "MX-S-12345",
    "companyName": "ACME",
    "hash": "encrypted-base64-string"
  }
  ```

  ```json Sin motivo y sin llave pública theme={null}
  {
    "type": "CARD_PAYMENT_CHARGEBACK",
    "operationId": "ORD-88888",
    "chargebackReason": null,
    "chargebackDate": "2026-07-09T14:30:00Z",
    "amount": 25000,
    "currency": "MXN",
    "companyCode": "MX-S-12345",
    "companyName": "ACME",
    "hash": null
  }
  ```
</CodeGroup>

<Card title="Campos comunes, hash e idempotencia" icon="bookmark" href="/es/webhooks">
  Lo que comparten todos los webhooks de esta familia.
</Card>
