Documentação

Solicitar Saque PIX

Solicite transferências PIX via API para enviar dinheiro para qualquer chave PIX.

Requisito de Segurança: IP autorizado ou Secret de saqueAlém da API Key (com o escopo withdrawals:write), todo saque precisa de um segundo fator: o IP de origem cadastrado em Configurações → Regras de Segurança ou, se você não tem IP fixo, o header x-withdrawal-secret com o seu Secret de saque. Veja Autorização do saque.
POST/v1/withdrawals

Solicita uma transferência PIX para a chave PIX informada

Parâmetros do Request

Headers

ParâmetroTipoObrigatórioDescrição
AuthorizationstringSimApiKey PUBLIC_KEY:SECRET_KEY. A API Key precisa do escopo withdrawals:write.Ex: "ApiKey ActivePayments_pk_xxx:ActivePayments_sk_xxx"
x-withdrawal-secretstringNãoSecret de saque (modo Saque via Secret). Obrigatório quando a requisição não sai de um IP autorizado. Copie em Configurações → Regras de Segurança → Secret para Saques.Ex: "9f2c4e…"
Content-TypestringSimSempre application/jsonEx: "application/json"

Body (JSON)

ParâmetroTipoObrigatórioDescrição
amountnumberSimValor que o destinatário recebe, em reais (mínimo: R$ 10, máximo: R$ 50.000). A taxa é somada por cima: o saldo é debitado em amount + fee.Ex: 100.00
pixKeyTypestringSimTipo da chave PIX (case-insensitive): cpf, cnpj, email, phone, evp ou randomEx: "email"
pixKeystringSimChave PIX do destinatário (8-100 caracteres)Ex: "destinatario@email.com"
descriptionstringNãoDescrição ou referência do saque (máx. 140 caracteres)Ex: "Saque API - REF-12345"
postbackUrlstringNãoURL para receber notificações de status do saque (webhook)Ex: "https://seusite.com/webhooks/withdrawal"
externalReferencestringNãoReferência externa para identificação no seu sistema (será retornada no webhook)Ex: "SAQUE-12345"

Autorização do saque: IP autorizado ou Secret de saque

Cada POST /v1/withdrawals passa pela API Key e por um destes dois fatores:

ModoQuando usarComo configurar
IP autorizado (padrão)Seu servidor sai sempre pelo mesmo IPCadastre o IP de saída do servidor em Configurações → Regras de Segurança. Requisição de outro IP é recusada.
Saque via Secret (IP dinâmico)Serverless, nuvem com IP variável ou plataforma de terceiros que faz os saques por vocêSolicite a habilitação ao suporte. O secret aparece em Configurações → Regras de Segurança → Secret para Saques (botões Ver, Copiar e Resetar). Envie-o no header x-withdrawal-secret em cada saque.
  • Com o Saque via Secret habilitado, uma requisição sem o header ainda é aceita se sair de um IP autorizado.
  • Integrando por uma plataforma de pagamentos que pede o "Secret de Saque" da ActivePayments? É este mesmo valor: copie na tela de Regras de Segurança e cole lá.
  • O secret autoriza saques: guarde só no servidor, nunca em front-end ou app. Se vazar, use Resetar. O anterior para de valer na hora, e o reset pede o código da verificação em duas etapas.
  • A mesma regra vale para o saque de subconta e para a conversão USDT.

Tipos de Chave PIX

TipoDescriçãoExemplo
cpfCPF do destinatário (apenas números, 11 dígitos)12345678901
cnpjCNPJ do destinatário (apenas números, 14 dígitos)12345678000190
emailEmail cadastrado como chave PIXemail@exemplo.com
phoneTelefone celular com código do país (+55) e DDD+5511999998888
evp ou randomChave aleatória (UUID gerada pelo banco)a1b2c3d4-e5f6-7890-abcd-ef1234567890

Exemplos de Código

curl -X POST "https://api.activepayments.com.br/api/v1/withdrawals" \
  -H "Authorization: ApiKey PUBLIC_KEY:SECRET_KEY" \
  -H "x-withdrawal-secret: SEU_SECRET_DE_SAQUE" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 10.00,
    "pixKeyType": "email",
    "pixKey": "destinatario@email.com",
    "externalReference": "SAQUE-12345"
  }'

Resposta

A API retorna os dados do saque criado, incluindo o ID para consulta posterior:

HTTP 201 Created
{
  "success": true,
  "data": {
    "withdrawalId": "34af7934-9991-41ea-aabc-e8601e98c8fb",
    "amount": "10",
    "fee": "1",
    "netAmount": "10",
    "totalDebited": "11",
    "status": "PENDING",
    "pixKey": "yur***com",
    "pixKeyType": "EMAIL",
    "createdAt": "2026-01-08T04:58:06.974Z",
    "message": "Saque solicitado com sucesso. Aguardando processamento."
  }
}

