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

Webhooks e eventos

Como a Venddor avisa o seu sistema quando algo acontece (webhooks de saída) e como gateways, transportadoras e canais avisam a Venddor (webhooks de entrada).

Um webhook é uma chamada HTTP que um sistema faz para outro no momento em que algo acontece, em vez de o outro ficar perguntando de tempos em tempos. A Venddor usa webhooks nos dois sentidos. Nos webhooks de saída, a plataforma faz um POST para uma URL sua quando um pedido é criado, um produto muda, um cliente se cadastra e assim por diante. Nos webhooks de entrada, um gateway de pagamento, uma transportadora, um emissor de nota fiscal ou o WhatsApp faz um POST para a loja avisando que um pagamento foi aprovado, uma nota foi autorizada ou chegou uma mensagem.

Esta seção explica os dois sentidos, lista todos os eventos com o corpo real de cada um, mostra como verificar a assinatura de cada chamada e documenta as rotas para cadastrar e acompanhar webhooks. Ela também cobre os modificadores de dados, o catálogo de transformações que a importação de produtos aplica a cada linha.

Pontos-chave
  • Saída: você cadastra uma URL e os eventos que quer receber. A Venddor envia um POST JSON assinado com HMAC-SHA256 no cabeçalho X-Venddor-Signature.
  • O envio é assíncrono, sem ordem garantida e pelo menos uma vez. Seu receptor precisa ser idempotente e responder rápido (o limite é 30 segundos).
  • Respostas 5xx e falhas de rede são reenviadas até 3 vezes (agora, 30 segundos, 5 minutos). Respostas 4xx não são reenviadas.
  • Entrada: cada gateway tem a sua rota e a sua forma de autenticar (segredo compartilhado ou assinatura HMAC). Sem segredo configurado na loja, a chamada é recusada.
  • O segredo de um webhook de saída aparece uma única vez, na resposta da criação. Guarde-o.

Como funciona

Webhooks de saída

Evento na loja→Webhooks assinantes→POST assinado→Sua resposta→Registro da entrega
  1. Escolha os eventos

    Consulte o catálogo de eventos e decida quais interessam. Um ERP costuma assinar order.created e order.statusChanged. Um indexador de busca assina product.*.

  2. Cadastre a URL

    Chame Cadastrar webhook (administrador) ou Webhooks do seller (lojista). A resposta traz o secret. Ele não será mostrado de novo.

  3. Teste

    Use Enviar evento de teste para ver a sua URL receber uma chamada real, assinada, com event: "test".

  4. Verifique a assinatura e responda 2xx

    Calcule o HMAC do corpo bruto e compare com o cabeçalho (Verificar a assinatura). Responda 200 logo e processe o evento em segundo plano.

  5. Acompanhe

    Consulte o registro de entregas para ver status HTTP, tempo de resposta e erro de cada tentativa, e reenvie uma entrega que falhou.

Webhooks de entrada

Gateway ou canal→POST na URL da loja→Autenticação da chamada→Atualização do pedido ou da nota→2xx

Você (ou a equipe da loja) informa a URL da Venddor no painel do gateway. Quando o gateway tem algo a dizer, chama essa URL. A Venddor valida a autenticação, atualiza o pedido, o pagamento ou a nota fiscal e responde. As regras de cada parceiro estão em Visão geral da entrada.

Conceitos-chave

Quem recebe o quê (administrador e seller)

Existem dois tipos de assinante de saída.

Webhook do administradorWebhook do seller (lojista)
Rotas/api/v1/admin/webhooks/api/v1/vendor/webhooks
Quem cadastraUsuário administrador com o privilégio manage_webhooks ou manage_settingsUsuário do seller com permissão de configurações
O que recebeEventos de toda a lojaSomente eventos dos próprios pedidos e produtos
Eventos disponíveisTodos do catálogoSó order.* e product.*
IsolamentoNão enxerga webhooks de sellerNão enxerga webhooks de outro seller nem do administrador (id alheio devolve 404)

Um seller (lojista) é um vendedor do marketplace que opera dentro da loja. Quando um pedido não pertence a nenhum seller (venda direta da loja), nenhum webhook de seller o recebe.

