Referência da API
Saque em cripto
Solicita um saque em criptomoeda (multi-rede). O valor + a taxa de cripto da sua conta são debitados e travados na hora; o envio é liquidado MANUALMENTE pela nossa operação, que informa o hash on-chain. Status inicial WITHDRAW_PROCESSING → WITHDRAW_APPROVED (com cryptoTxHash) ou WITHDRAW_REJECTED (valor estornado). Exige o módulo de cripto habilitado e valor mínimo de R$ 10.000.
Webhooks: na liquidação dispara cashout.success com o hash e os dados da rede (tx_hash, network, asset, wallet no payload, além de end_to_end_id = hash); na rejeição dispara cashout.failed (valor estornado). Mesmos eventos do saque PIX, só com os campos de cripto a mais.
/withdraws/cryptoAuthorization Como todo saque, a API key precisa da permissão createWithdraw pareada com IP allowlist no dashboard. Requisições de outro IP são rejeitadas com 400 IP unauthorized.Autenticação
HTTP Basic Auth. Envie sua secret key no header:
Authorization: Basic {base64(secret:SUA_SECRET_KEY)}Parâmetros
amountnumberobrigatórioValor do saque em centavos (BRL). A taxa de cripto da sua conta é somada por cima (debita valor + taxa, precisa ter saldo). Mínimo R$ 10.000 (1000000 centavos).
Exemplo: 1000000
network'TRX' | 'ETH' | 'BSC' | 'POLYGON' | 'SOL' | 'BTC'obrigatórioRede blockchain de destino.
Exemplo: TRX
asset'USDT' | 'USDC' | 'TRX' | 'ETH' | 'BNB' | 'POL' | 'SOL' | 'BTC'obrigatórioAtivo enviado. A combinação rede×ativo é validada: TRX→USDT,TRX · ETH→USDT,USDC,ETH · BSC→USDT,USDC,BNB · POLYGON→USDT,USDC,POL · SOL→USDT,USDC,SOL · BTC→BTC.
Exemplo: USDT
walletstringobrigatórioEndereço de destino, validado pelo formato da rede: TRON começa com 'T' (34 chars); ETH/BSC/POLYGON '0x' + 40 hex; Solana base58 32–44; Bitcoin 'bc1', '1' ou '3'.
Exemplo: TJ...endereco...
Body da requisição
Content-Type: application/json
{
"amount": 1000000,
"network": "TRX",
"asset": "USDT",
"wallet": "TJ...endereco..."
}Respostas
Saque aceito e travado. Status WITHDRAW_PROCESSING até a liquidação manual. fee e total em centavos.
{
"id": "withdraw-id-1234",
"status": "WITHDRAW_PROCESSING",
"network": "TRX",
"asset": "USDT",
"wallet": "TJ...endereco...",
"amount": 1000000,
"fee": 40000,
"total": 1040000,
"createdAt": "2026-10-19T15:00:00.000Z"
}Body inválido, rede×ativo não suportado, carteira inválida, abaixo do mínimo, módulo de cripto desabilitado, saque bloqueado, saldo insuficiente ou IP fora do allowlist.
{
"statusCode": 400,
"message": "Carteira inválida para Tron (TRC-20) — começa com 'T' e tem 34 caracteres."
}API key inválida ou ausente.
{ "statusCode": 401, "message": "Unauthorized" }API key sem a permissão createWithdraw.
{
"statusCode": 403,
"message": "You do not have permission to access this resource"
}Exemplos
curl -X POST "https://api.pagnovo.com/withdraws/crypto" \
-H "Authorization: Basic $(echo -n 'secret:SUA_SECRET_KEY' | base64)" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000000,
"network": "TRX",
"asset": "USDT",
"wallet": "TJ...endereco..."
}'const token = Buffer.from("secret:" + process.env.PAGNOVO_SECRET_KEY).toString("base64");
const res = await fetch("https://api.pagnovo.com/withdraws/crypto", {
method: "POST",
headers: {
Authorization: `Basic ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
amount: 1000000,
network: "TRX",
asset: "USDT",
wallet: "TJ...endereco...",
}),
});
if (!res.ok) {
const err = await res.json();
throw new Error(`saque cripto falhou: ${err.message}`);
}
const w = await res.json();
console.log("saque cripto:", w.id, w.status);
// liquidacao e manual: acompanhe por webhook / consulta do saque