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

# Saques

> withdrawal.requested, withdrawal.completed e withdrawal.failed: o ciclo de um saque visto pelo seu servidor.

| Evento | Quando | `data.status` |
| - | - | - |
| `withdrawal.requested` | o saque foi pedido (pela API, painel, app ou saque automático); valor e tarifa já saíram do saldo | `processing` |
| `withdrawal.completed` | o Pix caiu na chave de destino | `completed` |
| `withdrawal.failed` | não realizado (`reason` diz o motivo); valor e tarifa voltaram ao saldo | `failed` ou `rejected` |

`data.id` é o código do saque: `SAQ-API-` quando pedido pela API, `SAQ-` pelo painel, app ou saque automático.

## Corpo

O mesmo nos três eventos:

```json theme={null}
{
  "id": "evt_01JA7XF6V0X2Z4B6D8F0H2J4L6",
  "type": "withdrawal.completed",
  "created_at": "2026-10-08T15:12:30.410Z",
  "data": {
    "id": "SAQ-API-3F7K9Q2W8M4Z",
    "status": "completed",
    "method": "pix",
    "amount": 50000,
    "fee": 50,
    "channel": "api",
    "destination": { "key": "***.456.789-**", "name": "Ana S.", "institution": "Banco Exemplo" },
    "crypto": null,
    "endToEndId": "E12345678202610081512abcdef654321",
    "reason": null
  }
}
```

| Campo | O que é |
| - | - |
| `method` | `pix` ou `crypto` (USDT na rede Tron, pedido no painel ou no app) |
| `amount` | o que chega na chave, em reais (centavos); no saque em cripto, o valor em reais que virou USDT |
| `fee` | tarifa descontada do saldo além do `amount` |
| `channel` | `api`, `painel`, `app` ou `auto` (saque automático) |
| `destination` | chave sempre mascarada, titular e banco; no saque em cripto, a carteira mascarada, "Carteira USDT" e a rede |
| `crypto` | só no saque em cripto: `currency` (`usdt`), `network` (`trc20`), `amount` (USDT enviado, em texto) e `rate` (reais por 1 USDT); no Pix, `null` |
| `endToEndId` | identificador do Pix, preenchido em `withdrawal.completed` (no saque em cripto, `null`) |
| `reason` | motivo em `withdrawal.failed` (não realizado ou recusado) |

## O jeito certo de tratar

* **A criação não é a conclusão.** `withdrawal.requested` com `status: "processing"` significa "saindo"; só `withdrawal.completed` confirma.
* **`processing` é espera, não erro.** O valor fica reservado até o fim; o próximo evento será `withdrawal.completed` ou `withdrawal.failed`.
* **Em `failed`, o dinheiro já voltou.** Não peça o saque de novo sem olhar `reason`.
* **Dedupe pelo `id` do evento.** Reenvios e várias URLs trazem o mesmo `evt_`.
* **Saque automático também avisa.** Se o painel tem regras de saque automático, os eventos chegam com `channel: "auto"`.


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