Por que dois passos
Dividir um cash-out em iniciar e processar cria um ponto de verificação entre “quem é o beneficiário?” e “enviar o dinheiro”:
- Verifique o destino primeiro. Iniciar valida e resolve a conta do beneficiário sem tocar nos saldos. Uma chave Pix incorreta ou uma conta inválida falha aqui — antes de qualquer dinheiro se mover.
- Mostre ao pagador para quem ele está pagando. A resposta de iniciação retorna o titular da conta resolvido, para que seu aplicativo exiba o nome real e permita ao pagador confirmar antes de se comprometer.
- Mova fundos apenas com confirmação. Nada é debitado até você processar a transferência. Se o pagador abandonar o fluxo, não há nenhuma reversão a fazer — nunca houve movimentação a desfazer.
Ambos os passos são idempotentes — é seguro repeti-los sem criar transferências duplicadas. Consulte Retentativas e idempotência.
Passo 1 — Iniciar: confirmar o destino
Iniciar uma transferência cria um registro de curta duração que valida e resolve o beneficiário sem mover fundos. Como o plugin encontra o destino depende do que você tem em mãos:
| Com o que você começa | Tipo de iniciação | O que o plugin faz |
|---|---|---|
| Uma chave Pix (CPF, CNPJ, email, telefone ou EVP) | KEY | Busca a chave no DICT e resolve a conta de destino para você. |
| Um QR code (BR Code) | QR_CODE | Decodifica o código e resolve o destino via DICT. Consulte QR Codes. |
| Os dados completos da conta do beneficiário | MANUAL | Usa a agência, conta, participante e documento do titular que você fornece — sem consulta ao DICT. |
KEY e QR_CODE, você nunca fornece o destino. O plugin o resolve e o retorna na resposta, pronto para mostrar ao pagador para confirmação.
Requisição — escolha a aba do seu tipo de iniciação
type de conta são CACC (corrente), SVGS (poupança), TRAN (transacional) e OTHR (outra). endToEndId é opcional para todos os tipos — é gerado automaticamente quando omitido.
Resposta
A resposta retorna oid da iniciação (usado como initiationId no passo 2) e o destination resolvido:
As iniciações expiram. A resposta inclui um timestamp
expiresAt — processe a transferência antes que ela expire, ou inicie novamente. Isso evita que um destino confirmado fique obsoleto entre a busca e o pagamento.Passo 2 — Processar: mover o dinheiro
Processar pega a iniciação que você acabou de confirmar e executa o cash-out: debita a conta de origem e roteia o pagamento para o BTG para liquidação com o BACEN. A liquidação com a rede Pix é assíncrona. A transferência retorna como
PROCESSING enquanto o BTG liquida, e o resultado final — concluído ou falho — chega depois por um webhook cashout. Construa seu fluxo para reagir a esse evento em vez de esperar pela resposta de processamento. Consulte Webhooks.
Requisição
Passe oid da resposta de iniciação como initiationId, junto com o amount a transferir:
amount é obrigatório. Você também pode enviar um description opcional (máximo 140 caracteres) e metadata (atributos chave-valor personalizados).
O header X-Purpose
Use o header opcional X-Purpose para declarar por que o cash-out está acontecendo. O valor padrão é TRANSFER quando omitido:
| Valor | Quando usar |
|---|---|
TRANSFER | Um cash-out de Pix comum — o padrão para pagamentos ordinários. |
INSTANT_PAYMENT_REFUND | Quando o cash-out está devolvendo um pagamento instantâneo recebido anteriormente, para que a rede o classifique como uma devolução em vez de uma nova transferência. |
QR codes de valor fixo: quando a iniciação é um
QR_CODE cujo payload EMV carrega um valor fixo, o amount que você envia para processar deve ser igual a esse valor codificado. Uma divergência é rejeitada antes de qualquer movimentação de fundos.Resposta
Quando o destino pertence à sua própria instituição, o dinheiro nunca sai para o BTG — ele é liquidado internamente como uma transferência P2P. Consulte Transferências intra-PSP.
Acompanhando uma transferência
Toda transferência segue um ciclo de vida previsível: começa em
PENDING/PROCESSING enquanto está em andamento, e depois alcança um status terminal COMPLETED, FAILED ou CANCELLED. Para verificar em que ponto uma transferência está, você pode recuperar uma única pelo id, ou listar transferências filtrando por status, tipo (cash-out ou cash-in) ou intervalo de datas.
status, type (CASHOUT/CASHIN), end_to_end e modified_after/modified_before, além da paginação limit/offset/sort_order.
Quando uma transferência fica travada
Se a chamada de liquidação ao BTG expirar antes de confirmar, uma transferência pode ficar em
PROCESSING com seus fundos ainda retidos. O plugin oferece uma operação de unblock que reconsulta a transferência com o BTG e a leva ao status final correto — liquidando-a se o BTG confirmar, ou liberando a retenção se o BTG nunca a recebeu.
Unblock não se aplica a transferências intra-PSP — não há nenhuma transação do BTG para reconsultar. Para o comportamento completo do unblock e suas opções, consulte Operações de devolução.
Próximos passos
- Transferências intra-PSP — Liquidação P2P interna
- QR Codes — Geração e decodificação de QR codes
- Operações de devolução — Devoluções e unblock
- Webhooks — Tratamento de eventos de cash-out e cash-in
- Referência da API — Detalhes completos de requisição/resposta, headers e schemas de campos