Campos da Resposta

  • withdrawalId: ID único do saque (use para consultar o status)
  • amount: Valor solicitado, que é o que chega ao destinatário (string com decimal — ex: "10.00")
  • fee: Taxa cobrada pela transferência (string)
  • netAmount: Valor transferido ao destinatário — igual a amount (string)
  • totalDebited: amount + fee, o que efetivamente sai do seu saldo (string)
  • status: Status atual do saque em uppercase (PENDING, APPROVED, PROCESSING, COMPLETED, REJECTED, FAILED)
  • pixKey: Chave PIX (parcialmente mascarada)
  • pixKeyType: Tipo da chave em uppercase (CPF, CNPJ, EMAIL, PHONE, EVP)
  • createdAt: Data/hora da solicitação (ISO 8601)
Como a taxa entra na contaO amount que você envia é o valor que chega ao destinatário. A taxa não sai de dentro dele: ela é somada por cima, e o seu saldo é debitado em amount + fee (o campo totalDebited). Um saque de 100.00 com taxa de 2.00 entrega R$ 100,00 e debita R$ 102,00.
Sobre os tipos numéricosOs campos amount, netAmount e fee são retornados como string (serialização de Decimal). Use parseFloat() (JS), float() (Python) ou equivalente antes de fazer cálculos.

Status do Saque

StatusDescrição
PENDINGAguardando processamento ou aprovação manual
PROCESSINGEm processamento no gateway de pagamento
COMPLETEDTransferência realizada com sucesso
FAILEDFalha na transferência (saldo devolvido)
REJECTEDRejeitado pelo admin (saldo devolvido)

Consultar Status do Saque

GET/v1/withdrawals/:id

Consulta o status atual de um saque

Use o withdrawalId retornado na criação para consultar o status. A consulta usa o escopo withdrawals:read e não exige IP autorizado nem x-withdrawal-secret:

Consultar Status
curl -X GET "https://api.activepayments.com.br/api/v1/withdrawals/a1b2c3d4-e5f6-7890-abcd" \
  -H "Authorization: ApiKey PUBLIC_KEY:SECRET_KEY"
HTTP 200 OK
{
  "success": true,
  "data": {
    "withdrawalId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "amount": "100.00",
    "fee": "2.00",
    "netAmount": "100.00",
    "totalDebited": "102.00",
    "status": "COMPLETED",
    "pixKey": "des***com",
    "pixKeyType": "EMAIL",
    "createdAt": "2024-01-15T10:30:00.000Z",
    "processedAt": "2024-01-15T10:35:00.000Z",
    "gatewayTransactionId": "gateway-tx-id"
  }
}

Códigos de Erro

CódigoDescriçãoSolução
400Saldo insuficienteVerifique se há saldo disponível para o valor + taxa
400KYC não aprovadoComplete a verificação de identidade (KYC) antes de sacar
400Valor mínimo R$ 10,00O valor do saque deve ser pelo menos R$ 10,00
400Secret de saque inválidoO header x-withdrawal-secret não confere. Copie de novo em Regras de Segurança (depois de um reset, só o novo vale)
400Saque via Secret habilitado: envie o header x-withdrawal-secret…Envie o header x-withdrawal-secret ou faça a requisição de um IP autorizado
401IP não autorizadoCadastre o IP de saída do servidor em Configurações → Regras de Segurança, ou solicite o Saque via Secret
401Nenhum IP autorizado configuradoCadastre ao menos um IP em Regras de Segurança, ou solicite o Saque via Secret
401Não autenticadoVerifique suas credenciais de API Key
403API Key não possui o escopo withdrawals:writeUse uma API Key com o escopo withdrawals:write (a consulta de status usa withdrawals:read)
404Saque não encontradoVerifique se o ID do saque está correto

Webhooks de Saque

Passe o parâmetro postbackUrl na criação do saque para receber notificações automáticas quando o status mudar.

Eventos Disponíveis

EventoDescrição
withdrawal.approvedSaque aprovado (aguardando processamento)
withdrawal.completedSaque transferido com sucesso
withdrawal.failedSaque falhou (saldo devolvido)
withdrawal.rejectedSaque rejeitado pelo admin (saldo devolvido)

Exemplo de Payload do Webhook

Webhook Payload
{
  "event": "withdrawal.completed",
  "timestamp": "2024-01-15T10:35:00.000Z",
  "data": {
    "withdrawalId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "externalReference": "SAQUE-12345",
    "amount": 102.00,
    "netAmount": 100.00,
    "fee": 2.00,
    "status": "completed",
    "pixKey": "email@exemplo.com",
    "pixKeyType": "EMAIL",
    "endToEnd": "E12345678202401151035abc123",
    "processedAt": "2024-01-15T10:30:00.000Z",
    "createdAt": "2024-01-15T10:25:00.000Z"
  }
}
Assinatura HMACO webhook inclui o header X-Webhook-Signature com assinatura HMAC-SHA256. Gere seu Webhook Secret em Configurações → Webhooks.

Boas Práticas

  • Sempre verifique o saldo: Consulte o endpoint /v1/balance antes de solicitar saques
  • Use postbackUrl: Receba notificações em tempo real sobre o status do saque
  • Valide a chave PIX: Certifique-se de que a chave PIX do destinatário está correta
  • Use referências únicas: Inclua uma descrição única para rastrear o saque no seu sistema
  • Verifique a assinatura: Sempre valide o header X-Webhook-Signature para garantir autenticidade
Próximo passoConfigure Webhooks para receber notificações automáticas sobre o status dos saques.