ProvaraDocs
Configuration

Environment variables

Every env var the gateway and dashboard accept.

Required

VarPurpose
PROVARA_MASTER_KEY32-byte hex key for encrypting provider API keys at rest
DATABASE_URLlibSQL / Turso URL (local .db file works for dev)
NEXT_PUBLIC_GATEWAY_URLBrowser-side gateway URL (dashboard)

Provider API keys

Set at least one. Each provider registers only if its key is present.

VarProvider
OPENAI_API_KEYOpenAI
ANTHROPIC_API_KEYAnthropic
GOOGLE_API_KEYGoogle (Gemini)
MISTRAL_API_KEYMistral
XAI_API_KEYxAI (Grok)
ZAI_API_KEYZ.ai
OLLAMA_BASE_URLOllama (defaults to http://localhost:11434/v1)
OLLAMA_API_KEYOllama (only for authenticated/remote hosts)

DB-stored keys (added via /dashboard/api-keys) take precedence over env vars. Env vars are for operators; DB keys are for tenants.

Multi-tenant / SaaS

VarPurpose
PROVARA_MODEself_hosted (default) or multi_tenant
PROVARA_CLOUDtrue enforces tier gates against Stripe subscription
DASHBOARD_URLWhere OAuth callbacks redirect back to
OAUTH_REDIRECT_BASEGateway's own public URL (used by magic-link etc.)
PROVARA_ALLOWED_ORIGINSComma-separated CORS allowlist
PROVARA_OPERATOR_EMAILSComma-separated allowlist of emails that bypass tier gates

OAuth providers

VarPurpose
GOOGLE_OAUTH_CLIENT_IDGoogle OAuth
GOOGLE_OAUTH_CLIENT_SECRETGoogle OAuth
GITHUB_OAUTH_CLIENT_IDGitHub OAuth
GITHUB_OAUTH_CLIENT_SECRETGitHub OAuth

Email (Resend)

VarPurpose
RESEND_API_KEYTransactional email (invites, magic-link, budget alerts, welcome)
PROVARA_EMAIL_FROMSender address; must be on a Resend-verified domain

Without these, the gateway falls back gracefully — invites still work via copy-paste link from the dashboard, but no email goes out.

Stripe

VarPurpose
STRIPE_SECRET_KEYStripe API key (live or test)
STRIPE_WEBHOOK_SECRETHMAC signing secret for /v1/webhooks/stripe
STRIPE_PRICE_PRO_MONTHLYPrice ID for Pro tier
STRIPE_PRICE_TEAM_MONTHLYPrice ID for Team tier

Rate limiting (#192)

VarDefaultPurpose
RATE_LIMIT_AUTH_PER_MIN20Per-IP cap on /auth/*
RATE_LIMIT_CHAT_RPS200Per-IP global DoS floor
RATE_LIMIT_INVITE_PER_MIN20Per-IP cap on invite endpoints

Adaptive routing

VarDefaultPurpose
PROVARA_MIN_SAMPLES5Minimum samples before adaptive routing picks
PROVARA_EXPLORATION_RATE0.1Base ε-greedy exploration
PROVARA_STALE_EXPLORATION_RATE0.5Boosted rate on stale cells
PROVARA_STALE_AFTER_DAYS30Stale cutoff
PROVARA_REGRESSED_EXPLORATION_RATE0.5Boosted rate on regressed cells

Semantic cache

VarDefaultPurpose
PROVARA_SEMANTIC_CACHE_ENABLEDtrueOff-switch for the semantic layer
PROVARA_SEMANTIC_CACHE_THRESHOLD0.97Cosine similarity threshold
PROVARA_EMBEDDING_MODELtext-embedding-3-smallOpenAI embedding model
PROVARA_EMBEDDING_PROVIDERopenaiOnly openai supported

Savings recommendations (#219)

VarDefaultPurpose
PROVARA_SAVINGS_QUALITY_DELTA0.05Max quality drop tolerated for a cheaper alternate

Scheduler

VarDefaultPurpose
PROVARA_SCHEDULER_ROLEunsetSet to leader on exactly one replica for multi-replica leader election; unset = single-replica (default)
PROVARA_AUDIT_RETENTION_INTERVAL_MS24hOverride for testing

Admin (self-hosted mode)

VarPurpose
PROVARA_ADMIN_SECRETIf set in self_hosted mode, dashboard routes require X-Admin-Key: <secret>