Skip to main content
Postiz is configured entirely through environment variables. Any change requires an application restart. The canonical list lives in the example postiz.env file. This page documents every variable Postiz reads, grouped by purpose.
Variables marked Required are validated on boot — Postiz will fail to start if they’re missing or malformed.

Required core

These six variables are non-optional for any deployment.

DATABASE_URL Required

PostgreSQL connection string used by Prisma.
DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"

REDIS_URL Required

Redis connection string used for queues, rate limiting, and short-lived caches.
REDIS_URL="redis://localhost:6379"

JWT_SECRET Required

A long random string used to sign session JWTs. Rotating this invalidates every existing session.

FRONTEND_URL Required

The URL the browser uses to reach the Postiz frontend. Used as the OAuth redirect base and for email links.
FRONTEND_URL="https://postiz.example.com"

NEXT_PUBLIC_BACKEND_URL Required

The URL the browser uses to reach the Postiz backend.
NEXT_PUBLIC_BACKEND_URL="https://api.postiz.example.com"

BACKEND_INTERNAL_URL Required

The URL the frontend SSR server uses to reach the backend from inside your network. If everything runs in the same container/host, this is usually http://localhost:3000.

Application behaviour

DISABLE_REGISTRATION

Set to true to allow only a single user signup and then disable the sign-up page. Useful for self-host where you want full control.
This also disables OIDC / OAuth sign-in.

API_LIMIT

Per-hour limit on the public-API create-post endpoint. Defaults to 90. Postiz Cloud uses 100. Channel and post quotas are tiered separately by plan.

RUN_CRON

When set, the backend process runs the scheduled-task workers. Leave unset on API-only instances when workers are deployed separately.

RESTRICT_UPLOAD_DOMAINS

Comma-separated allowlist of domains for /public/v1/upload-from-url. If set, only URLs whose hostname matches an entry are accepted.

DISALLOW_PLUS

When set, blocks the upgrade UI elements pointing to paid plans. Used for self-host deployments that don’t want to surface cloud-only billing.

IS_GENERAL

Switches the frontend between routes available to the open-source build (/launches) and the hosted build (/analytics). Set to "true" on self-host. Leave unset on Postiz Cloud.

DISABLE_IMAGE_COMPRESSION

When truthy, the frontend skips client-side image compression on upload. Set this if you need pixel-exact originals at the cost of larger uploads.

NOT_SECURED

Dev only. Never set in production — it disables security checks that exist for a reason.

MAIN_URL

Primary application URL used for absolute links in some emails and SEO metadata. Falls back to FRONTEND_URL when not set.

EXTENSION_ID

The Chrome Extension ID for cookie-based platform integrations (e.g. Skool). See the Chrome Extension guide.

MOBILE_APP_SCHEME

URL scheme used for deep-linking from emails into the mobile app.

Storage

See also: Cloudflare R2 and Uploads & Storage.
VariablePurpose
STORAGE_PROVIDERlocal or cloudflare. Defaults to local.
UPLOAD_DIRECTORYFilesystem path for local storage writes.
NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORYPublic URL prefix the frontend uses to reference uploaded files.
CLOUDFLARE_ACCOUNT_IDR2 account ID.
CLOUDFLARE_ACCESS_KEYR2 access key.
CLOUDFLARE_SECRET_ACCESS_KEYR2 secret access key.
CLOUDFLARE_BUCKETNAMER2 bucket name.
CLOUDFLARE_BUCKET_URLPublic-facing URL the bucket is served from.
CLOUDFLARE_REGIONR2 region (usually auto).

Email

See also: Email configuration.
VariablePurpose
EMAIL_PROVIDERresend (default) or nodemailer.
RESEND_API_KEYResend API key — required when EMAIL_PROVIDER=resend. Presence of this variable also gates whether user activation is required (set → required; unset → users are auto-activated).
EMAIL_HOSTSMTP host — required when EMAIL_PROVIDER=nodemailer.
EMAIL_PORTSMTP port.
EMAIL_USERSMTP user.
EMAIL_PASSSMTP password.
EMAIL_SECUREtrue for SMTPS / implicit TLS.
EMAIL_FROM_ADDRESSFrom-address used on all outgoing email.
EMAIL_FROM_NAMEFrom-name used on all outgoing email.

OAuth sign-in (OIDC)

