Assinatura de webhook
Ferramenta para gerar e conferir assinaturas HMAC de webhooks: cole o payload, o segredo e a assinatura recebida e veja na hora se batem — tudo dentro do navegador, sem o segredo sair da página. Via API, o mesmo mecanismo assina os eventos que o seu sistema envia, a US$ 0,002 por evento.
Executar grátis
Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.
Por que conferir a assinatura do webhook
Qualquer um que descubra a URL do seu endpoint consegue mandar um POST para ela. A assinatura HMAC é o que separa um evento legítimo de um payload forjado: o emissor assina o corpo com um segredo compartilhado e o receptor recalcula e compara. Endpoint que aceita webhook sem conferir assinatura aceita, na prática, pedido falso, pagamento falso e cancelamento falso — de quem quiser enviar.
Tudo acontece na sua tela
Colar um segredo de produção em site aleatório é pesadelo de segurança — e é exatamente por isso que esta ferramenta roda inteira no navegador. O payload, o segredo e o cálculo do HMAC não saem da página: nada é transmitido a servidor nenhum, e você pode conferir isso na aba de rede do navegador. Grátis, sem cadastro e sem limite de verificações.
Assinar os seus próprios eventos via API
Se o seu sistema envia webhooks para clientes, assine cada evento: a API recebe o payload, aplica o HMAC com o seu segredo e devolve o evento assinado, pronto para envio — US$ 0,002 por evento, em dólares americanos. Seus clientes ganham um jeito de validar a autenticidade do que recebem, e você entrega o padrão de segurança que os grandes gateways praticam.
Casos de uso
Webhook do gateway rejeitado
O endpoint da loja rejeita os eventos do gateway de pagamento com “assinatura inválida” e ninguém sabe se o bug é do lado de lá ou de cá. Colando payload, segredo e assinatura na ferramenta, o dev descobre em minutos de que lado está o problema — sem expor o segredo em log nem em site de terceiros.
Homologação de integração
Antes de subir a integração para produção, o time gera assinaturas de teste na tela e confere se o código do receptor valida corretamente — inclusive os casos de assinatura errada, que devem ser rejeitados.
Plataforma que envia webhooks
Uma plataforma brasileira de agendamento envia webhooks aos sistemas dos assinantes. Assinando cada evento via API, ela oferece aos clientes a verificação de autenticidade — item cada vez mais comum em checklist de segurança corporativo.
Perguntas frequentes
Posso colar um segredo de produção aqui?
O cálculo roda no seu navegador e o segredo não é transmitido — dá para auditar na aba de rede. Ainda assim, a disciplina de segurança manda: se preferir, teste com um segredo de homologação e rotacione qualquer credencial que já tenha vazado em outro lugar.
A assinatura não bate. Por onde começo?
Pelos suspeitos de sempre: o corpo usado no cálculo não é o corpo bruto recebido (re-serializar o JSON muda bytes), codificação diferente na saída (hex versus base64), espaço ou quebra de linha a mais, e segredo trocado entre ambientes. Confira nessa ordem — resolve a maioria dos casos.
Qual algoritmo de HMAC é usado?
Você informa o algoritmo que o sistema emissor usa — a documentação do serviço que envia o webhook especifica qual é. O importante é calcular dos dois lados com o mesmo algoritmo, o mesmo segredo e o mesmo corpo.
O uso no navegador é grátis até quando?
É grátis por desenho, não por promoção: o processamento acontece na sua máquina, então não custa nada para ninguém. O que é pago é o serviço via API, para assinar eventos automaticamente no seu fluxo, a US$ 0,002 por evento.
Isso me deixa em dia com a LGPD?
Assinatura de webhook é integridade e autenticidade, não conformidade completa. Mas ajuda no que lhe cabe: na versão do navegador, payloads e segredos não saem da sua tela — não há tratamento de dados por terceiros nessa etapa.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/webhook-sign \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/webhook-sign", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/webhook-sign",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/webhook-sign", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/webhook-sign", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"input": "…"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.webhook_sign",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |