Criar e utilizar formulários
Schema, tipos de campo e regras da Version
📐 Estrutura de uma Version
Uma versão (Version) tem settings (textos de UI) e fields[] (o schema).
settings: title, subtitle, finish_title, finish_subtitle, finish_info, e steps (mapa índice → rótulo, para formulários em múltiplas etapas).
Cada field tem label, type, key, required, order, step (índice da etapa), placeholder, help_balloon (texto de ajuda), options (estrutura específica de cada tipo) e, se quiser, external_key.
key é o identificador do campo gerado pela API a partir do rótulo, com um sufixo (nome-completo-821962496a9d). Ela vale na tela, no context do Run, na resposta gravada e no GET do Run. Pode ser omitida na criação: a API gera. Uma Version nova pode gerar outra key para a mesma pergunta.
external_key é o nome que você escolhe. No webhook de conclusão, responses e attachments usam esse nome, normalizado para snake_case. O ERP continua lendo customer_full_name mesmo quando a key gerada muda. Sem external_key, o webhook usa a key. O atributo vai na Version: uma Version nova precisa recebê-lo de novo. O detalhe está em Webhook.
🧱 Tipos de campo
type | Descrição | options relevantes |
|---|---|---|
text | Texto curto | maxlength |
textarea | Texto longo | maxlength |
number | Numérico | — |
number_range | Numérico com faixa | min_value e max_value opcionais; decimal_places inteiro a partir de zero; min_error_message e max_error_message (aceitam {min_value}, {max_value} e {decimal_places}) |
email | — | |
phone_number | Telefone/WhatsApp | — |
date | Data | output_formatter ("long" para enviar a resposta por extenso no callback) |
cpf / cnpj | Documento | — |
currency | Monetário | — |
cep | CEP, com sub-campos de endereço | fields[] (attribute_type: street, state, city, neighborhood, number, complement) |
image / file | Upload | — |
header / paragraph | Texto estático (sem valor de resposta) | — |
select | Lista suspensa (única escolha) | values[] |
radio-group | Única resposta em botões | other (permite "outro"), values[] (cada item aceita selected: true para pré-marcar uma opção como resposta default) |
checkbox-group | Múltiplas respostas | other, values[] |
repeater | Bloco repetível (ex.: dependentes) | button_label, fields[] (sub-campos) |
Em number_range, min_value e max_value são opcionais. Se os dois vierem, o mínimo não pode ser maior que o máximo. decimal_places, quando informado, é um inteiro a partir de zero.
Data por extenso
Em campos date, use options.output_formatter: "long" para receber a resposta por extenso em português no payload enviado ao callback_url (por exemplo, "20/07/2026" → "20 de julho de 2026"). O valor persistido no Run continua no formato curto. Omitir a opção preserva o comportamento padrão.
{
"label": "Data de nascimento",
"type": "date",
"required": true,
"order": 1,
"options": {
"output_formatter": "long"
}
}🔀 Regras condicionais (conditions)
conditions)Um campo select ou radio-group pode declarar conditions[]. A API recusa conditions nos outros tipos, inclusive checkbox-group e subcampo de repeater. action é show ou hide. operator usa equal ou not_equal.
{
"label": "Plano",
"type": "select",
"options": {
"values": [
{ "label": "Full", "value": "FULL" },
{ "label": "Basic", "value": "BASIC" }
]
},
"conditions": [
{ "action": "show", "operator": "equal", "value": "FULL", "fields": ["Detalhes do plano"] }
]
}🔑 Pré-preenchimento e injeção de contexto (Run)
Ao criar um Run, o context mapeia a key de cada campo para um valor — read_only: true bloqueia a edição pelo contato:
{
"context": {
"cpf": { "value": "529.982.247-25", "read_only": true },
"nome": { "value": "Maria", "read_only": false }
},
"expires_at": "2026-12-31T23:59:59Z",
"notification": { "whatsapp": "(11) 91234-5678" }
}notification.whatsapp é opcional e dispara o convite no WhatsApp. expires_at é gravado no Run; hoje a API não bloqueia o preenchimento depois dessa data.
Verificação de acesso opcional (access_verification)
access_verification)Antes de liberar o preenchimento, você pode exigir que o contato confirme um dado (ex.: CPF), com máscara parcial:
{
"context": {
"cpf": { "value": "588.843.362-44", "read_only": true }
},
"access_verification": {
"label": "Informe seu CPF para prosseguir",
"expected_value": "588.843.362-44",
"mask_percentage": 90
}
}Quando presente, o status do run passa a access_verification_required até a validação. mask_percentage é opcional (padrão 90).
Cada Run gera um
form_urlde uso único. Até a submissão, o acesso à jornada depende da posse desse link, e os valores informados emcontextpodem ser exibidos na tela de preenchimento. Cabe inteiramente ao integrador definir o público-alvo do link e o nível de sigilo do que é enviado nocontext. Se a sua operação injeta dados pessoais, sensíveis ou confidenciais no formulário, recomendamos habilitar a verificação de acessoaccess_verificationno Run. Essa configuração garante que o destinatário prove sua identidade (ex: confirmando o CPF) antes de acessar o formulário. Ao optar por não utilizar o verificador de acesso, o integrador declara estar ciente de que os dados docontextficarão visíveis por padrão a qualquer pessoa com acesso à URL, não sendo a Clicksign responsável por tal fato, conforme nossos Termos de Uso.
⚠️ Regras de estado
PUTna mesmaversion_keysubstituifields,settingseis_active. Quem ainda não enviou o formulário usa o schema vigente no momento do envio. Um Rundonepermanece com a resposta gravada.- Um
runcomstatus: donenão aceitaPUTnemDELETE— responde409. callback_urlnoruné opcional e específico dessa execução. Convive com ocallback_urldo formulário. Se as duas URLs forem iguais, ignorando espaços nas pontas, a API envia um únicoPOST. O webhook está em Webhook do ClickForm.- No
PUTdo Run,callback_urlomitido mantém o valor atual. String vazia remove o callback dessa execução.access_verificationomitido também mantém o valor atual. Incluir esse objeto num Run que não tinha gate muda ostatusparaaccess_verification_required.
📍 Endpoints
| Recurso | Método | Endpoint |
|---|---|---|
| Forms | GET / POST | /api/v1/forms |
| Forms | GET / PUT / DELETE | /api/v1/forms/{form_key} |
| Versions | GET / POST | /api/v1/forms/{form_key}/versions |
| Versions | GET / PUT / DELETE | /api/v1/forms/{form_key}/versions/{version_key} |
| Runs | GET / POST | /api/v1/versions/{version_key}/runs |
| Runs | GET / PUT / DELETE | /api/v1/versions/{version_key}/runs/{run_key} |
| Health | GET | /health |
Referência completa, com Try It!: Módulo de Coleta de Dados (ClickForm).
Próximo passo ➡️
- Webhook — receba o aviso quando o preenchimento terminar.
- Collections — teste Forms, Versions e Runs em Postman, Insomnia ou Bruno.
- Recipe: criar formulário, versão e run — acompanhe uma integração ponta a ponta.
- FAQ: dúvidas em ClickFlow — respostas curtas para as dúvidas mais comuns.
❓Precisa de ajuda? Entre em contato com o Suporte
💰Dúvida sobre planos e preços? Veja o comparativo
🔍Não sabe qual versão está usando? Descubra a sua versão
📚Respostas rápidas? Visite nosso FAQ
Updated about 12 hours ago