See also: OAuth configuration.
VariablePurpose
POSTIZ_GENERIC_OAUTHtrue to enable a generic OIDC sign-in provider.
POSTIZ_OAUTH_URLBase URL of the IdP.
POSTIZ_OAUTH_AUTH_URLAuthorization endpoint.
POSTIZ_OAUTH_TOKEN_URLToken endpoint.
POSTIZ_OAUTH_USERINFO_URLUserInfo endpoint.
POSTIZ_OAUTH_CLIENT_IDClient ID issued by the IdP.
POSTIZ_OAUTH_CLIENT_SECRETClient secret issued by the IdP.
POSTIZ_OAUTH_SCOPEOIDC scope. Defaults to openid profile email.
NEXT_PUBLIC_POSTIZ_OAUTH_DISPLAY_NAMELabel shown on the sign-in button.
NEXT_PUBLIC_POSTIZ_OAUTH_LOGO_URLIcon shown on the sign-in button.

Temporal (workflow orchestration)

Since v2.12.0, Postiz uses Temporal for scheduled posts and background workflows. Self-host deployments need to run a Temporal stack (the official docker-compose ships with one). See the Temporal migration guide.
VariablePurpose
TEMPORAL_ADDRESShost:port of the Temporal frontend.
TEMPORAL_NAMESPACETemporal namespace to run workflows in.
TEMPORAL_API_KEYAPI key for Temporal Cloud. Leave unset for self-host.
TEMPORAL_TLStrue to require TLS to the Temporal frontend.
ORCHESTRATOR_PORTPort the in-process orchestrator binds to.

Public API & MCP

VariablePurpose
MCP_URLURL the frontend uses to advertise the MCP endpoint to clients.
AGENT_API_KEYShared secret used by the agent runtime to call privileged endpoints.
AGENT_MEDIA_SSO_KEYSigning key for short-lived agent-media SSO tokens.
BACKEND_URLLegacy alias for NEXT_PUBLIC_BACKEND_URL in a few server contexts.

AI / generation

VariablePurpose
OPENAI_API_KEYOpenAI key used for the copilot and AI image generation.
OPENAI_APP_CHALLANGEVerification challenge string for the OpenAI custom GPT integration.
ELEVENSLABS_API_KEYElevenLabs API key for voice generation.
FAL_KEYfal.ai API key for image/video models.
TAVILY_API_KEYTavily search API key used by the research tool.
KIEAI_API_KEYKieAI API key.
TRANSLOADIT_AUTHTransloadit auth key for video pipelines.
TRANSLOADIT_SECRETTransloadit signing secret.
TRANSLOADIT_TEMPLATETransloadit template ID used by the video generator.

If a Postiz user configures short-link replacement, Postiz proxies link shortening through one of the configured providers. Pick one set.

Dub.co

DUB_TOKEN=""
DUB_API_ENDPOINT="https://api.dub.co"
DUB_SHORT_LINK_DOMAIN="dub.sh"

Short.io

SHORT_IO_SECRET_KEY=""

Kutt.it

KUTT_API_KEY=""
KUTT_API_ENDPOINT="https://kutt.it/api/v2"
KUTT_SHORT_LINK_DOMAIN="kutt.it"

LinkDrip

LINK_DRIP_API_KEY=""
LINK_DRIP_API_ENDPOINT="https://api.linkdrip.com/v1/"
LINK_DRIP_SHORT_LINK_DOMAIN="dripl.ink"

Payments

VariablePurpose
STRIPE_PUBLISHABLE_KEYStripe publishable key.
STRIPE_SECRET_KEYStripe secret key.
STRIPE_SIGNING_KEYStripe webhook signing key for subscription events.
STRIPE_SIGNING_KEY_CONNECTStripe Connect webhook signing key.
STRIPE_DISCOUNT_IDDefault Stripe discount applied to new subscriptions.
FEE_AMOUNTPlatform fee fraction (e.g. 0.05).
NOWPAYMENTS_API_KEYNOWPayments API key for crypto checkout.
NOWPAYMENTS_AMOUNTDefault NOWPayments invoice amount.

Analytics & tracking (frontend)

