ID do formulário

Como funciona

Cada verificação pela qual um envio passa, em ordem, e o que cada uma pode retornar.

Cada envio para /f/<formId> passa pelo mesmo pipeline. As verificações baratas rodam primeiro, então um flood ou um formulário desconhecido custa quase nada. A primeira verificação que falhar define a resposta.

As verificações pelas quais um envio passa, em ordem

Antes de ler o corpo

  1. 1Proteção contra flood600 por minuto por IP, em todos os formulários429 rate_limited
  2. 2Busca do formulárioFormulários desconhecidos, excluídos ou desativados404 not_found
  3. 3Limites de taxa do formulárioO preset do formulário, por visitante e por formulário429 rate_limited
  4. 4PausadoO formulário está pausado no painel403 form_paused

Lendo o envio

  1. 5Parsingurlencoded, multipart ou JSON, UTF-8, limites de tamanho400, 413, 415 ou 422
  2. 6Chave de APISó quando um header Authorization é enviado403 forbidden
  3. 7Domínios permitidosOrigin ou Referer comparado aos domínios do formulárioSpam, ou 403
  4. 8Verificação humanaToken do Turnstile, quando a verificação está ativa403, ou uma página de verificação

Avaliando o envio

  1. 9ValidaçãoContra os campos publicados, se houver422 validation_failed
  2. 10PontuaçãoHoneypot, tempo, links, palavras-chave, duplicadosSpam a partir de 5
  3. 11IdempotênciaUma chave repetida repete a primeira respostaRepetição, 409 ou 422
  4. 12Uso mensalMuito acima do limite do workspace429 quota_exceeded

Armazenado

Envio salvo

201 para código, 303 para navegadores

  • WebhooksAssinados, com novas tentativas por cerca de 3 dias
  • E-mail de notificaçãoPara os destinatários do formulário
  • Painel e APIAo vivo, na hora

Spam também é armazenado e respondido como sucesso, mas não dispara nada.

O que cada etapa faz

Limites de taxa antes de tudo

Os limites de taxa rodam antes de o corpo ser lido. A proteção contra flood (600 por minuto por IP) roda antes até da busca do formulário, então um flood nunca chega ao banco de dados. As regras do próprio formulário rodam logo depois da busca. Requisições rejeitadas não consomem a cota. Os números exatos estão em Limites de taxa.

Parsing

O corpo é lido como urlencoded, multipart ou JSON. O texto é decodificado como UTF-8 e normalizado para NFC, CRLF vira LF e caracteres de controle são removidos. Nomes que começam com _ são instruções reservadas, como _redirect e _subject, e nunca são armazenados como respostas. Veja Formulários HTML.

Quem enviou

Um header Authorization: Bearer é opcional. Uma chave secreta (ik_sk_) com o escopo submissions:write pula a verificação de domínios permitidos e a verificação humana do Ikiform. Uma chave publicável (ik_pub_) só funciona a partir dos domínios listados na chave. Sem chave, o envio é avaliado pelo seu Origin.

Spam

Spam nunca é um erro. Um envio que falha na política de domínios permitidos no modo spam, ou que pontua 5 ou mais, é armazenado com status spam e recebe a mesma resposta de sucesso de um envio real, então os bots não aprendem nada. Spam não dispara webhooks nem e-mails e não conta no uso. Veja Proteção contra spam.

Armazenar e entregar

O envio, suas entregas de webhook e seu e-mail de notificação são gravados em um único lote no banco de dados e depois entregues a uma fila. A entrega de webhooks e os e-mails nunca deixam a resposta mais lenta, e um envio nunca é armazenado sem as suas entregas.

JSON ou redirecionamento

O mesmo endpoint responde navegadores com páginas e código com JSON. O Ikiform decide por requisição:

Como o Ikiform escolhe entre uma resposta JSON e um redirecionamento, verificado de cima para baixo
  1. 1Accept inclui application/jsonJSON
  2. 2O corpo é JSONJSON
  3. 3Sec-Fetch-Mode: navigateRedirecionamento ou página
  4. 4Qualquer outro Sec-Fetch-Mode, como corsJSON
  5. 5Sem Sec-Fetch-Mode, Accept inclui text/htmlRedirecionamento ou página
  6. 6Qualquer outra coisa, como curlJSON

A primeira regra que corresponder vence.

No modo JSON, sucesso é 201 { "ok": true, "id": "sub_..." }. No modo página, sucesso é um redirecionamento 303, e os erros mostram uma página de erro hospedada que lista os problemas de cada campo pelo rótulo.

Depois que um envio é armazenado

O quêQuandoDetalhes
WebhooksSegundos depois, com novas tentativas por cerca de 3 diasWebhooks
E-mail de notificaçãoSegundos depois, se as notificações estiverem ativas no formulárioLimitado a 50 e-mails por formulário por hora (10 para workspaces com menos de 7 dias), depois um resumo por hora
PainelNa hora, ao vivoSpam aparece no filtro de spam
API RESTNa horaAPI REST
Formulários cujos envios contêm campos com nomes de senha, cartão ou frase-semente são sinalizados, e seus e-mails de notificação ficam retidos para revisão. Não colete credenciais com um backend de formulário.

Ids

IdFormatoObservações
Formuláriofrm_xxxxxxxxxxxxxxxxfrm_ mais 16 caracteres aleatórios. Público: ele aparece na URL do action do seu formulário.
Enviosub_01k7v2c9t3e8m5q4x6z0a1b2c3sub_ mais 26 caracteres, ordenados por tempo.
Entrega de webhookdlv_...Enviado como webhook-id; continua o mesmo entre as novas tentativas.
Requisiçãoreq_...Toda resposta tem um header X-Request-Id. Informe-o quando entrar em contato com o suporte.
{ "ok": true, "id": "sub_01k7v2c9t3e8m5q4x6z0a1b2c3" }