
Deploy WAHA — Self-Hosted WhatsApp REST API
WhatsApp HTTP API. No per-message fees. Replaces Twilio.
WAHA
Just deployed
/local
Deploy and Host WAHA on Railway
With 6,600+ GitHub stars and 1,500+ forks, WAHA (WhatsApp HTTP API) is the most-deployed open-source REST API for WhatsApp automation. Run it on Railway for under $5/month — compared to Twilio's $0.005 per message plus Meta template fees that scale to hundreds of dollars at volume.
> Important: WAHA runs on top of WhatsApp Web and is not affiliated with or endorsed by WhatsApp/Meta. WhatsApp does not permit unofficial clients. Use at your own risk; accounts can be restricted. For business-critical workloads, consider the official WhatsApp Business API.
What This Template Deploys
| Service | Image | Purpose |
|---|---|---|
| WAHA | devlikeapro/waha | WhatsApp HTTP REST API + Dashboard + Swagger UI |
About Hosting WAHA
Hosted WhatsApp API providers charge per message or per session. Twilio's WhatsApp integration starts at $0.005 per message (plus Meta's per-template fee of up to $0.0499 per message) — a single campaign to 10,000 contacts can cost $500+ in API fees alone. WAHA is free and open source with no message limits, no per-session fees, and no license expiration.
Railway runs WAHA as a persistent Docker container with automatic restarts, environment variable management, and a generated HTTPS domain — no VPS configuration, no Nginx setup required.
Estimated Railway cost: $2–$5/month on the Starter plan for a single WhatsApp session.
Deploy WAHA on Railway in Under 5 Minutes
- Click Deploy on Railway and create or log into your Railway account
- Set
WAHA_API_KEYto a strong random string (required — protects your API endpoints) - Set
WAHA_DASHBOARD_USERNAMEandWAHA_DASHBOARD_PASSWORDfor dashboard access - Railway generates a public HTTPS domain — set this as
WAHA_PUBLIC_URLin your env vars - Open
/dashboardon your Railway domain, connect with your API key, and scan the QR code with your WhatsApp app - Send your first message via
POST /api/sendTextusing the Swagger UI at/swagger
Common Use Cases
Users search for WAHA to solve problems like:
- "how to send WhatsApp messages via REST API"
- "self-hosted WhatsApp API free alternative to Twilio"
- "WhatsApp automation without WhatsApp Business API fees"
- "n8n WhatsApp integration self-hosted"
- "WhatsApp chatbot open source docker"
- "send WhatsApp notifications from my app"
Configuration
| Variable | Required | Description |
|---|---|---|
WAHA_API_KEY | Yes | API key for all REST endpoints. Always set this in production. |
WAHA_DASHBOARD_USERNAME | Recommended | Username for the web dashboard login |
WAHA_DASHBOARD_PASSWORD | Recommended | Password for the web dashboard login |
WAHA_PUBLIC_URL | Recommended | Your Railway public domain (e.g. https://yourapp.up.railway.app) — required for media URLs to resolve correctly |
WHATSAPP_DEFAULT_ENGINE | No | Engine to use: WEBJS (default, browser-based) or NOWEB (lighter, websocket-based) |
WHATSAPP_HOOK_URL | No | Webhook URL to receive incoming message events |
WHATSAPP_HOOK_EVENTS | No | Events to forward to the webhook (e.g. message,session.status) |
WHATSAPP_RESTART_ALL_SESSIONS | No | Set to True to restore all sessions on container restart |
TZ | No | Container timezone (default: UTC). Example: Asia/Kolkata |
WAHA vs. Alternatives
| Feature | WAHA (self-hosted) | Twilio WhatsApp API | Official WhatsApp Cloud API |
|---|---|---|---|
| Cost per message | Free | $0.005 + Meta fees | Meta fees only |
| Monthly minimum | ~$2–5 (Railway hosting) | None, but costs scale fast | None |
| Setup time | < 5 minutes | Hours (WABA approval) | Days (Meta review) |
| Message limits | None | Per-tier limits | Per-tier limits |
| Multiple sessions | Yes (WAHA Plus) | No | No |
| WhatsApp approval required | No | Yes | Yes |
| Account ban risk | Yes (unofficial) | No | No |
| Open source | Yes | No | No |
Dependencies for WAHA Hosting
- Docker — WAHA is distributed as a Docker image; Railway handles the runtime automatically
- A WhatsApp account — personal or business number to scan the QR code and activate the session
- A webhook receiver (optional) — any HTTPS endpoint (n8n, Chatwoot, your app server) to receive incoming message events
Deployment Dependencies
- WAHA Docker image: https://hub.docker.com/r/devlikeapro/waha
- WAHA documentation: https://waha.devlike.pro/docs/overview/introduction/
- GitHub repository: https://github.com/devlikeapro/waha
- n8n integration guide: https://waha.devlike.pro/docs/integrations/n8n
- Chatwoot integration guide: https://waha.devlike.pro/docs/integrations/chatwoot
Implementation Details
WAHA runs on port 3000 by default. Railway auto-assigns a public HTTPS domain. The dashboard is at /dashboard and Swagger UI at /swagger. Sessions persist across restarts when WHATSAPP_RESTART_ALL_SESSIONS=True is set. The WEBJS engine runs a headless Chromium instance; for lower memory usage switch to the NOWEB engine via WHATSAPP_DEFAULT_ENGINE=NOWEB.
FAQ
Is WAHA free to use? Yes. WAHA is 100% open source (Apache-2.0) with no message limits, no session caps, and no subscription fees. You pay only for Railway hosting (~$2–5/month).
Will my WhatsApp account get banned? Possibly. WAHA uses WhatsApp Web under the hood, which WhatsApp/Meta does not officially support for automation. Risk depends on message volume, patterns, and Meta's detection algorithms. For production business use, consider the official WhatsApp Business API instead.
What's the difference between WAHA and WAHA Plus?
The free devlikeapro/waha image supports a single WhatsApp session with the WEBJS and NOWEB engines. WAHA Plus (requires a Patreon subscription key) adds multiple simultaneous sessions, the GOWS engine, and media storage features.
Which engine should I use on Railway?
Start with NOWEB (WHATSAPP_DEFAULT_ENGINE=NOWEB) — it uses significantly less memory than WEBJS (which runs headless Chromium), making it better suited for Railway's Starter tier.
How do I receive incoming WhatsApp messages?
Set WHATSAPP_HOOK_URL to any publicly reachable HTTPS endpoint (e.g., an n8n webhook, a Chatwoot instance, or your app server) and set WHATSAPP_HOOK_EVENTS=message to forward incoming messages as HTTP POST requests.
Can I integrate WAHA with n8n or Chatwoot? Yes. WAHA has official integration guides for both. Deploy an n8n instance on Railway alongside WAHA and connect them using WAHA's webhook events — no additional middleware needed.
Why Deploy WAHA on Railway?
Twilio charges $0.005 per WhatsApp message plus Meta template fees — a 10,000-message campaign costs $50–$550 in API fees alone. WAHA eliminates per-message costs entirely. Railway gives you a persistent container with HTTPS and auto-restarts for under $5/month, with no Nginx configuration or VPS management required.
Character count check
Body content: ~6,447 characters (limit: 10,000) ✓
Template Content
WAHA
devlikeapro/waha