All of these are optional. Frontend reads NEXT_PUBLIC_* at build time.
VariablePurpose
NEXT_PUBLIC_SENTRY_DSNFrontend Sentry DSN.
NEXT_PUBLIC_GTM_IDGoogle Tag Manager container ID.
NEXT_PUBLIC_FACEBOOK_PIXELFacebook Pixel ID.
FACEBOOK_PIXEL_ACCESS_TOKENServer-side Pixel Conversions API token.
NEXT_PUBLIC_POSTHOG_HOSTPostHog host (e.g. https://eu.posthog.com).
NEXT_PUBLIC_POSTHOG_KEYPostHog project API key.
NEXT_PUBLIC_TRACKING_TRIALWhen set, enables trial-funnel tracking events.
DATAFAST_API_KEYDatafast analytics API key.
DATAFAST_WEBSITE_IDDatafast website ID.
SENTRY_AUTH_TOKENBuild-time Sentry token for sourcemap upload.
SENTRY_ORGSentry org slug.
SENTRY_PROJECTSentry project slug.
SENTRY_SPOTLIGHTEnable Sentry Spotlight in dev.

Misc frontend

VariablePurpose
NEXT_PUBLIC_DISCORD_SUPPORTDiscord invite URL shown in the support widget.
NEXT_PUBLIC_POLOTNOPolotno API key for the image editor.
NEXT_PUBLIC_VERSIONVersion string shown in the footer.
NEXT_PUBLIC_APP_VERSIONMobile/web version label.
NEXT_PUBLIC_OVERRIDE_BACKEND_URLWhen set, overrides NEXT_PUBLIC_BACKEND_URL at runtime. Useful for tunnel-based dev.

Social provider keys

Each social provider has its own env-var block. See the per-provider setup pages under Providers for the exact OAuth steps; this table is just a lookup so you can find which page documents which variable.
ProviderVariablesSetup
X (Twitter)X_API_KEY, X_API_SECRET, X_URL, DISABLE_X_ANALYTICS, STRIP_LINKS_FROM_X_POSTS/providers/x-twitter
LinkedInLINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET/providers/linkedin, /providers/linkedin-page
Facebook / Instagram (FB)FACEBOOK_APP_ID, FACEBOOK_APP_SECRET/providers/facebook, /providers/instagram
Instagram (Standalone)INSTAGRAM_APP_ID, INSTAGRAM_APP_SECRET/providers/instagram
ThreadsTHREADS_APP_ID, THREADS_APP_SECRET/providers/threads
YouTubeYOUTUBE_CLIENT_ID, YOUTUBE_CLIENT_SECRET/providers/youtube
Google My BusinessGOOGLE_GMB_CLIENT_ID, GOOGLE_GMB_CLIENT_SECRET/providers/google-my-business
TikTokTIKTOK_CLIENT_ID, TIKTOK_CLIENT_SECRET/providers/tiktok
RedditREDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET/providers/reddit
PinterestPINTEREST_CLIENT_ID, PINTEREST_CLIENT_SECRET/providers/pinterest
DiscordDISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET, DISCORD_BOT_TOKEN_ID/providers/discord
SlackSLACK_ID, SLACK_SECRET, SLACK_SIGNING_SECRET/providers/slack
TelegramTELEGRAM_TOKEN, TELEGRAM_BOT_NAME/providers/telegram
MastodonMASTODON_URL, MASTODON_CLIENT_ID, MASTODON_CLIENT_SECRET/providers/mastodon
DribbbleDRIBBBLE_CLIENT_ID, DRIBBBLE_CLIENT_SECRET/providers/dribbble
FarcasterNEYNAR_CLIENT_ID, NEYNAR_SECRET_KEY, NEYNAR_LOGIN_URL/providers/farcaster
MeWeMEWE_HOST, MEWE_APP_ID, MEWE_API_KEY/providers/mewe
TwitchTWITCH_CLIENT_ID, TWITCH_CLIENT_SECRETAPI only — see /public-api/providers/twitch
KickKICK_CLIENT_ID, KICK_SECRETAPI only — see /public-api/providers/kick
VKVK_IDAPI only — see /public-api/providers/vk
WhopWHOP_CLIENT_ID/providers/whop
GitHub (sign-in)GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET/configuration/oauth
BeehiivBEEHIIVE_API_KEY, BEEHIIVE_PUBLICATION_IDNewsletter provider
ListmonkLISTMONK_DOMAIN, LISTMONK_USER, LISTMONK_API_KEY, LISTMONK_LIST_ID, LISTMONK_WELCOME_TEMPLATE_IDNewsletter provider

Runtime & build

These are read from the environment but are typically managed by your runtime, hosting platform, or framework rather than set by hand.
VariablePurpose
PORTPort the backend HTTP server binds to. Defaults to 3000.
TZProcess timezone. The backend forces this to UTC on boot.
NODE_ENVStandard Node environment flag (development / production). Toggles dev-only behaviour like sourcemaps.
NEXT_RUNTIMESet by Next.js (nodejs / edge) to select the instrumentation hook. Framework-injected — do not set manually.
VERCEL_GIT_COMMIT_SHACommit SHA used as the Sentry release tag on the frontend. Injected by Vercel.
GITHUB_SHAFallback commit SHA for the Sentry release tag when not on Vercel. Injected by GitHub Actions.