Pular para o conteúdo principal

Visão Geral

Os webhooks de PIX Cash In notificam seu sistema em tempo real sobre mudanças de status nas cobranças PIX, garantindo que você possa processar pedidos e atualizar sua aplicação imediatamente após os pagamentos.
Todos os webhooks são enviados via POST com payload JSON e assinatura de segurança.

Status dos Webhooks

Transação PIX foi paga com sucesso pelo cliente. Valores creditados na conta.

ERROR

Transação PIX falhou durante o processamento. Pode ocorrer por diversos motivos técnicos.

Configuração

Configure a URL do webhook PIX através do endpoint de configuração de conta:
cURL
curl --request POST \
  --url https://api-gateway.firebanking.com.br/v1/account/webhook \
  --header 'x-api-key: sua_chave_api' \
  --header 'Content-Type: application/json' \
  --data '{
    "pixWebhookUrl": "https://meusite.com.br/webhooks/pix"
  }'
Para configuração completa de webhooks, acesse a documentação de configuração.

Payload dos Webhooks

PIX Recebido (Status: PAID)

{
  "transactionId": "03cadd36-fddd-4091-9ffe-67b0483cbcf5",
  "businessTransactionId": "pedido-12345",
  "status": "PAID",
  "value": 15000,
  "movementType": "CREDIT",
  "endToEndId": "E00000000202401151045300123456789",
  "pixKey": "[email protected]",
  "createdDate": "2024-01-15T10:30:00.123Z",
  "ReceiverBankAccount": "567890",
  "ReceiverToBankAccountDigit": "1",
  "ReceiverBankBranch": "0001",
  "ReceiverBankCode": "077",
  "ReceiverDocumentNumber": "45438750000188",
  "ReceiverBankName": "BANCO INTER S.A.",
  "ReceiverBankISPB": "00416968",
  "ReceiverName": "MINHA EMPRESA LTDA",
  "PayerBankAccount": "123456",
  "PayerBankAccountDigit": "7",
  "PayerBankBranch": "0001",
  "PayerBankCode": "001",
  "PayerDocumentNumber": "12345678901",
  "PayerBankName": "BANCO DO BRASIL S.A.",
  "PayerBankISPB": "00000000",
  "PayerName": "JOAO COSTA SILVA",
  "VoucherUrl": "https://voucher.firebanking.com/pix/03cadd36-fddd-4091-9ffe-67b0483cbcf5.pdf"
}

Transação com Erro (Status: ERROR)

{
  "transactionId": "error-1234-5678-9abc-def012345678",
  "businessTransactionId": "pedido-erro-12345",
  "status": "ERROR",
  "value": 15000,
  "movementType": null,
  "endToEndId": null,
  "pixKey": "[email protected]",
  "createdDate": "2024-01-15T14:30:45.123Z",
  "ReceiverBankAccount": null,
  "ReceiverToBankAccountDigit": null,
  "ReceiverBankBranch": null,
  "ReceiverBankCode": null,
  "ReceiverDocumentNumber": null,
  "ReceiverBankName": null,
  "ReceiverBankISPB": null,
  "ReceiverName": null,
  "PayerBankAccount": null,
  "PayerBankAccountDigit": null,
  "PayerBankBranch": null,
  "PayerBankCode": null,
  "PayerDocumentNumber": null,
  "PayerBankName": null,
  "PayerBankISPB": null,
  "PayerName": null,
  "VoucherUrl": null
}

Campos da Transação

Estrutura Principal

_id
string
required
ID único da transação (ObjectId)
businessId
string
required
ID do business que recebeu o PIX
operation
object
required
Dados da operação PIX
payer
object
required
Dados do pagador (cliente externo)
createdAt
string
required
Data de criação da transação (ISO 8601)
updatedAt
string
required
Data da última atualização (ISO 8601)

Campo Operation

