Skip to main content
The system configuration page (/admin/system-config) lets administrators update the application’s .env file and database-stored branding settings directly from the UI. Every save creates a timestamped backup of the .env file before writing changes.
Changes to the .env file take effect immediately — the config cache is cleared after each successful save. The admin session is re-authenticated automatically to prevent logout.

Application settings

Setting.env keyDescription
App nameAPP_NAMEName displayed in the browser tab and emails. Only letters, numbers, spaces, hyphens, underscores, and dots.
App URLAPP_URLBase URL of the application (e.g. https://app.example.com).
Debug modeAPP_DEBUGEnable detailed error output. Set to false in production.
EnvironmentAPP_ENVlocal, staging, or production.
Landing pageFRONTEND_LANDING_ENABLEDShow or hide the public marketing landing page.
Email verificationEMAIL_VERIFICATION_ENABLEDRequire users to verify their email before accessing the dashboard.

Database settings

Setting.env key
HostDB_HOST
PortDB_PORT
DatabaseDB_DATABASE
UsernameDB_USERNAME
PasswordDB_PASSWORD
Click Test database to verify connectivity. The test calls DB::connection()->getPdo() and returns the database name and driver.

Mail settings

Setting.env key
SMTP hostMAIL_HOST
SMTP portMAIL_PORT
UsernameMAIL_USERNAME
PasswordMAIL_PASSWORD
From addressMAIL_FROM_ADDRESS
From nameMAIL_FROM_NAME
Click Send test email to send a test message to the currently logged-in admin’s email address using the configured SMTP settings.

Stripe settings

Stripe supports separate test and live key sets. Use PAYMENT_ENVIRONMENT to switch between them.
Setting.env key
Test publishable keySTRIPE_TEST_PUBLISHABLE_KEY
Test secret keySTRIPE_TEST_SECRET_KEY
Test webhook secretSTRIPE_TEST_WEBHOOK_SECRET
Live publishable keySTRIPE_LIVE_PUBLISHABLE_KEY
Live secret keySTRIPE_LIVE_SECRET_KEY
Live webhook secretSTRIPE_LIVE_WEBHOOK_SECRET
Payment environmentPAYMENT_ENVIRONMENT (sandbox or live)
API keys are masked in the UI (only the first 4 and last 4 characters are shown). Click Test Stripe to validate the secret key against the Stripe API.

Razorpay settings

Setting.env key
API keyRAZORPAY_API_KEY
Secret keyRAZORPAY_SECRET_KEY
Webhook secretRAZORPAY_WEBHOOK_SECRET
Test modeRAZORPAY_TEST_MODE
If you save API credentials without a webhook secret, the system displays a warning with the webhook URL and step-by-step instructions for creating the webhook in the Razorpay dashboard.
1

Open Razorpay webhooks

Go to dashboard.razorpay.com/app/webhooks and click Add New Webhook.
2

Enter the webhook URL

Use the URL shown in the warning banner in Sniko system config (typically https://your-domain.com/webhooks/razorpay).
3

Select events

Enable: subscription.activated, subscription.charged, subscription.cancelled, subscription.paused, subscription.resumed, subscription.completed, subscription.pending, subscription.halted, payment.failed, order.paid.
4

Copy the webhook secret

After creating the webhook, copy the generated secret and paste it into the Razorpay Webhook Secret field in Sniko, then save again.

ElevenLabs settings

Setting.env keyDescription
API keyELEVENLABS_API_KEYMaster ElevenLabs API key. Required for all AI voice operations.
Click Test ElevenLabs to verify the key. A successful test returns the account subscription tier, character count, and character limit.

OpenRouter AI settings

OpenRouter is used for LLM-powered features such as AI-assisted translation generation.
Setting.env keyDefault
API keyOPENROUTER_API_KEY
ModelOPENROUTER_MODELopenrouter/auto
Click Test OpenRouter to fetch the list of available models. A successful test reports how many models are accessible.

KYC settings

KYC (Know Your Customer) is optional and disabled by default.
Setting.env keyDefaultDescription
KYC enabledKYC_ENABLEDfalseEnable the KYC flow for customers.
KYC requiredKYC_REQUIREDfalseRequire KYC before customers can use the platform.
Grace periodKYC_GRACE_PERIOD_DAYS7Days after registration before KYC is enforced.
Reminder daysKYC_REMINDER_DAYS3Days before grace period ends to send reminder.
Block accessKYC_BLOCK_ACCESStrueWhether to block platform access after grace period without KYC.

Logo and branding

Logos are stored in the database via BrandingService and served from storage/app/public/logos/. Upload images as base64 from the UI.
AssetStorage pathNotes
Light logo/storage/logos/logo-light.{ext}Shown on dark backgrounds
Dark logo/storage/logos/logo-dark.{ext}Shown on light backgrounds
Favicon/favicon.{ext}Served from public/ directly
Supported formats: JPEG, PNG, SVG. Maximum size: 2 MB.

Dashboard font

The dashboard font is stored in the database via BrandingService under the key dashboard_font. Set a Google Fonts-compatible font name (e.g. Inter, Roboto).

Application monitoring

The MonitoringController exposes several endpoints that power the monitoring dashboard and can be used by external uptime checkers.

Health endpoints

EndpointAuthDescription
GET /monitoring/healthPublic (cached 60 s)Overall application health status
GET /monitoring/health/detailedAdminHealth + usage statistics + alerts
GET /monitoring/pingPublicUptime check, returns {"status":"ok"}
GET /monitoring/db-checkPublicDatabase connectivity check
GET /monitoring/cache-checkPublicCache read/write check
GET /monitoring/usage-statsAuth (cached 5 min)Usage statistics
GET /monitoring/alertsAuthSystem alerts with critical/warning counts
POST /monitoring/health-checkAuthManually trigger a health check, clears cache
GET /monitoring/dashboardAuthCombined overview for monitoring dashboards

Health response structure

{
  "overall_status": "healthy",
  "summary": {
    "health_percentage": 100
  }
}

Alerts

Alerts are returned as an array of objects with a level field (critical or warning). The detailed endpoint returns the latest 10 alerts.

Queue worker

Sniko requires a running queue worker for background jobs (batch calls, webhook processing, etc.).
supervisor.conf
[program:sniko-worker]
command=php /var/www/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=www-data
Verify the worker is running by calling GET /monitoring/health and checking the response for a healthy queue status.

Cache management

The config cache is automatically cleared whenever a system config section is saved. To manually clear the cache, run:
php artisan config:clear
php artisan cache:clear
Admins with the admin.cache.manage permission can also trigger a cache clear from Admin → Pricing → Cache → Clear cache.

MCP server

The optional MCP (Model Context Protocol) server runs as a separate Node.js process. See the installation guide for full setup. Configuration is managed via mcp-servers/unified/ecosystem.config.cjs. To check its status:
pm2 status
pm2 logs sniko-mcp

Build docs developers (and LLMs) love