O webhook entrega cada resposta de um formulário, no momento em que ela chega, a um endereço seu: um fluxo no Zapier, no Make ou no n8n, ou o sistema da sua empresa. Na Clínica Vitta, em Campinas, cada ficha de anamnese enviada cai direto no sistema de agendamento, sem ninguém copiar dados à mão.
Onde fica
Formulários › (formulário) › aba Integrações › card "Webhooks". A aba só aparece para o dono da conta: webhook manda respostas para fora, e isso é decisão de quem responde pela conta. Cada formulário aceita até 3 webhooks; com os três criados, o botão Novo webhook fica indisponível.
Criar um webhook
- Clique em Novo webhook.
- Em Endereço que recebe as respostas, cole a URL do seu fluxo ou sistema. Ela precisa começar com
https://e ser um endereço público da internet. Endereço de rede interna ou com usuário e senha embutidos na URL é recusado. - Clique em Criar webhook.
Ele já nasce Ligado: a próxima resposta do formulário já é enviada.
O segredo aparece uma vez só
Logo depois de criar, o card mostra o Segredo do webhook (começa com whsec_). Clique em Copiar, guarde no seu sistema e só então clique em Já copiei. Ele não aparece de novo: a lista mostra apenas os últimos caracteres ("termina em 4f2a").
Perdeu o segredo, ou alguém que o conhecia saiu da equipe? Use Trocar segredo no menu da linha. O segredo atual para de valer na hora e o novo aparece uma vez, do mesmo jeito. Até você atualizá-lo no sistema que recebe, as entregas chegam com uma assinatura que ele não reconhece.
O que chega no destino
A cada resposta, um POST com corpo JSON e quatro cabeçalhos:
X-WiseData-Signature— a assinatura, no formatosha256=….X-WiseData-Timestamp— o momento do envio, em segundos.X-WiseData-Delivery— o id da entrega.X-WiseData-Event—submission.created(resposta) ouping(teste).
Uma ficha de anamnese da Clínica Vitta chega assim:
{
"id": "9b2f6c1e-4d7a-4f0b-8a3e-2c5d1e7f9a10",
"event": "submission.created",
"created_at": "2026-10-10T14:32:05-03:00",
"form": { "id": "Xk29fQa7Lm", "title": "Ficha de anamnese" },
"submission": {
"number": 37,
"submitted_at": "2026-10-10T14:32:04-03:00",
"answers": [
{ "field_id": "f_a1b2c3d4e5f6", "label": "Nome completo", "type": "short_text", "value": "Maria Souza" },
{ "field_id": "f_b2c3d4e5f6g7", "label": "E-mail", "type": "email", "value": "maria@exemplo.com" },
{ "field_id": "f_c3d4e5f6g7h8", "label": "CPF", "type": "cpf_cnpj", "value": "000.000.000-00" },
{ "field_id": "f_d4e5f6g7h8i9", "label": "Já fez algum procedimento estético?", "type": "yes_no", "value": "Sim" },
{ "field_id": "f_e5f6g7h8i9j0", "label": "Valor do pacote", "type": "currency", "value": "R$ 1.250,50", "currency": "BRL", "amount": "1250.50" },
{ "field_id": "f_f6g7h8i9j0k1", "label": "Assinatura", "type": "signature", "value": null, "signed": true },
{ "field_id": "f_g7h8i9j0k1l2", "label": "Origem", "type": "hidden", "value": "instagram" }
]
}
}id— o id da entrega, igual ao cabeçalhoX-WiseData-Delivery. É o mesmo num reenvio: use-o para não processar a mesma resposta duas vezes.number— o "Resposta nº" do formulário, o mesmo do painel, do e-mail e do PDF.answers— só o que a pessoa de fato respondeu. Pergunta que a lógica escondeu não vem; blocos de texto e seções também não. Campo oculto (origem, campanha) vem.value— o texto como aparece no painel, no idioma do formulário (o rótulo da opção, "Sim"/"Não"). Pergunta sem resposta vem comnull.- Dinheiro — além do
valueformatado, vemcurrency(o código da moeda) eamount(o número com ponto decimal). Para somar ou gravar em banco, use oamount. - Assinatura — vem só
"signed": true, nunca a imagem. field_id— não muda quando você renomeia a pergunta. Mapeie pelofield_id, não pelolabel.
Conferir a assinatura no seu sistema
É o que garante que a chamada veio do Forms e não de alguém que descobriu o seu endereço. Quem desenvolve o sistema que recebe faz assim:
- Leia o corpo exatamente como chegou, antes de converter o JSON. Reformatar muda os bytes e a conta não fecha.
- Monte o texto: valor de
X-WiseData-Timestamp+.+ valor deX-WiseData-Delivery+.+ corpo. - Calcule o HMAC-SHA256 desse texto com o segredo, em hexadecimal, e compare com o que vem depois de
sha256=emX-WiseData-Signature. - Recuse chamadas com horário antigo (alguns minutos já bastam) e ids de entrega que você já processou.
Responda com um código 2xx em até 10 segundos. Se o processamento for pesado, guarde a resposta, devolva 200 e processe depois.
Testar antes da primeira resposta
No menu da linha, Enviar teste chama o destino na hora com o evento ping, number nulo e respostas de exemplo: cada pergunta do formulário com o valor "Exemplo" (ou a primeira opção, nas de escolha), o dinheiro como 1250.50 e a assinatura como assinada. Serve para montar o mapeamento no Zapier, Make ou n8n antes de chegar uma resposta de verdade. O resultado aparece na hora: "O destino respondeu 200: o teste chegou." O teste não é repetido se falhar e não conta para o desligamento automático.
Histórico de entregas e reenvio
Ver entregas abre as entregas dos últimos 30 dias: Quando, O que foi enviado (Teste, "Resposta nº 37" ou "Resposta apagada"), Resultado (Entregue, Tentando ou Falhou, com o motivo, o código HTTP e o tempo) e Tentativas. O conteúdo enviado não fica guardado; o histórico mostra o que aconteceu com cada entrega.
Entrega de resposta que falhou ganha o botão Reenviar, enquanto a resposta existir. O reenvio usa o mesmo id de entrega, para o seu sistema reconhecer a repetição. Teste não se reenvia: mande outro.
Quando o destino falha
- Sem conexão, demora, ou resposta 408, 429 ou 5xx — o Forms tenta de novo sozinho: na hora, depois de 1 minuto, 5 minutos, 30 minutos e 2 horas (5 tentativas). Enquanto isso a entrega aparece como Tentando.
- Outro código, inclusive redirecionamento (3xx) — falha de vez, porque repetir não resolve erro de configuração. O Forms não segue redirecionamento: cadastre o endereço final.
- 20 falhas seguidas — o webhook é desligado sozinho, aparece como Desligado por falhas e o dono recebe um e-mail. Corrija o destino e use Ligar: a contagem recomeça do zero. Respostas que chegam com o webhook desligado não geram entrega.
No mesmo menu ficam Trocar endereço (muda só a URL, sem ligar nem desligar), Desligar/Ligar e Apagar webhook, que apaga também o histórico de entregas e não tem volta.
Criar, alterar, apagar, trocar o segredo, testar e reenviar ficam registrados nos Logs, sem o endereço e sem o segredo.
Para onde ir depois
- Google Sheets (coleção Integrações) — cada resposta como uma linha de planilha, sem programar.
- Documento, endereço, telefone e valor em dinheiro (coleção Campos) — como o campo de dinheiro guarda a moeda e o valor.
- Exportar as respostas em CSV ou XLSX (coleção Respostas) — para levar o histórico inteiro de uma vez.
- Logs (coleção Segurança e privacidade) — quem mexeu nos webhooks e quando.
Resumindo: na aba Integrações do formulário, o dono cria até 3 webhooks com endereço https público; o segredo aparece uma vez e serve para o seu sistema conferir a assinatura de cada POST; o JSON traz o número da resposta e as respostas visíveis, com currency e amount no campo de dinheiro; o Forms tenta de novo sozinho em falhas temporárias, desliga o webhook após 20 falhas seguidas e deixa reenviar pelo histórico de 30 dias.