VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/Autenticação

Login e segundo fator

Entra com e-mail, CPF ou CNPJ e senha, devolve o par de tokens e conclui o 2FA quando o usuário o ativou.

Use o login quando uma pessoa (ou um robô com conta de usuário) precisa de um token de acesso. A mesma rota atende administrador, seller (lojista) e cliente; o tipo do usuário fica no token. Se a conta tem verificação em duas etapas (2FA), o login não devolve o token ainda: devolve um temp_token, e você termina em verify-2fa.

Cada tentativa errada é registrada. Depois de várias senhas erradas para o mesmo identificador (10 por padrão, a loja pode mudar), a conta fica bloqueada por um período (1 minuto por padrão) e a API devolve 429 account_locked com o cabeçalho Retry-After. Bloqueios por política (conta pendente, desativada, e-mail não verificado) não contam como senha errada.

Entrar

POST/api/v1/auth/loginPública

Entrar com identificador e senha

Cabeçalhos

Content-Typestringobrigatório
application/json.
X-Recaptcha-Tokenstring
Obrigatório só quando a loja ativou o reCAPTCHA. Sem ele: 403 captcha_required.

Corpo da requisição

identifierstring
E-mail, CPF (11 dígitos) ou CNPJ (14 dígitos). Tem prioridade sobre email. Informe identifier ou email.
emailstring
Campo antigo, ainda aceito. Use identifier em código novo.
passwordstringobrigatório
Senha do usuário.
accept_pending_sessionbooleanpadrão: false
Quando true, um cliente que aguarda aprovação da loja recebe uma sessão restrita (só rotas de onboarding) em vez de 403 account_pending_approval. Clientes antigos não precisam enviar.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"identifier":"maria.souza@example.com","password":"MinhaSenha#2026"}'

Resposta

200Sessão criada
json
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refresh_token": "4913f14458dfe5bb7497c7b2d4508d01671c8b41c422c8faf2eb5f6efd4e9f48",
  "expires_at": "2026-10-11T21:06:19Z"
}
200Segundo fator exigido
json
{
  "requires_2fa": true,
  "temp_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Campos da resposta

access_tokenstring
JWT para o cabeçalho Authorization: Bearer. Ausente quando requires_2fa é true.
refresh_tokenstring
Token opaco para renovar a sessão. Guarde como segredo.
expires_atstring
Quando o token de acesso vence, RFC 3339 em UTC.
requires_2faboolean
Presente e true quando é preciso concluir o segundo fator.
temp_tokenstring
Token provisório, válido por 5 minutos, que só serve para verify-2fa.
requires_2fa_setupboolean
Presente em contas de administrador da plataforma que ainda não configuraram o 2FA.
account_statusstring
pending_approval
Só aparece numa sessão restrita de cliente aguardando aprovação (veja accept_pending_session).

Verificar o segundo fator

Quando o login devolve requires_2fa, peça ao usuário o código de 6 dígitos do aplicativo autenticador (ou um código de recuperação) e envie junto com o temp_token. Para ativar ou desativar o 2FA de uma conta, veja a seção de conta do administrador, do seller ou do cliente.

POST/api/v1/auth/verify-2faPública

Concluir o login com o código do segundo fator

Corpo da requisição

temp_tokenstringobrigatório
O temp_token devolvido pelo login. Vale 5 minutos.
codestringobrigatório
Código do autenticador ou de recuperação.
bash
curl -X POST "$BASE_URL/api/v1/auth/verify-2fa" \
  -H "Content-Type: application/json" \
  -d '{"temp_token":"'"$TEMP_TOKEN"'","code":"123456"}'
200Sessão criada
json
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refresh_token": "7c1d0f5e2b9a4c6d8e3f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d",
  "expires_at": "2026-10-11T21:08:02Z"
}

Os campos são os mesmos do login.

Erros

StatusQuandoCorpo
400Corpo inválido; sem identifier/email; sem password{"error":"password is required"}
401Credenciais erradas{"error":"invalid credentials"}
403reCAPTCHA ausente ou reprovado{"error":"captcha_required","detail":"reCAPTCHA token is required"}
403Conta de administrador da plataforma tentando entrar numa loja{"error":"wrong_panel","detail":"..."}
403Seller sem loja vinculada{"error":"vendor_no_store","message":"..."}
403Candidatura de seller em análise{"error":"vendor_pending_review","message":"..."}
403Subconta suspensa pela empresa titular{"error":"subaccount_suspended","message":"..."}
403A loja exige e-mail verificado{"error":"email_not_verified","message":"please verify your email address before logging in"}
403Cliente aguardando aprovação da loja{"error":"account_pending_approval","message":"..."}
403Conta desativada{"error":"account_disabled","message":"..."}
409CPF, CNPJ ou telefone pertence a mais de uma conta{"error":"multiple_accounts_cpf","message":"Multiple accounts are associated with this CPF. Please login with your email address instead."} (também multiple_accounts_cnpj, multiple_accounts_phone)
429Conta bloqueada por senhas erradas{"error":"account_locked","detail":"too many failed login attempts, please try again later"} com Retry-After
429Mais de 5 logins por minuto do mesmo IP{"error":"rate limit exceeded","detail":"too many requests, please try again later"} com Retry-After: 60

Para verify-2fa: 400 se faltar temp_token ou code (temp_token and code are required); 401 com invalid or expired verification token ou invalid verification code. Os textos de erro são em inglês; programe pelo código.

Não repita o login em laço

Cinco tentativas por minuto por IP é um limite pequeno. Se várias máquinas saem pelo mesmo IP (NAT, escritório), elas dividem o mesmo balde. Faça o login uma vez, guarde o par de tokens e renove com refresh. Detalhes em Limites de requisição.

Qual é o tipo de usuário do token?

O token é um JWT: o campo user_type (customer, vendor ou admin) diz quem você é, e determina a família de rotas que aceita o token. Veja Tokens e escopos.

Veja também

  • Sessão: renovar e sair
  • Login por código (OTP)
  • Chaves de acesso (passkeys)
  • Tokens e escopos
Anterior
Autenticação
Próxima
Cadastro de cliente e seller
Nesta página
  • Entrar
  • Exemplo de requisição
  • Resposta
  • Verificar o segundo fator
  • Erros
  • Veja também