# Sacar para chave Pix (/docs/conta-digital/endpoints/withdrawals/post_withdraw)

## POST /transactions/withdraw

`POST https://api.hub.payzu.com.br/api/v1/transactions/withdraw`

Escopo: `WITHDRAW`. Envia um Pix da conta para uma chave Pix. `amount` é o que chega ao destino; a tarifa é somada por cima. O total sai do saldo disponível na hora do pedido e volta se o saque falhar. A resposta `201` não é dinheiro entregue: a confirmação vem pelo webhook `WITHDRAW_COMPLETED` e a falha por `WITHDRAW_FAILED`. Limite de requisições: 5 por minuto por credencial e 10 por conta, somados com pagamento de Pix copia e cola e estorno.

### Header params

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `Idempotency-Key` | string | no | Valor único por operação, de 1 a 255 caracteres ASCII visíveis, sem espaço. Repetir a chave com o mesmo valor e destino devolve a operação original; com outro valor ou destino, `409`. Vale por conta, sem expiração. — minLength: 1; maxLength: 255 |

### Body params

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `amount` | integer | yes | Valor que chega ao destino. A tarifa é somada por cima. Em centavos. — minimum: 1 |
| `pixKey` | string | yes | Chave Pix de destino. — minLength: 1; maxLength: 77 |
| `pixKeyType` | string | no | Tipo da chave. Conferido contra a chave; sem ele, o tipo é deduzido do formato, e 11 dígitos podem ser CPF ou celular. — `EVP`, `CNPJ`, `CPF`, `EMAIL`, `PHONE` |
| `comment` | string | no | Texto enviado ao destinatário, quando o banco dele exibe. — maxLength: 140 |
| `callbackUrl` | string | no | URL HTTPS pública que recebe todos os webhooks desta operação, além dos endpoints cadastrados. Até 2048 caracteres. Exige o segredo de callback da conta. — format: uri; maxLength: 2048 |

### Responses

**201** Saque registrado. Com a mesma `Idempotency-Key` e os mesmos dados, o saque existente, no estado atual.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `id` | string | yes | Identificador do saque. A consulta aceita este `id` e o `withdrawId` dos webhooks. |
| `status` | string | yes | `REQUESTED`: pedido feito; o valor já saiu do saldo disponível. `CREATED`: registrado no banco. `APPROVED`: aprovado, a caminho. `CONFIRMED`: o dinheiro chegou. `FAILED`: não saiu, e o valor voltou ao saldo; pode vir de `REQUESTED`, `CREATED` ou `APPROVED`. — `REQUESTED`, `CREATED`, `APPROVED`, `CONFIRMED`, `FAILED` |
| `amount` | integer | yes | Valor que chega ao destino. Em centavos. |
| `serviceFee` | integer | yes | Tarifa, somada por cima. Em centavos. |
| `totalDebited` | integer | yes | `amount + serviceFee`: o que sai da conta. Em centavos. |
| `pixKey` | string | yes | Chave de destino. No saque, a chave enviada, normalizada; no pagamento de Pix copia e cola, mascarada (CPF, e-mail e telefone saem mascarados; CNPJ e chave aleatória, legíveis.) |
| `comment` | string | null | yes | Texto enviado ao destinatário. |
| `e2e` | string | null | yes | End-to-end do Pix. `null` até o banco registrar. |
| `providerRejectedReason` | string | null | yes | Mensagem pronta para exibir, preenchida quando o banco recusou. |
| `callbackUrl` | string | null | yes | A `callbackUrl` enviada na criação. `null` quando não foi enviada. |
| `createdAt` | string | yes | Data e hora em ISO 8601, UTC. — format: date-time |
| `sentAt` | string | null | yes | Quando o banco registrou o saque. — format: date-time |
| `approvedAt` | string | null | yes | Quando o banco aprovou o saque. — format: date-time |
| `confirmedAt` | string | null | yes | Quando o dinheiro chegou ao destino. — format: date-time |

**400** Requisição inválida.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**401** Credencial ausente, inválida ou expirada.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**403** Sem permissão: escopo, IP ou operação desabilitada.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**409** Conflito com o estado atual.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**412** Falta um passo antes desta operação.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**422** Recusa de regra de negócio.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**429** Limite de requisições excedido.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**502** O banco não respondeu ou recusou.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**503** Serviço de consulta ou limitador indisponível; nada foi feito.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |