{
  "manifest_version": "1.0.0",
  "template": {
    "id": "0be89b55-a59f-40e1-a23b-0be8082c0cd9",
    "slug": "evolution-api-23-chatwoot-419",
    "name": "Evolution API 2.3 + Chatwoot 4.19",
    "description": "Shared WhatsApp team inbox: Evolution API + Chatwoot, no Meta approval",
    "url": "https://railway.com/deploy/evolution-api-23-chatwoot-419",
    "upstream": {
      "image": "chatwoot/chatwoot:v4.19.1-ce"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "Evolution Redis",
      "source": {
        "image": "redis:8.10"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "Evolution Postgres",
      "source": {
        "image": "ghcr.io/railwayapp-templates/postgres-ssl:18"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "Chatwoot Redis",
      "source": {
        "image": "redis:8.2.11-alpine"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "Chatwoot Postgres",
      "source": {
        "image": "pgvector/pgvector:0.8.7-pg16"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "Chatwoot",
      "source": {
        "image": "chatwoot/chatwoot:v4.19.1-ce"
      },
      "needs_volume": true,
      "volume_mount_path": "/app/storage",
      "http": true
    },
    {
      "name": "Evolution API",
      "source": {
        "image": "evoapicloud/evolution-api:v2.3.7"
      },
      "needs_volume": true,
      "volume_mount_path": "/evolution/instances",
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "REDISHOST",
      "service": "Evolution Redis",
      "description": "Private host name (auto-configured)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDISPORT",
      "service": "Evolution Redis",
      "description": "Redis port",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "REDISUSER",
      "service": "Evolution Redis",
      "description": "Redis user",
      "secret": false,
      "strategy": "default",
      "default": "default"
    },
    {
      "key": "REDIS_URL",
      "service": "Evolution Redis",
      "description": "Private connection URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDISPASSWORD",
      "service": "Evolution Redis",
      "description": "Same as REDIS_PASSWORD",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "Evolution Redis",
      "description": "Redis password (generated)",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PGDATA",
      "service": "Evolution Postgres",
      "description": "Data directory on the volume",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGHOST",
      "service": "Evolution Postgres",
      "description": "Private host name (auto-configured)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGPORT",
      "service": "Evolution Postgres",
      "description": "Postgres port",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "PGUSER",
      "service": "Evolution Postgres",
      "description": "Same as POSTGRES_USER",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATABASE",
      "service": "Evolution Postgres",
      "description": "Same as POSTGRES_DB",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPASSWORD",
      "service": "Evolution Postgres",
      "description": "Same as POSTGRES_PASSWORD",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "Evolution Postgres",
      "description": "Database name",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "DATABASE_URL",
      "service": "Evolution Postgres",
      "description": "Private connection URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_USER",
      "service": "Evolution Postgres",
      "description": "Database user",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "SSL_CERT_DAYS",
      "service": "Evolution Postgres",
      "description": "Validity of the generated SSL certificate, in days",
      "secret": false,
      "strategy": "default",
      "default": "820"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "Evolution Postgres",
      "description": "Postgres password (generated)",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "Evolution Postgres",
      "description": "Seconds to let Postgres shut down cleanly on redeploy",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "REDISHOST",
      "service": "Chatwoot Redis",
      "description": "Private host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDISPORT",
      "service": "Chatwoot Redis",
      "description": "Port",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "REDISUSER",
      "service": "Chatwoot Redis",
      "description": "User",
      "secret": false,
      "strategy": "default",
      "default": "default"
    },
    {
      "key": "REDIS_URL",
      "service": "Chatwoot Redis",
      "description": "Private connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "Chatwoot Redis",
      "description": "Redis password (generated)",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PGDATA",
      "service": "Chatwoot Postgres",
      "description": "Data directory inside the volume",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGHOST",
      "service": "Chatwoot Postgres",
      "description": "Private host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGPORT",
      "service": "Chatwoot Postgres",
      "description": "Port",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "PGUSER",
      "service": "Chatwoot Postgres",
      "description": "User",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATABASE",
      "service": "Chatwoot Postgres",
      "description": "Database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPASSWORD",
      "service": "Chatwoot Postgres",
      "description": "Password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "Chatwoot Postgres",
      "description": "Database name",
      "secret": false,
      "strategy": "default",
      "default": "chatwoot"
    },
    {
      "key": "DATABASE_URL",
      "service": "Chatwoot Postgres",
      "description": "Private connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_USER",
      "service": "Chatwoot Postgres",
      "description": "Database user",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "Chatwoot Postgres",
      "description": "Database password (generated)",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "Chatwoot Postgres",
      "description": "Shutdown grace period",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "PORT",
      "service": "Chatwoot",
      "description": "Port the Rails server listens on",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "NODE_ENV",
      "service": "Chatwoot",
      "description": "Node environment",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "LOG_LEVEL",
      "service": "Chatwoot",
      "description": "Log level",
      "secret": false,
      "strategy": "default",
      "default": "info"
    },
    {
      "key": "RAILS_ENV",
      "service": "Chatwoot",
      "description": "Rails environment",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "REDIS_URL",
      "service": "Chatwoot",
      "description": "Redis URL for Sidekiq, Action Cable and cache (auto-configured)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ADMIN_NAME",
      "service": "Chatwoot",
      "description": "Display name of the admin account",
      "secret": false,
      "strategy": "default",
      "default": "Admin"
    },
    {
      "key": "ADMIN_EMAIL",
      "service": "Chatwoot",
      "description": "Email of the admin account created on the first start. You sign in with it; change it to your own before deploying",
      "secret": false,
      "strategy": "default",
      "default": "admin@example.com"
    },
    {
      "key": "ACCOUNT_NAME",
      "service": "Chatwoot",
      "description": "Name of the first Chatwoot account (your company or team)",
      "secret": false,
      "strategy": "default",
      "default": "My Company"
    },
    {
      "key": "FRONTEND_URL",
      "service": "Chatwoot",
      "description": "Public URL used in links, emails and the website widget. Change it when you add a custom domain",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "POSTGRES_HOST",
      "service": "Chatwoot",
      "description": "Postgres private host (auto-configured)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_PORT",
      "service": "Chatwoot",
      "description": "Postgres port",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "ADMIN_PASSWORD",
      "service": "Chatwoot",
      "description": "Password of the admin account (generated; read it here after deploy). Used only on the first start; change it later in Chatwoot",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DEFAULT_LOCALE",
      "service": "Chatwoot",
      "description": "Default language of the dashboard and widget",
      "secret": false,
      "strategy": "default",
      "default": "en"
    },
    {
      "key": "CHATWOOT_RUN_SH",
      "service": "Chatwoot",
      "description": "Start script: prepares the database, creates the admin account on the first start, sets the admin API token from ADMIN_ACCESS_TOKEN, closes the public onboarding page, then runs Sidekiq and Rails",
      "secret": false,
      "strategy": "default",
      "default": "# Chatwoot on Railway. Prepares the database (schema on first start, migrations\n# after an image upgrade), creates the admin account from ADMIN_EMAIL and\n# ADMIN_PASSWORD, keeps the public first-run signup page closed, then runs\n# Sidekiq and the Rails server side by side so they share the storage volume.\nset -eu\ncd /app\nlog() { echo \"chatwoot-setup: $*\"; }\nrm -f tmp/pids/server.pid\n\nlog \"waiting for Postgres at $POSTGRES_HOST:$POSTGRES_PORT\"\ni=0\nuntil pg_isready -q -h \"$POSTGRES_HOST\" -p \"$POSTGRES_PORT\" -U \"$POSTGRES_USERNAME\"; do\n  i=$((i + 1))\n  if [ \"$i\" -gt 150 ]; then log \"Postgres is not reachable after 5 minutes\"; exit 1; fi\n  sleep 2\ndone\n\nlog \"preparing the database\"\nbundle exec rails db:chatwoot_prepare\n\ncat > /tmp/chatwoot-admin.rb <<'RUBY'\nemail = ENV['ADMIN_EMAIL'].to_s.strip.downcase\npassword = ENV['ADMIN_PASSWORD'].to_s\nif SuperAdmin.exists?\n  puts 'chatwoot-setup: admin account exists, leaving it unchanged'\nelsif email.empty? || password.empty?\n  abort 'chatwoot-setup: ADMIN_EMAIL and ADMIN_PASSWORD must be set to create the admin account'\nelse\n  AccountBuilder.new(\n    account_name: ENV.fetch('ACCOUNT_NAME', 'My Company'),\n    user_full_name: ENV.fetch('ADMIN_NAME', 'Admin'),\n    email: email,\n    user_password: password,\n    super_admin: true,\n    confirmed: true\n  ).perform\n  puts \"chatwoot-setup: created admin account #{email}\"\nend\ntoken = ENV['ADMIN_ACCESS_TOKEN'].to_s.strip\nif token.empty?\n  puts 'chatwoot-setup: ADMIN_ACCESS_TOKEN not set, leaving the API access token unchanged'\nelse\n  user = User.find_by(email: email) || SuperAdmin.order(:id).first\n  if user.nil?\n    puts 'chatwoot-setup: no admin user found, API access token not set'\n  elsif user.access_token&.token == token\n    puts \"chatwoot-setup: API access token of #{user.email} matches ADMIN_ACCESS_TOKEN\"\n  else\n    (user.access_token || AccessToken.create!(owner: user)).update!(token: token)\n    puts \"chatwoot-setup: set API access token of #{user.email} from ADMIN_ACCESS_TOKEN\"\n  end\nend\n# Without this the first visitor could create a second super admin on /installation/onboarding.\nRedis::Alfred.delete(Redis::Alfred::CHATWOOT_INSTALLATION_ONBOARDING)\nRUBY\nbundle exec rails runner /tmp/chatwoot-admin.rb\n\nlog \"starting Sidekiq and Rails\"\nbundle exec sidekiq -C config/sidekiq.yml &\nSK=$!\nbundle exec rails s -p \"${PORT:-3000}\" -b 0.0.0.0 &\nRS=$!\ntrap 'kill -TERM \"$SK\" \"$RS\" 2>/dev/null' TERM INT\nwhile kill -0 \"$SK\" 2>/dev/null && kill -0 \"$RS\" 2>/dev/null; do sleep 5; done\nlog \"Sidekiq or Rails stopped; stopping the container so Railway restarts it\"\nkill -TERM \"$SK\" \"$RS\" 2>/dev/null || true\nwait || true\nexit 1\n"
    },
    {
      "key": "SECRET_KEY_BASE",
      "service": "Chatwoot",
      "description": "Rails secret for sessions and signed cookies (generated). Don't change it after the first deploy",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "INSTALLATION_ENV",
      "service": "Chatwoot",
      "description": "Tells Chatwoot it runs from the Docker image",
      "secret": false,
      "strategy": "default",
      "default": "docker"
    },
    {
      "key": "POSTGRES_DATABASE",
      "service": "Chatwoot",
      "description": "Postgres database (from the Postgres service)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "Chatwoot",
      "description": "Postgres password (from the Postgres service)",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_USERNAME",
      "service": "Chatwoot",
      "description": "Postgres user (from the Postgres service)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILS_MAX_THREADS",
      "service": "Chatwoot",
      "description": "Puma threads (and web DB pool size)",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "ADMIN_ACCESS_TOKEN",
      "service": "Chatwoot",
      "description": "API access token of the admin user (generated). Set on every start, so Evolution API can be linked with it right after deploy. Change it here, not in the Chatwoot profile page",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "RAILS_LOG_TO_STDOUT",
      "service": "Chatwoot",
      "description": "Send logs to Railway's log viewer",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SIDEKIQ_CONCURRENCY",
      "service": "Chatwoot",
      "description": "Sidekiq worker threads (and worker DB pool size)",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "ACTIVE_STORAGE_SERVICE",
      "service": "Chatwoot",
      "description": "Where attachments are stored. local = the volume on this service. To use S3 instead, see Chatwoot's storage docs",
      "secret": false,
      "strategy": "default",
      "default": "local"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "Chatwoot",
      "description": "Time Sidekiq gets to finish running jobs on redeploy",
      "secret": false,
      "strategy": "default",
      "default": "30"
    },
    {
      "key": "ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY",
      "service": "Chatwoot",
      "description": "Encrypts sensitive columns such as 2FA secrets (generated). Don't change it after the first deploy",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY",
      "service": "Chatwoot",
      "description": "Deterministic encryption key (generated). Don't change it after the first deploy",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT",
      "service": "Chatwoot",
      "description": "Encryption key derivation salt (generated). Don't change it after the first deploy",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "TZ",
      "service": "Evolution API",
      "description": "Time zone (the image defaults to America/Sao_Paulo)",
      "secret": false,
      "strategy": "default",
      "default": "UTC"
    },
    {
      "key": "PORT",
      "service": "Evolution API",
      "description": "Port Evolution API listens on",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "LANGUAGE",
      "service": "Evolution API",
      "description": "Manager and message language",
      "secret": false,
      "strategy": "default",
      "default": "en"
    },
    {
      "key": "LOG_LEVEL",
      "service": "Evolution API",
      "description": "Log levels to print",
      "secret": false,
      "strategy": "default",
      "default": "ERROR,WARN,INFO,LOG,WEBHOOKS"
    },
    {
      "key": "SERVER_URL",
      "service": "Evolution API",
      "description": "Public URL of this service, used in webhooks and media links",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CORS_ORIGIN",
      "service": "Evolution API",
      "description": "Allowed browser origins",
      "secret": false,
      "strategy": "default",
      "default": "*"
    },
    {
      "key": "LOG_BAILEYS",
      "service": "Evolution API",
      "description": "WhatsApp library log level",
      "secret": false,
      "strategy": "default",
      "default": "error"
    },
    {
      "key": "SERVER_PORT",
      "service": "Evolution API",
      "description": "Same as PORT",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_TYPE",
      "service": "Evolution API",
      "description": "Plain HTTP inside Railway; Railway terminates TLS",
      "secret": false,
      "strategy": "default",
      "default": "http"
    },
    {
      "key": "CHATWOOT_URL",
      "service": "Evolution API",
      "description": "Private Chatwoot URL to paste as the Chatwoot URL of an instance. Evolution API itself does not read it (auto-configured)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DEL_INSTANCE",
      "service": "Evolution API",
      "description": "Minutes before a disconnected instance is deleted; false keeps it",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CHATWOOT_TOKEN",
      "service": "Evolution API",
      "description": "Chatwoot admin API token to paste into an instance. Evolution API itself does not read it (auto-configured)",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CACHE_REDIS_URI",
      "service": "Evolution API",
      "description": "Redis connection URL (private network)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CHATWOOT_ENABLED",
      "service": "Evolution API",
      "description": "Turn on the Chatwoot integration (Integrations > Chatwoot in the manager, /chatwoot/* in the API)",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATABASE_PROVIDER",
      "service": "Evolution API",
      "description": "Database type",
      "secret": false,
      "strategy": "default",
      "default": "postgresql"
    },
    {
      "key": "TELEMETRY_ENABLED",
      "service": "Evolution API",
      "description": "Send usage telemetry to the Evolution API project",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CACHE_LOCAL_ENABLED",
      "service": "Evolution API",
      "description": "In-memory cache (off; Redis is used)",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CACHE_REDIS_ENABLED",
      "service": "Evolution API",
      "description": "Use Redis for cache",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CHATWOOT_ACCOUNT_ID",
      "service": "Evolution API",
      "description": "Chatwoot account id to paste into an instance (the account created at deploy time is 1). Evolution API itself does not read it",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "AUTHENTICATION_API_KEY",
      "service": "Evolution API",
      "description": "Global API key (generated). Send it as the apikey header and use it to log in to the manager at /manager",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CACHE_REDIS_PREFIX_KEY",
      "service": "Evolution API",
      "description": "Prefix for Redis keys",
      "secret": true,
      "strategy": "default",
      "default": "evolution"
    },
    {
      "key": "DATABASE_CONNECTION_URI",
      "service": "Evolution API",
      "description": "Postgres connection URL (private network)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_SAVE_DATA_CHATS",
      "service": "Evolution API",
      "description": "Store chats",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATABASE_SAVE_DATA_LABELS",
      "service": "Evolution API",
      "description": "Store labels",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CACHE_REDIS_SAVE_INSTANCES",
      "service": "Evolution API",
      "description": "Keep WhatsApp sessions in Postgres, not Redis",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "DATABASE_SAVE_DATA_CONTACTS",
      "service": "Evolution API",
      "description": "Store contacts",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATABASE_SAVE_DATA_HISTORIC",
      "service": "Evolution API",
      "description": "Store history synced from the phone",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATABASE_SAVE_DATA_INSTANCE",
      "service": "Evolution API",
      "description": "Store instances in Postgres",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATABASE_SAVE_MESSAGE_UPDATE",
      "service": "Evolution API",
      "description": "Store message status updates",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATABASE_SAVE_DATA_NEW_MESSAGE",
      "service": "Evolution API",
      "description": "Store new messages",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATABASE_CONNECTION_CLIENT_NAME",
      "service": "Evolution API",
      "description": "Name of this installation in the database",
      "secret": false,
      "strategy": "default",
      "default": "evolution"
    },
    {
      "key": "CHATWOOT_IMPORT_DATABASE_CONNECTION_URI",
      "service": "Evolution API",
      "description": "Chatwoot's Postgres, for importing WhatsApp contacts and history into Chatwoot and de-duplicating messages (auto-configured)",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES",
      "service": "Evolution API",
      "description": "Show instances in fetchInstances",
      "secret": false,
      "strategy": "default",
      "default": "true"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "evolution-api-23-chatwoot-419"
      }
    },
    "cli": "railway deploy --template evolution-api-23-chatwoot-419",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "0be89b55-a59f-40e1-a23b-0be8082c0cd9",
            "serializedConfig": {
              "services": {
                "0d557adb-e58a-47ba-ad97-0dd856a0aa8a": {
                  "icon": "https://devicons.railway.app/i/redis.svg",
                  "name": "Evolution Redis",
                  "deploy": {
                    "startCommand": "/bin/sh -c \"rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --appendonly yes --maxmemory-policy noeviction --dir $RAILWAY_VOLUME_MOUNT_PATH\"",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "redis:8.10"
                  },
                  "variables": {
                    "REDISHOST": {
                      "description": "Private host name (auto-configured)",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDISPORT": {
                      "description": "Redis port",
                      "defaultValue": "6379"
                    },
                    "REDISUSER": {
                      "description": "Redis user",
                      "defaultValue": "default"
                    },
                    "REDIS_URL": {
                      "description": "Private connection URL",
                      "defaultValue": "redis://${{REDISUSER}}:${{REDIS_PASSWORD}}@${{REDISHOST}}:${{REDISPORT}}"
                    },
                    "REDISPASSWORD": {
                      "description": "Same as REDIS_PASSWORD",
                      "defaultValue": "${{REDIS_PASSWORD}}"
                    },
                    "REDIS_PASSWORD": {
                      "description": "Redis password (generated)",
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "4251a6b7-df9f-4e34-97fd-54cf5056962d": {
                      "mountPath": "/data"
                    }
                  }
                },
                "1c5ca268-9740-4ff2-a5d0-40b4b71d48ed": {
                  "icon": "https://devicons.railway.app/i/postgresql.svg",
                  "name": "Evolution Postgres",
                  "source": {
                    "image": "ghcr.io/railwayapp-templates/postgres-ssl:18"
                  },
                  "variables": {
                    "PGDATA": {
                      "description": "Data directory on the volume",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGHOST": {
                      "description": "Private host name (auto-configured)",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PGPORT": {
                      "description": "Postgres port",
                      "defaultValue": "5432"
                    },
                    "PGUSER": {
                      "description": "Same as POSTGRES_USER",
                      "defaultValue": "${{POSTGRES_USER}}"
                    },
                    "PGDATABASE": {
                      "description": "Same as POSTGRES_DB",
                      "defaultValue": "${{POSTGRES_DB}}"
                    },
                    "PGPASSWORD": {
                      "description": "Same as POSTGRES_PASSWORD",
                      "defaultValue": "${{POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_DB": {
                      "description": "Database name",
                      "defaultValue": "railway"
                    },
                    "DATABASE_URL": {
                      "description": "Private connection URL",
                      "defaultValue": "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:5432/${{PGDATABASE}}"
                    },
                    "POSTGRES_USER": {
                      "description": "Database user",
                      "defaultValue": "postgres"
                    },
                    "SSL_CERT_DAYS": {
                      "description": "Validity of the generated SSL certificate, in days",
                      "defaultValue": "820"
                    },
                    "POSTGRES_PASSWORD": {
                      "description": "Postgres password (generated)",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "description": "Seconds to let Postgres shut down cleanly on redeploy",
                      "defaultValue": "60"
                    }
                  },
                  "volumeMounts": {
                    "7a00fd65-69ba-4045-8dbc-f91b00a1fec3": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "3db3fbd5-2a88-41a5-a419-77e61f2546ba": {
                  "icon": "https://devicons.railway.app/i/redis.svg",
                  "name": "Chatwoot Redis",
                  "deploy": {
                    "startCommand": "/bin/sh -c \"exec redis-server --requirepass $REDIS_PASSWORD --appendonly yes --dir /data\"",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "redis:8.2.11-alpine"
                  },
                  "variables": {
                    "REDISHOST": {
                      "description": "Private host",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDISPORT": {
                      "description": "Port",
                      "defaultValue": "6379"
                    },
                    "REDISUSER": {
                      "description": "User",
                      "defaultValue": "default"
                    },
                    "REDIS_URL": {
                      "description": "Private connection string",
                      "defaultValue": "redis://default:${{REDIS_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:6379"
                    },
                    "REDIS_PASSWORD": {
                      "description": "Redis password (generated)",
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "3d145f52-ae2a-46df-9943-f0385ba096bf": {
                      "mountPath": "/data"
                    }
                  }
                },
                "8199e5d1-e7a5-452b-ade7-2ef2cbf158cf": {
                  "icon": "https://devicons.railway.app/i/postgresql.svg",
                  "name": "Chatwoot Postgres",
                  "deploy": {
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "pgvector/pgvector:0.8.7-pg16"
                  },
                  "variables": {
                    "PGDATA": {
                      "description": "Data directory inside the volume",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGHOST": {
                      "description": "Private host",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PGPORT": {
                      "description": "Port",
                      "defaultValue": "5432"
                    },
                    "PGUSER": {
                      "description": "User",
                      "defaultValue": "${{POSTGRES_USER}}"
                    },
                    "PGDATABASE": {
                      "description": "Database",
                      "defaultValue": "${{POSTGRES_DB}}"
                    },
                    "PGPASSWORD": {
                      "description": "Password",
                      "defaultValue": "${{POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_DB": {
                      "description": "Database name",
                      "defaultValue": "chatwoot"
                    },
                    "DATABASE_URL": {
                      "description": "Private connection string",
                      "defaultValue": "postgresql://${{POSTGRES_USER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:5432/${{POSTGRES_DB}}"
                    },
                    "POSTGRES_USER": {
                      "description": "Database user",
                      "defaultValue": "postgres"
                    },
                    "POSTGRES_PASSWORD": {
                      "description": "Database password (generated)",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "description": "Shutdown grace period",
                      "defaultValue": "60"
                    }
                  },
                  "volumeMounts": {
                    "5cf58ca6-f08d-41d5-8663-1b3c15e49c29": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "aa328b45-80d1-4a91-8f48-1c60e73ed53d": {
                  "icon": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/chatwoot.svg",
                  "name": "Chatwoot",
                  "deploy": {
                    "startCommand": "/bin/sh -c \"printenv CHATWOOT_RUN_SH > /tmp/run.sh && exec sh /tmp/run.sh\"",
                    "healthcheckPath": "/api",
                    "restartPolicyType": "ON_FAILURE",
                    "healthcheckTimeout": 600,
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "chatwoot/chatwoot:v4.19.1-ce"
                  },
                  "variables": {
                    "PORT": {
                      "description": "Port the Rails server listens on",
                      "defaultValue": "3000"
                    },
                    "NODE_ENV": {
                      "description": "Node environment",
                      "defaultValue": "production"
                    },
                    "LOG_LEVEL": {
                      "description": "Log level",
                      "defaultValue": "info"
                    },
                    "RAILS_ENV": {
                      "description": "Rails environment",
                      "defaultValue": "production"
                    },
                    "REDIS_URL": {
                      "description": "Redis URL for Sidekiq, Action Cable and cache (auto-configured)",
                      "defaultValue": "redis://default:${{Chatwoot Redis.REDIS_PASSWORD}}@${{Chatwoot Redis.RAILWAY_PRIVATE_DOMAIN}}:6379"
                    },
                    "ADMIN_NAME": {
                      "description": "Display name of the admin account",
                      "defaultValue": "Admin"
                    },
                    "ADMIN_EMAIL": {
                      "description": "Email of the admin account created on the first start. You sign in with it; change it to your own before deploying",
                      "defaultValue": "admin@example.com"
                    },
                    "ACCOUNT_NAME": {
                      "description": "Name of the first Chatwoot account (your company or team)",
                      "defaultValue": "My Company"
                    },
                    "FRONTEND_URL": {
                      "description": "Public URL used in links, emails and the website widget. Change it when you add a custom domain",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "POSTGRES_HOST": {
                      "description": "Postgres private host (auto-configured)",
                      "defaultValue": "${{Chatwoot Postgres.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "POSTGRES_PORT": {
                      "description": "Postgres port",
                      "defaultValue": "5432"
                    },
                    "ADMIN_PASSWORD": {
                      "description": "Password of the admin account (generated; read it here after deploy). Used only on the first start; change it later in Chatwoot",
                      "defaultValue": "{{ADMIN_PASSWORD}}"
                    },
                    "DEFAULT_LOCALE": {
                      "description": "Default language of the dashboard and widget",
                      "defaultValue": "en"
                    },
                    "CHATWOOT_RUN_SH": {
                      "description": "Start script: prepares the database, creates the admin account on the first start, sets the admin API token from ADMIN_ACCESS_TOKEN, closes the public onboarding page, then runs Sidekiq and Rails",
                      "defaultValue": "# Chatwoot on Railway. Prepares the database (schema on first start, migrations\n# after an image upgrade), creates the admin account from ADMIN_EMAIL and\n# ADMIN_PASSWORD, keeps the public first-run signup page closed, then runs\n# Sidekiq and the Rails server side by side so they share the storage volume.\nset -eu\ncd /app\nlog() { echo \"chatwoot-setup: $*\"; }\nrm -f tmp/pids/server.pid\n\nlog \"waiting for Postgres at $POSTGRES_HOST:$POSTGRES_PORT\"\ni=0\nuntil pg_isready -q -h \"$POSTGRES_HOST\" -p \"$POSTGRES_PORT\" -U \"$POSTGRES_USERNAME\"; do\n  i=$((i + 1))\n  if [ \"$i\" -gt 150 ]; then log \"Postgres is not reachable after 5 minutes\"; exit 1; fi\n  sleep 2\ndone\n\nlog \"preparing the database\"\nbundle exec rails db:chatwoot_prepare\n\ncat > /tmp/chatwoot-admin.rb <<'RUBY'\nemail = ENV['ADMIN_EMAIL'].to_s.strip.downcase\npassword = ENV['ADMIN_PASSWORD'].to_s\nif SuperAdmin.exists?\n  puts 'chatwoot-setup: admin account exists, leaving it unchanged'\nelsif email.empty? || password.empty?\n  abort 'chatwoot-setup: ADMIN_EMAIL and ADMIN_PASSWORD must be set to create the admin account'\nelse\n  AccountBuilder.new(\n    account_name: ENV.fetch('ACCOUNT_NAME', 'My Company'),\n    user_full_name: ENV.fetch('ADMIN_NAME', 'Admin'),\n    email: email,\n    user_password: password,\n    super_admin: true,\n    confirmed: true\n  ).perform\n  puts \"chatwoot-setup: created admin account #{email}\"\nend\ntoken = ENV['ADMIN_ACCESS_TOKEN'].to_s.strip\nif token.empty?\n  puts 'chatwoot-setup: ADMIN_ACCESS_TOKEN not set, leaving the API access token unchanged'\nelse\n  user = User.find_by(email: email) || SuperAdmin.order(:id).first\n  if user.nil?\n    puts 'chatwoot-setup: no admin user found, API access token not set'\n  elsif user.access_token&.token == token\n    puts \"chatwoot-setup: API access token of #{user.email} matches ADMIN_ACCESS_TOKEN\"\n  else\n    (user.access_token || AccessToken.create!(owner: user)).update!(token: token)\n    puts \"chatwoot-setup: set API access token of #{user.email} from ADMIN_ACCESS_TOKEN\"\n  end\nend\n# Without this the first visitor could create a second super admin on /installation/onboarding.\nRedis::Alfred.delete(Redis::Alfred::CHATWOOT_INSTALLATION_ONBOARDING)\nRUBY\nbundle exec rails runner /tmp/chatwoot-admin.rb\n\nlog \"starting Sidekiq and Rails\"\nbundle exec sidekiq -C config/sidekiq.yml &\nSK=$!\nbundle exec rails s -p \"${PORT:-3000}\" -b 0.0.0.0 &\nRS=$!\ntrap 'kill -TERM \"$SK\" \"$RS\" 2>/dev/null' TERM INT\nwhile kill -0 \"$SK\" 2>/dev/null && kill -0 \"$RS\" 2>/dev/null; do sleep 5; done\nlog \"Sidekiq or Rails stopped; stopping the container so Railway restarts it\"\nkill -TERM \"$SK\" \"$RS\" 2>/dev/null || true\nwait || true\nexit 1\n"
                    },
                    "SECRET_KEY_BASE": {
                      "description": "Rails secret for sessions and signed cookies (generated). Don't change it after the first deploy",
                      "defaultValue": "{{SECRET_KEY_BASE}}"
                    },
                    "INSTALLATION_ENV": {
                      "description": "Tells Chatwoot it runs from the Docker image",
                      "defaultValue": "docker"
                    },
                    "POSTGRES_DATABASE": {
                      "description": "Postgres database (from the Postgres service)",
                      "defaultValue": "${{Chatwoot Postgres.POSTGRES_DB}}"
                    },
                    "POSTGRES_PASSWORD": {
                      "description": "Postgres password (from the Postgres service)",
                      "defaultValue": "${{Chatwoot Postgres.POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_USERNAME": {
                      "description": "Postgres user (from the Postgres service)",
                      "defaultValue": "${{Chatwoot Postgres.POSTGRES_USER}}"
                    },
                    "RAILS_MAX_THREADS": {
                      "description": "Puma threads (and web DB pool size)",
                      "defaultValue": "5"
                    },
                    "ADMIN_ACCESS_TOKEN": {
                      "description": "API access token of the admin user (generated). Set on every start, so Evolution API can be linked with it right after deploy. Change it here, not in the Chatwoot profile page",
                      "defaultValue": "{{ADMIN_ACCESS_TOKEN}}"
                    },
                    "RAILS_LOG_TO_STDOUT": {
                      "description": "Send logs to Railway's log viewer",
                      "defaultValue": "true"
                    },
                    "SIDEKIQ_CONCURRENCY": {
                      "description": "Sidekiq worker threads (and worker DB pool size)",
                      "defaultValue": "10"
                    },
                    "ACTIVE_STORAGE_SERVICE": {
                      "description": "Where attachments are stored. local = the volume on this service. To use S3 instead, see Chatwoot's storage docs",
                      "defaultValue": "local"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "description": "Time Sidekiq gets to finish running jobs on redeploy",
                      "defaultValue": "30"
                    },
                    "ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY": {
                      "description": "Encrypts sensitive columns such as 2FA secrets (generated). Don't change it after the first deploy",
                      "defaultValue": "{{ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY}}"
                    },
                    "ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY": {
                      "description": "Deterministic encryption key (generated). Don't change it after the first deploy",
                      "defaultValue": "{{ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY}}"
                    },
                    "ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT": {
                      "description": "Encryption key derivation salt (generated). Don't change it after the first deploy",
                      "defaultValue": "{{ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  },
                  "volumeMounts": {
                    "4116f938-cb18-43b9-b03e-0cb6496f97a0": {
                      "mountPath": "/app/storage"
                    }
                  }
                },
                "b88c7aa0-d8d0-47f2-9486-fd566ed93dbb": {
                  "icon": "https://avatars.githubusercontent.com/u/136080052?v=4",
                  "name": "Evolution API",
                  "deploy": {
                    "healthcheckPath": "/",
                    "restartPolicyType": "ON_FAILURE",
                    "healthcheckTimeout": 300,
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "evoapicloud/evolution-api:v2.3.7"
                  },
                  "variables": {
                    "TZ": {
                      "description": "Time zone (the image defaults to America/Sao_Paulo)",
                      "defaultValue": "UTC"
                    },
                    "PORT": {
                      "description": "Port Evolution API listens on",
                      "defaultValue": "8080"
                    },
                    "LANGUAGE": {
                      "description": "Manager and message language",
                      "defaultValue": "en"
                    },
                    "LOG_LEVEL": {
                      "description": "Log levels to print",
                      "defaultValue": "ERROR,WARN,INFO,LOG,WEBHOOKS"
                    },
                    "SERVER_URL": {
                      "description": "Public URL of this service, used in webhooks and media links",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "CORS_ORIGIN": {
                      "description": "Allowed browser origins",
                      "defaultValue": "*"
                    },
                    "LOG_BAILEYS": {
                      "description": "WhatsApp library log level",
                      "defaultValue": "error"
                    },
                    "SERVER_PORT": {
                      "description": "Same as PORT",
                      "defaultValue": "${{PORT}}"
                    },
                    "SERVER_TYPE": {
                      "description": "Plain HTTP inside Railway; Railway terminates TLS",
                      "defaultValue": "http"
                    },
                    "CHATWOOT_URL": {
                      "description": "Private Chatwoot URL to paste as the Chatwoot URL of an instance. Evolution API itself does not read it (auto-configured)",
                      "defaultValue": "http://${{Chatwoot.RAILWAY_PRIVATE_DOMAIN}}:${{Chatwoot.PORT}}"
                    },
                    "DEL_INSTANCE": {
                      "description": "Minutes before a disconnected instance is deleted; false keeps it",
                      "defaultValue": "false"
                    },
                    "CHATWOOT_TOKEN": {
                      "description": "Chatwoot admin API token to paste into an instance. Evolution API itself does not read it (auto-configured)",
                      "defaultValue": "${{Chatwoot.ADMIN_ACCESS_TOKEN}}"
                    },
                    "CACHE_REDIS_URI": {
                      "description": "Redis connection URL (private network)",
                      "defaultValue": "${{Evolution Redis.REDIS_URL}}"
                    },
                    "CHATWOOT_ENABLED": {
                      "description": "Turn on the Chatwoot integration (Integrations > Chatwoot in the manager, /chatwoot/* in the API)",
                      "defaultValue": "true"
                    },
                    "DATABASE_PROVIDER": {
                      "description": "Database type",
                      "defaultValue": "postgresql"
                    },
                    "TELEMETRY_ENABLED": {
                      "description": "Send usage telemetry to the Evolution API project",
                      "defaultValue": "false"
                    },
                    "CACHE_LOCAL_ENABLED": {
                      "description": "In-memory cache (off; Redis is used)",
                      "defaultValue": "false"
                    },
                    "CACHE_REDIS_ENABLED": {
                      "description": "Use Redis for cache",
                      "defaultValue": "true"
                    },
                    "CHATWOOT_ACCOUNT_ID": {
                      "description": "Chatwoot account id to paste into an instance (the account created at deploy time is 1). Evolution API itself does not read it",
                      "defaultValue": "1"
                    },
                    "AUTHENTICATION_API_KEY": {
                      "description": "Global API key (generated). Send it as the apikey header and use it to log in to the manager at /manager",
                      "defaultValue": "{{AUTHENTICATION_API_KEY}}"
                    },
                    "CACHE_REDIS_PREFIX_KEY": {
                      "description": "Prefix for Redis keys",
                      "defaultValue": "evolution"
                    },
                    "DATABASE_CONNECTION_URI": {
                      "description": "Postgres connection URL (private network)",
                      "defaultValue": "${{Evolution Postgres.DATABASE_URL}}"
                    },
                    "DATABASE_SAVE_DATA_CHATS": {
                      "description": "Store chats",
                      "defaultValue": "true"
                    },
                    "DATABASE_SAVE_DATA_LABELS": {
                      "description": "Store labels",
                      "defaultValue": "true"
                    },
                    "CACHE_REDIS_SAVE_INSTANCES": {
                      "description": "Keep WhatsApp sessions in Postgres, not Redis",
                      "defaultValue": "false"
                    },
                    "DATABASE_SAVE_DATA_CONTACTS": {
                      "description": "Store contacts",
                      "defaultValue": "true"
                    },
                    "DATABASE_SAVE_DATA_HISTORIC": {
                      "description": "Store history synced from the phone",
                      "defaultValue": "true"
                    },
                    "DATABASE_SAVE_DATA_INSTANCE": {
                      "description": "Store instances in Postgres",
                      "defaultValue": "true"
                    },
                    "DATABASE_SAVE_MESSAGE_UPDATE": {
                      "description": "Store message status updates",
                      "defaultValue": "true"
                    },
                    "DATABASE_SAVE_DATA_NEW_MESSAGE": {
                      "description": "Store new messages",
                      "defaultValue": "true"
                    },
                    "DATABASE_CONNECTION_CLIENT_NAME": {
                      "description": "Name of this installation in the database",
                      "defaultValue": "evolution"
                    },
                    "CHATWOOT_IMPORT_DATABASE_CONNECTION_URI": {
                      "description": "Chatwoot's Postgres, for importing WhatsApp contacts and history into Chatwoot and de-duplicating messages (auto-configured)",
                      "defaultValue": "${{Chatwoot Postgres.DATABASE_URL}}?sslmode=disable"
                    },
                    "AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES": {
                      "description": "Show instances in fetchInstances",
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  },
                  "volumeMounts": {
                    "c25e0fb6-c565-4440-b15d-7747b6c21b54": {
                      "mountPath": "/evolution/instances"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "Chatwoot",
      "method": "GET",
      "path": "/api",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 6,
    "needs_volume": true
  },
  "generated_at": "2026-11-10T16:15:17.618Z",
  "generator_version": "0.1.0"
}
