Authentication
How people sign in to the dashboard, and how machines authenticate to the API.
Two separate things share a word here. People sign in to the dashboard with email or an identity provider. Machines authenticate to the REST API with an API key. They use different credentials and different code paths.
People: sign-in
Configured in Admin → Settings → Authentication, or by environment variable.
Email codes
With SMTP configured, users sign in with a one-time code sent to their address. This is the baseline and needs no external provider.
GitHub and Google
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=Register the callback with the provider:
{APP_URL}/api/auth/callback/github
{APP_URL}/api/auth/callback/googleOIDC / SSO
Any compliant provider — Okta, Auth0, Keycloak, Entra ID, Authentik.
OIDC_ISSUER=https://id.example.com
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_SCOPES=openid email profile # default
OIDC_BUTTON_LABEL=Sign in with Okta # button textCallback: {APP_URL}/api/auth/callback/sso
Open signups
ALLOW_SIGNUPS=false # defaultLeave this off for an internal instance and invite people instead. An instance reachable from the internet with signups on will collect accounts you did not intend.
Machines: API keys
The REST API accepts either a session cookie or an API key:
x-api-key: apikee_<payload>.<signature>
x-tenant: acmeWhen both are present the API key wins, so a request can never be authorised by one credential while carrying another.
x-tenant is required for session callers because project slugs are unique per
workspace, not globally. API-key callers are already scoped to the team owning the
key's client and do not need it.
See the REST API.
Instance administrators
An admin flag on a user account grants /admin — instance-wide settings for email,
storage, sign-in, AI and licensing.
This is separate from workspace roles. Owning a workspace does not make you an instance admin, and an instance admin is not automatically a member of every workspace.
The account that runs first-run setup becomes the
first administrator. ADMIN_EMAIL and ADMIN_PASSWORD seed one before that.
Instance administrators can read and change the AI endpoint configuration, SMTP credentials and OAuth secrets. Grant it deliberately.

