All settings
Settings can be environment variables or appsettings.json values. A double underscore in a variable name is a section separator: Auth__JwtSecret is "Auth": { "JwtSecret": … }.
Core
DATABASE_URLrequiredAPIAdminSeederPostgreSQL connection. Accepts
postgresql://user:pass@host:5432/dbor an Npgsql keyword string. The URL form keeps only host, port, database, user and password, so use the keyword form (Host=…;Ssl Mode=Require) when you need SSL options.ASPNETCORE_URLSrequiredAPIAdminListen address. The API image exposes and health-checks port 3000 but does not set this. Always set
http://+:3000for the API.Default:
Admin image: http://+:3100ASPNETCORE_ENVIRONMENTAPIAdminDevelopmentenables dev defaults (mock notifications, 10s polling) and the Admin Playground, which can wipe the database. Never useDevelopmenton a real instance.Default:
ProductionASPNETCORE_FORWARDEDHEADERS_ENABLEDAPIAdminSet to
truebehind a reverse proxy (Caddy, nginx, Traefik) so the app trustsX-Forwarded-Proto/For/Hostand builds correct HTTPS URLs and cookies.Default:
falseCORS_ORIGINSAPIComma-separated origins allowed to call the API from a browser. Only needed when the Web app is served from a different origin than the API.
*is ignored.Default:
(none)PLAYDEX_API_URLWebWeb container only. The API base URL baked into
appsettings.jsonat container start. Must end in/api/. Leave unset to use the same origin (/api/routed to the API by your proxy). Changing it requires recreating the container.Default:
<web origin>/api/
Auth
Auth__JwtSecretrequiredAPIHMAC-SHA256 key used to sign user access and refresh tokens. Use a long random value (32+ bytes, e.g.
openssl rand -hex 32). Changing it signs everyone out.Auth__AccessTokenTtlAPIAccess token lifetime as
<number><s|m|h|d>. Refresh tokens are fixed at 30 days.Default:
15mAdmin__CookieLifetimeAdminHow long an Admin sign-in lasts (no sliding renewal).
Default:
08:00:00
Polling
Polling__IntervalSecondsAPISeconds between provider poll cycles. Lower values detect sessions faster but use more of each provider's rate limit.
Default:
60Polling__Steam__BaseUrlAPISteam Web API base URL. Point at WireMock for local testing.
Default:
https://api.steampowered.comPolling__Psn__OAuthAuthorizeUrlAPIPSN OAuth authorize endpoint (NPSSO → code).
Default:
https://ca.account.sony.com/api/authz/v3/oauth/authorizePolling__Psn__OAuthTokenUrlAPIPSN OAuth token endpoint.
Default:
https://ca.account.sony.com/api/authz/v3/oauth/tokenPolling__Psn__PresenceBaseUrlAPIPSN presence API base URL.
Default:
https://m.np.playstation.comPolling__OpenXbl__BaseUrlAPIOpenXBL (unofficial Xbox API) base URL.
Default:
https://api.xbl.ioPolling__Igdb__ClientIdAPITwitch application client ID for IGDB game search. If this or the secret is missing, search only covers games already in your database.
Polling__Igdb__ClientSecretAPITwitch application client secret for IGDB.
Notifications
Apprise__BaseUrlAPIApprise API URL, e.g.
http://apprise:8000. If unset, notifications are off and users cannot save a Telegram chat ID.Apprise__TelegramBotTokenAPITelegram bot token from BotFather (
123456:ABC…). One bot serves every user.Apprise__UseMockAPILog notifications (
APPRISE_MOCK notify …) instead of sending them.Default:
false (Development: true)
AI drafts
AiDrafts__EnabledAPITurns on "create sessions from text or a screenshot". Also requires
ApiKeyandModel.Default:
falseAiDrafts__ProviderAPIopenaioropenrouter.Default:
openaiAiDrafts__BaseUrlAPIProvider endpoint. For OpenRouter use
https://openrouter.ai/api/v1/chat/completions.Default:
https://api.openai.com/v1/responsesAiDrafts__ApiKeyAPIProvider API key (sent as a Bearer token).
AiDrafts__ModelAPIModel ID. Must support image input and structured output.
AiDrafts__RequestsPerHourAPIPer-user hourly limit.
Default:
10AiDrafts__HistoryRetentionDaysAPIDays to keep AI generation history visible in Admin.
0keeps it until deleted manually.Default:
30AiDrafts__MaxTextCharactersAPIMaximum pasted text length.
Default:
10000AiDrafts__MaxImageBytesAPIMaximum screenshot size in bytes (10 MB).
Default:
10485760AiDrafts__MaxImagePixelsAPIMaximum screenshot pixel count.
Default:
20000000AiDrafts__MaxRowsAPIMaximum sessions extracted per request (1–50).
Default:
50AiDrafts__TimeoutSecondsAPIProvider request timeout.
Default:
60
Observability
SENTRY_DSNAPIAdminSentry DSN. Enables API error reporting and trace export. Blank disables Sentry without failing startup.
SENTRY_WEB_DSNAPISeparate DSN handed to the browser app. Recommended so frontend and backend issues stay apart.
Default:
SENTRY_DSNSENTRY_ENVIRONMENTAPIEnvironment tag on Sentry events.
Default:
ASP.NET environmentSENTRY_RELEASEAPIRelease tag on Sentry events.
SENTRY_TRACES_SAMPLE_RATEAPIAdminFraction of requests traced (0–1).
Default:
0.2
Playground
Playground__WiremockBaseUrlAdminDevelopment only. WireMock URL used by the Admin Playground to switch fake provider states, e.g.
http://wiremock:8888.Playground__AppriseBaseUrlAdminDevelopment only. Apprise URL used by the Playground "Send test" button.
Playground__TelegramBotTokenAdminDevelopment only. Lets the Playground register a chat with Apprise if the API has not already.