Variáveis de Ambiente
Referência completa de todas as variáveis de ambiente por surface.
Fonte de verdade: Doppler
As variáveis de cada ambiente (dev/staging/production) vivem no Doppler. Este documento é para visibilidade — não substitui o Doppler nem deve ser usado para criar .env manual.
Convenção de nomenclatura
As configurações usam pydantic-settings com env_nested_delimiter="__". Um fragmento aninhado vira um prefixo:
database: DatabaseFragment → DATABASE__URL, DATABASE__POOL_SIZE
agent: AgentFragment → AGENT__OPENAI_API_KEY, AGENT__RAG_EMBEDDING_MODEL
Campos de topo (sem fragmento) usam o nome da variável diretamente:
app_frontend_url → APP_FRONTEND_URL
App API (spryx-app-api)
Banco de dados
| Variável |
Descrição |
Obrigatória |
Padrão |
DATABASE__URL |
URL de conexão PostgreSQL |
Sim |
— |
DATABASE__POOL_SIZE |
Tamanho do pool de conexões |
Não |
20 |
DATABASE__MAX_OVERFLOW |
Conexões extras além do pool |
Não |
10 |
Redis
| Variável |
Descrição |
Obrigatória |
Padrão |
REDIS__URL |
URL de conexão Redis |
Sim |
— |
Autenticação JWT
| Variável |
Descrição |
Obrigatória |
Padrão |
AUTHENTICATION__ALGORITHM |
Algoritmo JWT (ex: RS256) |
Sim |
— |
AUTHENTICATION__ISSUER |
Issuer do token |
Sim |
— |
AUTHENTICATION__AUDIENCE |
Audience do token |
Sim |
— |
AUTHENTICATION__PRIVATE_KEY |
Chave RSA privada (PEM) |
Sim |
— |
AUTHENTICATION__PUBLIC_KEY |
Chave RSA pública (PEM) |
Sim |
— |
AUTHENTICATION__LEEWAY |
Tolerância de clock em segundos |
Não |
0 |
AUTHENTICATION__ACCESS_TOKEN_EXPIRE_MINUTES |
TTL do access token |
Não |
15 |
AUTHENTICATION__REFRESH_TOKEN_EXPIRE_DAYS |
TTL do refresh token |
Não |
30 |
Google OAuth
| Variável |
Descrição |
Obrigatória |
Padrão |
IDENTITY_OAUTH__CLIENT_ID |
Google OAuth client ID |
Sim |
— |
IDENTITY_OAUTH__CLIENT_SECRET |
Google OAuth client secret |
Sim |
— |
CORS
| Variável |
Descrição |
Obrigatória |
Padrão |
CORS__ALLOW_ORIGINS |
Lista de origens permitidas |
Sim |
— |
CORS__ALLOW_CREDENTIALS |
Permite credenciais |
Não |
true |
CORS__ALLOW_METHODS |
Métodos HTTP permitidos |
Não |
["*"] |
CORS__ALLOW_HEADERS |
Headers permitidos |
Não |
["*"] |
Rate Limit
| Variável |
Descrição |
Obrigatória |
Padrão |
RATE_LIMIT_TENANT__MAX_REQUESTS |
Máx. requisições por tenant por janela. 0 = desabilitado |
Sim |
— |
RATE_LIMIT_TENANT__WINDOW_SECONDS |
Duração da janela (segundos) |
Não |
60 |
RATE_LIMIT_IP__MAX_REQUESTS |
Máx. requisições por IP por janela (rotas core). 0 = desabilitado |
Sim |
— |
RATE_LIMIT_IP__WINDOW_SECONDS |
Duração da janela (segundos) |
Não |
60 |
OAuth Redirect (Connections)
| Variável |
Descrição |
Obrigatória |
Padrão |
AUTHENTICATION_OAUTH__ALLOWED_REDIRECT_DOMAINS |
Domínios permitidos em redirect URIs OAuth |
Não |
["localhost", "127.0.0.1"] |
Surface
| Variável |
Descrição |
Obrigatória |
Padrão |
APP_FRONTEND_URL |
URL do frontend do cliente |
Sim |
— |
APP_API_BASE_URL |
URL base desta API (aceita também RAILWAY_PUBLIC_DOMAIN) |
Não |
http://localhost:8000 |
BACKOFFICE_FRONTEND_URL |
URL do frontend backoffice (para emails de impersonation) |
Não |
http://localhost:3001 |
Agent / RAG
| Variável |
Descrição |
Obrigatória |
Padrão |
AGENT__OPENAI_API_KEY |
Chave de API do OpenAI |
Sim |
— |
AGENT__RAG_UNSTRUCTURED_API_KEY |
Chave da API Unstructured (parsing de documentos) |
Sim |
— |
AGENT__RAG_UNSTRUCTURED_API_URL |
URL da API Unstructured |
Sim |
— |
AGENT__RAG_EMBEDDING_MODEL |
Modelo de embedding |
Não |
text-embedding-3-large |
AGENT__RAG_EMBEDDING_DIMS |
Dimensões do embedding |
Não |
3072 |
AGENT__RAG_OPENAI_API_KEY_OVERRIDE |
Chave OpenAI alternativa para RAG |
Não |
null |
Asset (S3)
| Variável |
Descrição |
Obrigatória |
Padrão |
ASSET__BUCKET_ACCESS_KEY_ID |
S3 access key ID |
Sim |
— |
ASSET__BUCKET_SECRET_ACCESS_KEY |
S3 secret access key |
Sim |
— |
ASSET__BUCKET_NAME |
Nome do bucket |
Sim |
— |
ASSET__BUCKET_REGION |
Região do bucket |
Sim |
— |
ASSET__BUCKET_ENDPOINT_URL |
Endpoint URL (S3 ou compatível) |
Sim |
— |
ASSET__BUCKET_UPLOAD_URL_EXPIRES_IN |
Expiração de URLs de upload (segundos) |
Não |
7200 |
ASSET__BUCKET_DOWNLOAD_URL_EXPIRES_IN |
Expiração de URLs de download (segundos) |
Não |
3600 |
Billing (Stripe)
| Variável |
Descrição |
Obrigatória |
Padrão |
BILLING__STRIPE_SECRET_KEY |
Chave secreta do Stripe |
Sim |
— |
BILLING__STRIPE_WEBHOOK_SECRET |
Segredo de assinatura de webhooks |
Sim |
— |
| Variável |
Descrição |
Obrigatória |
Padrão |
CONNECTIONS__META_CLIENT_ID |
Meta OAuth client ID |
Sim |
— |
CONNECTIONS__META_CLIENT_SECRET |
Meta OAuth client secret |
Sim |
— |
Messaging (WAHA / WhatsApp / Instagram / Slack)
| Variável |
Descrição |
Obrigatória |
Padrão |
MESSAGING__WAHA_BASE_URL |
URL base do WAHA |
Sim |
— |
MESSAGING__WAHA_API_KEY |
Chave de API do WAHA |
Sim |
— |
MESSAGING__WAHA_WEBHOOK_HMAC_KEY |
HMAC key para validação de webhooks WAHA |
Não |
null |
MESSAGING__INSTAGRAM_CLIENT_ID |
Instagram/Meta client ID |
Não |
null |
MESSAGING__INSTAGRAM_CLIENT_SECRET |
Instagram/Meta client secret |
Não |
null |
MESSAGING__INSTAGRAM_VERIFY_TOKEN |
Token de verificação de webhook Instagram |
Não |
null |
MESSAGING__WHATSAPP_CLIENT_ID |
WhatsApp client ID |
Não |
null |
MESSAGING__WHATSAPP_CLIENT_SECRET |
WhatsApp client secret |
Não |
null |
MESSAGING__WHATSAPP_VERIFY_TOKEN |
Token de verificação de webhook WhatsApp |
Não |
null |
MESSAGING__WHATSAPP_BASE_URL |
URL base da WhatsApp API |
Não |
https://graph.facebook.com/v23.0 |
MESSAGING__SLACK_CLIENT_ID |
Slack client ID |
Não |
null |
MESSAGING__SLACK_CLIENT_SECRET |
Slack client secret |
Não |
null |
MESSAGING__SLACK_SIGNING_SECRET |
Slack signing secret |
Não |
null |
MESSAGING__SPRYX_MESSAGE_API_URL |
URL interna da Message API |
Não |
http://localhost:8000 |
MESSAGING__SPRYX_AGENTS_API_URL |
URL interna da Agents API |
Não |
http://localhost:8000 |
MESSAGING__SPRYX_CLIENT_ID |
Spryx OAuth client ID |
Não |
null |
MESSAGING__SPRYX_CLIENT_SECRET |
Spryx OAuth client secret |
Não |
null |
MESSAGING__SPRYX_INTERNAL_AUTH_URL |
URL de auth interna |
Não |
http://localhost:8000 |
Notification (Resend)
| Variável |
Descrição |
Obrigatória |
Padrão |
NOTIFICATION__RESEND_API_KEY |
Chave de API do Resend |
Sim |
— |
NOTIFICATION__RESEND_FROM_EMAIL |
Endereço de envio (noreply@...) |
Sim |
— |
Observabilidade
| Variável |
Descrição |
Obrigatória |
Padrão |
LOGFIRE__TOKEN |
Token de acesso ao Logfire |
Não |
null (desabilitado) |
E2E (somente em testes)
Ativam endpoints de auth programática usados exclusivamente em testes e2e. Nunca devem estar em staging ou produção.
| Variável |
Descrição |
Obrigatória |
Padrão |
E2E_ENABLED |
Habilita endpoints de auth e2e |
Não |
false |
E2E_SECRET |
Segredo atual para auth e2e |
Não |
null |
E2E_SECRET_PREVIOUS |
Segredo anterior (rotação) |
Não |
null |
Backoffice API (spryx-backoffice-api)
Banco de dados
| Variável |
Descrição |
Obrigatória |
Padrão |
DATABASE__URL |
URL de conexão PostgreSQL |
Sim |
— |
DATABASE__POOL_SIZE |
Tamanho do pool de conexões |
Não |
20 |
DATABASE__MAX_OVERFLOW |
Conexões extras além do pool |
Não |
10 |
Redis
| Variável |
Descrição |
Obrigatória |
Padrão |
REDIS__URL |
URL de conexão Redis |
Sim |
— |
Autenticação JWT
| Variável |
Descrição |
Obrigatória |
Padrão |
AUTHENTICATION__ALGORITHM |
Algoritmo JWT (ex: RS256) |
Sim |
— |
AUTHENTICATION__ISSUER |
Issuer do token |
Sim |
— |
AUTHENTICATION__AUDIENCE |
Audience do token |
Sim |
— |
AUTHENTICATION__PRIVATE_KEY |
Chave RSA privada (PEM) |
Sim |
— |
AUTHENTICATION__PUBLIC_KEY |
Chave RSA pública (PEM) |
Sim |
— |
AUTHENTICATION__LEEWAY |
Tolerância de clock em segundos |
Não |
0 |
AUTHENTICATION__ACCESS_TOKEN_EXPIRE_MINUTES |
TTL do access token |
Não |
15 |
AUTHENTICATION__REFRESH_TOKEN_EXPIRE_DAYS |
TTL do refresh token |
Não |
30 |
Google OAuth
| Variável |
Descrição |
Obrigatória |
Padrão |
IDENTITY_OAUTH__CLIENT_ID |
Google OAuth client ID |
Sim |
— |
IDENTITY_OAUTH__CLIENT_SECRET |
Google OAuth client secret |
Sim |
— |
CORS
| Variável |
Descrição |
Obrigatória |
Padrão |
CORS__ALLOW_ORIGINS |
Lista de origens permitidas |
Sim |
— |
CORS__ALLOW_CREDENTIALS |
Permite credenciais |
Não |
true |
CORS__ALLOW_METHODS |
Métodos HTTP permitidos |
Não |
["*"] |
CORS__ALLOW_HEADERS |
Headers permitidos |
Não |
["*"] |
Rate Limit
| Variável |
Descrição |
Obrigatória |
Padrão |
RATE_LIMIT_IP__MAX_REQUESTS |
Máx. requisições por IP por janela. 0 = desabilitado |
Sim |
— |
RATE_LIMIT_IP__WINDOW_SECONDS |
Duração da janela (segundos) |
Não |
60 |
Surface
| Variável |
Descrição |
Obrigatória |
Padrão |
BACKOFFICE_FRONTEND_URL |
URL do frontend backoffice |
Sim |
— |
BACKOFFICE_API_BASE_URL |
URL base desta API |
Não |
http://localhost:8001 |
BACKOFFICE_ALLOWED_EMAIL_DOMAIN |
Domínio de email permitido para login de staff |
Não |
spryx.ai |
Asset (S3)
| Variável |
Descrição |
Obrigatória |
Padrão |
ASSET__BUCKET_ACCESS_KEY_ID |
S3 access key ID |
Sim |
— |
ASSET__BUCKET_SECRET_ACCESS_KEY |
S3 secret access key |
Sim |
— |
ASSET__BUCKET_NAME |
Nome do bucket |
Sim |
— |
ASSET__BUCKET_REGION |
Região do bucket |
Sim |
— |
ASSET__BUCKET_ENDPOINT_URL |
Endpoint URL (S3 ou compatível) |
Sim |
— |
ASSET__BUCKET_UPLOAD_URL_EXPIRES_IN |
Expiração de URLs de upload (segundos) |
Não |
7200 |
ASSET__BUCKET_DOWNLOAD_URL_EXPIRES_IN |
Expiração de URLs de download (segundos) |
Não |
3600 |
Billing (Stripe)
| Variável |
Descrição |
Obrigatória |
Padrão |
BILLING__STRIPE_SECRET_KEY |
Chave secreta do Stripe |
Sim |
— |
BILLING__STRIPE_WEBHOOK_SECRET |
Segredo de assinatura de webhooks |
Sim |
— |
Notification (Resend)
| Variável |
Descrição |
Obrigatória |
Padrão |
NOTIFICATION__RESEND_API_KEY |
Chave de API do Resend |
Sim |
— |
NOTIFICATION__RESEND_FROM_EMAIL |
Endereço de envio (noreply@...) |
Sim |
— |
Observabilidade
| Variável |
Descrição |
Obrigatória |
Padrão |
LOGFIRE__TOKEN |
Token de acesso ao Logfire |
Não |
null (desabilitado) |
Worker (spryx-worker)
Banco de dados
| Variável |
Descrição |
Obrigatória |
Padrão |
DATABASE__URL |
URL de conexão PostgreSQL |
Sim |
— |
DATABASE__POOL_SIZE |
Tamanho do pool de conexões |
Não |
20 |
DATABASE__MAX_OVERFLOW |
Conexões extras além do pool |
Não |
10 |
Redis
| Variável |
Descrição |
Obrigatória |
Padrão |
REDIS__URL |
URL de conexão Redis |
Sim |
— |
Autenticação JWT
| Variável |
Descrição |
Obrigatória |
Padrão |
AUTHENTICATION__ALGORITHM |
Algoritmo JWT (ex: RS256) |
Sim |
— |
AUTHENTICATION__ISSUER |
Issuer do token |
Sim |
— |
AUTHENTICATION__AUDIENCE |
Audience do token |
Sim |
— |
AUTHENTICATION__PRIVATE_KEY |
Chave RSA privada (PEM) |
Sim |
— |
AUTHENTICATION__PUBLIC_KEY |
Chave RSA pública (PEM) |
Sim |
— |
AUTHENTICATION__LEEWAY |
Tolerância de clock em segundos |
Não |
0 |
AUTHENTICATION__ACCESS_TOKEN_EXPIRE_MINUTES |
TTL do access token |
Não |
15 |
AUTHENTICATION__REFRESH_TOKEN_EXPIRE_DAYS |
TTL do refresh token |
Não |
30 |
Google OAuth
| Variável |
Descrição |
Obrigatória |
Padrão |
IDENTITY_OAUTH__CLIENT_ID |
Google OAuth client ID |
Sim |
— |
IDENTITY_OAUTH__CLIENT_SECRET |
Google OAuth client secret |
Sim |
— |
Surface
| Variável |
Descrição |
Obrigatória |
Padrão |
APP_API_BASE_URL |
URL da App API (para callbacks internos) |
Não |
http://localhost:8000 |
WORKER_TASK_SOFT_TIME_LIMIT |
Soft time limit de tasks Celery (segundos) |
Não |
3300 |
WORKER_TASK_TIME_LIMIT |
Hard time limit de tasks Celery (segundos) |
Não |
3600 |
WORKER_WORKERS |
Número de processos worker |
Não |
2 |
Agent / RAG
| Variável |
Descrição |
Obrigatória |
Padrão |
AGENT__OPENAI_API_KEY |
Chave de API do OpenAI |
Sim |
— |
AGENT__RAG_UNSTRUCTURED_API_KEY |
Chave da API Unstructured (parsing de documentos) |
Sim |
— |
AGENT__RAG_UNSTRUCTURED_API_URL |
URL da API Unstructured |
Sim |
— |
AGENT__RAG_EMBEDDING_MODEL |
Modelo de embedding |
Não |
text-embedding-3-large |
AGENT__RAG_EMBEDDING_DIMS |
Dimensões do embedding |
Não |
3072 |
AGENT__RAG_OPENAI_API_KEY_OVERRIDE |
Chave OpenAI alternativa para RAG |
Não |
null |
Asset (S3)
| Variável |
Descrição |
Obrigatória |
Padrão |
ASSET__BUCKET_ACCESS_KEY_ID |
S3 access key ID |
Sim |
— |
ASSET__BUCKET_SECRET_ACCESS_KEY |
S3 secret access key |
Sim |
— |
ASSET__BUCKET_NAME |
Nome do bucket |
Sim |
— |
ASSET__BUCKET_REGION |
Região do bucket |
Sim |
— |
ASSET__BUCKET_ENDPOINT_URL |
Endpoint URL (S3 ou compatível) |
Sim |
— |
ASSET__BUCKET_UPLOAD_URL_EXPIRES_IN |
Expiração de URLs de upload (segundos) |
Não |
7200 |
ASSET__BUCKET_DOWNLOAD_URL_EXPIRES_IN |
Expiração de URLs de download (segundos) |
Não |
3600 |
| Variável |
Descrição |
Obrigatória |
Padrão |
CONNECTIONS__META_CLIENT_ID |
Meta OAuth client ID |
Sim |
— |
CONNECTIONS__META_CLIENT_SECRET |
Meta OAuth client secret |
Sim |
— |
Observabilidade
| Variável |
Descrição |
Obrigatória |
Padrão |
LOGFIRE__TOKEN |
Token de acesso ao Logfire |
Não |
null (desabilitado) |