API Reference: Autenticacao
Base URL: /api/auth
POST /api/auth/signup
Cadastra um novo usuario. Status inicial: PENDENTE (nao consegue logar ate ser aprovado).
Permissao: Publica
Body
{
"nome": "Joao da Silva",
"email": "joao@email.com",
"senha": "Senha123",
"cpf": "123.456.789-00",
"telefone": "(27) 99999-9999",
"dataNascimento": "1990-05-15",
"endereco": {
"cep": "29000-000",
"rua": "Rua das Flores",
"numero": "42",
"complemento": "Apto 101",
"bairro": "Centro",
"cidade": "Vitoria",
"estado": "ES"
},
"competencias": [
{ "microId": "uuid-da-competencia", "nivel": "AVANCADO" }
],
"consentimentoLgpd": true,
"codigoReferral": "MBL-ES-A1B2"
}Validacoes (Zod)
nome: min 3 caracteresemail: formato validosenha: min 8 chars, 1 maiuscula, 1 numerocpf: formato 000.000.000-00consentimentoLgpd: deve sertrue
Response 201
{
"message": "Cadastro realizado com sucesso. Aguarde aprovacao.",
"usuario": {
"id": "uuid",
"nome": "Joao da Silva",
"email": "joao@email.com",
"status": "PENDENTE",
"codigoReferral": "MBL-ES-X7K2"
}
}POST /api/auth/login
Autentica o usuario. Retorna JWT. Verifica status antes de autenticar.
Permissao: Publica
Body
{
"email": "joao@email.com",
"senha": "Senha123"
}Response 200
{
"accessToken": "eyJhbGci...",
"refreshToken": "xxx",
"expiresIn": 3600,
"usuario": {
"id": "uuid",
"nome": "Joao da Silva",
"cargo": "MEMBRO",
"nucleoId": "uuid"
}
}Erros
401: Email ou senha invalidos403: Cadastro pendente / rejeitado / suspenso
GET /api/auth/me
Retorna perfil completo do usuario logado, incluindo competencias e plano.
Permissao: Autenticado
Header: Authorization: Bearer token
Response 200
{
"id": "uuid",
"nome": "Joao da Silva",
"email": "joao@email.com",
"cargo": "MEMBRO",
"saldo_capixacoins": 1500,
"planos": { "id": "uuid", "nome": "Free" },
"usuario_competencias": [
{
"nivel_proficiencia": "AVANCADO",
"competencias_micro": {
"id": "uuid", "nome": "Edicao de Video",
"competencias_macro": { "id": "uuid", "nome": "Digital" }
}
}
],
...
}POST /api/auth/approve
Aprova um cadastro pendente. Credita 100 CC ao referral (se existir). Gera entrada no feed e notificacao. Envia email de boas-vindas via Resend.
Permissao: COORDENADOR ou ADMINISTRADOR
Body
{ "usuarioId": "uuid-do-usuario" }Response 200
{ "message": "Usuario aprovado com sucesso" }Side Effects
- Status do usuario muda para
ATIVO - 100 CC creditadas ao referral (se existir)
- Entrada no feed: "Bem-vindo ao nucleo!"
- Notificacao push para o usuario
- Email de boas-vindas enviado via Resend (template HTML com nome do nucleo e instrucoes de primeiro acesso)
POST /api/auth/reject
Rejeita um cadastro pendente (soft delete — status muda para REJEITADO). Envia email de rejeicao via Resend.
Permissao: COORDENADOR ou ADMINISTRADOR
Body
{ "usuarioId": "uuid-do-usuario" }Side Effects
- Status do usuario muda para
REJEITADO - Email de rejeicao enviado via Resend (template HTML informando que o cadastro nao foi aprovado)
Cargos Retornados
O campo cargo retornado nos endpoints de login e me pode ser um dos seguintes valores:
MEMBRO— Usuario baseLIDER_PROJETO— Lider de projetoPORTA_VOZ— Membro com permissoes de comunicacao (comunicados, enquetes, emails, tarefas, IA)COORDENADOR— Gerente do nucleoADMINISTRADOR— Acesso total ao nucleoSUPER_ADMIN— Acesso irrestrito a todos os nucleos
POST /api/auth/refresh
Renova o access token usando o refresh token.
Permissao: Publica
Body
{ "refreshToken": "xxx" }Response 200
{
"accessToken": "eyJhbGci...",
"refreshToken": "novo-refresh",
"expiresIn": 3600
}POST /api/auth/forgot-password
Envia email de recuperacao de senha. Nao revela se o email existe ou nao (seguranca).
Permissao: Publica
Body
{ "email": "joao@email.com" }Response 200
{ "message": "Se o email estiver cadastrado, voce recebera um link de recuperacao." }PATCH /api/auth/dismiss-first-login
Marca primeiro_login como false (usado apos onboarding tour).