waha Documentation

WAHA - WhatsApp HTTP API (REST API) that you can configure in a click! 3 engines: WEBJS (browser based), NOWEB (websocket nodejs), GOWS (websocket go)

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy waha on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name waha -p 3000:3000 --restart always devlikeapro/waha-plus
Configured Services & Ports
โš™๏ธ waha
image: devlikeapro/waha-plus
๐Ÿ”Œ Ports: 127.0.0.1:3000:3000/tcp
โš™๏ธ base
image: chatwoot/chatwoot:v4.12.1
โš™๏ธ chatwoot
image: chatwoot/chatwoot:v4.12.1
๐Ÿ”Œ Ports: 127.0.0.1:3009:3009
โš™๏ธ chatwoot-sidekiq
image: chatwoot/chatwoot:v4.12.1
โš™๏ธ postgres
image: pgvector/pgvector:pg16
๐Ÿ”Œ Ports: 127.0.0.1:5432:5432
โš™๏ธ redis
image: redis:alpine
๐Ÿ”Œ Ports: 127.0.0.1:6379:6379
docker-compose.yml
yaml (docker-compose.yml)
services:
  waha:
    restart: always
    image: devlikeapro/waha-plus
    ports:
      - '127.0.0.1:3000:3000/tcp'
    volumes:
      - './sessions:/app/.sessions' # required for WAHA Core only
      - './media:/app/.media'
    env_file:
      - .waha.env
    depends_on:
      - postgres
      - redis
      - chatwoot
      - chatwoot-sidekiq
    logging:
      driver: 'json-file'
      options:
        max-size: '100m'
        max-file: '10'
    dns:
      - 1.1.1.1
      - 8.8.8.8

  base: &base
    image: chatwoot/chatwoot:v4.12.1
    env_file: .chatwoot.env ## Change this file for customized env variables
    volumes:
      - chatwoot_storage:/app/storage
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    logging:
      driver: 'json-file'
      options:
        max-size: '100m'
        max-file: '10'

  chatwoot:
    <<: *base
    depends_on:
      - postgres
      - redis
    ports:
      - '127.0.0.1:3009:3009'
    environment:
      - NODE_ENV=production
      - RAILS_ENV=production
      - INSTALLATION_ENV=docker
    entrypoint: docker/entrypoints/rails.sh
    command: ['bundle', 'exec', 'rails', 's', '-p', '3009', '-b', '0.0.0.0']
    restart: always

  chatwoot-sidekiq:
    <<: *base
    depends_on:
      - postgres
      - redis
    environment:
      - NODE_ENV=production
      - RAILS_ENV=production
      - INSTALLATION_ENV=docker
    command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml']
    restart: always

  postgres:
    image: pgvector/pgvector:pg16
    restart: always
    ports:
      - '127.0.0.1:5432:5432'
    volumes:
      - chatwoot_pg_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=chatwoot
      - POSTGRES_USER=postgres
      # Please provide your own password.
      - POSTGRES_PASSWORD=postgres

  redis:
    image: redis:alpine
    restart: always
    command:
      - 'sh'
      - '-c'
      - >
        redis-server --bind 0.0.0.0 --port 6379 --requirepass
        ${REDIS_PASSWORD:-redis} --timeout 300 --tcp-keepalive 60 --save 900 1
        --save 300 10 --save 60 10000 --appendonly yes --appendfsync everysec
    env_file: .chatwoot.env
    volumes:
      - chatwoot_redis:/data
    ports:
      - '127.0.0.1:6379:6379'

volumes:
  chatwoot_pg_data: {}
  chatwoot_redis: {}
  chatwoot_storage: {}

WAHA

WAHA - WhatsApp HTTP API (REST API) that you can install on your own server and run in less than 5 minutes!

Tables of Contents

Quick start

Requirements

Only thing that you must have - installed docker. Please follow the original
instruction how to install docker ->.

When you are ready - come back and follows the below steps to send the first text message to WhatsApp via HTTP API!

Send your first message

Let's go over steps that allow you to send your first text message via WhatsApp HTTP API!

1. Download image

Assuming you have installed Docker, let's download the image.

bash
docker pull devlikeapro/waha
bash
docker login -u devlikeapro -p {KEY}
docker pull devlikeapro/waha-plus
docker logout

Read more about how to get PASSWORD for โž• WAHA Plus

2. Run WhatsApp HTTP API

Run WhatsApp HTTP API:

bash
docker run -it --rm -p 3000:3000/tcp --name waha devlikeapro/waha

# It prints logs and the last line must be
# WhatsApp HTTP API is running on: http://[::1]:3000

Open the link in your browser http://localhost:3000/ and you'll see API documentation
(Swagger).

3. Start a new session

To start a new session you should have your mobile phone with installed WhatsApp application close to you.

Please go and read how what we'll need to a bit
later:

How to log in - the instruction on WhatsApp site

When your ready - find POST /api/sessions, click on Try it out, then Execute a bit below.

The example payload:

json
{
  "name": "default"
}

By using the request with name values you can start multiple session (WhatsApp accounts) inside the single docker container in Plus

4. Get and scan QR

Find GET /api/screenshot and execute it, it shows you QR code.

Scan the QR with your cell phone's WhatsApp app.

5. Get the screenshot

Execute GET /api/screenshot after a few seconds after scanning the QR - it'll show you the screenshot of you Whatsapp
instance. If you can get the actual screenshot - then you're ready to start sending messages!

6. Send a text message

Let's send a text message - find POST /api/sendText in swagger and change chatId this
way: use a phone international phone number without + symbol and add @c.us at the end.

For phone number 12132132131 the chatId is [email protected].

The example payload:

json
{
  "chatId": "[email protected]",
  "text": "Hi there!",
  "session": "default"
}

Also, you can use curl and send POST request like this:

bash
# Phone without +
export PHONE=12132132130
curl -d "{\"chatId\": \"${PHONE}@c.us\", \"text\": \"Hello from WhatsApp HTTP API\" }" -H "Content-Type: application/json" -X POST http://localhost:3000/api/sendText

What is next?

Go and read the full documentation!

Development

Start the project

  1. Clone the repository
  2. Make sure you're using node>=22 (check .nvmrc to get the version)
  3. Install the whatsapp-rust-bridge prerequisites:
bash
# Bun runtime used by whatsapp-rust-bridge prepare scripts
curl -fsSL https://bun.sh/install | bash -s -- bun-v1.3.9

# Rust nightly toolchain used for whatsapp-rust-bridge
curl -fsSL https://sh.rustup.rs | bash -s -- -y --default-toolchain nightly-2026-01-30
rustup target add wasm32-unknown-unknown
cargo install wasm-pack --vers 0.14.0 --locked
  1. Run the following commands:
bash
# Install dependencies
yarn install
# Fetch and compile proto files
yarn gows:proto
# Run
yarn start
# open http://localhost:3000