# Procesa un reembolso

Esta guía muestra cómo revertir una transacción aprobada previamente con `initRefund`.

## Cómo funciona

Inicias un reembolso con `initRefund`. El parámetro `refundData` define quién proporciona el `paymentId`:

* **Reembolso directo** — tu aplicación proporciona un `paymentId` conocido.
* **Reembolso indirecto** — el usuario busca la transacción en las pantallas del SDK.

El resultado llega mediante un callback (consulta [Resultado de la transacción](/es/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result)). Se requiere un warm-up exitoso (`WarmUpStatus.Success`).

> Los reembolsos aplican solo a transacciones de **crédito** y **débito**. Las transacciones Pix y voucher no se pueden reembolsar.

## Antes de comenzar

Para un reembolso directo, mantén tu propio historial de transacciones. El SDK no expone las transacciones anteriores. El `paymentId` que devuelve el resultado de la venta es la clave para reembolsarla. Guarda el `paymentId` — no necesitas guardar los datos de la tarjeta.

## Reembolso directo

Proporciona el `paymentId` que guardaste de la venta original:

```kotlin
ApoloSdk.getClient().initRefund(
    context = activity,
    refundData = Refund(paymentId = paymentIdFromYourRecord),
    onResult = { result -> /* see Transaction result */ },
)
```

## Reembolso indirecto

Omite `refundData` (o pasa un `paymentId` vacío) para que el SDK guíe la búsqueda en sus propias pantallas:

```kotlin
ApoloSdk.getClient().initRefund(
    context = activity,
    onResult = { result -> /* see Transaction result */ },
)
```

## Lee el resultado

El resultado llega en `onResult`. En caso de éxito, el payload es un `ICancelPaymentResponse`. Consulta [Resultado de la transacción](/es/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) para ver los códigos y los campos del payload.

## Siguientes pasos

* [Referencia del resultado de la transacción](/es/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) — códigos de resultado y campos del payload.