---
title: "Deploy Evolution API 2.3 + Typebot 3.19"
description: "WhatsApp chatbots without code: Evolution API 2.3 + Typebot flow builder"
category: "Bots"
url: https://railway.com/deploy/evolution-api-23-typebot-319
---

# Deploy Evolution API 2.3 + Typebot 3.19

WhatsApp chatbots without code: Evolution API 2.3 + Typebot flow builder

**[Deploy Evolution API 2.3 + Typebot 3.19 on Railway](https://railway.com/template/evolution-api-23-typebot-319)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/evolution-api-23-typebot-319/manifest.json

- **Creator:** My Projects
- **Category:** Bots

## Template content

### typebot-builder https://cdn.jsdelivr.net/gh/selfhst/icons/svg/typebot.svg

- **Image:** baptistearno/typebot-builder:3.19
- **Start command:** `/bin/sh -c "export S3_ENDPOINT=${S3_ENDPOINT#https://} && exec ./builder-entrypoint.sh"`
- **Health check:** /signin
- **Public domain:** Yes

### Evolution Redis https://devicons.railway.app/i/redis.svg

- **Image:** redis:8.10
- **Start command:** `/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"`

### mailpit https://cdn.jsdelivr.net/gh/selfhst/icons/svg/mailpit.svg

- **Image:** axllent/mailpit:v1.33
- **Health check:** /livez
- **Public domain:** Yes

### files https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg

- **Image:** rclone/rclone:1.75.2
- **Start command:** `/bin/sh -c "echo ok | rclone rcat :s3:$BUCKET/public/healthz && exec rclone serve http :s3:$BUCKET/public --addr :$PORT --baseurl /public --read-only --disable-dir-list --disable-zip"`
- **Health check:** /public/healthz
- **Public domain:** Yes

### Evolution Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### Evolution API https://avatars.githubusercontent.com/u/136080052?v=4

- **Image:** evoapicloud/evolution-api:v2.3.7
- **Health check:** /
- **Public domain:** Yes

### Typebot Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### typebot-viewer https://cdn.jsdelivr.net/gh/selfhst/icons/svg/typebot.svg

- **Image:** baptistearno/typebot-viewer:3.19
- **Start command:** `/bin/sh -c "export S3_ENDPOINT=${S3_ENDPOINT#https://} && exec ./viewer-entrypoint.sh"`
- **Health check:** /api/healthz
- **Public domain:** Yes

### Typebot Redis https://devicons.railway.app/i/redis.svg

- **Image:** redis:8.10
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --appendonly yes --dir $RAILWAY_VOLUME_MOUNT_PATH"`

## Buckets

- **Bucket**

## Documentation

# Deploy and Host Evolution API + Typebot on Railway

Evolution API + Typebot gives you WhatsApp chatbots without writing code. Typebot is an open-source visual flow builder; Evolution API connects a WhatsApp number by scanning a QR code, like WhatsApp Web, with no Meta Business approval. Messages to your number start a Typebot flow, and its replies, buttons and media go back to the chat.

## About Hosting Evolution API + Typebot

Evolution API is a Node.js service that keeps WhatsApp sessions open and exposes them as a REST API with a web manager. For each chat it calls Typebot's viewer, which runs your published flows. Typebot also has a builder app for editing flows, and both apps need PostgreSQL and Redis. Typebot signs users in with an emailed code and stores images in S3-compatible storage.

This template deploys the whole stack on Railway's private network: Evolution API with its own PostgreSQL and Redis, the Typebot builder and viewer with their own PostgreSQL and Redis, a Railway Bucket for uploads, and Mailpit to catch the sign-in emails. The Typebot integration is already turned on in Evolution API and set to the API that Typebot 3 uses.

## Common Use Cases

- WhatsApp lead qualification and booking flows
- Customer support FAQ bots that hand over to a human when you reply from the phone
- Order status, reminders and surveys on WhatsApp
- AI answers on WhatsApp with Typebot's OpenAI and Anthropic blocks
- Running several WhatsApp numbers, each with its own flow

## Dependencies for Evolution API + Typebot Hosting

- PostgreSQL 18 (two: one for each app)
- Redis 8 (two: one for each app)
- Railway Bucket (S3-compatible storage)
- Mailpit (catches Typebot sign-in emails until you add SMTP)

### Deployment Dependencies

- Evolution API: https://github.com/evolution-foundation/evolution-api
- Evolution API docs: https://doc.evolution-api.com
- Typebot: https://github.com/baptisteArno/typebot.io
- Typebot docs: https://docs.typebot.io

### Implementation Details

**What you set:** only `ADMIN_EMAIL`, the email you sign in to Typebot with.

**After deploy:**

1. Open the `typebot-builder` URL, enter your `ADMIN_EMAIL`, and get the sign-in code from the `mailpit` URL (user `admin`, password `MAILPIT_PASSWORD`).
2. Build a flow in Typebot, click Publish, and copy its public ID from the Share tab.
3. Open `https:///manager`, log in with the `AUTHENTICATION_API_KEY` of the Evolution API service, create an instance and scan its QR code in WhatsApp (Settings → Linked devices).
4. In the instance's Typebot integration, add a bot: URL = the `TYPEBOT_URL` variable of Evolution API, Typebot = the public ID, trigger = all messages or a keyword.
5. Message your number from another phone.

**This template:**

- Pins Evolution API 2.3.7 (the image's `latest` tag is a release candidate), Typebot 3.19, PostgreSQL 18 and Redis 8.10
- Turns on the Typebot integration with `TYPEBOT_API_VERSION=latest`, Typebot's current chat API (Evolution API 2.3 otherwise defaults to the deprecated one)
- Puts the viewer URL in a `TYPEBOT_URL` variable, ready to paste
- Gives each app its own database, because both run Prisma migrations in the same schema name
- Protects every public service: generated Evolution API key, Typebot sign-up limited to `ADMIN_EMAIL` and invited people, Mailpit behind a generated password
- Stores WhatsApp sessions in PostgreSQL so restarts don't log your number out, and saves messages, contacts and chats
- Uses a Railway Bucket for uploads, with a read-only file server for the `public/` folder

**Notes:** Evolution API passes your contact's `remoteJid` and `pushName` to the flow, and also its global `apiKey`; only declare that variable in a flow that needs it. Don't change `ENCRYPTION_SECRET` after the first deploy. Upgrade Typebot by changing the builder and viewer to the same tag. WhatsApp may ban numbers that send bulk or unsolicited messages. Evolution API and Typebot are not affiliated with WhatsApp or Meta.

## Why Deploy Evolution API + Typebot on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Evolution API + Typebot on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [Telegram JavaScript Bot](https://railway.com/deploy/5lRkWa) — A template for Telegram bot in JavaScript using grammY
- [Cobalt Tools [Updated Oct ’26]](https://railway.com/deploy/cobalt) — Cobalt Tools [Oct ’26] (Media Downloader, Converter & Automation) Self Host
- [Telegram Gateway](https://railway.com/deploy/railway-telegram-gateway) — Multi-bot Telegram webhook gateway with WebSocket event streaming

Open this page in a browser: https://railway.com/deploy/evolution-api-23-typebot-319
