NueForm

Payloads de webhook

Referência completa dos schemas de payload de webhook do NueForm, incluindo a estrutura do evento form.submitted, os formatos de resposta por tipo de pergunta e os resultados de questionário.

Toda requisição de webhook do NueForm envia um payload JSON no corpo da requisição. Esta página documenta o schema completo do payload para cada tipo de evento.

Estrutura comum

Todos os payloads de webhook compartilham estes campos de nível superior:

CampoTipoDescrição
eventstringO tipo do evento (por exemplo, form.submitted)
formIdstringO ID único do formulário
formTitlestringO título do formulário no momento do envio
responseIdstringO ID único da resposta
answersarrayArray de objetos de resposta
respondentobject ou nullIdentidade do respondente logado, quando o formulário exigia login. null para envios anônimos. Veja Identidade do respondente.
submittedAtstringTimestamp ISO 8601 de quando o evento foi despachado

Payload de form.submitted

Este é o payload enviado quando um respondente envia uma resposta completa de formulário.

Exemplo completo

json
{
  "event": "form.submitted",
  "formId": "507f1f77bcf86cd799439011",
  "formTitle": "Customer Feedback Survey",
  "responseId": "507f1f77bcf86cd799439022",
  "answers": [
    {
      "questionId": "507f1f77bcf86cd799439033",
      "value": "Jane Doe"
    },
    {
      "questionId": "507f1f77bcf86cd799439044",
      "value": "jane@example.com"
    },
    {
      "questionId": "507f1f77bcf86cd799439055",
      "value": 4
    },
    {
      "questionId": "507f1f77bcf86cd799439066",
      "value": "The onboarding flow was smooth and intuitive."
    },
    {
      "questionId": "507f1f77bcf86cd799439077",
      "value": ["Feature A", "Feature C"]
    },
    {
      "questionId": "507f1f77bcf86cd799439088",
      "value": true
    }
  ],
  "respondent": {
    "id": "507f1f77bcf86cd799439016",
    "name": "Jane Smith",
    "email": "jane@example.com",
    "auth_method": "sso"
  },
  "submittedAt": "2025-03-15T14:32:07.123Z"
}

Referência de campos

Campos de nível superior

event --- string

Sempre "form.submitted" para este tipo de evento.

formId --- string

O ObjectId do MongoDB do formulário. É uma string hexadecimal de 24 caracteres.

formTitle --- string

O título legível do formulário no momento em que o webhook dispara. Observe que, se você renomear o formulário depois, os webhooks já entregues continuarão contendo o título antigo.

responseId --- string

O ObjectId do MongoDB da resposta armazenada. Você pode usá-lo para buscar a resposta completa pela API de Respostas ou como chave de idempotência para desduplicar entregas de webhook.

submittedAt --- string

Timestamp ISO 8601 indicando quando o webhook foi despachado. Ele é gerado no momento do despacho e será muito próximo (mas não necessariamente idêntico) ao campo submittedAt da resposta no banco de dados.

respondent --- object ou null

Identidade do usuário logado que enviou a resposta, exposta apenas quando o formulário exigia login (requireLogin: true). null para todos os envios anônimos. Veja Identidade do respondente abaixo para o schema completo e o comportamento.

Objetos de resposta

Cada entrada no array answers representa a resposta de uma única pergunta:

CampoTipoDescrição
questionIdstringO ObjectId do MongoDB da pergunta
valueanyA resposta do respondente (o formato varia conforme o tipo de pergunta)

Valores de resposta por tipo de pergunta

O campo value de cada objeto de resposta varia de acordo com o tipo de pergunta. Este é o formato para cada tipo:

Entradas de texto

Tipo de perguntaTipo do valorExemplo
short_textstring"Jane Doe"
long_textstring"I really enjoyed the product..."
emailstring"jane@example.com"
phonestring"+1 (555) 123-4567"
numbernumber42
urlstring"https://example.com"

Perguntas de escolha

Tipo de perguntaTipo do valorExemplo
multiple_choice (única)string"Option A"
multiple_choice (múltipla)array<string>["Option A", "Option C"]
dropdownstring"United States"
yes_nobooleantrue
picture_choice (única)string"choice_id_abc123"
picture_choice (múltipla)array<string>["choice_id_abc123", "choice_id_def456"]

Para perguntas multiple_choice, o valor é uma única string quando allowMultiple é false e um array de strings quando allowMultiple é true. Se o respondente selecionar a opção "Other", o array conterá o texto livre digitado por ele como uma string.

Perguntas de avaliação

Tipo de perguntaTipo do valorExemploIntervalo
ratingnumber41 a steps (padrão 5)
opinion_scalenumber7min a max
npsnumber90 a 10

Data e hora

Tipo de perguntaTipo do valorExemplo
datestring"2025-03-15"

O formato da string de data corresponde à propriedade dateFormat configurada na pergunta (o padrão é YYYY-MM-DD).

Tipo de perguntaTipo do valorExemplo
legalbooleantrue
statementstring"" (sempre vazio --- declarações não coletam dados)

Ranking

Tipo de perguntaTipo do valorExemplo
rankingarray<string>["Speed", "Price", "Quality"]

O array reflete a ordem escolhida pelo respondente, do primeiro ao último.

Matriz

Tipo de perguntaTipo do valorExemplo
matrixobject{ "Speed": "Satisfied", "Price": "Neutral" }

O objeto mapeia os rótulos das linhas para o rótulo da coluna selecionada em cada linha.

Upload de arquivo

Tipo de perguntaTipo do valorExemplo
file_uploadstring"https://storage.nueform.com/uploads/abc123.pdf"

O valor é a URL do arquivo enviado no armazenamento do NueForm.

Assinatura e desenho

