FullPix Transactions API
  1. Withdrawals
FullPix Transactions API
  • Introdução e Autenticação
  • Validação de Webhooks
  • Pix In
    • Transactions
      • Webhooks
      • Estornar transação
      • Criar nova transação
      • Obter detalhes de uma transação
  • Pix Out
    • Withdrawals
      • Webhooks
      • Criar Saque
        POST
  1. Withdrawals

Webhooks

Webhooks - API de Pix Out (Withdrawals)#

Configuração#

Para receber webhooks, você deve fornecer o campo postbackUrl ao criar um saque através da API:
{
    "pixkeytype": "CPF",
    "pixkey": "99999999999",
    "requestedamount": 254,
    "description": "Saque via API",
    "isPix": true,
    "postbackUrl": "https://seu-dominio.com/webhook/withdrawals"
}

Requisitos do Endpoint#

Seu endpoint de webhook deve:
✅ Aceitar requisições POST
✅ Responder com status HTTP 200 para confirmar recebimento
✅ Processar o payload JSON enviado no body
✅ Responder em até 30 segundos
✅ Usar HTTPS (recomendado para segurança)

Eventos Disponíveis#

📋 Lista de Eventos#

EventoDescriçãoQuando é enviado
withdrawal.createdSaque criado com sucessoImediatamente após criação bem-sucedida
withdrawal.status_changedStatus do saque foi alteradoQuando há mudança de status (ex: pending → approved)
withdrawal.completedSaque foi concluídoQuando o saque é finalizado com sucesso
withdrawal.failedSaque falhouQuando o saque falha ou é cancelado

🔄 Fluxo Típico de Eventos#

Exemplo de sequência:
1.
withdrawal.created - Status: pending
2.
withdrawal.status_changed - Status: approved
3.
withdrawal.status_changed - Status: processing
4.
withdrawal.completed - Status: done

Status de Saques#

📊 Todos os Status Possíveis#

StatusDescriçãoEvento Típico
pendingAguardando aprovação manualwithdrawal.created
approvedAprovado para processamentowithdrawal.status_changed
processingEm processamento pelo BaaSwithdrawal.status_changed
doneConcluído automaticamentewithdrawal.completed
done_manualConcluído manualmentewithdrawal.completed
failedFalhou durante processamentowithdrawal.failed
refusedRecusado na aprovaçãowithdrawal.failed
cancelledCancelado pelo sistemawithdrawal.failed

🔀 Transições de Status#

pending → approved → processing → done
pending → refused
approved → failed
processing → failed
pending → cancelled

Formato do Payload#

Estrutura Base#

Todos os webhooks seguem a mesma estrutura base:
{
    "event": "withdrawal.created",
    "timestamp": "2025-07-10T17:40:27.373Z",
    "withdrawal": {
        // Dados completos do saque
    },
    "metadata": {
        "source": "withdrawals_service",
        "version": "1.0.0"
    }
}

Objeto Withdrawal#

{
    "id": "756d4eec-9a22-44b0-a514-a27c366c5433",
    "company_id": "5e1ce642-b9f1-433c-a350-5f9cd3d16bf6",
    "requested_amount": 2.54,
    "currency": "BRL",
    "status": "pending",
    "created_at": "2025-07-10T14:40:26.270543",
    "updated_at": "2025-07-10T14:40:26.270543",
    "paid_at": null,
    "pix": {
        "key_type": "CPF",
        "key_value": "99999999999",
        "end_to_end_id": null
    },
    "fee": 0,
    "net_amount": 2.54,
    "error_message": null
}

Exemplos de Webhooks#

1. withdrawal.created#

Enviado quando um saque é criado com sucesso.
{
    "event": "withdrawal.created",
    "timestamp": "2025-07-10T17:40:27.373Z",
    "withdrawal": {
        "id": "756d4eec-9a22-44b0-a514-a27c366c5433",
        "company_id": "5e1ce642-b9f1-433c-a350-5f9cd3d16bf6",
        "requested_amount": 2.54,
        "currency": "BRL",
        "status": "pending",
        "created_at": "2025-07-10T14:40:26.270543",
        "updated_at": "2025-07-10T14:40:26.270543",
        "paid_at": null,
        "pix": {
            "key_type": "CPF",
            "key_value": "99999999999",
            "end_to_end_id": null
        },
        "fee": 0,
        "net_amount": 2.54,
        "error_message": null
    },
    "metadata": {
        "source": "withdrawals_service",
        "version": "1.0.0"
    }
}

2. withdrawal.status_changed#

