Skip to content

Configuration

QAuth reads its configuration from environment variables. This page lists every QAuth key the auth server and the developer portal read, generated from the configuration key registry in libs/server/config/src/lib/registry/. A test fails when the page, the registry and the env schemas disagree. Variables of the Node.js runtime itself, such as UV_THREADPOOL_SIZE, are not listed.

Every key has a tier, which says how it may change (ADR-018 §5).

  • Stable keys follow the deprecation policy. A deprecation is announced in a minor release; the old name or behaviour keeps working, with a warning at boot, for at least 12 months, and it is removed only in a new major release.
  • Advanced keys may change in a minor release. Read the release notes before you upgrade a deployment that sets one.
  • Experimental keys may change at any time, without a deprecation window. The server logs a warning at boot for each experimental key that is set, and for each key set to an experimental value.

Every key has a role, which says who owns its value (ADR-019 Decision 10).

  • deployment: the environment owns the value, for the whole deployment.
  • realm-seed: a realm policy. Once realm policies live on the realm row, the key only seeds a new realm’s default, and the realm row owns the value from then on. Until then the server reads the key for every realm, unless its description says it already seeds the realm row. The Role column names the policy the key seeds.

A key marked Secret holds a credential. This page never shows its value, not even as a default, and neither does the boot log.