Módulo webhooks

As rotas de cadastro e o próprio envio dependem do módulo webhooks estar ativo na loja. Com o módulo desligado, as rotas respondem 403 com {"error":"module_disabled","module":"webhooks"} e nenhum evento é enviado.

O envelope e o evento

Todo envio tem o mesmo envelope JSON, com o corpo do evento dentro de payload:

json
{
  "event": "order.created",
  "payload": { "type": "order.created", "order_id": "..." },
  "timestamp": "2026-10-11T20:15:03Z",
  "webhook_id": "0b9c2f6e-3a5d-4c0e-8a52-6a1f2f0d8c11"
}

O nome do evento também vai no cabeçalho X-Venddor-Event. O catálogo completo de payload está em Eventos.

Entrega, ordem e idempotência

Cada evento vira uma chamada independente, disparada em paralelo. Dois eventos do mesmo pedido podem chegar fora de ordem, e um evento pode chegar mais de uma vez. Trate cada chamada como uma notícia de que algo mudou e, quando a ordem importar, consulte o estado atual do recurso pela API. Os detalhes e uma receita de deduplicação estão em Entrega, reenvios e idempotência.

Dinheiro, ids e datas

Nos corpos de evento, valores em dinheiro são inteiros em centavos (4990 = R$ 49,90). Os ids são UUID em string. As datas são RFC 3339. Os status de pedido que vêm em old_status e new_status são os nomes por extenso (pending, shipped), não as letras gravadas no pedido.

Modificadores de dados

Não são webhooks. São as transformações que a importação de produtos aplica a um campo de cada linha (aumentar preço em 10%, adicionar um prefixo ao nome). Ficam nesta seção porque o catálogo é publicado por uma rota de administração. Veja Modificadores de dados.

Endpoints

Método e caminhoPara que serveAutenticaçãoPágina
GET /api/v1/admin/webhooks/event-typesEventos assináveis pelo administrador, por categoriaAdministradorEventos
GET /api/v1/vendor/webhooks/event-typesEventos assináveis pelo sellerSellerEventos
GET /api/v1/admin/event-typesEventos que um script da loja pode escutarAdministradorEventos
GET /api/v1/admin/webhooksListar webhooksAdministradorWebhooks do administrador
POST /api/v1/admin/webhooksCadastrar webhookAdministradorWebhooks do administrador
GET /api/v1/admin/webhooks/{id}Ver um webhook e a última entregaAdministradorWebhooks do administrador
PUT /api/v1/admin/webhooks/{id}Alterar URL, eventos, descrição ou ativaçãoAdministradorWebhooks do administrador
DELETE /api/v1/admin/webhooks/{id}Remover webhook e seu registroAdministradorWebhooks do administrador
GET /api/v1/admin/webhooks/{id}/deliveriesRegistro de entregasAdministradorEntregas do administrador
POST /api/v1/admin/webhooks/{id}/testEnviar evento de testeAdministradorEntregas do administrador
POST /api/v1/admin/webhooks/deliveries/{deliveryId}/retryReenviar uma entregaAdministradorEntregas do administrador
GET /api/v1/vendor/webhooksListar webhooks do sellerSellerWebhooks do seller
POST /api/v1/vendor/webhooksCadastrar webhook do sellerSellerWebhooks do seller
GET /api/v1/vendor/webhooks/{id}Ver um webhook do sellerSellerWebhooks do seller
PUT /api/v1/vendor/webhooks/{id}Alterar webhook do sellerSellerWebhooks do seller
DELETE /api/v1/vendor/webhooks/{id}Remover webhook do sellerSellerWebhooks do seller
GET /api/v1/vendor/webhooks/{id}/deliveriesRegistro de entregas do sellerSellerEntregas do seller
POST /api/v1/vendor/webhooks/{id}/testEvento de teste do sellerSellerEntregas do seller
POST /api/v1/vendor/webhooks/deliveries/{deliveryId}/retryReenviar entrega do sellerSellerEntregas do seller
POST /api/v1/webhooks/payments/{provider}Notificação genérica de gatewaySegredo da loja (HMAC)Pagamentos e antifraude
POST /api/v1/webhooks/pixConfirmação de PixSegredo compartilhadoPagamentos e antifraude
POST /api/v1/webhooks/pagarmeEventos do Pagar.meAssinatura HMACPagamentos e antifraude
POST /api/v1/webhooks/braspagNotificação da BraspagSem assinatura (status reconsultado)Pagamentos e antifraude
POST /api/v1/webhooks/clearsaleResultado da análise antifraudeSegredo compartilhadoPagamentos e antifraude
POST /api/v1/webhooks/focusnfeStatus de NF-e (loja pelo domínio)Segredo compartilhadoNota fiscal
POST /api/v1/webhooks/focusnfe/{tenantID}Status de NF-e (loja pelo caminho)Segredo compartilhadoNota fiscal
GET /api/v1/webhooks/whatsapp/{tenant_slug}Verificação da MetaToken de verificaçãoWhatsApp da loja
POST /api/v1/webhooks/whatsapp/{tenant_slug}Mensagens e status do WhatsAppAssinatura HMAC da MetaWhatsApp da loja
POST /api/v1/webhooks/whatsapp/{tenant_slug}/flowTroca de dados de um FlowCriptografia RSA/AESWhatsApp da loja
GET /api/v1/webhooks/whatsapp/{tenant_slug}/public_keyChave pública do FlowNenhumaWhatsApp da loja
GET /api/v1/webhooks/whatsapp-routesVerificação da URL centralToken de verificaçãoCallback central do WhatsApp
POST /api/v1/webhooks/whatsapp-routesEntrada central de mensagensAssinatura HMAC da MetaCallback central do WhatsApp
POST /api/v1/webhooks/whatsapp-routes/registerCadastrar rota de callbackChave de APICallback central do WhatsApp
GET /api/v1/admin/data-modifiersCatálogo de modificadores de importaçãoAdministradorModificadores de dados

