Formulários
Lê a definição de um formulário personalizado da loja e envia as respostas do visitante.
Um formulário personalizado é um conjunto de campos que o administrador monta no painel, sem programar: contato, orçamento, cadastro de revenda, pesquisa. A vitrine lê a definição (quais campos existem, quais são obrigatórios) para desenhar a tela, e depois envia as respostas. Cada envio vira uma submissão que o administrador acompanha no painel.
Tipos de campo
type | Uso | Validação feita pela API |
|---|---|---|
text | Texto de uma linha | Tamanho mínimo/máximo e padrão, se definidos. O tamanho conta bytes, então letras acentuadas valem 2 |
textarea | Texto longo | Idem |
email | Formato de endereço | |
phone | Telefone | Tamanho/padrão, se definidos |
select | Lista suspensa | O valor precisa ser um value das options |
radio | Escolha única | O valor precisa ser um value das options |
checkbox | Caixa de seleção | Somente obrigatório, quando definido |
file | Arquivo | Ver aviso de arquivos abaixo |
date | Data | Somente obrigatório, quando definido |
number | Número | Somente obrigatório, quando definido |
hidden | Campo oculto | Somente obrigatório, quando definido |
/api/v1/storefront/forms/{slug}PúblicaLer a definição de um formulário
Parâmetros de caminho
slugstringobrigatórioIdentificador do formulário, definido no painel (por exemplo
contato).Exemplo de requisição
Resposta
200Formulário
Campos da resposta
iduuidId do formulário.
namestringNome.
slugstringIdentificador na URL.
descriptionstringTexto de apoio exibido no topo.
statusstringAqui sempre
active.fieldsarrayCampos do formulário. A API não os ordena: ordene por
order no cliente.fields[].idstringIdentificador do campo. É a chave que você usa em
data no envio.fields[].typestringtexttextareaemailphoneselectcheckboxradiofiledatenumberhiddenTipo do campo.
fields[].labelstringRótulo para exibir.
fields[].placeholderstringTexto de exemplo dentro do campo. Ausente quando não há.
fields[].requiredbooleanSe o campo é obrigatório.
fields[].orderintegerPosição do campo na tela.
fields[].optionsarrayOpções de
select, radio e checkbox: objetos com label e value.fields[].validationobjectRegras opcionais:
min_length, max_length, min, max, pattern (regex), file_types e max_file_size. Só min_length, max_length e pattern são exigidos pelo servidor.settingsobjectConfiguração do formulário. Pode trazer
success_message, redirect_url, max_submissions, captcha_enabled, captcha_provider e notification_email.created_atstringCriação (RFC 3339).
updated_atstringÚltima alteração (RFC 3339).
Erros
| Status | Quando | Corpo |
|---|---|---|
| 403 | Módulo custom-forms desligado. | {"error":"module_disabled","module":"custom-forms"} |
| 404 | Não há formulário ativo com esse slug. | {"error":"FORM_NOT_FOUND"} |
| 500 | Falha ao ler. | {"error":"FORM_GET_FAILED","detail":"..."} |
/api/v1/storefront/forms/{slug}/submitPúblicaEnviar as respostas de um formulário
Parâmetros de caminho
slugstringobrigatórioIdentificador do formulário.
Corpo da requisição
dataobjectobrigatórioRespostas, com os
id dos campos como chaves e os valores preenchidos. Chaves que não são campos do formulário são aceitas e gravadas, sem erro. O corpo inteiro da requisição pode ter no máximo 10 MB._hpstringCampo isca (honeypot) anti-spam. Deve ir vazio (ou ausente). Se o formulário tem captcha ativado com o provedor
honeypot e este campo, ou data._hp, vier preenchido, o envio é recusado.Exemplo de requisição
Resposta
201Envio recebido
Campos da resposta
submission.iduuidId do envio, útil como protocolo.
submission.form_iduuidFormulário.
submission.dataobjectAs respostas gravadas.
submission.ip_addressstringIP registrado.
submission.user_agentstringUser-Agent registrado.submission.statusstringEstado do envio no painel. Nasce
new.submission.created_atstringQuando foi recebido (RFC 3339).
success_messagestringMensagem de agradecimento definida no painel. Ausente quando não há.
redirect_urlstringEndereço para onde levar o visitante depois do envio. Ausente quando não há.
Erros
Os erros de regra devolvem um código curto em maiúsculas; os de campo trazem o id do campo depois de dois pontos.
| Status | Quando | Corpo |
|---|---|---|
| 400 | JSON inválido. | {"error":"INVALID_JSON","detail":"..."} |
| 400 | Corpo acima de 10 MB, ou arquivo embutido grande demais. | {"error":"FILE_TOO_LARGE"} |
| 400 | Valor embutido (data:) com tipo que não é imagem permitida. | {"error":"MALICIOUS_FILE_UPLOAD"} |
| 400 | Campo isca preenchido (captcha honeypot). | {"error":"CAPTCHA_FAILED"} |
| 400 | Campo obrigatório vazio. | {"error":"FIELD_REQUIRED:nome"} |
| 400 | E-mail inválido. | {"error":"INVALID_EMAIL:email"} |
| 400 | Valor que não está nas opções. | {"error":"INVALID_OPTION:assunto"} |
| 400 | Menor que min_length. | {"error":"MIN_LENGTH:mensagem"} |
| 400 | Maior que max_length. | {"error":"MAX_LENGTH:mensagem"} |
| 400 | Fora do pattern. | {"error":"PATTERN_MISMATCH:telefone"} |
| 400 | data que não é um objeto JSON, ou formulário com campos corrompidos. | {"error":"INVALID_SUBMISSION_DATA"} ou {"error":"INVALID_FORM_FIELDS"} |
| 403 | Módulo custom-forms desligado. | {"error":"module_disabled","module":"custom-forms"} |
| 404 | Não há formulário ativo com esse slug. | {"error":"FORM_NOT_FOUND"} |
| 429 | O formulário atingiu max_submissions. | {"error":"MAX_SUBMISSIONS_REACHED"} |
| 500 | Falha ao gravar. | {"error":"SUBMIT_FAILED","detail":"..."} |