DOCS

Guia de configuração

O Formchan funciona como o destino para onde seu formulário envia. Aqui está tudo o que você precisa para conectá-lo.

BUILD WITH AI

Desenvolve com IA? Entregue a URL e a especificação.

Entregue à sua IA de desenvolvimento a URL do painel e esta especificação Markdown em inglês. Ela pode conectar seu formulário ou criar um novo.

Baixar especificação (MD, inglês) ↓
Ver instruções para a IA
Conecte o formulário de contato deste site ao Formchan.

URL de envio: [cole a URL do painel]
Especificação: https://formchan.app/lp/integration-en.md

Leia a especificação e implemente a integração mantendo o design atual. Crie um formulário se não existir. Inclua validação, estados de envio, sucesso e erro, prevenção de envios duplicados e instruções para um teste.

Primeiros passos

Ao se cadastrar, seu primeiro formulário é criado. Copie o URL que aparece no seu painel e coloque no action do formulário. Use POST como method.

As configurações do formulário no seu painel. Aqui aparecem o URL para o action e o código para colar no seu site.
As configurações do formulário no seu painel. Aqui aparecem o URL para o action e o código para colar no seu site.
<form action="https://formchan.app/f/YOUR_FORM_KEY" method="POST">
  <input name="name">
  <input name="email" type="email">
  <textarea name="message"></textarea>
  <button>Enviar</button>
</form>

Depois de enviar o formulário, a pessoa vê uma página de confirmação. A mensagem chega na sua caixa de entrada, e a IA adiciona ★ e tags.

Nomes dos campos

Você pode dar o nome que quiser aos campos. Cada campo enviado aparece do jeito que veio na caixa de entrada e nos emails de notificação.

O endereço de email usado nas respostas é lido de um campo chamado email. mail e _replyto também funcionam. O nome de quem enviou é lido de name ou fullname.

Cada envio pode ter até 64 KB, com até 50 campos e 5.000 caracteres por campo.

Depois do envio

Se você não configurar nada, o Formchan mostra a própria página de confirmação, com um link para voltar à página anterior.

A página de confirmação mostrada quando você não configura nada.
A página de confirmação mostrada quando você não configura nada.

Para levar as pessoas a uma página sua, coloque o URL dela em um campo oculto chamado _next.

<input type="hidden" name="_next" value="https://example.com/thanks">

Envio por JavaScript

Envie com o cabeçalho Accept: application/json e o Formchan responde em JSON em vez de mostrar uma página. O visitante continua na sua página.

const res = await fetch('https://formchan.app/f/YOUR_FORM_KEY', {
  method: 'POST',
  headers: { Accept: 'application/json' },
  body: new FormData(form),
});
const data = await res.json(); // { ok: true }

Se der certo, você recebe ok: true. Se falhar, recebe ok: false e um destes códigos de erro.

CódigoHTTPSignificado
not_found404O formulário não existe
origin403Enviado de um site que o formulário não aceita
rate429Mensagens demais em pouco tempo
body400Não foi possível ler o conteúdo
empty400Todos os campos estavam vazios

Proteção contra spam

Adicione ao formulário um campo oculto chamado _gotcha. As pessoas não o veem, mas os bots o preenchem. Esses envios parecem aceitos, mas são descartados.

<input name="_gotcha" style="display:none" tabindex="-1" autocomplete="off">

Mensagens enviadas muitas vezes do mesmo lugar em pouco tempo são recusadas.

Nas configurações do formulário, você pode listar os sites que podem enviar para ele. Envios de outros sites são recusados.

WordPress, Webflow e mais

HTML
Use o código do formulário acima do jeito que está.
WordPress
Cole o código do formulário em um bloco HTML personalizado.
Webflow
Nas configurações do formulário, coloque o URL em Action e escolha POST em Method.
React / Next.js
Envie com fetch, como mostrado em “Envio por JavaScript”.

Notificações

Mensagens ★3 são enviadas para seus emails de notificação assim que chegam. Quando você adiciona um endereço, enviamos um email de confirmação para ele; as notificações começam depois que alguém clica no link desse email.

Emails de notificação. Só os endereços confirmados recebem emails.
Emails de notificação. Só os endereços confirmados recebem emails.

★1 e ★2 chegam juntas em um email por dia. Você pode mudar o horário, e nos dias sem nada novo nenhum email é enviado.

Configurações de notificação. Ligue ou desligue os emails de ★3 e o resumo diário, e escolha o horário.
Configurações de notificação. Ligue ou desligue os emails de ★3 e o resumo diário, e escolha o horário.
O email de uma mensagem ★3.
O email de uma mensagem ★3.
O email de resumo diário.
O email de resumo diário.

A partir do plano Pro, você também pode enviar as mensagens para o Slack, Chatwork, Microsoft Teams, Google Chat e Discord.

Notificações no chat (a partir do plano Pro).
Notificações no chat (a partir do plano Pro).

Webhooks

No plano Business, o Formchan envia um POST com JSON para o seu URL depois que cada mensagem chega e a IA a lê.

Configurações de webhook (plano Business).
Configurações de webhook (plano Business).

O cabeçalho X-Formchan-Signature traz um HMAC-SHA256 do corpo da requisição, assinado com o segredo do seu webhook, no formato sha256=…. Calcule o mesmo valor do seu lado para confirmar que a requisição veio mesmo do Formchan.

Exemplo de corpo

{
  "event": "submission.created",
  "at": "2026-10-12T09:29:41.000Z",
  "workspace": { "id": "w_…", "name": "Harbor Design Studio" },
  "submission": {
    "id": "sb_…",
    "number": 1,
    "form": { "id": "fm_…", "name": "Contact" },
    "received_at": "2026-10-12T09:29:38.000Z",
    "name": "Emily Parker",
    "email": "emily@example.com",
    "fields": { "name": "Emily Parker", "email": "emily@example.com", "message": "…" },
    "stars": 3,
    "tags": [{ "id": "tg_…", "name": "Inquiry", "by": "ai" }],
    "summary": "Wants a consultation on adding a second floor.",
    "reason": "Concrete request with budget and timeline.",
    "done": false
  }
}

Verificando a assinatura (Node.js)

import crypto from 'node:crypto';

// rawBody: the request body as a string, before JSON.parse
function isFromFormchan(rawBody, signature, secret) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(expected), b = Buffer.from(signature || '');
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

Se as mensagens não chegarem, confira o URL do action e a opção “Aceitar envios somente destes sites” nas configurações do formulário.

Dê atenção às mensagens importantes.

Grátis até 100 mensagens por mês. Você só precisa de um email. Sem cartão de crédito.

Começar grátis