appsettings.json file for configuration.
Configuration files
Each service has its own configuration file:ProjectIqraFrontend/appsettings.json- Dashboard and APIProjectIqraBackendProxy/appsettings.json- Load balancer and SIP gatewayProjectIqraBackendApp/appsettings.json- Core agent engineIqraBackgroundProcessor/appsettings.json- Async processing
appsettings.json.example in each directory.
Frontend configuration
URL
- Email links (password resets, invitations)
- Webhook URL generation
- OAuth redirects
Hardware
The OS-level name of the network interface for RTP audio (UDP) binding.How to find:
- Linux:
ip addr(e.g.,eth0,ens5,ens160) - Windows:
ipconfig(e.g.,"Ethernet","vEthernet (WSL)")
S3 Storage
The Region ID where default assets are stored. This must match a Region created in the Admin Dashboard under Infrastructure → Regions.Used for:
- Logo uploads
- Call recordings
- Document uploads for knowledge bases
Redis (SHARED)
Redis connection endpoint in
host:port format.Redis authentication password. Leave empty (
"") if no password is set.MongoDB (SHARED)
MongoDB connection string. Supports:
- Standalone:
mongodb://localhost:27017 - Replica set:
mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=rs0 - Authentication:
mongodb://username:password@host:27017/dbname
Milvus (SHARED)
HTTP URL for the Milvus vector database. Usually port
19530 (gRPC) or 9091 (HTTP).Database name inside Milvus to store embeddings.
Milvus authentication username (default:
root).Milvus authentication password (default:
Milvus).How often (in seconds) to check for expired vector collections. Default:
300 (5 minutes).Time (in minutes) before an unused collection is unloaded from memory. Default:
30.Unstructured
URL for the Unstructured.io ETL service used for parsing documents (PDFs, DOCX, etc.) for knowledge bases.Options:
- Self-hosted Docker container:
http://localhost:8741 - Unstructured SaaS:
https://api.unstructured.io
API key for Unstructured service (required for SaaS version or secured containers).
Mail SMTP
SMTP server hostname (e.g.,
smtp.sendgrid.net, smtp.gmail.com, smtp.mailgun.org).SMTP port. Common values:
587- STARTTLS (recommended)465- SSL25- Unencrypted (not recommended)
SMTP authentication username.
SMTP authentication password or API key.
Email address for the “From” field in system emails.
Display name for system emails.
Integrations (SHARED)
A 32-character AES key used to encrypt/decrypt third-party API keys stored in MongoDB (OpenAI, Twilio, ElevenLabs, etc.).Generate with:
User API Keys (SHARED)
Encrypts platform API keys issued to users.Generate with:
Encrypts the payload/claims within API tokens.Generate with:
User
A secret string appended to email addresses before hashing for secure lookups.Generate with:
Forwarded Headers
List of trusted proxy IP addresses that define
X-Forwarded-For headers (e.g., Nginx, Cloudflare).Example:Backend Proxy configuration
Proxy
Unique UUID for this Proxy instance, obtained from Admin Dashboard → Infrastructure → Servers.
Region identifier (e.g.,
us-east-1, eu-central) that this proxy serves.Cluster handshake token. Must match the “API Secret” entered in the Admin Dashboard when registering this server.
How often (in seconds) the proxy checks for pending outbound calls. Default:
5.Maximum number of queued calls to fetch from database per polling cycle. Default:
1000.Number of calls to process concurrently within one batch. Default:
70.Lookahead window (in minutes) for scheduled calls. Default:
1.CORS
List of URLs allowed to make browser-based requests (WebRTC signaling). Include your Frontend dashboard URL.
Backend App configuration
Server
Unique UUID obtained from Admin Dashboard → Infrastructure → Servers.
Region identifier this server belongs to.
Maximum number of simultaneous calls before the Proxy stops routing new traffic to this server.
Cluster handshake token matching the Admin Dashboard configuration.
Random string used to sign webhook payloads for security verification.Generate with:
Hardware
OS-level network interface name for RTP audio binding. See Frontend Hardware for details.
Estimated download bandwidth available (used for capacity planning). Default:
200.Estimated upload bandwidth available (used for capacity planning). Default:
50.Local Redis (Backend App only)
The Backend App requires a separate local Redis instance running on the same machine for L1 TTS audio caching to minimize latency.
Local Redis connection (should be
127.0.0.1 for best performance).Redis database index for TTS cache. Default:
14.Background Processor configuration
Security
Cluster handshake token matching the Admin Dashboard configuration.
S3 Storage
Must match the
DefaultStorageRegionId in the Frontend configuration.Shared configuration blocks
These sections must be identical across all services:RedisDatabase
Connection to shared Redis instance
MongoDatabase
Connection to MongoDB
Milvus
Vector database configuration
Integrations
Encryption key for third-party API keys
Environment-specific configuration
Development
Production
Security best practices
Use strong encryption keys
Generate all encryption keys with
openssl rand -base64 32. Never use predictable strings.Configuration validation
Validate your configuration before deploying:Troubleshooting
Services can’t connect to databases
MongoDB connection failed
MongoDB connection failed
Symptoms:
MongoConnectionException or timeout errorsSolutions:- Verify connection string format
- Check MongoDB is running:
sudo systemctl status mongod - Test connection:
mongo mongodb://localhost:27017 - Ensure firewall allows port 27017
Redis connection failed
Redis connection failed
Symptoms:
RedisConnectionException or NOAUTH errorsSolutions:- Verify Redis is running:
sudo systemctl status redis - Test connection:
redis-cli ping - Check password if authentication is enabled
- Ensure firewall allows port 6379
Milvus connection failed
Milvus connection failed
Symptoms:
MilvusException or timeout errorsSolutions:- Verify Milvus is running:
docker ps | grep milvus - Check endpoint URL (HTTP port is usually 9091, not 19530)
- Test connection:
curl http://localhost:9091/health - Verify username/password if authentication is enabled
Encryption key mismatch
Symptoms:CryptographicException or “invalid padding” errors
Cause: The Integrations.EncryptionKey differs between services.
Solution: Ensure the exact same key is used in all four appsettings.json files.
Network interface not found
Symptoms:NetworkInterfaceNotFoundException or “No such device”
Solution:
- Linux: Run
ip addrand use the exact interface name (e.g.,eth0) - Windows: Run
ipconfigand use the exact adapter name (e.g.,"Ethernet") - Ensure the interface is active and has an IP address
Next steps
Self-hosting guide
Complete installation walkthrough
System requirements
Hardware and dependency specifications