Configuration

The API reads configuration from the environment (an optional .env fills gaps; real env always wins). The essentials:

Required

  • SVITRIO_JWT_SECRET — HS256 signing key. Boot fails if unset or under 32 bytes.

Core

  • SVITRIO_ADDR — listen address (default :8080).

  • SVITRIO_SCHEMA — path to schema.gate (baked into the image at /schema.gate).

  • SVITRIO_ADMIN_URL — admin origin; magic-link redirect target and CORS allow-origin.

  • SVITRIO_JWT_ISSUER — JWT iss claim.

Database

  • SVITRIO_DB — DB path/DSN (default ./svitrio.db).

  • SVITRIO_DB_PROVIDERsqlite | turso | postgres | neon, with the matching SVITRIO_DB_HOST/TOKEN/USER/PASSWORD/NAME/PORT/SSLMODE.

  • SVITRIO_CONTENT_DSN — optional separate content store.

Secrets & auth

  • SVITRIO_SECRETS_KEY — base64 32-byte AES-256 key that seals billing/AI/license keys at rest. Unset ⇒ plaintext + a boot warning.

  • SVITRIO_ACCESS_TTL (15m), SVITRIO_REFRESH_TTL (7d), SVITRIO_MAGIC_TTL (15m).

  • SVITRIO_WEBAUTHN_RP_ID / SVITRIO_WEBAUTHN_ORIGINS / SVITRIO_WEBAUTHN_RP_NAME — passkeys (optional).

  • SVITRIO_RATELIMIT_DISABLED / _BURST(8) / _EVERY(20s) — the auth-endpoint throttle.

Email

  • SVITRIO_EMAIL_PROVIDERconsole | brevo | smtp.

  • SVITRIO_BREVO_API_KEY, or SVITRIO_SMTP_HOST/PORT/USER/PASS.

  • SVITRIO_EMAIL_FROM / SVITRIO_EMAIL_FROM_NAME.

Webhooks & portal

  • SVITRIO_CONTENT_WEBHOOK_URL / SVITRIO_CONTENT_WEBHOOK_SECRET — outbound content ping.

  • SVITRIO_TICKETS_INBOUND_SECRET / SVITRIO_TICKETS_BREVO_SECRET — inbound ticket webhooks.

  • SVITRIO_PORTAL_ADDR (:8081), SVITRIO_PORTAL_URL, SVITRIO_PORTAL_BASE_DOMAIN, SVITRIO_RESERVED_SUBDOMAINS.