Skip to content

Webhooks -- Visao Geral

Webhooks permitem que sua aplicacao receba notificacoes em tempo real sobre eventos na plataforma Owem Pay. Quando um evento ocorre, a Owem Pay envia um HTTP POST para a URL cadastrada.

Como Funciona

  1. Cadastre uma URL de webhook na sua conta
  2. Quando um evento ocorrer (ex: PIX recebido), a Owem Pay envia um HTTP POST para sua URL
  3. Sua aplicacao processa a notificacao e responde com status 2xx (200, 201 ou 204)

Eventos Disponiveis

EventoDescricao
pix.charge.createdQR code gerado
pix.charge.paidPIX recebido e liquidado
pix.charge.expiredQR code expirado (24h)
pix.payout.processingPIX enviado, aguardando confirmacao
pix.payout.confirmedPIX enviado e confirmado
pix.payout.failedPIX enviado rejeitado
pix.payout.returnedPIX enviado devolvido
pix.refund.requestedMED recebido, fundos bloqueados
pix.refund.completedMED finalizado
pix.return.receivedDevolucao PIX recebida (credito)
webhook.testTeste manual

Seguranca

Cada notificacao inclui headers de seguranca para validacao:

HeaderDescricao
X-Owem-SignatureAssinatura HMAC-SHA256 do payload
X-Owem-TimestampUnix timestamp em segundos do envio
X-Owem-Event-IdID unico do evento (para deduplicacao)
X-Owem-Event-TypeTipo do evento (ex: pix.charge.paid)

SHA256 nos webhooks vs SHA512 na API

A API usa HMAC-SHA512 para autenticar requisicoes que voce envia. Os webhooks enviados pela Owem Pay usam HMAC-SHA256 na assinatura X-Owem-Signature. Sao algoritmos diferentes -- cada um no seu contexto.

Validando a Assinatura

Valide a assinatura para garantir que a notificacao foi enviada pela Owem Pay:

javascript
const crypto = require('crypto');

function validateWebhook(payload, timestamp, signature, secret) {
  // timestamp is unix seconds (e.g., 1712160000)
  const message = `${timestamp}.${payload}`;
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(message)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

Valide sempre

Nunca processe um webhook sem validar a assinatura. Isso protege contra requisicoes falsificadas.

Retry Policy

Se sua URL retornar um status diferente de 2xx, a Owem Pay realiza retentativas automaticas:

TentativaIntervalo
1aImediato
2a1 minuto
3a5 minutos
4a30 minutos
5a2 horas

Apos 5 tentativas sem sucesso, o evento e marcado como failed e nao sera reenviado automaticamente.

Idempotencia

Sua aplicacao deve ser idempotente: se receber o mesmo evento mais de uma vez (identificado pelo X-Owem-Event-Id), deve processa-lo sem duplicar efeitos.

External ID nos Webhooks

Quando uma transacao foi criada com external_id, esse campo e incluido no payload do webhook dentro do objeto data. Use-o para correlacionar o evento com o pedido no seu sistema sem precisar fazer uma consulta adicional.

Requisitos do Endpoint

  • A URL deve usar HTTPS (a menos que allow_insecure: true no cadastro)
  • Deve responder com status 2xx em ate 5 segundos
  • O body da resposta e ignorado

Proximos Passos

Owem Pay Instituição de Pagamento — ISPB 37839059