Pular para o conteúdo principal

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.
  • Rolescustomer, 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"
}
CampoObrigatórioValidação
emailSimFormato válido, único (409 se duplicado)
passwordSimMínimo 8 caracteres
nameSim1-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:

  1. Valida o token (não expirado + waitlist com status = invited)
  2. Cria User com role=seller
  3. Cria SellerProfile (onboarding_status=pending, storeStatus=unpublished)
  4. Muda waitlist para status=converted, grava user_id e convertedAt

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"
}
CampoTipoDescrição
namestringNome (1-150 chars)
documentTypestringcpf, cnpj ou passport
documentNumberstringNúmero do documento (aceita com pontuação)

Validações:

  • documentType é obrigatório quando documentNumber é enviado
  • CPF: 11 dígitos, validado com dígitos verificadores
  • CNPJ: 14 dígitos, validado com dígitos verificadores
  • Pontuação (., -, /) é removida automaticamente
  • status nã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:

  1. Antes de abrir o checkout, checar GET /auth/me — o usuário tem documentNumber?
  2. Se não, coletar no formulário de checkout e chamar PATCH /users/me antes de criar o pedido
  3. 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"
}