Responde pelo link público
POST/api/public/surveys/{publicToken}/responses
- Auth
- Pública
- Chave de API:
- Não aceita chave de API
Login opcional. Quem tem perfil na comunidade da pesquisa responde **como membro** (deduplicado pelo perfil, 409 na segunda vez, em qualquer navegador) e não manda `visitorToken` nem `altcha`. Os demais são **visitante**: `visitorToken` (aleatório, um por pesquisa, guardado no navegador; o servidor guarda só o hash, sem horário e sem ligação com a resposta; o mesmo token de novo é 409 — deduplicação por esforço, não garantida) e `altcha` (o payload do widget ALTCHA, resolvido sobre o desafio de `GET /api/public/surveys/{publicToken}/challenge`; ausente, inválido, de outra pesquisa, vencido ou já usado é 422 com `param = altcha`). Limite de 300 envios por IP e pesquisa em 10 minutos e teto de 5.000 respostas de visitante por pesquisa: acima, 429. Link desligado, rascunho ou token inválido: 404; encerrada ou ainda não começou (`notYetOpen`): 422. Esta rota não aparece em log de acesso, Sentry, log da comunidade nem analytics, e o IP não vai ao banco.
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
publicTokenobrigatório | path | string |
Corpo da requisição application/json
| Nome | Tipo | Descrição |
|---|---|---|
answersobrigatório | object[] | |
answers[].questionIdobrigatório | string (uuid) | |
answers[].optionValuesopcional | string[] | |
answers[].numberopcional | integer | |
answers[].textopcional | string | max 5000 |
visitorTokenopcional | string | Só visitante. · min 16, max 200 |
altchaopcional | string | Só visitante: o payload do widget ALTCHA (base64 de `{ challenge, solution }`). · max 8192 |
Respostas
| Código | Descrição |
|---|---|
201 | Resposta gravada. `data.respondAs`: `member` ou `visitor`. |
400 | Requisição inválida — falha de validação. |
404 | Recurso não encontrado. |
409 | Conflito com o estado atual do recurso. |
422 | Respostas inválidas, `visitorToken` ausente, `altcha` ausente, inválido, vencido ou já usado, pesquisa encerrada ou ainda não começou. |
429 | Limite por IP e pesquisa, ou teto de respostas de visitante. |
500 | Erro interno do servidor. |
503 | Verificação indisponível (API sem chave ALTCHA). |
Exemplo com curl
curl -X POST "https://api.memberfy.net/api/public/surveys/<publicToken>/responses" \
-H "Content-Type: application/json" \
-d '{"answers":[{}]}'