Webhooks que realmente entregam
Payloads JSON assinados, entrega apoiada em fila, retentativas exponenciais e log de entrega por formulário. Construído para desenvolvedores — sem o intermediário Zapier consumindo seus dados.
{
"event": "submission.created",
"delivery_id": "dlv_8aE2k",
"timestamp": 1730723400,
"form_id": "f_142",
"submission_id": "s_9k3X",
"fields": {
"name": "Sarah Chen",
"email": "[email protected]",
"budget": 25000
}
}
O que dispara um webhook
Você configura uma vez por formulário. A gente despacha em cada evento relevante.
Nova resposta
Dispara no momento em que um formulário é enviado, com o payload completo, campos e metadados.
Pagamento bem-sucedido
Quando um pagamento Stripe associado a uma resposta é bem-sucedido, o webhook inclui status do pagamento, valor e moeda.
Rascunho retomado
Quando alguém volta a um rascunho salvo (formulários com save-and-resume), você pode ser notificado para analytics de funil.
JSON previsível, versionado e bem moldado
Sem surpresas. Mesmo envelope em cada evento. Tipos de campo preservados como digitados.
{
"event": "submission.created",
"delivery_id": "dlv_8aE2kF1Ld9zQ",
"timestamp": 1730723400,
"form_id": "f_142",
"submission_id": "s_9k3XnPq72T",
"fields": {
"name": "Sarah Chen",
"email": "[email protected]",
"company": "Acme Corp",
"budget": 25000,
"message": "Looking for a form solution..."
},
"payment": {
"status": "succeeded",
"amount": 2500,
"currency": "usd"
},
"meta": {
"ip": "203.0.113.42",
"user_agent": "Mozilla/5.0...",
"locale": "en"
}
}
Verificado por assinatura, nunca falsificado
Cada payload é assinado com um HMAC-SHA256 do segredo do webhook do seu formulário. Verifique no seu lado antes de confiar nos dados.
Assinatura HMAC-SHA256
Cabeçalho X-FormBuilder-Signature em cada requisição. Calcule o HMAC do corpo bruto usando seu segredo e compare em tempo constante.
Segredos por formulário
Cada formulário tem seu próprio segredo. Rotacione a qualquer momento nas configurações do formulário — payloads antigos continuam verificáveis até você regenerar.
Apenas TLS
Aceitamos apenas endpoints HTTPS. Recusamos despachar para URLs em texto plano para proteger os dados em trânsito.
Proteção contra replay
Cada payload inclui um timestamp e um ID de entrega único. Rejeite entregas mais antigas que 5 minutos para evitar ataques de replay.
Verifique em 3 linhas
Escolha sua stack. O padrão é o mesmo: HMAC do corpo bruto com seu segredo, comparar com o cabeçalho de assinatura.
const crypto = require('crypto'); function verify(rawBody, signature, secret) { const expected = crypto .createHmac('sha256', secret) .update(rawBody) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(signature) ); }
function verify($rawBody, $signature, $secret) { $expected = hash_hmac('sha256', $rawBody, $secret); return hash_equals($expected, $signature); }
import hmac, hashlib def verify(raw_body: bytes, signature: str, secret: str) -> bool: expected = hmac.new( secret.encode(), raw_body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature)
Construído para o mundo real
Redes falham, endpoints sofrem throttling, deploys acontecem. Os webhooks ficam em fila, reenviam e expõem o estado de entrega.
Entrega enfileirada
As respostas voltam imediatamente para o respondente. A entrega do webhook acontece em fila em background — nunca bloqueia o formulário.
Backoff exponencial
Entregas que falham retentam com backoff exponencial. A gente não martela seu endpoint quando ele já está sofrendo.
Múltiplas tentativas
Cada entrega é tentada várias vezes ao longo de horas. Você tem tempo para se recuperar de uma queda sem perder dados.
Log de entrega
Cada tentativa é registrada — request, código de resposta, trecho do corpo, timestamp. Inspecione falhas nas configurações do formulário.
Chaves de idempotência
Cada entrega inclui um ID único. Use como chave de idempotência no seu lado para deduplicar retentativas com segurança.
Registrado em auditoria
Mudanças de URL, rotação de segredo e alternância on/off ficam registradas no log de auditoria do seu workspace.
O que as pessoas constroem com webhooks
Sincronização com CRM próprio
Envie leads para seu CRM interno com o mapeamento exato que seu sistema espera.
Alertas no Slack / Discord
Além da integração nativa com Slack, construa fluxos de alerta personalizados com payloads ricos.
Processamento de backend
Dispare jobs em background, envie e-mail transacional, valide dados, sincronize com seu data warehouse.
Alternativa ao Zapier / Make
Pule a taxa de middleware. Um único webhook pode se ramificar para qualquer número de serviços internos.
Configuração em 4 passos
Configure uma vez, entregue para sempre.
Abra as configurações do formulário
No painel, abra seu formulário e vá para Integrações → Webhooks.
Adicione sua URL de endpoint
Cole a URL HTTPS que deve receber as respostas. Validamos que o endpoint responde antes de salvar.
Copie o segredo de assinatura
Cada formulário recebe um segredo único. Guarde no servidor e use para verificar os payloads recebidos.
Envie um teste
Envie uma resposta de teste e inspecione o log de entrega. Verifique se seu endpoint devolveu 2xx e se a verificação de assinatura passou.
Perguntas frequentes
Integrações relacionadas
Slack
Entrega Slack pronta — sem precisar lidar com assinaturas.
Saiba mais →Notion
Envie para uma base do Notion sem escrever uma linha de código.
Saiba mais →Pagamentos com Stripe
Os payloads de webhook incluem o status do pagamento quando há um pagamento associado.
Saiba mais →Todas as Integrações
Explore Stripe, Notion, Slack, Airtable, Google Forms e mais — e veja como tudo se conecta.
Ver integrações →