Back to Nodes

n8n-nodes-multiwa

v2.1.0
Last updated Nov 7, 2026

n8n nodes for MultiWA, the self-hosted WhatsApp API gateway with a built-in team inbox

611 Weekly Downloads
963 Monthly Downloads

Description

MultiWA Logo

MultiWA

Self-hosted WhatsApp API gateway with a built-in team inbox

MIT License
Version
Website
Docker
Docker Pulls
CI
Release Gate
PRs Welcome
Buy Me a Coffee
GitHub Sponsors

Quick Start โ€ข
Features โ€ข
Screenshots โ€ข
Architecture โ€ข
API Docs โ€ข
SDKs โ€ข
Deployment โ€ข
Release Checks โ€ข
Contributing

—

> [!WARNING]
> MultiWA is not affiliated with WhatsApp or Meta. It connects through WhatsApp Web, and WhatsApp can block or log out numbers that break its terms. Use a number you can afford to lose, and follow WhatsApp’s policies.

๐ŸŽฏ What is MultiWA?

MultiWA is a fully self-hosted, open-source WhatsApp API gateway that lets you connect multiple WhatsApp numbers through a single unified REST + WebSocket API. It runs as a docker compose up stack on your own server, ships an admin dashboard for QR onboarding and live chat, and exposes official SDKs for TypeScript, Python, and PHP.

If you want to send and receive WhatsApp messages from your own backend without per-message pricing, vendor lock-in, or sending customer data through a third party, MultiWA is built for you.

โœจ Why MultiWA?

| Feature | MultiWA | WhatsApp Cloud API | Evolution API |
|———|———|——————-|—————|
| Self-hosted | โœ… Full control | โŒ Meta-hosted | โœ… |
| WhatsApp connection | WhatsApp Web via whatsapp-web.js (a Baileys adapter is experimental) | Meta’s official Cloud API | Baileys or the official Cloud API |
| Admin Dashboard | โœ… Full-featured | โŒ None | โš ๏ธ Basic |
| Visual Automation | โœ… Drag & drop builder | โŒ | โŒ |
| Knowledge Base AI | โœ… OpenAI-compatible | โŒ | โŒ |
| Plugin System | โœ… Extensible | โŒ | โŒ |
| Free | โœ… MIT License | โš ๏ธ Per-message pricing | โœ… |
| Official SDKs | โœ… TS, Python, PHP | โœ… Multiple | โš ๏ธ Community |


โญ If you find MultiWA useful, please consider giving it a star!
It helps us grow and motivates continued development.

GitHub Stars

—

๐Ÿš€ Quick Start

Option 1: Docker โ€” One Command Setup โšก

git clone https://github.com/ribato22/MultiWA.git
cd MultiWA
cp .env.docker .env
docker compose up -d

