Skip to main content
Voxray is configured through a JSON file combined with environment variable overrides. This page documents every configuration field, its type, default value, and the corresponding environment variable where applicable.

Config Loading

Config File

Pass the path to your config file with the -config flag at startup:
Alternatively, set the VOXRAY_CONFIG environment variable and omit the flag:
When neither is provided, Voxray looks for config.json in the current working directory.

Loading Order and Precedence

Environment variables always win. The resolution order for every field is:
  1. Environment variable (highest priority — overrides everything)
  2. config.json field (applied after file load)
  3. Built-in default (used when the field is absent from the file)
This means you can ship a base config.json and override individual values at deploy time without modifying the file — a standard 12-factor pattern.

12-Factor Best Practice

Never commit secrets (API keys, server_api_key, database DSNs) to source control. Use environment variables for all sensitive values in production and CI environments. Reserve inline api_keys in config.json for local development only.

Environment Variable Reference

All VOXRAY_* variables are read by ApplyEnvOverrides immediately after the config file is parsed. Unset variables leave the corresponding config field unchanged.

Server

Security

TLS

Transport and Pipeline

VAD

Recording

Transcripts

API Keys (Provider-Specific)

API keys are not read through ApplyEnvOverrides — they are resolved lazily by GetAPIKey when each provider is first used. The table below lists the environment variable each provider checks when api_keys.<provider> is absent from config.json.

config.json Field Reference

Server

Providers

API Keys

Transport

TLS

Security

Turn Detection

User Lifecycle

VAD (Voice Activity Detection)

Interruptions

Runner and Telephony

Session Store

Observability

Recording

Transcripts

Plugins

MCP (Model Context Protocol)


Minimal Config Example

Full Example with Common Settings

In production, omit all api_keys entries from config.json and set the corresponding environment variables instead (e.g. OPENAI_API_KEY, GROQ_API_KEY). This keeps secrets out of config files that might be checked into version control or shipped in container images.