Registra um novo membro
POST/api/auth/register
- Auth
- Public
- Clé d’API:
- Clé d’API non acceptée
- X-CommunityId
X-CommunityIdEnvoyez le X-CommunityId de la communauté où l’opération a lieu.
Cria um membro e, quando o header `X-CommunityId` é enviado, já o vincula à comunidade com o papel `MEMBER`. Não exige autenticação. Registra o aceite dos Termos de uso na conta: `data.member.termsAcceptedAt` (agora) e `data.member.termsVersion` (a versão vigente).
Campos customizados da comunidade: `fields` é `{ key: valor }` com as chaves de `GET /api/member-fields/signup` (os obrigatórios e os opcionais com `askOnSignup`), validados como em `PUT /api/members/{id}/fields`. Obrigatório faltando, chave fora dessa lista ou valor inválido devolvem 422, um erro por campo (`param` = `fields.<key>`), e nada é criado.
A conta nasce na comunidade do `X-CommunityId` (o perfil) e o `data.token` só vale nela. E-mail que já tem conta nesta comunidade: 400. Ter conta em outra comunidade não impede: o cadastro cria aqui uma conta nova, com senha própria.
Exige `altcha`, um desafio de `GET /api/auth/challenge` resolvido, em toda chamada (ausente, inválido, vencido ou já usado: 422 com `param = altcha`), conferido depois da validação dos campos. Limite de 30 cadastros por IP em 15 minutos (429 com `Retry-After`).
Numa comunidade com **cadastro com aprovação** (`signupEnabled` e `signupRequiresApproval`), nenhuma conta nasce aqui: o cadastro vira um pedido na fila da equipe, a senha enviada é descartada e a resposta é a mesma de `POST /api/auth/signup-request` (202, `data.status = pending`, sem `token`).
En-têtes
| Nom | Type | Description |
|---|---|---|
X-CommunityIdfacultatif | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Corps de la requête application/json
| Nom | Type | Description |
|---|---|---|
altchaobligatoire | string | O payload do widget ALTCHA (base64 de `{ challenge, solution }`) sobre um desafio de `GET /api/auth/challenge`. Uso único. · max 8192 |
fullNameobligatoire | string | |
emailobligatoire | string (email) | |
passwordobligatoire | string (password) | Regra única: mínimo de 8 caracteres, com letra maiúscula, letra minúscula e número. Fora dela, 400 com param = password e a regra que faltou. · min 8 |
fieldsfacultatif | object | Valores dos campos do cadastro da comunidade, `{ key: valor }` (ver `GET /api/member-fields/signup`). `MULTI_SELECT` recebe a lista de `value` das opções marcadas; opção que não existe ou fora de `minSelections`/`maxSelections` dá 422 com o erro no campo (`fields.<key>`). |
phonefacultatif | string | Telefone opcional. Fica na conta sem confirmação; só recebe SMS depois do código (`POST /api/members/me/phone-verification`). Inválido: 400 com param = phone. |
phoneCountryfacultatif | string | País do telefone quando ele vem sem `+`. Padrão BR. |
referralCodefacultatif | string | O código do link de indicação (`?ref=`) por onde a pessoa chegou, se a comunidade tem "Indicação" ligada. Nunca recusa o cadastro nem abre a comunidade: o modo de entrada vale como sempre (com aprovação, o código fica no pedido e a indicação é decidida na aprovação). Só conta quando a pessoa vira membro, uma vez, se o código é de um membro ativo desta comunidade, não é ela mesma (mesmo perfil ou e-mail) e ela nunca teve perfil aqui. Código inválido, de outra comunidade ou de membro removido é ignorado em silêncio. · max 32 |
referralSeenAtfacultatif | string (date-time) | Quando a pessoa abriu o link. Mais de 30 dias antes do cadastro: o código é ignorado. |
smsConsentfacultatif | object | O texto de serviço ao lado do botão (clicar consente) e a caixa de marketing, desmarcada por padrão (`GET /api/contact-consent/texts`). Grava a versão atual do texto, a origem `signup`, a data e o IP. |
smsConsent.servicefacultatif | boolean | |
smsConsent.marketingfacultatif | boolean | |
smsConsent.whatsappfacultatif | object | O consentimento do WhatsApp, com texto próprio (`GET /api/contact-consent/texts` → `whatsapp`), gravado no canal `whatsapp`. |
smsConsent.whatsapp.servicefacultatif | boolean | |
smsConsent.whatsapp.marketingfacultatif | boolean | |
smsConsent.textVersionfacultatif | string | Opcional. A tela mostrou o texto único de SMS e WhatsApp (`GET /api/contact-consent/texts` → `combined.service`): mande a versão dele, e o serviço de cada canal marcado (`service`, `whatsapp.service`) é gravado com essa versão. Um botão só, serviço e marketing juntos: mande a versão de `signup` (`combined-all:AAAA-MM-DD` com os dois canais, `sms-all:` ou `whatsapp-all:` com um só), e cada canal que a comunidade oferece (e que o texto cobre) grava serviço e marketing com essa versão; os booleanos (`service`, `marketing`, `whatsapp`) não são lidos. Só a versão atual é aceita; outra devolve 400 com param = smsConsent. |
acceptedTermsfacultatif | boolean | Aceite dos Termos de uso (docs.memberfy.net/{idioma}/conceitos/termos-de-uso). Opcional: cadastrar-se já é aceitar, e o aceite é registrado (`termsAcceptedAt`, `termsVersion`) mesmo sem o campo. Enviado, precisa ser `true`; `false` devolve 400 com param = acceptedTerms. |
ageConfirmedfacultatif | boolean | A pessoa confirma ter a idade mínima para ter conta (16, ou a `minimumAge` da comunidade, que vem em `POST /api/communities/domain`). `true` registra o aceite (`ageConfirmedAt`); Obrigatório: sem o campo ou com `false`, a resposta é 400 `param = ageConfirmed` com `data.minimumAge`. |
Réponses
| Statut | Description |
|---|---|
201 | Membro criado com sucesso. |
202 | A comunidade aprova cadastros; o pedido foi recebido (resposta genérica, igual à de `POST /api/auth/signup-request`). |
400 | Requisição inválida — falha de validação. |
422 | Campo customizado do cadastro obrigatório faltando, fora da lista do cadastro ou inválido; ou `altcha` ausente, inválido, vencido ou já usado (`param = altcha`, ver `HumanCheckFailed`). |
429 | Tentativas demais. O header `Retry-After` diz em quantos segundos tentar de novo. |
500 | Erro interno do servidor. |
503 | A API não consegue verificar o ALTCHA agora (chave não configurada em produção). `param = altcha`. |
Exemple curl
curl -X POST "https://api.memberfy.net/api/auth/register" \
-H "X-CommunityId: $COMMUNITY_ID" \
-H "Content-Type: application/json" \
-d '{"altcha":"eyJjaGFsbGVuZ2UiOnsicGFyYW1ldGVycyI6ey4uLn19LCJzb2x1dGlvbiI6ey4uLn19","fullName":"Maria Silva","email":"[email protected]","password":"Senha@123"}'