Tipo de perguntaTipo do valorExemplo
signaturestring"data:image/png;base64,iVBOR..."
drawingstring"data:image/png;base64,iVBOR..."

Ambos retornam um data URI PNG codificado em base64 da imagem capturada.

Gravação

Tipo de perguntaTipo do valorExemplo
recordingstring"https://storage.nueform.com/recordings/abc123.webm"

O valor é a URL do arquivo de gravação enviado.

Perguntas compostas

Tipos de pergunta compostos (contact_info, address, question_group, multi_question_page) produzem múltiplas entradas de resposta no array answers --- uma para cada subcampo. A resposta de cada subcampo usa o próprio questionId do subcampo.

Por exemplo, uma pergunta contact_info pode produzir:

json
[
  { "questionId": "first_name", "value": "Jane" },
  { "questionId": "last_name", "value": "Doe" },
  { "questionId": "email", "value": "jane@example.com" },
  { "questionId": "phone_number", "value": "+1 555-0100" },
  { "questionId": "company", "value": "Acme Inc." }
]

Identidade do respondente

Quando um formulário é configurado com requireLogin: true, todo envio aceito fica vinculado a um usuário autenticado. Os payloads de webhook expõem essa identidade aos donos do formulário através do campo respondent. Para todos os outros envios, o campo é null.

Schema

json
{
  "respondent": {
    "id": "507f1f77bcf86cd799439016",
    "name": "Jane Smith",
    "email": "jane@example.com",
    "auth_method": "sso"
  }
}
CampoTipoDescrição
idstringO ID de usuário do respondente.
namestringNome de exibição na conta do respondente.
emailstringEndereço de e-mail na conta do respondente.
auth_methodstring"sso" ou "login". "sso" indica que o respondente é membro da equipe do formulário via Single Sign-On; "login" indica qualquer outro método de autenticação compatível.

Quando respondent é preenchido

respondent é preenchido apenas quando:

  1. O formulário tem requireLogin definido como true, e
  2. Quem enviou fez login porque o formulário exigia antes de enviar.

Quando requireSsoLogin também é true, apenas usuários que são membros da equipe do formulário via SSO conseguem chegar à etapa de envio, então todo respondent preenchido terá auth_method: "sso".

Quando respondent é null

O campo está sempre presente no JSON para um parsing previsível no destino, e é null sempre que qualquer uma destas condições for verdadeira:

  • O formulário não exigia login (requireLogin era false).
  • Quem enviou era anônimo.
  • A resposta foi salva pelo fluxo de consentimento pós-envio (o prompt de "claim this response"). Respostas salvas por consentimento nunca aparecem nos payloads de webhook com identidade anexada — elas são armazenadas apenas na visualização "My Responses" do usuário e não são expostas aos receptores de webhook.

Os payloads de webhook só expõem a identidade de respondentes que fizeram login porque o formulário exigia. Identidades coletadas via consentimento pós-envio são intencionalmente omitidas dos webhooks para respeitar o limite entre a privacidade do respondente e a visibilidade do dono do formulário.

Resultados de questionário

Para formulários em modo de questionário (knowledge_quiz, lead_qualification ou match_quiz), a resposta armazenada inclui um objeto quizResults. Embora esse objeto não seja incluído diretamente no payload do webhook, você pode obtê-lo pela API de Respostas usando o responseId do webhook.

O objeto quizResults tem a seguinte estrutura:

json
{
  "formMode": "knowledge_quiz",
  "score": 7,
  "correctAnswers": 7,
  "totalScorableQuestions": 10,
  "maxScore": 10,
  "matchedEndingId": "507f1f77bcf86cd799439099"
}
CampoTipoDescrição
formModestringO modo do questionário: knowledge_quiz, lead_qualification ou match_quiz
scorenumberA pontuação total do respondente
correctAnswersnumberNúmero de perguntas respondidas corretamente (apenas questionário de conhecimento; 0 para os outros modos)
totalScorableQuestionsnumberNúmero total de perguntas que contribuem para a pontuação
maxScorenumberA pontuação máxima possível
matchedEndingIdstring ou undefinedO ID da tela final mostrada ao respondente com base na pontuação
endingTalliesobject ou undefinedApenas questionário de compatibilidade: mapeia cada ID de tela final para sua contagem

Metadados

A resposta armazenada também pode incluir um objeto metadata contendo campos ocultos passados via parâmetros de URL. Ele está disponível pela API de Respostas, mas não é incluído no payload do webhook.

json
{
  "hiddenFields": {
    "utm_source": "google",
    "utm_campaign": "spring_sale",
    "user_id": "ext_12345"
  }
}

Para acessar os metadados de uma resposta entregue via webhook, busque-a usando o responseId:

bash
curl https://app.nueform.com/api/v1/forms/FORM_ID/responses/RESPONSE_ID \
  -H "Authorization: Bearer nf_your_api_key"

Cabeçalhos HTTP

Toda requisição de webhook inclui estes cabeçalhos HTTP:

CabeçalhoValor
Content-Typeapplication/json
X-NueForm-SignatureDigest hexadecimal HMAC-SHA256 do corpo bruto da requisição

Consulte Verificação para saber como validar a assinatura.

Tamanho do payload

Os payloads de webhook costumam ser pequenos (menos de 10 KB). O tamanho depende principalmente do número de perguntas e do comprimento das respostas de texto. Respostas de upload de arquivo contêm URLs (não o conteúdo dos arquivos), então não aumentam significativamente o tamanho do payload.

Próximos passos

  • Verificação --- Valide assinaturas de webhook
  • Testes --- Teste payloads de webhook localmente
  • Eventos --- Tipos de evento e garantias de entrega
Última atualização: 20 de julho de 2026