Webhook

Sempre que ocorre um evento importante, nós disparamos uma notificação para seu servidor. Essas notificações são chamadas de webhooks. É possível configurar vários endpoints e escolher quais eventos serão disparados . O objeto webhook contêm os seguintes atributos:

ChaveTipoDescrição
codestringID do objeto
datedatetimeData da última tentativa.
typestringTipo de evento
statusstringPresente quando o evento é order.create ou order.update. Indica o status do pedido.

Observação: o payload pode incluir campos adicionais específicos do recurso (order, customer, etc.).

Events Type

TipoDescrição
order.createAcionamento sempre que um pedido é criado
order.updateAcionamento sempre que um pedido é atualizado
customer.createAcionamento sempre que um cliente é criado
customer.updateAcionamento sempre que um cliente é atualizado
🚧

Portas padrão por protocolo (http e https)

No caso de habilitar uma porta específica para recebimento de webhooks, para cada protocolo abaixo existe uma porta específica:

http:80
https:8080

📘

Inspeção e depuração

Você pode usar o RequestBin para inspecionar e depurar facilmente os webhooks recebidos.

📘

Cadastro do Webhook no console

Para cadastrar webhook no console da loja, [clique aqui] e acesse o link do nosso tutorial

Cabeçalhos adicionados (assinatura e metadados)

Em cada request foram adicionadas as seguintes headers:

  • convertize-hook-signature
    Assinatura HMAC do payload (string). Use para verificar autenticidade.
  • convertize-hook-resource
    Tipo do recurso enviado (por exemplo: order, customer) — ajuda a identificar rapidamente o recurso recebido.
  • convertize-hook-timestamp
    Timestamp associado à assinatura (inteiro em segundos desde epoch). Use para evitar replay attacks verificando a tolerância de tempo.

Assinatura HMAC

Recomendamos o uso de HMAC-SHA256 para assinar o webhook. Exemplo de esquema (recomendado):

  1. O cabeçalho convertize-hook-timestamp contém um inteiro Unix (segundos desde epoch).
  2. A string assinada é: ${raw_body} — ou seja, corpo bruto (raw) do request.
  3. A assinatura é: hex(HMAC-SHA256(secret, ${raw_body}))
  4. O resultado hex é colocado no header convertize-hook-signature.

Valide também:

  • Timestamp dentro de uma janela de tolerância (ex.: ±300 segundos).
  • Comparação de assinaturas usando comparação em tempo constante (constant-time) para evitar ataques de timing.

Boas práticas de segurança

  • Use HTTPS para endpoints de webhook sempre que possível.
  • Proteja o segredo (SECRET) e gire-o periodicamente.
  • Use comparação em tempo-constante (constant-time) para evitar ataques de timing.
  • Verifique o timestamp para evitar replay attacks (ex.: tolerância 5 minutos).
  • Logue apenas metadados (não armazene segredos ou payloads sensíveis sem proteção).
  • Responda rapidamente (200) após aceitar a mensagem; utilize filas internas para processamento demorado.