Shopify: como funciona a entrega de webhooks

Cinco segundos de prazo, 8 novas tentativas em 4 horas, depois a Shopify exclui a inscrição. Números verificados, formato da assinatura e verificador Node.

Comportamento de entrega

Lido na documentação do próprio provedor, verificado pela última vez em 2026-08-06. Onde o provedor não informa um número, esta tabela também não traz nenhum.

Prazo de resposta5 s

1 segundo para conectar, 5 segundos para a requisição inteira

Verifique se seu handler responde a tempo

Novas tentativas8 novas tentativas ao longo de 4 horas
DesisteInscrições criadas pela Admin API são excluídas após 8 falhas consecutivas, com um e-mail de aviso para o contato de emergência do desenvolvedor do app
Fontehttps://shopify.dev/docs/apps/build/webhooks/subscribe/https

Assinatura

Verificada com um verificador funcional, comprovado por uma suíte de testes, e não lida na documentação. Última verificação em 2026-08-20.

AlgoritmoHMAC-SHA256
Payload assinadoraw body
Codificaçãobase64
Cabeçalhox-shopify-hmac-sha256
Tolerâncianenhuma exigida

Verifique a assinatura

O corpo bruto da requisição, byte a byte, antes de qualquer parsing de JSON. Todos os esquemas desta página quebram no momento em que um framework serializa o payload de novo.

const crypto = require("node:crypto");

// base64(HMAC-SHA256(secret, raw body))
const expected = crypto
  .createHmac("sha256", hmacSecret) // admin webhooks: Settings → Notifications
  .update(rawBody)
  .digest("base64");
const received = Buffer.from(req.headers["x-shopify-hmac-sha256"] ?? "");
const wanted = Buffer.from(expected);
// timingSafeEqual throws on a length mismatch, so check that first.
const valid =
  received.length === wanted.length && crypto.timingSafeEqual(received, wanted);

Existem dois segredos diferentes: webhooks criados no admin assinam com o segredo compartilhado em Settings → Notifications, e os criados por apps, com o client secret do app. Use o segredo que corresponde à forma como o webhook foi criado.

Armadilhas

A Shopify não desativa a inscrição: ela a exclui. Uma inscrição criada pela Admin API é excluída depois de 8 falhas consecutivas, com apenas um e-mail de aviso ao contato de emergência do desenvolvedor do app; nenhum erro aparece e os pedidos param de chegar. A recuperação é um job de conciliação pela Admin API, porque os eventos perdidos nunca foram enviados.

Leia também

O AnyHook fica entre Shopify e seus endpoints: responde em cerca de um segundo, tenta de novo segundo um cronograma próprio quando seu servidor está fora do ar e guarda cada evento disponível para replay. Troque uma URL e mantenha seu código.

Como funciona →