Criar um formulário
const url = 'https://dattacrm.com.br/api/v1/forms';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"name":"example","slug":"example","experience":"classic","fields":[{"additionalProperty":"example"}],"defaultTags":[],"defaultListId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","funnelEntry":{"enabled":false,"stageId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"},"entryConfig":{"listId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"},"listRules":[{"questionId":"example","operator":"equals","value":{"min":1,"max":1},"listIds":["2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"]}],"isActive":true,"showQuestions":false,"theme":{"background":"#202720","foreground":"#fbfaf6","accent":"#1d8f7a","questionSize":"medium","answerSize":"medium","alignment":"left"},"consent":{"enabled":false,"text":"","url":"example"},"emailMarketing":{"enabled":false,"text":""}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://dattacrm.com.br/api/v1/forms \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "example", "slug": "example", "experience": "classic", "fields": [ { "additionalProperty": "example" } ], "defaultTags": [], "defaultListId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "funnelEntry": { "enabled": false, "stageId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }, "entryConfig": { "listId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }, "listRules": [ { "questionId": "example", "operator": "equals", "value": { "min": 1, "max": 1 }, "listIds": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ] } ], "isActive": true, "showQuestions": false, "theme": { "background": "#202720", "foreground": "#fbfaf6", "accent": "#1d8f7a", "questionSize": "medium", "answerSize": "medium", "alignment": "left" }, "consent": { "enabled": false, "text": "", "url": "example" }, "emailMarketing": { "enabled": false, "text": "" } }'Cria um formulário de captação pelo mesmo caminho da tela: mesmas validações, primeira versão no histórico e campos personalizados registrados no catálogo. Devolve o formulário com publicUrl (página pública) e embedUrl (código de incorporação). Responde 400 quando os campos são inválidos (id ausente ou repetido, conversacional sem campo name ou phone, etapa do funil inexistente, defaultListId que não é lista de Site da conta) e 409 quando o slug já está em uso.
Authorizations
Seção intitulada “Authorizations ”Request Body required
Seção intitulada “Request Body required ”Dados do formulário. Obrigatórios: name, slug, experience e fields. O resto tem padrão (publicado, sem tags, tema escuro). Publicado exige defaultListId (ou entryConfig.listId); sem lista, só como rascunho (isActive: false).
object
Nome do formulário, como aparece no CRM (1 a 100 caracteres).
Apelido único do formulário em toda a plataforma (2 a 64 caracteres: letras minúsculas, números e hífen).
Formato: classic (todas as perguntas numa página) ou conversational (uma pergunta por vez, estilo typeform).
Etapas do formulário, na ordem em que aparecem (até 50). Cada item é um objeto com no mínimo id (texto único no formulário), type e title. type aceita welcome, statement, short_text, long_text, email, phone, multiple_choice, opinion_scale, date, number, money, cpf, cnpj, address, url_param e thank_you. crmField liga a resposta a um campo do lead (name, email, phone ou o caminho de um campo personalizado, criado no catálogo se não existir). Outras chaves comuns: description, placeholder, required, options (lista de { label, value }) em multiple_choice, logic (regras de salto) e thankYou ({ mode, url, label }) em thank_you. No formato conversacional ao menos um campo precisa ter crmField igual a name ou phone. Exemplo de item: { “id”: “name”, “type”: “short_text”, “title”: “Seu nome”, “crmField”: “name”, “required”: true }.
Uma etapa do formulário: objeto com id (texto único no formulário), type e title; as demais chaves dependem do tipo.
object
Tags aplicadas a todo lead que enviar o formulário (até 20, de até 40 caracteres cada). Padrão: nenhuma.
Para onde vão os leads do formulário: a lista de destino, que precisa ser de Site. Omitido, o formulário mantém a configuração atual (ou nasce na lista de defaultListId, ou sem lista).
object
Id de uma lista de Site da conta (de GET /lists).
Regras de lista por resposta (até 20), gravadas em settings.listRules: se a resposta de questionId bate (equals, in, contains ou between), o lead entra também nas listIds da regra. Só somam listas. Omitido, mantém as regras atuais; [] remove todas.
Uma regra: se a resposta bate, o lead entra nas listas.
object
Id da pergunta (campo do formulário) cuja resposta é avaliada.
Equals (igual), in (uma das opções), contains (contém o texto) ou between (número entre min e max, inclusivo).
Texto de comparação (equals e contains).
Respostas aceitas (in).
Faixa numérica (between).
object
Limite inferior, inclusivo.
Limite superior, inclusivo; não pode ser menor que min.
Listas em que o lead entra quando a regra bate (1 a 10).
Publicado (true, padrão) ou desativado (false): desativado, a página pública deixa de aceitar envios.
Mostra a lista de perguntas na página do formulário conversacional. Padrão false.
Aparência do formulário. Chaves omitidas ficam com o padrão (fundo escuro, destaque verde).
object
Cor de fundo, em hexadecimal de 6 dígitos (ex.: #202720).
Cor do texto, em hexadecimal de 6 dígitos.
Cor de destaque (botões e seleção), em hexadecimal de 6 dígitos.
Tipo do fundo: solid (cor única), linear, radial ou mesh (gradientes que usam bgColor2).
Segunda cor do gradiente de fundo, em hexadecimal de 6 dígitos.
Nome da fonte do formulário (até 50 caracteres).
Tamanho geral da fonte: sm, md, lg ou xl.
Tamanho do título das perguntas: small, medium (padrão) ou large.
Tamanho do texto das respostas: small, medium (padrão) ou large.
Alinhamento do conteúdo: left (padrão) ou center.
Caixa de consentimento LGPD exibida ao lead antes de enviar. Omitida, não aparece.
object
Mostra a caixa de consentimento (LGPD) antes do envio.
Texto da caixa de consentimento (até 500 caracteres).
Endereço http(s) da política de privacidade; vazio para não mostrar link.
Caixa de aceite de e-mail marketing; marcada, registra o consentimento do lead. Omitida, não aparece.
object
Mostra a caixa “quero receber novidades por e-mail”.
Texto da caixa (até 300 caracteres). Vazio usa o texto padrão.
Responses
Seção intitulada “ Responses ”Sucesso.
object
Formulário de captação da conta, com as etapas, o tema e os endereços de uso.
object
Identificador do formulário.
Nome do formulário, como aparece no CRM.
Apelido único do formulário na plataforma.
Formato: classic (todas as perguntas numa página) ou conversational (uma pergunta por vez).
Publicado (true) ou desativado (false).
Etapas do formulário, na ordem em que aparecem.
Uma etapa do formulário (id, type, title, crmField…).
object
Tags aplicadas a todo lead que enviar o formulário.
Aparência do formulário (cores, fundo, tamanhos e alinhamento).
object
Cor de fundo, em hexadecimal de 6 dígitos (ex.: #202720).
Cor do texto, em hexadecimal de 6 dígitos.
Cor de destaque (botões e seleção), em hexadecimal de 6 dígitos.
Tipo do fundo: solid (cor única), linear, radial ou mesh (gradientes que usam bgColor2).
Segunda cor do gradiente de fundo, em hexadecimal de 6 dígitos.
Nome da fonte do formulário (até 50 caracteres).
Tamanho geral da fonte: sm, md, lg ou xl.
Tamanho do título das perguntas: small, medium (padrão) ou large.
Tamanho do texto das respostas: small, medium (padrão) ou large.
Alinhamento do conteúdo: left (padrão) ou center.
Endereço da página pública do formulário.
Endereço do código de incorporação (HTML) para colocar o formulário em outro site.
Quando o formulário foi criado.
Quando o formulário foi alterado pela última vez.
Example
{ "data": { "id": "0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f", "experience": "classic", "defaultListId": "0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f", "theme": { "background": "#202720", "foreground": "#fbfaf6", "accent": "#1d8f7a", "bgType": "solid", "fontSize": "sm", "questionSize": "small", "answerSize": "small", "alignment": "left" }, "createdAt": "2026-10-19T12:00:00.000Z", "updatedAt": "2026-10-19T12:00:00.000Z" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Máximo de requisições por janela de 60 segundos para esta chave.
Requisições restantes na janela atual.
Fim da janela atual, em milissegundos desde a época Unix (epoch ms).
Dados inválidos na requisição (validation_error), lead novo sem lista (list_required), campo que mudou de lugar (field_moved) ou chave enviada na URL (api_key_in_url).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Chave ausente, inválida (invalid_api_key), vencida (api_key_expired) ou revogada (api_key_revoked).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
A chave é somente leitura e a operação grava dados (insufficient_scope).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Conflito com o estado atual (conflict), contato oculto, cujo negócio não muda (lead_hidden), ou limite do plano atingido (plan_limit).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
O corpo da requisição passa de 256 KB (payload_too_large).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Limite de requisições atingido (rate_limited). Aguarde Retry-After segundos.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Máximo de requisições por janela de 60 segundos para esta chave.
Requisições restantes na janela atual.
Fim da janela atual, em milissegundos desde a época Unix (epoch ms).
Segundos até poder tentar de novo.
Erro interno (internal_error). Informe o requestId ao suporte.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
O CRM está em modo somente leitura durante uma migração (maintenance). Tente de novo depois de Retry-After segundos.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Segundos até poder tentar de novo.