Autenticação
A API usa JWT (Bearer token) com access + refresh tokens.
Conceitos
- Cadastro mínimo — apenas email, senha e nome. Telefone e endereço são coletados no checkout.
- Roles —
customer,seller,admin. Customer é o padrão no signup público. - Seller signup — via convite (waitlist → invite token)
:::info Como usar nas requests Todas as requests autenticadas usam o header:
Authorization: Bearer <accessToken>
:::
Cadastro (Signup)
POST /auth/signup
{
"email": "cliente@email.com",
"password": "minimo8chars",
"name": "João Silva"
}
| Campo | Obrigatório | Validação |
|---|---|---|
email | Sim | Formato válido, único (409 se duplicado) |
password | Sim | Mínimo 8 caracteres |
name | Sim | 1-150 caracteres |
Response (201)
{
"accessToken": "eyJ...",
"refreshToken": "eyJ...",
"tokenType": "bearer"
}
O usuário é criado com role customer e já recebe tokens para uso imediato.
Signup de Seller (via convite)
POST /auth/signup/seller
Usado apenas para completar cadastro de seller convidado via waitlist. O artista recebe um inviteToken por email/WhatsApp e finaliza o cadastro definindo a senha.
{
"token": "a1b2c3...hex",
"password": "minimo8chars"
}
Comportamento:
- Valida o token (não expirado + waitlist com
status = invited) - Cria
Usercomrole=seller - Cria
SellerProfile(onboarding_status=pending,storeStatus=unpublished) - Muda waitlist para
status=converted, gravauser_ideconvertedAt
Response: mesmos access + refresh tokens do signup público.
:::info Fluxo completo Para o fluxo end-to-end (waitlist → invite → signup), ver Onboarding do Seller. :::
Login
POST /auth/login
{
"email": "cliente@email.com",
"password": "minhasenha123"
}
Response
{
"accessToken": "eyJ...",
"refreshToken": "eyJ...",
"tokenType": "bearer"
}
Refresh Token
POST /auth/refresh
{
"refreshToken": "eyJ..."
}
Retorna novos access + refresh tokens.
Dados do Usuário
GET /auth/me
Requer Authorization: Bearer <accessToken>.
Response
{
"id": "uuid",
"email": "cliente@email.com",
"name": "João Silva",
"status": "active",
"roles": ["customer"],
"createdAt": "2026-03-25T10:00:00Z"
}
Atualizar Perfil
PATCH /users/me
Atualiza dados do usuário autenticado. Todos os campos são opcionais — envie apenas o que deseja alterar.
{
"name": "Ken Okubo",
"documentType": "cpf",
"documentNumber": "123.456.789-09"
}
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Nome (1-150 chars) |
documentType | string | cpf, cnpj ou passport |
documentNumber | string | Número do documento (aceita com pontuação) |
Validações:
documentTypeé obrigatório quandodocumentNumberé enviado- CPF: 11 dígitos, validado com dígitos verificadores
- CNPJ: 14 dígitos, validado com dígitos verificadores
- Pontuação (
.,-,/) é removida automaticamente statusnão pode ser alterado pelo próprio usuário
:::danger CPF/CNPJ é obrigatório para checkout
O Asaas (gateway de pagamento) exige CPF/CNPJ para criar o customer. Se o usuário não tem documentNumber, o POST /orders retorna erro.
Fluxo recomendado no frontend:
- Antes de abrir o checkout, checar
GET /auth/me— o usuário temdocumentNumber? - Se não, coletar no formulário de checkout e chamar
PATCH /users/meantes de criar o pedido - Se sim, seguir direto para
POST /orders:::
Response 200 retorna o UserResponse atualizado.
Alterar Senha
POST /auth/change-password
{
"currentPassword": "senhaatual",
"newPassword": "novasenha123"
}
Recuperar Senha
POST /auth/password/forgot
Envia email com token de reset.
GET /auth/password/reset/validate?token=xxx
Valida se o token ainda é válido.
POST /auth/password/reset
{
"token": "token-do-email",
"newPassword": "novasenha123"
}