Skip to main content
All endpoints except health, config and provider callbacks require a bearer token.

Getting a token

Use it on every subsequent call:
Tokens are signed with ENCRYPT_KEY and expire after ACCESS_TOKEN_EXPIRE_MINUTES (120 by default). Refresh with POST /api/auth/refresh-token; POST /api/auth/logout clears the refresh cookie.

Account lifecycle

What is not here

Two things belong to commercial editions and are absent from this build:
  • Signing in with an identity provider — GitHub, Google, Microsoft, LinkedIn. The open-source core authenticates with email and password only.
  • Multi-factor authentication. /api/auth/mfa/* does not exist; it answers 404.
See Editions. Do not read those 404s as a missing object — they mean the capability is not in this edition.
ENCRYPT_KEY signs tokens. If it is empty, token verification degenerates: a required secret that receives an empty string can make forged tokens acceptable. Refuse to boot without it rather than defaulting it.