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

# Webhook refund_in

> Devolución de un cash-in — un pago recibido fue devuelto al pagador

## Cuándo se dispara

El webhook del tipo `refund_in` recibe el evento `transaction.cash_in.returned`: un **cash-in que recibiste fue devuelto al pagador**. El saldo correspondiente se debita de tu cuenta.

Escenarios comunes:

* Reverso por motivo de fraude o error
* Devolución dentro del plazo de la red SPEI

## Payload

```json theme={"system"}
{
  "event": "transaction.cash_in.returned",
  "transactionId": "12345",
  "amount": 50000,
  "currency": "MXN",
  "status": "RETURNED",
  "destinationClabe": "012180001234567890",
  "sourceClabe": "646180123456789012",
  "reference": "1234567",
  "voucher": null,
  "occurredAt": "2026-05-14T11:45:00.000Z"
}
```

El `transactionId` es el **mismo** del cash-in original — úsalo para localizar la orden y marcarla como devuelta.

## Headers

| Header               | Valor                                     |
| -------------------- | ----------------------------------------- |
| `x-event-id`         | UUID único del evento (úsalo para dedupe) |
| `X-NTXPay-Signature` | `sha256=<hmac>` del cuerpo crudo          |

## Respuesta Esperada

`200 OK` en un máximo de 10 segundos.

## Procesamiento

```typescript theme={"system"}
const event = JSON.parse(rawBody.toString());
if (event.event === 'transaction.cash_in.returned') {
  // El débito del saldo ya ocurrió automáticamente
  await markOrderRefunded(event.transactionId, event.amount);
}
```

Para el handler completo con validación HMAC y dedupe en Node.js, Python, Java y Go, consulta [Implementación](/es/guides/webhooks/implementation).
