Deploy WAHA | WhatsApp HTTP API (GOWS Engine) for n8n, Chatwoot and Bots
WhatsApp HTTP API: GOWS engine, sessions survive redeploys, locked down
Just deployed
Deploy and Host WAHA on Railway
WAHA (WhatsApp HTTP API) connects a WhatsApp number to a REST API. Scan a QR code once, then send and receive messages, media, reactions and group events from n8n, Chatwoot, Make, or your own code through HTTP calls and webhooks. This template runs the official WAHA Core image on the GOWS engine.
About Hosting WAHA
It's one service and a Railway volume.
- GOWS engine, no browser. WAHA's default engine (WEBJS) drives a headless Chrome. This template uses GOWS, WAHA's Go engine that speaks the WhatsApp protocol directly: a smaller image (770 MB instead of 1.1 GB), no Chromium processes, and about 250 MB of RAM in our tests.
- Sessions survive redeploys. The linked-device session and downloaded media are stored on the volume, so redeploys and image updates don't log your number out.
- Locked from the first boot. The API needs the generated
WAHA_API_KEY, and the dashboard and Swagger docs need a generated password. Nothing is open by default. - Pinned version. The template uses a specific WAHA release, not
latest, so a redeploy never upgrades you by surprise.
Common Use Cases
- WhatsApp triggers and replies in n8n workflows
- A WhatsApp inbox in Chatwoot for support teams
- Notifications, reminders and AI chatbots on WhatsApp from your own backend
Dependencies for WAHA Hosting
- A phone with WhatsApp to link as a device (like WhatsApp Web)
Deployment Dependencies
Implementation Details
Link your number. Open https://.up.railway.app/dashboard, sign in with WAHA_DASHBOARD_USERNAME and WAHA_DASHBOARD_PASSWORD from the Variables tab, and enter the server URL and WAHA_API_KEY when the dashboard asks for them. Start the default session and scan the QR code from WhatsApp > Linked devices on your phone.
Use the API. Send the key in the X-Api-Key header:
curl https://.up.railway.app/api/sendText \
-H "X-Api-Key: " \
-H "Content-Type: application/json" \
-d '{"session": "default", "chatId": "12025550123@c.us", "text": "Hello from Railway"}'
The full API is documented at https://.up.railway.app/ (Swagger, same login as the dashboard).
Receive messages. Set a webhook URL on the session (in the dashboard or with WHATSAPP_HOOK_URL and WHATSAPP_HOOK_EVENTS=message). For n8n, install the @devlikeapro/n8n-nodes-waha community node. Apps in the same Railway project can call http://${{WAHA.RAILWAY_PRIVATE_DOMAIN}}:3000 with the same key; that traffic isn't billed as egress.
WAHA Core vs Plus. This is the free Core edition, which runs one WhatsApp session (default). Multiple numbers on one server and some extras need WAHA Plus, a paid image from the WAHA project.
Switching engines. Some features land in WEBJS first. To switch, change the image tag to devlikeapro/waha:latest- and WHATSAPP_DEFAULT_ENGINE to WEBJS, then relink your number (sessions aren't portable between engines). Expect several times the RAM.
Resources and cost. WAHA idles at about 250 MB of RAM on Railway, so it fits the Hobby plan easily.
Updates. Change the image tag to a newer devlikeapro/waha:gows- and redeploy; the session on the volume is kept.
Use it responsibly. WAHA is an unofficial client, not the WhatsApp Business API. Bulk or unsolicited messages get numbers banned, so message only people who expect it.
Why Deploy WAHA 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 WAHA 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.
Template Content