KeyRoleDefaultSinceDescription
CORS_ORIGINdeploymentnone in production, so cross-origin requests are refused; * otherwise0.1.0The origins, comma-separated, allowed to call the server cross-origin.
ENABLE_SWAGGERdeploymenttrue, or false when NODE_ENV=production0.1.0Serve the Swagger UI at /docs.
HOSTdeployment0.0.0.00.1.0The address the auth server listens on.
NODE_ENVdeploymentdevelopment0.1.0The runtime mode, development, test or production; production turns on the strict boot checks, such as refusing the development session secret.
PORTdeployment30000.1.0The TCP port the auth server listens on.
TRUST_PROXYdeploymentfalse0.1.0The reverse proxies whose X-Forwarded-For hops set the client address, as a comma-separated list of addresses, CIDR ranges or loopback, linklocal and uniquelocal; true and a hop count are refused.
KeyRoleDefaultSinceDescription
LOG_LEVELdeploymentinfo0.1.0The lowest level the server logs: fatal, error, warn, info, debug or trace.
METRICS_ENABLEDdeploymenttrue0.1.0Serve Prometheus metrics at GET /metrics.
KeyRoleDefaultSinceDescription
DATABASE_URLdeploymentrequired0.1.0The Postgres connection URL, credentials included. Secret.
REDIS_DBdeployment00.1.0The Redis database number, used when REDIS_URL is unset.
REDIS_HOSTdeploymentlocalhost0.1.0The Redis host, used when REDIS_URL is unset.
REDIS_PASSWORDdeploymentunset0.1.0The Redis password, used when REDIS_URL is unset. Secret.
REDIS_PORTdeployment63790.1.0The Redis port, used when REDIS_URL is unset.
REDIS_URLdeploymentunset0.1.0The Redis connection URL; when set, REDIS_HOST, REDIS_PORT, REDIS_PASSWORD and REDIS_DB are ignored. Secret.
KeyRoleDefaultSinceDescription
DEFAULT_REALM_NAMEdeploymentmaster0.1.0The name of the realm a new installation creates and serves by default.
KeyRoleDefaultSinceDescription
ACCESS_TOKEN_LIFESPANrealm-seed: tokens.accessTokenLifespanSeconds9000.1.0The access token lifetime, in seconds, for staging and production clients.
DEV_ACCESS_TOKEN_LIFESPANrealm-seed: tokens.developmentAccessTokenLifespanSeconds288000.1.0The access token lifetime, in seconds, for development clients only.
JWT_ISSUERdeploymentrequired0.1.0The issuer URL: the iss of every token QAuth issues and the public origin of the server.
REFRESH_TOKEN_LIFESPANrealm-seed: tokens.refreshTokenLifespanSeconds6048000.1.0The refresh token lifetime, in seconds.
KeyRoleDefaultSinceDescription
HYBRID_SIGNING_ENABLEDdeploymentfalse0.1.0Turn on hybrid Ed25519 and ML-DSA-65 signing, which requires SIGNING_ALGORITHM_MODE=ed25519+ml-dsa-65 and an ML-DSA-65 key.
SIGNING_ALGORITHM_MODEdeploymented255190.1.0Which signature algorithms are enabled: ed25519, or ed25519+ml-dsa-65 to add ML-DSA-65.
KeyRoleDefaultSinceDescription
KEKdeploymenta published development KEK outside production; refused when NODE_ENV=production0.2.0The KEK of the local provider, as the base64 of 32 random bytes, for example from openssl rand -base64 32. Secret.
KEK_PATHdeploymentunset0.2.0A file holding the KEK as base64; it takes precedence over KEK, and the server warns when group or others can read or write it.
KEK_PREVIOUSdeploymentunset0.2.0The KEK in use before a KEK rotation, as base64; keys wrapped under it still open until they are re-wrapped. Secret.
KEK_PREVIOUS_PATHdeploymentunset0.2.0A file holding the previous KEK as base64; it takes precedence over KEK_PREVIOUS.
KEK_PROVIDERdeploymentlocal0.2.0Which provider holds the key-encryption key (KEK) that wraps every stored key: local reads it from KEK or KEK_PATH, and any other name loads the optional package @qauth-labs/keys-<name>.
KeyRoleDefaultSinceDescription
FAILED_LOGIN_LOCKOUT_DURATIONrealm-seed: bruteForce.lockoutSeconds9000.1.0How long, in seconds, a locked-out identifier is refused before any credential check.
FAILED_LOGIN_MAX_ATTEMPTSrealm-seed: bruteForce.maxAttempts50.1.0How many failed logins for one identifier, inside FAILED_LOGIN_WINDOW, start a lockout.
FAILED_LOGIN_TRACKING_ENABLEDrealm-seed: bruteForce.enabledtrue0.1.0Lock an identifier out after repeated failed logins; with it off, failed logins are only logged.
FAILED_LOGIN_WINDOWrealm-seed: bruteForce.windowSeconds9000.1.0The window, in seconds, over which failed logins are counted.
PASSWORD_MIN_SCORErealm-seed: password.minScore20.1.0The strength score, from 0 (very weak) to 4 (strong), a new password must reach.
REQUIRE_VERIFIED_ACCOUNTrealm-seed: accounts.requireVerifiedAccounttrue0.1.0Refuse a password login, with the same answer as a wrong password, until the account is verified; for a password account, by its confirmed email address. Old name: REQUIRE_EMAIL_VERIFIED.
KeyRoleDefaultSinceDescription
EMAIL_FROM_ADDRESSrealm-seed: mail.fromAddressrequired0.1.0The sender address of the mail QAuth sends.
EMAIL_FROM_NAMErealm-seed: mail.fromNameQAuth0.1.0The sender name of the mail QAuth sends.
EMAIL_PROVIDERrealm-seed: mail.providermock0.1.0How mail is sent: mock, which delivers nothing, resend or smtp.
EMAIL_VERIFICATION_INVALIDATE_EXISTING_ON_RESENDrealm-seed: mail.invalidateExistingTokensOnResendtrue0.1.0When a new verification link is sent, invalidate the earlier ones, so only the latest works.
EMAIL_VERIFICATION_TOKEN_EXPIRYrealm-seed: mail.verificationTokenExpirySeconds864000.1.0How long, in seconds, an email verification link stays valid; at least 3600.
RESEND_API_KEYrealm-seed: mail.resend.apiKeyunset0.1.0The Resend API key, for EMAIL_PROVIDER=resend. Secret.
SMTP_HOSTrealm-seed: mail.smtp.hostunset0.1.0The SMTP server host, for EMAIL_PROVIDER=smtp.
SMTP_PASSWORDrealm-seed: mail.smtp.passwordunset0.1.0The SMTP password. Secret.
SMTP_PORTrealm-seed: mail.smtp.portunset0.1.0The SMTP server port, for EMAIL_PROVIDER=smtp.
SMTP_SECURErealm-seed: mail.smtp.securetrue0.1.0Connect to the SMTP server over TLS.
SMTP_USERrealm-seed: mail.smtp.userunset0.1.0The SMTP user name.
KeyRoleDefaultSinceDescription
CIMD_ENABLEDrealm-seed: registration.cimd.enabledtrue0.1.0Accept an HTTPS URL as a client_id and fetch its Client ID Metadata Document on demand.
CIMD_TRUSTED_DOMAINSrealm-seed: registration.cimd.trustedDomainsempty0.1.0The hosts CIMD_TRUST_POLICY=allowlist accepts, separated by spaces or commas, where a leading *. matches subdomains.
CIMD_TRUST_POLICYrealm-seed: registration.cimd.trustPolicyaccept-any-https0.1.0Which hosts a Client ID Metadata Document may come from: accept-any-https, or allowlist for the hosts in CIMD_TRUSTED_DOMAINS only.
DEFAULT_DYNAMIC_REGISTRATION_SCOPESrealm-seed: registration.dynamicRegistrationAllowedScopesopenid profile email offline_access0.1.0The scopes, separated by spaces or commas, copied into a realm’s empty dynamic registration allowlist at its first client registration; a later change leaves that realm as it is.
KeyRoleDefaultSinceDescription
ID_JAG_ENABLEDdeploymentfalse0.1.0Turn on the Identity Assertion Authorization Grant: accepting ID-JAG assertions at the token endpoint and minting them by token exchange.
ID_JAG_TRUSTED_ISSUERSdeploymentempty0.1.0The exact issuer identifiers of the enterprise identity providers whose ID-JAG assertions are accepted, separated by spaces or commas; empty accepts none.
KeyRoleDefaultSinceDescription
OID4VP_VERIFIER_PROFILEdeploymentunset0.1.0The verifier profile wallet sign-in runs under, haip-1.0 or oid4vp-1.0-base, with no default: with wallet sign-in on and no profile, the server refuses to start. Experimental values: oid4vp-1.0-base.
WALLET_FEDERATION_ENABLEDdeploymentfalse0.1.0Turn on wallet sign-in with OpenID for Verifiable Presentations, which also requires OID4VP_VERIFIER_PROFILE.
KeyRoleDefaultSinceDescription
REQUEST_TIMEOUT_MSdeployment600000.1.0How long, in milliseconds, a client may take to send one complete request before the server answers 408; at least 1000.
SECURITY_HSTS_ENABLEDdeploymenttrue0.1.0Send the Strict-Transport-Security header; keep it on in production.
SECURITY_HSTS_MAX_AGEdeployment315360000.1.0The max-age, in seconds, of the Strict-Transport-Security header.
KeyRoleDefaultSinceDescription
LOG_PRETTYdeploymentfalse0.1.0Write human-readable, coloured logs instead of JSON, for local development.
REQUEST_ID_HEADERdeploymentx-request-id0.1.0The HTTP header that carries the request id, taken from the request when present and echoed on the response.
KeyRoleDefaultSinceDescription
DB_POOL_CONNECTION_TIMEOUTdeployment20000.1.0How long, in milliseconds, the pool waits for a new Postgres connection.
DB_POOL_IDLE_TIMEOUTdeployment100000.1.0How long, in milliseconds, an idle Postgres connection stays in the pool.
DB_POOL_MAXdeployment200.1.0The largest number of connections in the Postgres pool, at least 2 for the auth server, whose running jobs hold one for their lock.
DB_POOL_MINdeployment20.1.0The smallest number of connections the Postgres pool keeps.
REDIS_COMMAND_TIMEOUTdeployment50000.1.0How long, in milliseconds, the server waits for one Redis command.
REDIS_CONNECTION_TIMEOUTdeployment100000.1.0How long, in milliseconds, the server waits to connect to Redis.
REDIS_MAX_RETRIESdeployment30.1.0How many times one Redis command is retried before it fails.
KeyRoleDefaultSinceDescription
PQC_SELF_CONTAINED_ACKdeploymentfalse0.1.0Confirm that self-contained hybrid tokens, whose ML-DSA-65 signature exceeds cookie and URL size limits, travel only where large headers are accepted; PQC_TOKEN_DELIVERY=self-contained requires it.
PQC_TOKEN_DELIVERYdeploymentreference0.1.0How the ML-DSA-65 signature of a hybrid token reaches a verifier: reference, through introspection, or self-contained, with the token.
KeyRoleDefaultSinceDescription
JWT_MLDSA_KIDdeploymentunset0.1.0The key id of the ML-DSA-65 key, published as pqc_kid and in the JWKS.
JWT_MLDSA_PRIVATE_KEYdeploymentunset0.1.0The ML-DSA-65 private key for hybrid signing, as a base64url-encoded 32-byte seed. Secret.
JWT_MLDSA_PRIVATE_KEY_PATHdeploymentunset0.1.0A file holding the ML-DSA-65 seed; it takes precedence over JWT_MLDSA_PRIVATE_KEY.
JWT_PRIVATE_KEYdeploymentnone; set this or JWT_PRIVATE_KEY_PATH0.1.0The Ed25519 private key, PEM, that signs the tokens QAuth issues. Secret.
JWT_PRIVATE_KEY_PATHdeploymentnone; set this or JWT_PRIVATE_KEY0.1.0A file holding the Ed25519 private key; it takes precedence over JWT_PRIVATE_KEY.
JWT_PUBLIC_KEYdeploymentunset0.1.0The Ed25519 public key, PEM; derived from the private key when unset.
JWT_PUBLIC_KEY_PATHdeploymentunset0.1.0A file holding the Ed25519 public key; it takes precedence over JWT_PUBLIC_KEY.
JWT_RS256_KIDdeploymentunset0.1.0The kid of the RS256 key in the JWKS, which must differ from the Ed25519 key id.
JWT_RS256_PRIVATE_KEYdeploymentunset0.1.0An RSA private key, PKCS#8 PEM; when set, ID tokens are signed with RS256 and its public key is published in the JWKS. Secret.
JWT_RS256_PRIVATE_KEY_PATHdeploymentunset0.1.0A file holding the RS256 private key; it takes precedence over JWT_RS256_PRIVATE_KEY.
JWT_RS256_PUBLIC_KEYdeploymentunset0.1.0The RS256 public key, SPKI PEM; derived from the private key when unset.
JWT_RS256_PUBLIC_KEY_PATHdeploymentunset0.1.0A file holding the RS256 public key; it takes precedence over JWT_RS256_PUBLIC_KEY.
OID4VP_RESPONSE_KEY_SECRETdeploymentunset0.1.0A 32-byte key, base64 or base64url, that encrypts the stored per-request response decryption keys at rest; unset, they are stored in the clear. Secret.
OID4VP_VERIFIER_SIGNING_KEYdeploymentunset0.1.0The verifier’s ES256 private key, PKCS#8 PEM, that signs authorization requests for a profile that requires signed requests. Secret.
OID4VP_VERIFIER_SIGNING_KEY_PATHdeploymentunset0.1.0A file holding the verifier signing key; it takes precedence over OID4VP_VERIFIER_SIGNING_KEY.
PORTAL_SESSION_SECRETdeploymentrequired0.1.0The random secret that signs the developer portal’s session cookie; use at least 32 characters. Secret.
SESSION_COOKIE_SECRETdeploymenta development-only value, refused when NODE_ENV=production0.1.0The HMAC secret, at least 32 characters, that signs the __Host-qauth_session cookie. Secret.
KeyRoleDefaultSinceDescription
PASSWORD_MEMORY_COSTdeployment655360.1.0The Argon2id memory cost, in KiB, of a password hash.
PASSWORD_PARALLELISMdeployment40.1.0The Argon2id parallelism, in lanes, of a password hash.
PASSWORD_TIME_COSTdeployment30.1.0The Argon2id time cost, in iterations, of a password hash.
SYSTEM_CLIENT_IDdeploymentsystem0.1.0The client id of the system client that direct logins, outside an OAuth flow, are issued under; it is created on first use.
KeyRoleDefaultSinceDescription
SESSION_COOKIE_SECUREdeploymenttrue0.1.0Set the Secure attribute on the session cookie; only a plain-HTTP development stack turns it off.
SESSION_COOKIE_TTLdeployment864000.1.0The browser session lifetime, in seconds, counted from sign-in.
KeyRoleDefaultSinceDescription
EMAIL_BASE_URLdeploymentrequired0.1.0The base URL of the links in mail, such as a verification link.
KeyRoleDefaultSinceDescription
CIMD_ALLOW_PRIVATE_ADDRESSESdeploymentfalse0.1.0Let metadata document and client jwks_uri fetches reach loopback, private and link-local addresses, for a test server on localhost; refused when NODE_ENV=production. Development only.
CIMD_CACHE_DEFAULT_TTLdeployment3000.1.0How long, in seconds, a fetched metadata document is cached when its response states no lifetime.
CIMD_CACHE_MAX_TTLdeployment36000.1.0The longest time, in seconds, a fetched metadata document is cached, whatever its response states.
CIMD_FETCH_TIMEOUT_MSdeployment50000.1.0The deadline, in milliseconds, for one whole metadata document fetch.
CIMD_MAX_DOCUMENT_BYTESdeployment655360.1.0The largest metadata document, in bytes, the server accepts.
DYNAMIC_CLIENT_BADGE_DAYSdeployment300.1.0How many days after dynamic registration the consent screen marks a client as newly registered; 0 turns the mark off.
MAX_CLIENTS_PER_DEVELOPERdeployment1000.1.0The most OAuth clients one developer account may own, at least 1.
KeyRoleDefaultSinceDescription
ID_JAG_ALLOW_PRIVATE_ADDRESSESdeploymentfalse0.1.0Let issuer discovery and JWKS fetches reach loopback, private and link-local addresses, for a test server on localhost; refused when NODE_ENV=production. Development only.
ID_JAG_CLOCK_SKEW_LEEWAYdeployment600.1.0The clock skew, in seconds, allowed when checking an assertion’s exp, nbf and iat; at most 300.
ID_JAG_FETCH_TIMEOUT_MSdeployment50000.1.0The deadline, in milliseconds, for each fetch of a trusted issuer’s discovery document and JWKS.
ID_JAG_ISSUED_LIFETIMEdeployment3000.1.0The lifetime, in seconds, of an ID-JAG the server mints; at most 3600.
ID_JAG_JWKS_CACHE_TTLdeployment3000.1.0How long, in seconds, a trusted issuer’s discovery document and JWKS are cached.
ID_JAG_MAX_ASSERTION_LIFETIMEdeployment3000.1.0The longest lifetime, in seconds, of an assertion the server accepts; at most 3600.
ID_JAG_MAX_DOCUMENT_BYTESdeployment655360.1.0The largest discovery document or JWKS, in bytes, the server accepts.
KeyRoleDefaultSinceDescription
ACR_VALUE_STYLEdeploymenteidas-uri0.1.0How the acr claim is written: eidas-uri for the eIDAS URIs, or loa-name for the bare level names.
OID4VP_ATTESTING_ISSUERSdeploymentunset0.1.0As JSON, the issuers whose issuance validates a wallet’s key attestation, each with the attack-potential grade it establishes.
OID4VP_EMAIL_VERIFYING_ISSUERSdeploymentunset0.1.0The trusted issuers, comma-separated, whose email claim counts as verified even when the wallet does not disclose email_verified: true.
OID4VP_ISSUER_ASSURANCEdeploymentunset0.1.0As JSON, per realm name, the eIDAS level of assurance a trusted issuer’s credentials establish, which becomes the acr claim.
OID4VP_ISSUER_JWKSdeploymentunset0.1.0As JSON, the public keys each credential issuer signs with; a key here grants no trust on its own.
OID4VP_REQUESTED_VCTdeploymentunset0.1.0The credential types (vct values) the wallet sign-in screen asks for, comma-separated; without them the screen is not offered.
OID4VP_STATUS_LIST_SIGNERSdeploymentunset0.1.0As JSON, the status issuer that may sign the lists served under a URI prefix on another host.
OID4VP_STATUS_LIST_TRUST_ANCHORSdeploymentunset0.1.0The PEM certificates a Status List Token’s certificate chain must end at, set together with OID4VP_STATUS_LIST_URI_ALLOWLIST.
OID4VP_STATUS_LIST_TRUST_ANCHORS_PATHdeploymentunset0.1.0A file holding more status list trust anchors, added to OID4VP_STATUS_LIST_TRUST_ANCHORS.
OID4VP_STATUS_LIST_URI_ALLOWLISTdeploymentunset0.1.0The https:// URI prefixes, comma-separated, that status lists may be fetched from, set together with OID4VP_STATUS_LIST_TRUST_ANCHORS.
OID4VP_SUBJECT_BINDING_CLAIMSdeploymentunset0.1.0The credential claims, comma-separated, that bind a presentation to the asserted account; asserted-lookup refuses to start without them.
OID4VP_SUBJECT_CLAIMdeploymentunset0.1.0The claim that carries an issuer’s stable subject identifier, for OID4VP_SUBJECT_RESOLUTION=issuer-scoped-claim.
OID4VP_SUBJECT_CLAIM_ISSUERSdeploymentunset0.1.0The issuers, comma-separated, whose credentials issuer-scoped-claim resolution may key an account on.
OID4VP_SUBJECT_RESOLUTIONdeploymentthe verifier profile’s default, asserted-lookup0.1.0How a presentation is resolved to an account: asserted-lookup or issuer-scoped-claim.
OID4VP_TRUSTED_ISSUERSdeploymentunset0.1.0As JSON, per realm name, the credential issuers whose credentials that realm accepts; unset, no realm trusts any issuer.
OID4VP_VERIFIER_CERTIFICATE_CHAINdeploymentunset0.1.0The verifier’s PEM certificate chain, leaf first and without the trust anchor, sent as the signed request’s x5c.
OID4VP_VERIFIER_CERTIFICATE_CHAIN_PATHdeploymentunset0.1.0A file holding the verifier certificate chain; it takes precedence over OID4VP_VERIFIER_CERTIFICATE_CHAIN.
OID4VP_VERIFIER_TRUST_ANCHORSdeploymentunset0.1.0The PEM certificates the verifier certificate chain must end at, checked at boot.
OID4VP_VERIFIER_TRUST_ANCHORS_PATHdeploymentunset0.1.0A file holding more verifier trust anchors, added to OID4VP_VERIFIER_TRUST_ANCHORS.
OID4VP_WALLET_INVOCATION_ENDPOINTdeploymentopenid4vp://0.1.0Where the wallet sign-in screen’s QR code and wallet button point: a wallet’s custom scheme or universal link.
KeyRoleDefaultSinceDescription
AUTHORIZE_RATE_LIMITdeployment600.1.0The most authorization requests allowed per window for a production realm, the strict tier.
AUTHORIZE_RATE_LIMIT_LENIENTdeployment6000.1.0The most authorization requests allowed per window for a development or staging realm, the lenient tier.
AUTHORIZE_RATE_WINDOWdeployment600.1.0The window, in seconds, of both authorization request limits.
HEALTH_RATE_LIMIT_MAXdeployment10000.1.0The most health endpoint requests allowed per window.
HEALTH_RATE_LIMIT_WINDOWdeployment600.1.0The window, in seconds, of HEALTH_RATE_LIMIT_MAX.
INTROSPECT_RATE_LIMITdeployment300.1.0The most introspection requests allowed per window.
INTROSPECT_RATE_WINDOWdeployment600.1.0The window, in seconds, of INTROSPECT_RATE_LIMIT.
LOGIN_RATE_LIMITdeployment50.1.0The most login attempts allowed per window.
LOGIN_RATE_WINDOWdeployment9000.1.0The window, in seconds, of LOGIN_RATE_LIMIT.
LOGOUT_RATE_LIMITdeployment200.1.0The most logout requests allowed per window.
LOGOUT_RATE_WINDOWdeployment600.1.0The window, in seconds, of LOGOUT_RATE_LIMIT.
OID4VP_REQUEST_OBJECT_RATE_LIMITdeployment300.1.0The most request object fetches from GET /oid4vp/request/:handle per client address allowed per window.
OID4VP_REQUEST_OBJECT_RATE_WINDOWdeployment600.1.0The window, in seconds, of OID4VP_REQUEST_OBJECT_RATE_LIMIT.
OID4VP_RESPONSE_RATE_LIMITdeployment300.1.0The most wallet responses to POST /oid4vp/response per client address allowed per window.
OID4VP_RESPONSE_RATE_WINDOWdeployment600.1.0The window, in seconds, of OID4VP_RESPONSE_RATE_LIMIT.
RATE_LIMIT_ENABLEDdeploymenttrue0.1.0Apply the rate limits at all; only a development or test stack turns them off.
RATE_LIMIT_MAXdeployment1000.1.0The most requests to a route with no limit of its own allowed per window.
RATE_LIMIT_WINDOWdeployment36000.1.0The window, in seconds, of RATE_LIMIT_MAX.
REFRESH_RATE_LIMITdeployment100.1.0The most refresh token requests allowed per window.
REFRESH_RATE_WINDOWdeployment600.1.0The window, in seconds, of REFRESH_RATE_LIMIT.
REGISTER_CLIENT_RATE_LIMITdeployment300.1.0The most dynamic client registrations per client address allowed per window.
REGISTER_CLIENT_RATE_WINDOWdeployment600.1.0The window, in seconds, of REGISTER_CLIENT_RATE_LIMIT.
REGISTRATION_RATE_LIMITdeployment30.1.0The most account registrations allowed per window.
REGISTRATION_RATE_WINDOWdeployment36000.1.0The window, in seconds, of REGISTRATION_RATE_LIMIT.
RESEND_VERIFICATION_EMAIL_LIMITdeployment30.1.0The most verification mail resends per email address allowed per window.
RESEND_VERIFICATION_EMAIL_WINDOWdeployment36000.1.0The window, in seconds, of RESEND_VERIFICATION_EMAIL_LIMIT.
RESEND_VERIFICATION_MIN_INTERVALdeployment600.1.0The shortest time, in seconds, between two verification mail resends to one address.
RESEND_VERIFICATION_RATE_LIMITdeployment1000.1.0The most verification mail resends per client address allowed per window.
RESEND_VERIFICATION_RATE_WINDOWdeployment600.1.0The window, in seconds, of RESEND_VERIFICATION_RATE_LIMIT.
TOKEN_RATE_LIMITdeployment300.1.0The most token requests allowed per window for a production realm, the strict tier.
TOKEN_RATE_LIMIT_LENIENTdeployment3000.1.0The most token requests allowed per window for a development or staging realm, the lenient tier.
TOKEN_RATE_WINDOWdeployment600.1.0The window, in seconds, of both token request limits.
USERINFO_RATE_LIMITdeployment600.1.0The most userinfo requests allowed per window.
USERINFO_RATE_WINDOWdeployment600.1.0The window, in seconds, of USERINFO_RATE_LIMIT.
VERIFICATION_RATE_LIMITdeployment100.1.0The most email verification attempts allowed per window.
VERIFICATION_RATE_WINDOWdeployment9000.1.0The window, in seconds, of VERIFICATION_RATE_LIMIT.
KeyRoleDefaultSinceDescription
AUTH_SERVER_URLdeploymentrequired0.1.0The base URL the developer portal’s server uses to reach the auth server.
PORTAL_SESSION_TTLdeployment9000.1.0The developer portal session lifetime, in seconds.
PORTAL_TRUST_PROXYdeploymentunset0.1.0The proxies in front of the developer portal, as comma-separated IP addresses, whose forwarded client address, protocol and host it believes.
KeyRoleDefaultSinceDescription
VITESTdeploymentunset0.1.0Set by the Vitest test runner; a deployment never sets it. Development only.

No key is experimental.

These values of stable and advanced keys are experimental, and the server warns at boot when one is set.

KeyExperimental values
OID4VP_VERIFIER_PROFILEoid4vp-1.0-base

A renamed key keeps working under its old name for the deprecation window.

  • Only the old name is set: the server uses its value and logs a warning at boot.
  • Both names are set to the same value: the server logs a warning at boot.
  • Both names are set to different values: the server refuses to start, and the error names both.
Old nameUse insteadDeprecated since
REQUIRE_EMAIL_VERIFIEDREQUIRE_VERIFIED_ACCOUNT0.1.0

A pull request that adds, renames or removes a key registers the change in the same pull request: an entry in libs/server/config/src/lib/registry/keys/, with its tier, role, default and one sentence, and a regenerated page. A stable key also appears in .env.example. A test fails until all three agree.