Enviado quando o status de um saque é alterado.
{
    "event": "withdrawal.status_changed",
    "timestamp": "2025-07-10T17:45:12.123Z",
    "withdrawal": {
        "id": "756d4eec-9a22-44b0-a514-a27c366c5433",
        "company_id": "5e1ce642-b9f1-433c-a350-5f9cd3d16bf6",
        "requested_amount": 2.54,
        "currency": "BRL",
        "status": "approved",
        "created_at": "2025-07-10T14:40:26.270543",
        "updated_at": "2025-07-10T17:45:12.100000",
        "paid_at": null,
        "pix": {
            "key_type": "CPF",
            "key_value": "99999999999",
            "end_to_end_id": null
        },
        "fee": 0,
        "net_amount": 2.54,
        "error_message": null
    },
    "metadata": {
        "source": "withdrawals_service",
        "version": "1.0.0"
    }
}

3. withdrawal.completed#

Enviado quando um saque é concluído com sucesso.
{
    "event": "withdrawal.completed",
    "timestamp": "2025-07-10T18:15:45.456Z",
    "withdrawal": {
        "id": "756d4eec-9a22-44b0-a514-a27c366c5433",
        "company_id": "5e1ce642-b9f1-433c-a350-5f9cd3d16bf6",
        "requested_amount": 2.54,
        "currency": "BRL",
        "status": "done",
        "created_at": "2025-07-10T14:40:26.270543",
        "updated_at": "2025-07-10T18:15:45.400000",
        "paid_at": "2025-07-10T18:15:45.400000",
        "pix": {
            "key_type": "CPF",
            "key_value": "99999999999",
            "end_to_end_id": "E1234567890123456789012345678901"
        },
        "fee": 0,
        "net_amount": 2.54,
        "error_message": null
    },
    "metadata": {
        "source": "withdrawals_service",
        "version": "1.0.0"
    }
}

4. withdrawal.failed#

Enviado quando um saque falha ou é cancelado.
{
    "event": "withdrawal.failed",
    "timestamp": "2025-07-10T18:20:30.789Z",
    "withdrawal": {
        "id": "123e4567-e89b-12d3-a456-426614174000",
        "company_id": "5e1ce642-b9f1-433c-a350-5f9cd3d16bf6",
        "requested_amount": 100.0,
        "currency": "BRL",
        "status": "failed",
        "created_at": "2025-07-10T18:10:15.123456",
        "updated_at": "2025-07-10T18:20:30.750000",
        "paid_at": null,
        "pix": {
            "key_type": "EMAIL",
            "key_value": "usuario@exemplo.com",
            "end_to_end_id": null
        },
        "fee": 2.5,
        "net_amount": 97.5,
        "error_message": "Chave PIX não encontrada no sistema do banco"
    },
    "metadata": {
        "source": "withdrawals_service",
        "version": "1.0.0"
    }
}

Implementação#

Exemplo básico (Node.js/Express)#

Exemplo com validação (Python/Flask)#

Política de Retry#

Como funciona#

Tentativas: Até 3 tentativas de entrega
Intervalos: 1 minuto, 5 minutos, 15 minutos
Condição para retry: Status HTTP diferente de 200
Timeout: 30 segundos por tentativa

Sequência de retry#

Tentativa 1: Imediato
   ↓ (falha)
Tentativa 2: +1 minuto
   ↓ (falha)
Tentativa 3: +5 minutos
   ↓ (falha)
Tentativa 4: +15 minutos
   ↓ (falha)
Webhook descartado

Evitando retries desnecessários#

Segurança#

Validações Recomendadas#

1.
Validar origem: Verifique se a requisição vem de IPs confiáveis
2.
Validar estrutura: Confirme que o payload tem a estrutura esperada
3.
Rate limiting: Implemente rate limiting no seu endpoint
4.
Logs de auditoria: Registre todos os webhooks recebidos

Exemplo de validação de origem#

Debugging e Monitoramento#

Logs Importantes#

Métricas Úteis#

Taxa de sucesso: % de webhooks processados com sucesso
Tempo de resposta: Tempo para responder com status 200
Eventos por tipo: Distribuição dos tipos de evento
Retries: Quantidade de webhooks que precisaram de retry

Ferramentas de Teste#

webhook.site - Para testes rápidos
ngrok - Para expor localhost durante desenvolvimento
Postman - Para simular webhooks manualmente

Troubleshooting#

Problemas Comuns#

ProblemaCausaSolução
Webhooks não chegamURL inacessívelVerificar se URL responde e usa HTTPS
Múltiplos retriesNão responde 200Sempre responder com status 200
Payloads duplicadosProcessamento lentoImplementar idempotência usando withdrawal.id
TimeoutProcessamento > 30sProcessar de forma assíncrona

Checklist de Verificação#

URL do webhook está acessível publicamente
Endpoint responde com status 200
Tempo de resposta < 30 segundos
Tratamento de erros implementado
Logs de auditoria configurados
Validações de segurança ativas
Processamento idempotente

Suporte#

Para dúvidas sobre webhooks ou problemas de integração:
📧 Email: contato@fullpix.com.br
📚 Documentação: https://docs.fullpix.com.br
Última atualização: 07/11/2025
Modificado em 2025-11-07 05:44:33
Página anterior
Obter detalhes de uma transação
Próxima página
Criar Saque
Built with