That’s it! Access:

  • ๐Ÿ–ฅ๏ธ Admin Dashboard: http://localhost:3001
  • ๐Ÿ“– API Swagger Docs: http://localhost:3333/api/docs
  • ๐Ÿ”Œ API Endpoint: http://localhost:3333/api/v1
  • > Full stack (with S3 storage + Nginx proxy): docker compose --profile full up -d

    > ๐Ÿ“ฆ **Published SDK packages, signed container images, and a one-click Render
    > deploy are rolling out** โ€” see Releasing & Distribution.

    Option 2: Local Development

    Prerequisites: Node.js โ‰ฅ 20 ยท PostgreSQL โ‰ฅ 16 ยท Redis โ‰ฅ 7 ยท pnpm โ‰ฅ 9

    git clone https://github.com/ribato22/MultiWA.git
    cd MultiWA
    pnpm install

    cp .env.example .env

    Setup database (no migrations dir โ€” db push syncs the schema)

    pnpm --filter database exec prisma generate pnpm --filter database exec prisma db push

    Build workspace packages

    pnpm --filter database build pnpm --filter engines build

    Start development

    pnpm --filter api dev # API on http://localhost:3000 pnpm --filter admin dev # Admin on http://localhost:3001

    —

    โšก Features

    Core

  • ๐Ÿ“ฑ Multi-Session Management โ€” Connect unlimited WhatsApp accounts
  • ๐Ÿ”Œ Pluggable Engine Adapters โ€” Clean engine interface with per-profile engine selection: whatsapp-web.js (default, production) or a Baileys adapter (experimental โ€” not production-validated; sendReaction and resolveIdentity are stubs and history sync / WhatsApp-addressbook contact save are whatsapp-web.js-only; see Engine Abstraction)
  • ๐Ÿ“จ Unified Messaging API โ€” Send text, media, documents, contacts, locations
  • ๐Ÿ“ž Call Management โ€” Incoming call history and a follow-up queue (reply, call link, assign, done), reject or auto-reject with an optional reply (at most one per caller per 24 hours), missed-call notifications, and call.* webhooks; call links need whatsapp-web.js (see Webhook Events)
  • ๐ŸŽง Calls in the Dashboard (opt-in) โ€” Agents answer WhatsApp voice calls in the browser, on whatsapp-web.js profiles, once the server has HTTPS and one media port open to them. Calls can also be recorded, and the caller then always hears an announcement first; recordings stay private, for owners and admins, and every play, download and delete is audited (see Calls answered in the dashboard)
  • ๐Ÿ“ก Real-time WebSocket โ€” Live session status, QR codes, and events via Socket.IO
  • ๐Ÿ”• Quiet-Profile Alarm โ€” A connected profile that stops receiving messages raises one alarm (admin bell + WhatsApp to your ops numbers through another profile) and a notice when it recovers
  • ๐Ÿ” JWT Authentication โ€” Secure API access with refresh tokens
  • Admin Dashboard

  • ๐Ÿ–ฅ๏ธ Modern UI โ€” Next.js 14 with dark mode, responsive design
  • ๐Ÿ’ฌ Live Chat โ€” Real-time chat interface with message history
  • ๐Ÿ‘ค Customer Profile โ€” the customer behind a number, beside the chat and in calls: your ID, live data from your system, notes and tags
  • ๐Ÿ“Š Analytics โ€” Message volume, delivery rates, session metrics
  • ๐Ÿ” Audit Trail โ€” Complete logging of all operations
  • Automation & AI

  • ๐Ÿค– Visual Flow Builder โ€” Drag & drop automation design
  • ๐Ÿง  Knowledge Base โ€” AI-powered replies using OpenAI (or any OpenAI-compatible API) with keyword (TF-IDF) retrieval
  • ๐Ÿ“… Scheduled Messages โ€” Queue messages for future delivery
  • ๐Ÿ“ข Broadcast โ€” Bulk messaging with templates and tracking
  • Integrations

  • ๐Ÿ”— Webhooks โ€” Real-time event notifications to your services
  • ๐Ÿ”‘ API Keys โ€” Multiple keys with scoping and expiration
  • ๐Ÿ“ฆ SDKs โ€” TypeScript, Python, PHP
  • ๐Ÿ”” Push Notifications โ€” Browser push via Web Push API
  • ๐Ÿ“ง SMTP Email โ€” Email alerts for critical events
  • Enterprise

  • ๐Ÿ›ก๏ธ Security โ€” Helmet, CSP, rate limiting, encryption at rest
  • ๐Ÿณ Docker โ€” Production-ready containers with health checks
  • ๐Ÿ“ˆ Metrics โ€” Prometheus /metrics (API, root path) + /metrics on the worker health port: default Node/process metrics plus BullMQ queue depth. Public like /health โ€” restrict at your proxy/firewall
  • โš™๏ธ Background Worker โ€” BullMQ worker for durable webhook delivery and
  • background jobs; with DURABLE_SEND=true outbound sends are enqueued (Redis)
    and delivered with retry, and with ENGINE_HOST=worker the worker can host
    the WhatsApp engine itself (default: engine runs in the API process)

  • ๐Ÿ”’ GDPR โ€” Data export and deletion endpoints
  • ๐Ÿ”Œ Plugin System โ€” Extend with custom plugins
  • —

    ๐Ÿ“ธ Screenshots

    Contacts
    Automation

    Profiles
    Settings

    View all screenshots โ†’

    —

    ๐Ÿ—๏ธ Architecture

    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚                    Nginx (SSL / Proxy)                   โ”‚
    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    โ”‚  Admin (Next.js)     โ”‚  API (NestJS / Fastify)           โ”‚
    โ”‚  Port 3001           โ”‚  Port 3333 (Docker)               โ”‚
    โ”‚                      โ”‚  Port 3000 (local dev)            โ”‚
    โ”‚                      โ”‚  โ”œโ”€ /api/v1  REST + Swagger UI    โ”‚
    โ”‚                      โ”‚  โ””โ”€ /socket.io  realtime events   โ”‚
    โ”‚                      โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    โ”‚                      โ”‚  WhatsApp Engine Adapters         โ”‚
    โ”‚                      โ”‚  โ”œโ”€ whatsapp-web.js               โ”‚
    โ”‚                      โ”‚  โ””โ”€ Baileys (experimental)        โ”‚
    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    โ”‚  Worker (BullMQ)  โ”‚  PostgreSQL 16  โ”‚  Redis 7           โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    

    Tech Stack

    | Layer | Technology |
    |——-|———–|
    | API | NestJS 10 + Fastify |
    | Admin | Next.js 14 + Tailwind CSS |
    | Database | PostgreSQL 16 + Prisma ORM |
    | Cache/Queue | Redis 7 + BullMQ |
    | WhatsApp | whatsapp-web.js (production) / Baileys (experimental) |
    | Auth | JWT (access + refresh tokens) |
    | Realtime | Socket.IO |
    | Container | Docker + Docker Compose |
    | CI/CD | GitHub Actions |

    —

    ๐Ÿ“– API Documentation

    Full interactive API documentation is available at /api/docs (Swagger UI).

    Example: Send a Text Message

    curl -X POST http://localhost:3333/api/v1/messages/text 
      -H "Authorization: Bearer YOUR_TOKEN" 
      -H "Content-Type: application/json" 
      -d '{
        "profileId": "profile-uuid",
        "to": "6281234567890",
        "text": "Hello from MultiWA! ๐Ÿ‘‹"
      }'
    

    Example: Connect a WhatsApp Session

    curl -X POST http://localhost:3333/api/v1/accounts/YOURACCOUNTID/profiles/YOURPROFILEID/connect 
      -H "Authorization: Bearer YOUR_TOKEN"
    

    > ๐Ÿ“š See the full documentation site for detailed guides, API reference, webhook events, and more. Source docs are in the docs/ directory.

    —

    ๐Ÿ“ฆ SDKs

    The TypeScript SDK is published on npm (npm install @multiwa/sdk), the
    Python SDK on PyPI (pip install multiwa), the PHP SDK on Packagist
    (composer require multiwa/multiwa-php), and the n8n community node on npm
    (npm install n8n-nodes-multiwa).

    | Language | Source | Status |
    |———-|——–|——–|
    | TypeScript/Node.js | packages/sdk | Published on npm ยท npm install @multiwa/sdk |
    | Python | packages/sdk-python | Published on PyPI ยท pip install multiwa |
    | PHP | packages/sdk-php | Published on Packagist ยท composer require multiwa/multiwa-php |
    | n8n community node | packages/n8n-nodes-multiwa | Published on npm ยท npm install n8n-nodes-multiwa |

    TypeScript SDK Example

    npm install @multiwa/sdk
    
    import { MultiWAClient } from '@multiwa/sdk';

    const client = new MultiWAClient({ // Docker default: 'http://localhost:3333/api/v1' // Local dev default if you omit baseUrl: 'http://localhost:3000/api/v1' baseUrl: 'http://localhost:3333/api/v1', apiKey: 'your-api-key', });

    // Send a text message await client.messages.sendText({ profileId: 'profile-uuid', to: '6281234567890', text: 'Hello! ๐Ÿ‘‹', });

    —

    ๐Ÿ—‚๏ธ Project Structure

    MultiWA/
    โ”œโ”€โ”€ apps/
    โ”‚   โ”œโ”€โ”€ api/             # NestJS backend API
    โ”‚   โ”œโ”€โ”€ admin/           # Next.js admin dashboard
    โ”‚   โ””โ”€โ”€ worker/          # BullMQ background worker (can host the engine)
    โ”œโ”€โ”€ packages/
    โ”‚   โ”œโ”€โ”€ core/            # Shared types and utilities
    โ”‚   โ”œโ”€โ”€ database/        # Prisma schema and migrations
    โ”‚   โ”œโ”€โ”€ engines/         # WhatsApp engine adapters (whatsapp-web.js, Baileys, mock)
    โ”‚   โ”œโ”€โ”€ engine-runtime/  # Shared engine helpers (ack status, media, send gate, โ€ฆ)
    โ”‚   โ”œโ”€โ”€ sdk/             # TypeScript SDK (@multiwa/sdk)
    โ”‚   โ”œโ”€โ”€ sdk-python/      # Python SDK (multiwa)
    โ”‚   โ”œโ”€โ”€ sdk-php/         # PHP SDK (multiwa/multiwa-php)
    โ”‚   โ”œโ”€โ”€ n8n-nodes-multiwa/ # n8n community node (n8n-nodes-multiwa)
    โ”‚   โ”œโ”€โ”€ chatwoot-bridge/ # Chatwoot integration
    โ”‚   โ””โ”€โ”€ wordpress-plugin/# WordPress contact-form plugin
    โ”œโ”€โ”€ plugins/             # Plugin directory (runtime loadable)
    โ”œโ”€โ”€ docker/              # Dockerfiles + nginx reverse-proxy config
    โ”œโ”€โ”€ docs/                # Public documentation (mirrored into docs-site)
    โ”œโ”€โ”€ docs-site/           # Docusaurus documentation site (+ GitHub Pages build)
    โ”œโ”€โ”€ landing/             # Static landing page assets
    โ”œโ”€โ”€ scripts/             # Release-gate scripts and utilities
    โ””โ”€โ”€ .github/workflows/   # CI, release-gate, docker-publish, docs-deploy
    

    —

    ๐Ÿณ Production Deployment

    Detailed deployment guide: docs/16-deployment-docker.md

    1. Clone and configure

    git clone https://github.com/ribato22/MultiWA.git cd MultiWA cp .env.production.example .env

    Edit .env with your settings (JWTSECRET, DBPASSWORD, etc.)

    2. Build and start (with all optional services)

    docker compose --profile full up -d --build

    3. Sync the database schema (the API container also does this automatically

    on startup; run manually only if you need to force it)

    docker exec multiwa-api npx prisma db push --schema=packages/database/prisma/schema.prisma

    4. Access

    API: http://your-server:3333/api/docs

    Admin: http://your-server:3001

    > ๐Ÿ’ก For advanced production setups (custom Nginx, external PostgreSQL, SSL), see the
    > docker-compose.production.yml which is optimized
    > for enterprise deployments with pre-configured Nginx reverse proxy.

    —

    โœ… Release Checks

    Every push to main and every pull request runs the Release Gate
    workflow at .github/workflows/release-gate.yml.
    It performs three checks:

  • Public boundary scan โ€” pnpm check:public-boundary. Hard-fails on
  • PEM private key blocks, merge conflict markers, and RFC1918 private IP
    literals in non-doc tracked files.

  • API contract drift โ€” pnpm check:api-contract. Diffs the source
  • controllers in apps/api/src against
    scripts/api-routes.snapshot.json
    and against the table rows in
    docs/07-api-specification.md. If any
    side drifts, the gate fails with a precise list of routes that are
    added, removed, or missing from the docs.

  • No internal-only files tracked โ€” fails if any internal-only
  • working file or note slips into the public tree.

    Run the gate locally before opening a PR:

    pnpm check:release
    

    When you change a controller, also refresh the snapshot so the docs-drift
    check stays in sync:

    pnpm check:api-contract:update
    

    See docs/release-checklist.md for the full
    maintainer release flow.

    —

    ๐Ÿค Contributing

    Contributions are welcome. See CONTRIBUTING.md for the
    full guide.

    1. Fork the repository.
    2. Create your feature branch (git checkout -b feature/amazing-feature).
    3. Make your changes, then run pnpm check:release to confirm the release
    gate still passes.
    4. Commit (git commit -m 'feat: add amazing feature').
    5. Push to the branch (git push origin feature/amazing-feature).
    6. Open a Pull Request.

    The Release Checks section above explains what the
    gate enforces. For controller changes, also see
    CONTRIBUTING.md โ†’ Release Checks.

    —

    ๐Ÿ“„ License

    This project is licensed under the MIT License โ€” see the LICENSE file for details.

    —

    ๐Ÿ”— Links

  • ๐Ÿ“– Documentation ยท Source
  • ๐Ÿ› Report a Bug
  • ๐Ÿ’ก Request a Feature
  • ๐Ÿ”’ Security Policy
  • ๐Ÿ“ Changelog
  • ๐Ÿ•ต๏ธ Privacy Policy

—

Made with โค๏ธ by the MultiWA team

From our network Other tools and sites we build