operation.type
string
required
Tipo da operação: PAYMENT ou REFUND
operation.method
string
required
Método: sempre PIX
operation.direction
string
required
Direção: sempre IN (recebimento)
operation.status
string
required
Status: PAID ou ERROR
operation.movementType
string
required
Tipo de movimento: CREDIT (entrada) ou DEBIT (saída)
operation.value
number
required
Valor original em centavos (R$ 150,00 = 15000)
operation.result
number
required
Valor efetivado em centavos
operation.fee
number
required
Taxa cobrada em centavos
operation.provider
string
required
Provedor utilizado: CELCOIN, WOOVI, etc.
operation.providerID
string
required
ID da transação no provedor
operation.externalID
string
ID externo fornecido pelo cliente
operation.description
string
Descrição da transação
operation.additionalInfo.endToEndId
string
required
ID end-to-end do PIX (BACEN)

Implementação do Webhook

Endpoint Receptor

const express = require('express');
const crypto = require('crypto');
const app = express();

app.use(express.raw({ type: 'application/json' }));

app.post('/webhooks/pix', (req, res) => {
  const signature = req.headers['x-firebanking-signature'];
  const payload = req.body;
  
  // Verificar assinatura
  if (!verifySignature(payload, signature)) {
    return res.status(401).send('Unauthorized');
  }
  
  const webhook = JSON.parse(payload);
  
  switch (webhook.operation.status) {
    case 'PAID':
      handlePaymentReceived(webhook);
      break;

    case 'ERROR':
      handleTransactionError(webhook);
      break;
  }
  
  res.status(200).send('OK');
});

function verifySignature(payload, signature) {
  const secret = process.env.FIREBANKING_WEBHOOK_SECRET;
  const hash = crypto.createHmac('sha256', secret)
                    .update(payload)
                    .digest('hex');
  return signature === `sha256=${hash}`;
}

function handlePaymentReceived(transaction) {
  console.log(`PIX recebido: R$ ${transaction.operation.value / 100}`);
  console.log(`End-to-end ID: ${transaction.operation.additionalInfo.endToEndId}`);
  console.log(`Cliente: ${transaction.payer.fullName}`);

  // Processar pedido, enviar produto, etc.
  updateOrderStatus(transaction.operation.externalID, 'paid');
  sendConfirmationEmail(transaction.payer.fullName);
}

app.listen(3000);

Segurança

Verificação de Assinatura

Todos os webhooks incluem uma assinatura HMAC-SHA256 no header X-Firebanking-Signature:
X-Firebanking-Signature: sha256=a1b2c3d4e5f6...

Testando Webhooks

Ambiente de Desenvolvimento

Use ferramentas como ngrok para testar localmente:
Terminal
# Expor localhost:3000
ngrok http 3000

# Configurar webhook PIX
curl -X POST https://api-gateway.firebanking.com.br/v1/account/webhook \
  -H 'x-api-key: sua_chave_api' \
  -H 'Content-Type: application/json' \
  -d '{"pixWebhookUrl": "https://abc123.ngrok.io/webhook"}'
Para informações completas sobre testes de webhooks, consulte a documentação de configuração.

Monitoramento

Dashboard de Webhooks

Acompanhe a saúde dos seus webhooks:
  • Taxa de sucesso
  • Tentativas de retry
  • Webhooks falhados
  • Tempo de resposta

Boas Práticas

Performance

  • Resposta rápida: Retorne 200 imediatamente
  • Processamento assíncrono: Use filas para tarefas demoradas
  • Cache de duplicatas: Evite reprocessamento
  • Timeout adequado: Configure timeout do servidor

Confiabilidade

  • Valideção rigorosa: Sempre verifique assinatura
  • Idempotência: Trate webhooks duplicados
  • Retry manual: Tenha processo para webhooks falhados
  • Monitoring: Monitore taxas de sucesso

Segurança

  • HTTPS obrigatório: Nunca use HTTP
  • Validação de origem: Confirme que vem da FireBanking
  • Log de segurança: Registre tentativas de webhook
  • Secret seguro: Mantenha webhook secret em variáveis de ambiente

Próximos Passos