macOS install guide

Run WAHA on your Mac in under ten minutes

WhatsApp HTTP API, self-hosted on your own machine. Docker does the heavy lifting, so there is no Chrome install, no Node version juggling, no dependency hell. Six commands and you are sending messages.

Docker Desktop Apple Silicon & Intel localhost:3000 ~10 minutes

Which Mac are you on?Apple Silicon needs the ARM image. Pick one and the commands below update.

0

Install Docker Desktop

WAHA runs on top of Docker, and that is the only prerequisite. Install Docker Desktop for Mac, launch it, and wait for the whale icon in the menu bar to go steady before you carry on.

Terminal — install via Homebrew
brew install --cask docker

Or download it directly from docker.com. Once it is running, confirm the daemon is alive:

Terminal — check Docker is up
docker --version
docker info | head -5

Not sure which chip you have? Ask the machine:

Terminal — check your architecture
uname -m
Reading the result

arm64 means Apple Silicon (M1 through M4). x86_64 means Intel. Set the switch above to match.

1

Make a working folder

WAHA writes a credentials file and a sessions folder into whatever directory you run it from. Give it a home of its own so nothing lands in your home folder by accident.

Terminal — create and enter the folder
mkdir -p ~/waha && cd ~/waha
Stay in this folder

Every command from here on assumes you are inside ~/waha. If you open a new Terminal tab, run cd ~/waha again first.

2

Download the image

Apple Silicon needs the ARM build. Pull it, then tag it as devlikeapro/waha so every later command works unchanged.

Terminal — pull and tag the ARM image
# Download the ARM image
docker pull devlikeapro/waha:arm

# Rename it, so you can use devlikeapro/waha everywhere else
docker tag devlikeapro/waha:arm devlikeapro/waha

It is roughly a gigabyte, so this is the slow step. Good moment to fill the kettle.

3

Generate your credentials

This one-off command creates a .env file in your folder holding the dashboard login and your API key.

Terminal — init WAHA
docker run --rm -v "$(pwd)":/app/env devlikeapro/waha init-waha /app/env

You will get output along these lines:

Output
Credentials generated.

Dashboard and Swagger:
  - Username: admin
  - Password: 11111111111111111111111111111111

API key:
  - 00000000000000000000000000000000
Username / passwordSigns you into the dashboard and Swagger UI.
API keyAuthenticates every API call you make against the server.
Where they liveThe .env file in ~/waha. Open it any time you forget them.
Terminal — read them back later
cat ~/waha/.env
4

Start the server

This runs WAHA in the foreground on port 3000, with your sessions folder mounted so logins survive a restart.

Terminal — run WAHA
docker run -it \
  --env-file "$(pwd)/.env" \
  -v "$(pwd)/sessions:/app/.sessions" \
  --rm -p 3000:3000 \
  --name waha devlikeapro/waha

Leave that Terminal window running and open the dashboard at localhost:3000/dashboard. Sign in with the username and password from step 3, then connect to the server using the API key.

Not a production setup

This command is for getting started only. Before you put anything real on it, work through the WAHA install and update guide to secure the instance properly.

If port 3000 is already taken by something else, remap it and use the new port everywhere below:

Terminal — find what is on port 3000
lsof -i :3000
5

Start a session and scan the QR

Have your phone to hand with WhatsApp installed. In the dashboard the default session starts at STOPPED.

  • Start the default session, leaving every setting as it comes.
  • Wait for the status to reach SCAN_QR, then click the camera icon.
  • On your phone, go to Settings, Linked devices, Link a device and scan the code.
  • The status moves to WORKING. You are connected.
Seeing "Click to reload QR" instead?

Stop the session and start it again. The QR expires quickly, so scan it promptly once it appears.

6

Send your first message

Swap 123123 for your own number without the plus sign, keeping the @c.us suffix, and swap the placeholder key for the real one from your .env file.

Terminal — send a text
curl -X 'POST' \
  'http://localhost:3000/api/sendText' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H "X-Api-Key: 00000000000000000000000000000000" \
  -d '{
  "chatId": "[email protected]",
  "text": "Hi there!",
  "session": "default"
}'
JavaScript — send a text
fetch('http://localhost:3000/api/sendText', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'X-Api-Key': '00000000000000000000000000000000'
  },
  body: JSON.stringify({
    chatId: "[email protected]",
    text: "Hi there!",
    session: "default"
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
Python — send a text
import requests

url = "http://localhost:3000/api/sendText"
headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "X-Api-Key": "00000000000000000000000000000000"
}
data = {
    "chatId": "[email protected]",
    "text": "Hi there!",
    "session": "default"
}

response = requests.post(url, json=data, headers=headers)
print(response.json())

Prefer clicking to typing? Open Swagger at localhost:3000/#/chatting, authorise with your API key, expand POST /api/sendText, hit Try it out, drop your number in and Execute.

7

Stopping, restarting and updating

Press Ctrl+C in the running Terminal window to stop the server. Your session data stays in ~/waha/sessions, so the next start will not ask you to scan again.

Terminal — stop, update, restart
# Stop it from another tab
docker stop waha

# Pull the latest build
docker pull devlikeapro/waha

# Start it again
cd ~/waha && docker run -it --env-file "$(pwd)/.env" \
  -v "$(pwd)/sessions:/app/.sessions" \
  --rm -p 3000:3000 --name waha devlikeapro/waha
Terminal — watch the logs
docker logs -f waha

What to do next

You have a working WhatsApp HTTP API on your own machine. From here:

  • Point a webhook at your own endpoint to receive inbound messages.
  • Wire it into n8n, Make or your own service.
  • Read the security and storage guides before anything goes live.
  • Run it on a real UK Numbrrs number rather than a personal handset.

Instructions adapted from the WAHA quick start guide. Back to the Numbrrs help centre.