Integrações
Envie respostas de formulário via webhooks
Webhooks são a forma geral do YeetForm de enviar dados de resposta para qualquer lugar: seu próprio backend, um job de sincronização com banco de dados, ou outra plataforma de integração. Adicione um endpoint HTTPS na aba Integrações de um formulário e o YeetForm envia um payload JSON assinado via POST a cada nova resposta, com um segredo que você pode verificar usando HMAC-SHA256. Envios que falham são tentados novamente automaticamente. Esta página cobre o formato exato da assinatura, a estrutura do payload e o cronograma de retentativas, para que você possa construir um receptor com confiança.
Configuração
Adicione um endpoint
Na aba Integrações do formulário, cole a URL do seu endpoint HTTPS em Webhooks e clique em Add webhook. O YeetForm gera um segredo de assinatura (whsec_...) para esse endpoint.
Verifique a assinatura
Cada envio traz um header X-YeetForm-Signature: t=<unix ts>,v1=<hex hmac-sha256 de `${t}.${body}`>. Verifique-o contra o corpo bruto da requisição antes de confiar no payload.
import { createHmac, timingSafeEqual } from "crypto";
function verify(secret, signatureHeader, rawBody) {
const [tPart, v1Part] = signatureHeader.split(",");
const timestamp = tPart.split("=")[1];
const signature = v1Part.split("=")[1];
const expected = createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
const a = Buffer.from(signature, "hex");
const b = Buffer.from(expected, "hex");
if (a.length !== b.length) return false;
return timingSafeEqual(a, b);
}Leia o payload
Os POSTs disparam em response.created (e webhook.test para o botão de teste manual), com o id do formulário, id da resposta, contagem de respostas e respostas indexadas pelo id do campo, além de um array fields com o rótulo de cada campo.
{
"event": "response.created",
"form_id": "<uuid>",
"form_title": "Customer Feedback",
"response_id": "<uuid>",
"response_count": 42,
"answers": { "fld_x": "..." },
"fields": [{ "id": "fld_x", "label": "Your name", "type": "text" }],
"submitted_at": "2026-09-13T12:00:00.000Z"
}Trate as retentativas
Uma resposta que não seja 2xx (ou um timeout) dispara uma nova tentativa: imediatamente, depois após 30 segundos, depois após 5 minutos - 3 tentativas no total antes de o YeetForm marcar o envio como falho. Redirecionamentos não são seguidos, então aponte a URL direto para o seu endpoint.
Dicas
- →Os rótulos dos campos estão incluídos no array fields do payload (id, label, type), então você não precisa fixar ids de campo no seu sistema.
- →Cada resposta traz um response_id estável, use-o como sua chave de idempotência, já que um envio reenviado reutiliza o mesmo id.
- →Um envio que falha é tentado novamente até 3 vezes no total (imediatamente, 30s, 5 min) antes de ser marcado como falho - é preciso uma resposta 2xx para contar como sucesso, e redirecionamentos não são seguidos.