# Processe um estorno

Este guia mostra como reverter uma transação aprovada anteriormente com `initRefund`.

## Como funciona

Você inicia um estorno com `initRefund`. O parâmetro `refundData` define quem fornece o `paymentId`:

* **Estorno direto** — seu aplicativo fornece um `paymentId` conhecido.
* **Estorno indireto** — o usuário localiza a transação nas telas do SDK.

O resultado chega por um callback (consulte [Resultado da transação](/pt/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result)). É necessário um warm-up bem-sucedido (`WarmUpStatus.Success`).

> Estornos se aplicam somente a transações de **crédito** e **débito**. Transações Pix e voucher não podem ser estornadas.

## Antes de começar

Para um estorno direto, mantenha seu próprio histórico de transações. O SDK não expõe transações passadas, e o `paymentId` retornado no resultado da venda é a chave para estorná-la. Armazene o `paymentId` — você não precisa armazenar dados do cartão.

## Estorno direto

Informe o `paymentId` que você persistiu da venda original:

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

## Estorno indireto

Omita `refundData` (ou passe um `paymentId` vazio) para que o SDK conduza a busca nas próprias telas:

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

## Leia o resultado

O resultado chega em `onResult`. Em caso de sucesso, o payload é um `ICancelPaymentResponse`. Consulte [Resultado da transação](/pt/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) para os códigos e os campos do payload.

## Próximos passos

* [Referência do resultado da transação](/pt/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) — códigos de resultado e campos do payload.