apps/api/.env, or from the environment of the API container. Everything except DATABASE_URL and AUTH_SECRET has a working default.
Required
Core
Scheduling
Every cron expression is evaluated in UTC. See The daily pipeline and rate limits.Collection rate limits
Raising either value risks the host IP address being throttled by the store. See The daily pipeline and rate limits.
Egress proxy pool
Optional. WithPROXY_PROVIDER left at none every store request leaves from the host address, which is what a self hosted instance wants. Point it at a provider only when one address cannot carry the collection volume.
With
PROXY_PROVIDER at none the store workers keep concurrency 1 behind SCRAPE_ITUNES_RPM and SCRAPE_GPLAY_RPM. Those two variables never change meaning: they describe the budget of a single egress address, which is exactly what a self hosted instance has.
Credentials stay in configuration. The database records only which credential a pool endpoint uses, never the secret itself.
Residential fallback
Datacenter addresses carry the traffic. A residential gateway is an emergency path for a single request that a datacenter address was blocked on, never a primary route, because residential bandwidth is metered and costs orders of magnitude more per request.Alerts
See Send alerts.Email delivery
Email stays disabled until bothSMTP_HOST and SMTP_FROM are set.
Email is optional on a self hosted instance and mandatory on a metered one. With BILLING_ENABLED=true in production and no mail path, the API warns at boot that it can confirm no address, warn nobody before a trial ends, and recover no forgotten password. See Hosting behind TLS and a reverse proxy.
Action Center
See Work the Action Center.Data retention
0 means keep forever. Pruning runs on CRON_RETENTION.
Runtime
Two combinations are individually valid and jointly unsafe, so the API refuses to start on them rather than logging a warning nobody reads. Five more warn at startup. See Hosting and network exposure.
Authentication
See Authentication and accounts.Entitlements
Published store status
An opt-in outbound integration, off by default. WhenSTORE_STATUS_URL is empty no request is ever made and the poll is not even scheduled. See What leaves your deployment and Recover from a broken store parser.
The poll goes through the same public only address guard that alert webhooks use, so a url resolving to a loopback, private, link local or cloud metadata address is refused at both configuration and connection time. A failed or stale poll never changes what the local canary reported.
Optional AI
See Enable the optional AI features.Admin surfaces
See The queue dashboard and the OpenAPI surface.Compose only
These live in the root.env and are read by Compose, not by the API directly.
See Hosting behind TLS and a reverse proxy for the overlay and for how to verify the hop count against the real chain.
Retired variables
BULL_BOARD_USER and BULL_BOARD_PASSWORD are ignored. The queue dashboard now requires an owner session or a personal API token instead of basic authentication, and the API logs a warning at boot if either variable is still set. Remove them.
Keeping this page correct
This page and the.env.example files change in the same commit. If a default here disagrees with apps/api/.env.example, the file is right and this page is a bug.