Axuz Developers

Authentication

Login, MFA, sessions, password recovery and passkeys.

MétodoPathResumoAccess
POST/auth/impersonation/consumeTroca um access token de impersonation (emitido pelo backoffice pra suporte) por um cookie access_token, deixando o browser autenticado c...Signed in
POST/auth/loginAutentica o 1º fator (email+senha) e abre o desafio de 2º fator (wave 9); só emite sessão direto com a política desligada.Public
GET/auth/login/mfaLê o cookie HttpOnly axuz_mfa_pending (posto pelo callback OAuth), valida o desafio e devolve o mesmo corpo do /auth/login (MFAChallengeB...Public
POST/auth/login/mfa/email-otp/sendBody {challenge_id}; desafio válido (sem gastar tentativa); limites: 1 envio/60 s e 5/h por usuário, 20/h por IP; gera, grava e envia (in...Public
POST/auth/login/mfa/email-otp/verifyBody {challenge_id, code}; rate limit por IP; gasta 1 tentativa do desafio; confere o código (gasta 1 tentativa do código, uso único) e f...Public
POST/auth/login/mfa/totp(1) decoda {challenge_id, code}; (2) rate limit por IP; (3) gasta 1 tentativa do desafio (atômico, teto 5); (4) confere que a conta TEM T...Public
POST/auth/login/mfa/webauthn/beginBody {challenge_id}; o desafio tem de estar válido; carrega as passkeys do dono do desafio e devolve {webauthn_challenge_id, publicKey}.Public
POST/auth/login/mfa/webauthn/finishBody {challenge_id, webauthn_challenge_id, credential}; gasta 1 tentativa do desafio; a ceremony tem de ser do MESMO usuário do desafio (...Public
POST/auth/login/totp(1) decoda {challenge_id, code}; (2) rate limit por IP; (3) gasta 1 tentativa do desafio (atômico, teto 5); (4) confere que a conta TEM T...Public
POST/auth/logoutEncerra a SESSÃO (família de refresh) de forma irreversível.Public
GET/auth/meDevolve o perfil do usuário autenticado + times + role de plataforma pra hidratar o app após F5 ou navegar entre subdomínios.Signed in (incl. pre-session)
GET/auth/me/emailsPrimário de users (id = id do usuário, verified = email_verified_at preenchido) + ListUserEmails.Signed in (incl. pre-session)
POST/auth/me/emailsBody {email} (normalizado: trim + minúsculas; formato do signup); limites — 10 pedidos/h por usuário e 20/h por IP (contam todo pedido: o...Signed in (incl. pre-session)
DELETE/auth/me/emails/{id}O primário nunca (409 primary_not_removable — troque o primário antes); adicional (verificado ou pendente) sai livre — sem piso de método...Signed in (incl. pre-session)
POST/auth/me/emails/{id}/primaryId = o próprio primário ⇒ 200 (nada a fazer); senão PromoteUserEmail (o primário antigo vira adicional verificado — a contagem não muda).Signed in (incl. pre-session)
POST/auth/me/emails/{id}/verifyId do path (UUID); formato do código antes de I/O; rate limit de falhas por IP; reserva 1 tentativa (teto 5, TTL 10 min); compara o HMAC...Signed in (incl. pre-session)
GET/auth/me/factorsSessão plena ou restrita; LoadFactors; factorsView.Signed in (incl. pre-session)
DELETE/auth/me/identities/{provider}Provedor ∈ {google, github} (senão 400 invalid_provider); com a política ligada exige re-auth (fator = o provedor, então qualquer método...Signed in (incl. pre-session)
GET/auth/me/identities/{provider}/link/checkPré-voo do vínculo — a UI chama com fetch (onde 403 reauth_required abre o diálogo de re-auth) e só depois navega para o link/start.Signed in (incl. pre-session)
GET/auth/oauth/{provider}/callbackFinaliza o 1º fator social e abre o desafio de 2º fator.Public
GET/auth/oauth/{provider}/link/startExige sessão (cookie/bearer verificado, não revogado — sessão restrita serve: vincular é cadastrar método); provedor configurado; abre o...Signed in (incl. pre-session)
GET/auth/oauth/{provider}/startInicia o fluxo OAuth redirecionando pro provider.Public
GET/auth/oauth/providersDevolve map name→configured pra o frontend decidir botões.Public
POST/auth/password/change(1) re-auth válida para FactorPassword; (2) âncoras da sessão corrente (sid do access + hash do refresh — callerSessionFromRequest); (3)...Signed in (incl. pre-session)
POST/auth/password/confirm410 {"error":"reset_flow_changed"} sem tocar o banco — o link sozinho nunca redefine.Public
POST/auth/password/requestInicia o fluxo "esqueci minha senha" — grava um token único de 60min em password_reset_tokens e dispara o email com link para o front.Public
POST/auth/password/reset/confirm(1) rate limit de falhas por IP; (2) política de senha ANTES de gastar tentativa/código; (3) modo factor: o método tem de estar ativo, ga...Public
POST/auth/password/reset/method/beginDesafio válido (não gasta tentativa); o método tem de estar ATIVO na conta; delega ao Begin do método.Public
POST/auth/password/reset/startRate limit por IP (conta só link inválido); valida o link; lê os métodos ativos e a liberação viva; consome o link e abre o desafio (15 m...Public
POST/auth/reauthBody {method, password?, code?}; o método tem de ser um fator que a conta TEM; 10 falhas/15 min por usuário ⇒ 429; sucesso ⇒ grantReauth.Signed in (incl. pre-session)
POST/auth/reauth/email-otp/sendMesmo envio/limites do login (dispatchEmailOTP), com purpose=reauth e sem desafio.Signed in (incl. pre-session)
GET/auth/reauth/options{methods: fatores disponíveis, accepted: {webauthn:[..], totp:[..], password:[..]}, current: {method, expires_in}|null}.Signed in (incl. pre-session)
POST/auth/reauth/webauthn/beginPasskeys do usuário da sessão, UV obrigatório (re-auth libera mudar fator — tem de ser o dono, não só o dispositivo).Signed in (incl. pre-session)
POST/auth/reauth/webauthn/finishBody {challenge_id (o da ceremony), credential}; a ceremony tem de ser do usuário da sessão; assinatura válida E com UV; sucesso ⇒ grantR...Signed in (incl. pre-session)
POST/auth/refresh(1) cookie ausente → 401 `missing_cookie`; (2) hash não vivo → refreshNotLive decide entre janela de graça multi-tab (BUG-W-10, 200 `rota...Public
POST/auth/registerMonta struct.Public
POST/auth/resend-verificationReemite o e-mail de verificação, sempre respondendo 200 opaco pra bloquear enumeração de contas e email-bombing.Public
POST/auth/session/upgradeExige sessão (cookie/bearer verificado e não revogado); conta ainda abaixo de 3 métodos ⇒ 403 enrollment_required (corpo do contrato, com...Signed in (incl. pre-session)
GET/auth/sessionsRetorna as sessões ativas (refresh tokens não revogados/expirados) do caller, marcando qual é a corrente.Public
DELETE/auth/sessions/{sessionId}Revoga um refresh token específico (pelo id) do próprio caller.Signed in (incl. pre-session)
POST/auth/sessions/revoke-othersRevoga todas as sessões (famílias) do caller EXCETO a sessão que fez a chamada.Public
POST/auth/signupCria uma nova conta (user + credencial argon2id) e dispara o e-mail de verificação, protegido por honeypot, rate-limit, blocklist, geo-bl...Public
POST/auth/totp/confirmValida o primeiro código digitado pelo autenticador e, se OK, marca o enrollment como confirmado e gera 10 recovery codes.Signed in (incl. pre-session)
POST/auth/totp/disableRemove o 2FA inteiro do usuário — só executa se o código atual (ou recovery) for válido.Signed in (incl. pre-session)
POST/auth/totp/recovery-codes/regenerateInvalida todos os recovery codes existentes e gera 10 novos.Signed in (incl. pre-session)
POST/auth/totp/setupGera um segredo TOTP novo, encripta com AES-GCM (h.totpCrypt), persiste em user_totp e devolve secret + otpauth URL para o front renderiz...Signed in (incl. pre-session)
GET/auth/totp/statusReporta o estado do 2FA do usuário logado: se está enrolled (registrou segredo), se confirmou o primeiro código, e quantos recovery codes...Signed in (incl. pre-session)
POST/auth/verify-emailConfirma um token de verificação, marca o e-mail como verificado e emite sessão nova (auto-login pós confirmação).Public
GET/auth/webauthn/credentialsDevolve a lista de credenciais do user autenticado (settings screen).Signed in (incl. pre-session)
DELETE/auth/webauthn/credentials/{id}Remove uma credencial WebAuthn específica do user autenticado.Signed in (incl. pre-session)
POST/auth/webauthn/login/beginInicia o ceremony de autenticação por passkey.Public
POST/auth/webauthn/login/finishValida a assinatura do authenticator e emite JWT + cookies (login normal).Public
POST/auth/webauthn/register/beginInicia o ceremony de registro de um passkey.Signed in (incl. pre-session)
POST/auth/webauthn/register/finishValida a resposta do authenticator e persiste a nova credencial em user_webauthn_credentials.Signed in (incl. pre-session)
GET/auth/ws-tokenDevolve o access JWT corrente pro client montar a conexão WebSocket com o axuz_api principal (browser WS API não permite custom cookies/h...Signed in