curl --request POST \
--url https://api.sandbox.z2pay.com/v1/withdrawals \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"recipientId": "<string>",
"amount": 2,
"currency": "BRL"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({recipientId: '<string>', amount: 2, currency: 'BRL'})
};
fetch('https://api.sandbox.z2pay.com/v1/withdrawals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/withdrawals"
payload = {
"recipientId": "<string>",
"amount": 2,
"currency": "BRL"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "wdr_unbd7bvw5wiyyo5go6e9um9dm",
"amount": 300000,
"currency": "BRL",
"fee": 4867,
"netAmount": 295133,
"status": "requested",
"bankAccountId": "rba_mmw0ae28gelp9xz08x2czcgx0",
"paidAt": null,
"statusHistory": [
{
"status": "requested",
"changedBy": "api",
"changedAt": "2025-06-29T13:45:30.000Z",
"reason": null
}
],
"createdAt": "2025-06-29T13:45:30.000Z",
"updatedAt": "2025-06-29T13:45:30.000Z"
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"issues": [
{
"path": "status",
"message": "Status inválido. Valores aceitos: pending, waiting_payment, paid, refused, canceled, refunded"
},
{
"path": "startDate",
"message": "Data deve ser ISO 8601 com timezone (ex.: 2026-06-24T00:00:00Z)"
}
]
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}
}{
"error": {
"code": "CONFLICT",
"message": "No refundable payment found"
}
}{
"error": "Idempotency key already used with a different request body"
}Solicitar saque
Pede a retirada do saldo disponível de um recebedor para a conta bancária dele.
curl --request POST \
--url https://api.sandbox.z2pay.com/v1/withdrawals \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"recipientId": "<string>",
"amount": 2,
"currency": "BRL"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({recipientId: '<string>', amount: 2, currency: 'BRL'})
};
fetch('https://api.sandbox.z2pay.com/v1/withdrawals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/withdrawals"
payload = {
"recipientId": "<string>",
"amount": 2,
"currency": "BRL"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "wdr_unbd7bvw5wiyyo5go6e9um9dm",
"amount": 300000,
"currency": "BRL",
"fee": 4867,
"netAmount": 295133,
"status": "requested",
"bankAccountId": "rba_mmw0ae28gelp9xz08x2czcgx0",
"paidAt": null,
"statusHistory": [
{
"status": "requested",
"changedBy": "api",
"changedAt": "2025-06-29T13:45:30.000Z",
"reason": null
}
],
"createdAt": "2025-06-29T13:45:30.000Z",
"updatedAt": "2025-06-29T13:45:30.000Z"
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"issues": [
{
"path": "status",
"message": "Status inválido. Valores aceitos: pending, waiting_payment, paid, refused, canceled, refunded"
},
{
"path": "startDate",
"message": "Data deve ser ISO 8601 com timezone (ex.: 2026-06-24T00:00:00Z)"
}
]
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}
}{
"error": {
"code": "CONFLICT",
"message": "No refundable payment found"
}
}{
"error": "Idempotency key already used with a different request body"
}POST /withdrawals
Faz parte do recurso Saques — os estados e o fluxo de aprovação estão lá.
Solicita a retirada do saldo de um recebedor. O saque não sai na hora: ele entra como
requested e espera aprovação.
201 confirma que o pedido foi registrado, não que o
dinheiro saiu. O caminho é requested → approved → processing → paid, e cada passo depende da
aprovação e do processamento bancário. Quem tratar o 201 como “pago” contabiliza errado.amount é o que sai do saldo; o netAmount é o que chega na conta. A taxa é descontada do
valor pedido, não somada a ele — pedir 300000 com taxa de 4867 deposita 295133. Os três
campos vêm na resposta, e é o netAmount que o recebedor vê no extrato bancário.recipientId, não por carteira: a Z2Pay soma
todas as carteiras daquele recebedor na moeda indicada (BRL por padrão). Você não escolhe de
qual carteira sai.GET /wallets/owner/{ownerId}/balance antes — é o campo de
sacável que responde quanto cabe no pedido.GET /withdrawals/config: taxa percentual, taxa fixa e valor mínimo.
Abaixo do mínimo, o pedido é recusado.bankAccountId da resposta é a conta bancária
cadastrada do recebedor — para mudá-la, o caminho é
atualizar o recebedor.Exemplo
curl -X POST https://api.sandbox.z2pay.com/v1/withdrawals \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
-H "Content-Type: application/json" \
-d '{
"recipientId": "rec_v57bi6ruyolouw3cpaq2ofy1k",
"amount": 300000,
"currency": "BRL"
}'
{
"id": "wdr_unbd7bvw5wiyyo5go6e9um9dm",
"amount": 300000,
"currency": "BRL",
"fee": 4867,
"netAmount": 295133,
"status": "requested",
"bankAccountId": "rba_mmw0ae28gelp9xz08x2czcgx0",
"paidAt": null,
"statusHistory": [
{
"status": "requested",
"changedBy": "api",
"changedAt": "2026-08-11T13:00:00.000Z",
"reason": null
}
],
"createdAt": "2026-08-11T13:00:00.000Z"
}
Authorizations
API Key da Credential (gerada no Backoffice)
Headers
Chave única para garantir idempotência da requisição
Body
ID do recebedor cuja carteira será sacada.
1Valor do saque, em centavos.
x >= 1Código de moeda ISO 4217. Hoje o único valor aceito é 'BRL', que também é o padrão quando o campo é omitido.
BRL Response
Saque solicitado
Identificador único do registro.
Valor bruto em centavos
Moeda no padrão ISO 4217 (ex.: BRL).
Taxa em centavos
Valor líquido (amount - fee) em centavos
Situação do saque. Valores: requested, approved, processing, paid, cancelled, rejected, failed.
ID da conta bancária de destino do saque.
Data e hora em que o pagamento foi liquidado (ISO 8601).
Histórico de mudanças de status do saque.
Show child attributes
Show child attributes
Data e hora de criação do registro (ISO 8601).
Data e hora da última atualização do registro (ISO 8601).