VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/Webhooks e eventos

Visão geral da entrada

Como gateways de pagamento, antifraude, emissores de nota fiscal e canais de mensagem avisam a loja, onde fica a URL de cada um e como cada chamada é autenticada.

Nos webhooks de entrada o fluxo se inverte: quem chama é um parceiro e quem responde é a loja. O gateway aprova um Pix, o emissor autoriza uma nota, o WhatsApp entrega uma mensagem, e cada um faz um POST para uma URL da Venddor. A plataforma confere que a chamada é legítima, atualiza o pedido, o pagamento ou a nota e responde.

Estas rotas não usam token de usuário. Elas são públicas na internet e se protegem com o segredo de cada integração. Quem configura a integração (a equipe da loja) cola a URL no painel do parceiro e cadastra o segredo correspondente no painel da Venddor. Esta seção documenta o contrato para quem constrói ou depura um conector.

Onde fica a URL

A URL é sempre o endereço da loja mais o caminho da rota:

text
https://minhaloja.io.venddor.com.br/api/v1/webhooks/pagarme

A loja é identificada pelo domínio da chamada. Por isso a URL cadastrada no parceiro tem de usar o domínio da loja, não um endereço genérico. Duas exceções existem: a rota de nota fiscal com {tenantID} no caminho, que escolhe a loja pelo identificador, e o callback central do WhatsApp, que não pertence a uma loja e descobre o destino pelo número de telefone.

Autenticação de cada parceiro

RotaComo a chamada prova quem éQuando falha
/webhooks/payments/{provider}Cabeçalho X-Webhook-Signature (ou X-Signature): HMAC-SHA256 do corpo bruto401 sem segredo na loja ou sem assinatura; 403 assinatura errada
/webhooks/pixCabeçalho X-Webhook-Secret igual ao segredo cadastrado401
/webhooks/pagarmeCabeçalho X-Hub-Signature: HMAC-SHA256 do corpo bruto500 com a causa em detail
/webhooks/braspagNenhuma assinatura; a loja reconsulta a Braspag para saber o status verdadeiroNão se aplica
/webhooks/clearsaleCabeçalho X-Webhook-Secret igual ao segredo cadastrado403 sem segredo na loja; 401 segredo errado
/webhooks/focusnfeCabeçalho X-Webhook-Secret ou parâmetro ?secret=503 sem segredo na loja; 401 segredo errado
/webhooks/whatsapp/{tenant_slug}Cabeçalho X-Hub-Signature-256 (HMAC-SHA256 com o segredo do app da Meta)403 sem segredo na loja; 401 assinatura inválida
/webhooks/whatsapp-routesCabeçalho X-Hub-Signature-256403 sem segredo; 401 assinatura inválida
/webhooks/whatsapp-routes/registerCabeçalho X-Api-Key (chave mestra de rotas)401 sem chave; 403 chave inválida

A regra comum é falhar fechado: sem segredo cadastrado na loja a chamada é recusada, em vez de aceita sem conferir. Isso protege contra quem descobre a URL e finge ser o gateway.

Respostas e novas tentativas

Cada parceiro tem a sua política de tentativas, e a resposta da loja foi desenhada para ela:

  • Pagar.me repete a notificação quando recebe status diferente de 2xx. Uma notificação repetida de um evento já processado recebe 200 e não altera o pedido de novo.
  • Braspag e ClearSale: a loja responde 200 mesmo quando o processamento interno falha ({"status":"error_logged"}), para o parceiro não repetir sem fim. Falhas de autenticação continuam sendo 401 ou 403.
  • Nota fiscal (FocusNFe): referência desconhecida devolve 404 de propósito, para que o emissor entregue de novo mais tarde.
  • WhatsApp (Meta) exige confirmação rápida e repete por vários dias quando não recebe 2xx. A loja confirma com 200 mesmo se o processamento interno falhar.

Módulos

Cada rota depende do módulo do parceiro estar ativo na loja (Pix, Pagar.me, Braspag, FocusNFe, ClearSale, WhatsApp Commerce). Com o módulo desligado a resposta é 403 com {"error":"module_disabled","module":"<slug>"}, exceto a rota genérica de pagamentos, que responde 200 com {"message":"module disabled"} para o gateway não repetir.

Testar uma rota de entrada

Simule o parceiro com curl usando o segredo cadastrado. Para as rotas de HMAC, calcule a assinatura sobre o corpo exato:

bash
BODY='{"type":"charge.paid","data":{"id":"ch_123","code":"ORDER_3f73310d-bfdd-4713-a664-305c08eda58b"}}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$PAGARME_SECRET_KEY" | sed 's/^.* //')

curl -i -X POST "$BASE_URL/api/v1/webhooks/pagarme" \
  -H "Content-Type: application/json" \
  -H "X-Hub-Signature: $SIG" \
  -d "$BODY"

Teste só em uma loja de homologação: a chamada altera de verdade o status do pedido citado.

Rotas de entrada

PáginaRotas
Pagamentos e antifraudepayments/{provider}, pix, pagarme, braspag, clearsale
Nota fiscalfocusnfe, focusnfe/{tenantID}
WhatsApp da lojawhatsapp/{tenant_slug} (GET e POST), /flow, /public_key
Callback central do WhatsAppwhatsapp-routes (GET e POST), whatsapp-routes/register

Outros parceiros (outros gateways, transportadoras e canais) têm rotas próprias que não fazem parte desta seção.

Erros comuns

  • Cadastrar a URL do domínio errado. O parceiro chama um domínio que não é o da loja e recebe 404 ou age sobre outra loja.
  • Assinar o JSON reformatado. Em rotas de HMAC, a assinatura vale para os bytes exatos do corpo.
  • Esquecer de cadastrar o segredo na loja. O parceiro está configurado, mas a loja recusa tudo com 401, 403 ou 503.
  • Módulo desligado. module_disabled aparece quando o módulo do parceiro não foi ativado na loja.
  • Testar em produção. As rotas atuam sobre pedidos reais.

Veja também

  • Webhooks de saída: visão geral
  • Verificar a assinatura
Anterior
Entregas do seller
Próxima
Pagamentos e antifraude
Nesta página
  • Onde fica a URL
  • Autenticação de cada parceiro
  • Respostas e novas tentativas
  • Módulos
  • Testar uma rota de entrada
  • Rotas de entrada
  • Erros comuns
  • Veja também