Skip to content

Pede uma comunidade nova (formulário do site)

POST/api/community-requests

Auth
Public
Endpoint descriptions come straight from the API specification and are in Portuguese for now. The interface around them is translated.

Público, sem login e sem `X-CommunityId` (F-89). Grava um pedido **pendente** que o SuperAdmin aprova ou recusa em `/api/admin/community-requests`, e põe na fila o e-mail "recebemos o seu pedido" para quem pediu, no idioma `language`, e o aviso de pedido novo para a equipe da Memberfy.

- **Endereço:** `subdomain` vira `<subdomain>.memberfy.net`. De 3 a 63 caracteres, minúsculas, números e hífen, sem hífen nas pontas. Reservado (`api`, `app`, `admin`, `www`...) ou já usado por uma comunidade (slug ou domínio): 400 com `param = subdomain`, nada é gravado. - **Robôs:** o campo `website` é uma armadilha (o formulário o esconde). Preenchido, a resposta é 202 e nada é gravado. Mais de 5 envios do mesmo IP em 10 minutos: 429 com `Retry-After`. O IP é o que o roteador viu (ou o `CF-Connecting-IP` quando a conexão vem da Cloudflare), nunca o `X-Forwarded-For` que o cliente manda. O servidor do site se identifica com `X-Site-Key` (chave compartilhada) e manda o IP de quem preencheu em `X-Visitor-IP`; sem a chave, `X-Visitor-IP` é ignorado. - **Um pedido pendente por e-mail:** outro envio com o mesmo e-mail (qualquer endereço) responde 202 sem gravar nada. O e-mail de confirmação é genérico (só o endereço pedido) e sai no máximo 2 vezes por dia para o mesmo destinatário. - **Nomes:** `communityName` e `ownerName` não aceitam link, endereço de site ou e-mail (`://`, `www.`, `exemplo.com`, `a/b`, `@`): 400. - **Cloudflare Turnstile:** `turnstileToken` é obrigatório (o token do widget do site, sitekey `0x4AAAAAAFW62nNlCs_PeE46`) e é conferido uma vez no `siteverify` com o IP de quem preencheu. Ausente: 400; inválido, expirado ou já usado (`timeout-or-duplicate`): 400 com `param = turnstileToken` (o site renova o widget). O token só é gasto quando os campos passam na validação. Verificação indisponível: 503. - **Idioma das mensagens de erro:** o do `Accept-Language`.

A resposta é sempre `data: {}`: não diz se o pedido é novo, duplicado ou foi descartado. O IP não é guardado, só um hash dele.

Headers

NameTypeDescription
X-Site-KeyoptionalstringSó o servidor do site: chave compartilhada (ACCESS_REQUEST_SITE_KEY)
X-Visitor-IPoptionalstringSó com X-Site-Key válida: o IP de quem preencheu o formulário

Request body application/json

NameTypeDescription
communityNamerequiredstringmin 2, max 120
subdomainrequiredstringmin 3, max 63
ownerNamerequiredstringmin 2, max 120
ownerEmailrequiredstring (email)max 200
languageoptionalpt-BR | pt-PT | en-US | en | es-ES | es-MX | es-AR | it-IT | de-DE | de-AT | de-CHVariante do site em que a pessoa preencheu. Os e-mails vão nela. Padrão pt-BR.
countryoptionalstringOpcional, ISO 3166-1 alfa-2
turnstileTokenrequiredstringToken do widget Cloudflare Turnstile do site · max 2048
websiteoptionalstringArmadilha para robôs: o formulário manda vazio

Responses

StatusDescription
202Pedido recebido (ou duplicado, ou descartado pela armadilha).
400Requisição inválida — falha de validação.
429Muitos envios do mesmo IP. Tente depois do tempo em `Retry-After`.
500Erro interno do servidor.
503A verificação do Turnstile está indisponível agora (ou sem chave em produção).

curl example

curl -X POST "https://api.memberfy.net/api/community-requests" \
  -H "Content-Type: application/json" \
  -d '{"communityName":"string","subdomain":"string","ownerName":"string","ownerEmail":"[email protected]","turnstileToken":"string"}'