Skip to main content
Um endpoint só, POST /v1/payouts. O que muda é o method: chave PIX, código copia e cola, LTC ou USDT.

PIX

Sai na hora ou entra na fila de aprovação. O status da resposta diz qual foi.

LTC

Debita o saldo em Litecoin e envia após aprovação.

USDT

Converte BRL e entrega USDT na rede BEP20 em segundos.
Limite padrão de 10 saques por hora, por conta (todas as chaves somam no mesmo balde). O envio imediato tem um teto próprio de 5 por hora, que corre por dentro desse.

Saque PIX

Resposta 201
string
required
pix, pix_code (código copia e cola), ltc ou usd.
number
required
Valor em reais. O mínimo é o configurado para a sua conta (R$ 5,00 por padrão; o erro de valor baixo devolve minAmount com o mínimo vigente). Máximo de R$ 999.999,99, sempre limitado ao withdrawable da carteira.
string
required
Chave PIX, endereço LTC ou endereço USDT BEP20, conforme o method.
number
Quantidade em LTC. Obrigatório quando method é ltc.
A chave PIX precisa estar verificada no painel antes do primeiro saque. Sem isso a resposta é 403.

Saque LTC

O cryptoAmount é obrigatório aqui e precisa ser maior que zero. O saldo debitado é o cryptoBalanceLtc da carteira, não o saldo em reais.

Ler um código antes de pagar

O caminho recomendado tem três passos: POST /v1/payouts/decode para ler o código, a sua confirmação (tela, aprovação interna, o que fizer sentido) e só então POST /v1/payouts com method: "pix_code". Pagar direto funciona, mas aí você só descobre destino e valor depois que o PIX saiu, e ele não volta.
POST /v1/payouts/decode diz o que tem dentro do BR Code sem mover dinheiro: destino, valor, se o valor é fixo e a taxa que entra por cima. É com ela que você monta a tela de confirmação, ou a checagem automática que compara o que o código diz com o que você esperava pagar.
Precisa da mesma permissão do pagamento (saques.pix): quem pode pagar pode inspecionar. Não existe em sandbox, porque a leitura consulta o banco sobre uma cobrança de verdade. Código inválido, ou destino que não pode ser pago por aqui, vem como 400 com valid: false e o motivo.

Pagar um código copia e cola

method: "pix_code" paga um BR Code (o “copia e cola” do PIX) com o saldo da carteira. Serve pra quitar cobrança de fornecedor, boleto-QR, conta de serviço: em vez de você informar a chave do destino, o código carrega o destino e o valor. Antes disto, leia o código. O pagamento é imediato e não tem cancelamento.
Resposta 200
A taxa é somada, não descontada. O código diz quanto o recebedor recebe, e a taxa vem por cima: sai da carteira amount + fee, que é o campo debited. São esses três números que precisam bater no seu financeiro.

Quem manda no valor

Quase sempre o código, não você:
string
required
O copia e cola completo. Quebras de linha são ignoradas; o resto vai íntegro, porque é ele que carrega o destino.
number
Valor em reais. Só entra em QR estático sem valor: nos demais, o valor é o do código, e enviar um número diferente devolve 400 em vez de pagar.
Limites: de R$ 1,00 a R$ 5.000,00 por código, sobre o valor que o recebedor recebe (a taxa corre por fora). Precisa da permissão saques.pix na chave.

Como saber o desfecho

Pagamento de código não é saque, então ele tem família própria de evento: pix_payment.completed e pix_payment.failed. Eles carregam paymentId, que é o mesmo payment.id devolvido pelo pagamento, pra amarrar os dois sem tabela de-para. Isso importa porque a resposta do pagamento pode vir processing: o banco não confirmou ainda, e quem fecha é a conciliação minutos depois. Sem escutar o evento, esse pagamento fica sem desfecho do seu lado. Nunca repita um processing: ele pode ter saído. O corpo do evento, campo a campo, incluindo E2E, recebedor e a URL do comprovante, está em webhooks de saque.

O que pode barrar antes de pagar

Não funciona em sandbox: o pagamento lê um código real e envia PIX real. Com chave ps_test_ a resposta é 400, tanto aqui quanto no decode.

Quando o banco não confirma

As mesmas três saídas do envio imediato, pelo mesmo motivo: 200, status: "completed" ou "processing". O PIX saiu. Em processing só falta a confirmação do banco: trate como pago e não reenvie. 400, refunded: true. O banco recusou e o saldo voltou inteiro, taxa junto: não houve serviço pra cobrar. 202, requiresReview: true. Não veio resposta do banco. O pagamento pode ter saído, então o valor continua debitado até a verificação. Não repita: acompanhe pelo code (PAY-...) em GET /v1/payouts.

Quando o PIX sai na hora

O saque PIX pode ser enviado dentro da própria requisição, sem passar por fila. É a mesma chamada de sempre: a plataforma decide a rota e o status da resposta diz o que aconteceu.
Resposta 201
Envio imediato não tem volta. O dinheiro sai no mesmo request e não existe cancelamento depois. Quem tem a sua chave de API consegue mandar dinheiro pra fora sem passar por nenhuma aprovação. Guarde a chave como você guardaria a senha do painel.
Quando o envio é imediato, valem estas regras: É a mesma API do saque comum. Quem decide a rota é a plataforma, e o seu código trata pelo status da resposta, nunca presumindo qual foi. Todo saque PIX pela API sai imediato por padrão. Dois casos fogem disso, e nos dois o pedido continua valendo: ele entra na fila de aprovação em vez de virar erro. A resposta é 201 com status: "pending" e um turboReason dizendo por quê: Em ambos o saldo já foi debitado no 201, igual ao envio imediato. O que muda é quando o dinheiro chega ao destino.

O que cada resposta significa

Escreva o seu handler pra estes casos e ele cobre as duas rotas de uma vez: 201, status: "pending". Entrou na fila de aprovação, pelo motivo que vem em turboReason. Você recebe withdrawal.completed ou withdrawal.denied quando resolver. Não reenvie: o saldo já saiu da carteira e um segundo pedido vira um segundo saque. 201, status: "completed". Pago e confirmado. O recipientName é o nome que o banco registrou como dono da chave: confira que pagou a pessoa certa. 201, status: "processing". O PIX já saiu; só falta a confirmação do banco, que chega pelo webhook. Trate como pago, não como pendente, e não reenvie. 400. O pedido está errado e nada se moveu (ou o saldo já voltou, quando a resposta traz refunded: true). A mensagem diz o quê: valor fora da faixa (o erro de mínimo traz minAmount), chave vazia, saldo insuficiente (available na resposta), ou o banco recusou a chave do recebedor:
definitiveRejection: true significa que repetir o mesmo request nunca vai funcionar: conserte a chave antes de tentar de novo. 502, refunded: true. O envio não pôde ser concluído e o saldo já voltou. Nada saiu. Tente de novo mais tarde. 202, requiresReview: true. O único caso que exige cuidado: a transferência pode ter sido enviada e a confirmação não chegou. O valor permanece debitado até a verificação: é isso que garante que o mesmo saque nunca vira dois PIX. Não repita o request; acompanhe o code em GET /v1/payouts e pelo webhook. 409 / 429. Já existe um envio em andamento (ou requests demais em sequência). Dinheiro pode estar em trânsito: aguarde, consulte GET /v1/payouts e só então decida reenviar. 403. Chave PIX pendente de verificação. Resolve no painel, em Carteira. 503. A plataforma não conseguiu confirmar as condições do saque e nada foi debitado. Repita. Janela de manutenção do envio imediato não cai aqui: ela volta 201 com turboReason: "turbo_maintenance", porque o pedido foi aceito. Regra de bolso: 201 olhe o status; 400 conserte e repita; 502/503 repita mais tarde; 202/409/429 congele e consulte; refunded: true diz se o saldo já voltou.

Saque em USDT

Converte o saldo em reais e envia USDT na rede BEP20 na hora.
Resposta 201
confirmNotCoinbase: true é obrigatório. Depósito da Coinbase não aceita USDT BEP20, e o valor enviado para lá é perdido, sem recuperação. A confirmação existe para você parar e conferir a rede do endereço antes de mandar.
Por segurança contra fraude, o saque em USDT só é liberado depois que a loja fizer o primeiro saque em PIX. Antes disso a resposta é 403.

Status

PIX comum
Aguardando aprovação.
todos
Pago.
todos
Negado. O valor volta para o saldo.
turbo e USDT
O pagamento foi enviado e a confirmação ainda não voltou. O dinheiro já saiu. Não repita o request.

Erros e o que fazer

202 e processing são os dois casos em que reenviar o request paga duas vezes. Trate ambos como sucesso provisório e reconcilie por GET /v1/payouts.

Listando

walletAddress volta sempre mascarado, com os primeiros caracteres e ***. Dado sensível (CPF, chave PIX completa) não aparece em resposta nem em log.
A listagem devolve o status cru, em português: pendente, concluido, negado, processing (turbo aguardando o banco) e falhou. São esses os valores do filtro ?status=. O status em inglês (pending/completed/processing) aparece só na resposta do POST.
Cada mudança de status também dispara um webhook de saque.