All paths relative to /api/v1/. See API Authentication for the full flow and API Error Reference for status codes.

Public

Method & PathPurposeValidationSide effects
POST auth/registerCreate user, send verification emailInlineGeneric response always (no enumeration oracle)
POST auth/loginIssue bearer token or 2FA challengeInlinePer-email+IP rate limiting on top of route throttle
POST auth/password/forgotRequest password resetInlineGeneric response always
POST auth/password/resetReset password via emailed tokenInlineAuto-verifies email, stamps membership accepted_at
GET auth/email/verify/{id}/{hash}Verify email (signed URL)Signed-URL signatureRedirects to SPA
POST auth/email/resendResend verification emailInlineGeneric response always
GET auth/providersWhether Google SSO is configured——
GET auth/{provider}/redirectRedirect to Google OAuthprovider restricted to googleMints CSRF state nonce
GET auth/{provider}/callbackGoogle OAuth callbackVerifies stateIssues single-use exchange code, redirects to SPA
POST auth/google/exchangeTrade exchange code for a bearer tokenInlineTOTP-gated if account has 2FA

Authenticated

Method & PathPermissionPurposeSide effects
GET auth/me—Current user + memberships/roles—
POST auth/logout—Revoke current bearer tokenAudit user.logout
POST auth/2fa/enroll—Begin TOTP enrollmentRe-verifies password/OTP first
POST auth/2fa/confirm—Confirm code, activate 2FAIssues recovery codes, sends alert email, audit user.mfa_enrolled
POST auth/2fa/disable—Disable TOTPSends alert email, audit user.mfa_disabled
POST auth/2fa/recovery-codes/regenerate—Reissue recovery codesInvalidates old codes, sends alert email

Profile & Security

Method & PathPurposeSide effects
PATCH profileUpdate own profile fieldsAudit
POST profile/avatarUpload avatarStores file, deletes prior, audit
POST profile/change-passwordChange/first-set passwordRevokes other tokens, audit
POST profile/security-codeEmail step-up code (SSO-only accounts)Sends email
GET profile/sessionsList active tokens—
DELETE profile/sessions/{tokenId}Revoke a tokenAudit
GET profile/security-activityLast 20 login attempts—

Tenant onboarding

Method & PathPurposeSide effects
GET tenantsOnly the organizations the caller is registered in (own memberships) — never other tenants—
POST tenantsCreate a new tenant/orgProvisions tenant + CoA + default roles via TenantProvisioner
GET meta/countriesCountry registry for the org-creation form—
GET meta/currenciesCurrency registry—