Home / Features / Webhooks
Webhooks nativos

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.

Grátis em todos os planos · Assinado por HMAC · Retentativas em fila
POST /webhook
{
  "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.

submission.created

Nova resposta

Dispara no momento em que um formulário é enviado, com o payload completo, campos e metadados.

payment.succeeded

Pagamento bem-sucedido

Quando um pagamento Stripe associado a uma resposta é bem-sucedido, o webhook inclui status do pagamento, valor e moeda.

draft.resumed

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

USE CASE 01

Sincronização com CRM próprio

Envie leads para seu CRM interno com o mapeamento exato que seu sistema espera.

USE CASE 02

Alertas no Slack / Discord

Além da integração nativa com Slack, construa fluxos de alerta personalizados com payloads ricos.

USE CASE 03

Processamento de backend

Dispare jobs em background, envie e-mail transacional, valide dados, sincronize com seu data warehouse.

USE CASE 04

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

Os webhooks são grátis?
Sim. Webhooks estão inclusos em todos os planos, incluindo o gratuito. Sem cobrança por chamada.
Qual a velocidade da entrega?
A entrega é apoiada em fila e geralmente completa em segundos após o envio. A gente não bloqueia a resposta do formulário, então o respondente vê confirmação imediata.
Qual é a política de retentativas?
Entregas que falham (5xx, timeouts, erros de conexão) retentam com backoff exponencial em várias tentativas ao longo de horas. Após o limite de tentativas, a entrega é marcada como falha e registrada.
Posso ter vários webhooks por formulário?
Sim. Adicione quantos endpoints de webhook precisar em um único formulário. Cada um dispara independentemente, com seu próprio segredo e estado de retentativa.
Vocês suportam IP allow-list?
As entregas de webhook saem de um conjunto estável de IPs. Fale com o suporte para receber a lista atual se seu firewall exigir liberação explícita.
Como rotaciono o segredo de assinatura?
Nas configurações do formulário → webhook → Regenerar segredo. O novo segredo entra em vigor na próxima entrega. Atualize seu endpoint para verificar com o novo segredo antes de regenerar.

Pronto para conectar?

Webhooks nativos. Grátis em todos os planos.

Comece grátis