Erros comuns

  • Verificar a assinatura sobre o JSON reformatado. O HMAC é calculado sobre os bytes exatos recebidos. Se o seu framework já converteu o corpo em objeto e você o serializa de novo, a assinatura nunca bate. Use o corpo bruto.
  • Processar tudo antes de responder. O limite de resposta é de 30 segundos e qualquer 5xx ou timeout gera reenvio. Responda 200 primeiro e processe depois.
  • Responder 4xx para "não quero esse evento". Respostas 4xx encerram a entrega sem novas tentativas. Se o seu receptor está momentaneamente indisponível, devolva 503, não 400.
  • Supor ordem. order.statusChanged de "enviado" pode chegar antes do de "pago". Compare timestamp do evento ou consulte o pedido.
  • Perder o secret. Ele só aparece na criação. As listagens mostram **** mais os 4 últimos caracteres. Não existe rota para trocar o segredo: remova o webhook e cadastre outro.
  • URL interna. URLs que apontam para localhost, redes privadas, endereços de metadados de nuvem ou domínios .internal, .local e .localhost são recusadas. Para testar localmente use um túnel público (HTTPS).
  • Esperar eventos customer.* ou cart.* em webhook de seller. O seller só assina order.* e product.*.

Próximos passos

Catálogo de eventos
Os 21 tipos assináveis e o corpo real de cada um.
Verificar a assinatura
Algoritmo, cabeçalhos e código pronto em três linguagens.
Entrega e reenvios
Tempo limite, tentativas, ordem, idempotência e dicas de teste.
Webhooks de entrada
Como gateways e canais chamam a loja.
Anterior
GraphQL da vitrine
Próxima
Catálogo de eventos
Nesta página
  • Como funciona
  • Webhooks de saída
  • Webhooks de entrada
  • Conceitos-chave
  • Quem recebe o quê (administrador e seller)
  • Módulo webhooks
  • O envelope e o evento
  • Entrega, ordem e idempotência
  • Dinheiro, ids e datas
  • Modificadores de dados
  • Endpoints
  • Erros comuns
  • Próximos passos