🏭 Engines

Engines

Under the hood WAHA allows you to use different engines. You can control what you want to run by settings WHATSAPP_DEFAULT_ENGINE environment variables.

docker run -it -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha

If you have any problems with one engine - try another!

All engines are available in both Core and Plus versions.

WEBJS

👉 Read more about WEBJS

WHATSAPP_DEFAULT_ENGINE=WEBJS

A WhatsApp API client that connects through the WhatsApp Web browser app. It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocked.

NOWEB

👉 Read more about NOWEB

WHATSAPP_DEFAULT_ENGINE=NOWEB

NOWEB engine does not require a browser to work with WhatsApp Web, it does so directly using a WebSocket. Not running Chromium saves you CPU and Memory, so you can run more instances on a single server!

Quotes from the users:

The server has 2 CPU and 8GB of memory. Today we have 85 sessions in this instance.

400 sessions with 4CPU and 32RAM. It’s working fine.

Docker images

WAHA provides few docker images with different setup.

👉 Go to Docker Image Configurator to generate the command with the latest version and your key.

devlikeapro/{image}:{browser}[-cpu][-version]

Image

Browsers

  • Chromium (latest) - is the default browser for WAHA. It’s a good choice for most cases.
  • Chrome (chrome) - is a good choice if you need to receive videos in Plus version.
  • None (noweb) - is a good choice if you want to use NOWEB engine.

CPU

  • x86 - is a good choice for most cases.
  • ARM (-arm) - is a good choice if you’re using ARM processors (like Apple Silicon M1\M2, Raspberry Pi, etc.)

Versions

  • latest - is the latest version of WAHA.
  • pinned - you can pin WAHA version by adding -{version} at the end of image tag.

Examples

👉 Go to Docker Image Configurator to generate the command with the latest version and your key.

ImageCPUBrowser
WAHA Plus
devlikeapro/waha-plus:latestx86Chromium
devlikeapro/waha-plus:chromex86Chrome (supports video)
devlikeapro/waha-plus:nowebx86None
devlikeapro/waha-plus:armARMChromium
-ARMChrome
devlikeapro/waha-plus:noweb-armARMNone
WAHA Core
devlikeapro/waha:latestx86Chromium
devlikeapro/waha:chromex86Chrome
devlikeapro/waha:nowebx86None
-ARMChrome
devlikeapro/waha:armARMChromium
devlikeapro/waha:noweb-armARMNone

Features

Some engines may not support certain features. Here, you will find a list of supported endpoints and webhooks per engine.

SymbolMeaning
✔️The engines supports the feature.
#123Feature request or bug for the endpoint
The feature available in WAHA Plus.
The engine does not and will newer support this feature

If you don’t specify WHATSAPP_DEFAULT_ENGINE environment variable - look at WEBJS engine, it’s the engine WAHA runs by default.

Protocols

WEBJSNOWEB
Run a browser (chromium\chrome) to communicate with WhatsApp✔️
Communicate with WhatsApp via websocket (no browser)✔️

Webhooks

WEBJSNOWEB
message✔️✔️
message.reaction✔️✔️
message.any✔️✔️
message.ack✔️✔️
message.waiting✔️
message.revoked✔️
state.change✔️✔️
group.join✔️✔️
group.leave✔️
presence.update✔️
poll.vote✔️
poll.vote.failed✔️
chat.archive✔️
call.received✔️✔️
call.accepted✔️
call.rejected✔️
label.upsert✔️
label.deleted✔️
label.chat.added✔️
label.chat.deleted✔️
engine.event✔️✔️

Sessions

Read more about 🖥️ Sessions

WEBJSNOWEB
List sessions
GET /api/sessions/
✔️✔️
Get session
GET /api/sessions/{name}
✔️✔️
Create session
POST /api/sessions/
✔️✔️
Update session
POST /api/sessions/{name}/
✔️✔️
Delete session
DELETE /api/sessions/{name}/
✔️✔️
Start session
POST /api/sessions/{name}/start
✔️✔️
Stop session
POST /api/sessions/{name}/stop
✔️✔️
Restart session
POST /api/sessions/{name}/restart
✔️✔️
Logout from a session
POST /api/sessions/logout
✔️¹✔️¹
Get screenshot
GET /api/screenshot
✔️
Get me
GET /api/sessions/{session}/me
✔️✔️
Get QR
POST /api/{session}/auth/qr
✔️✔️
Request code
POST /api/{session}/auth/request-code
✔️✔️
Authorize code
POST /api/{session}/auth/authorize-code
#113

  1. Logout from a session removes authentication information from a server (WAHA), but keeps the device on “Connected Device” in the app - #148

If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.


Messages

WEBJSNOWEB
POST /api/sendText✔️✔️
POST /api/sendSeen✔️✔️
PUT /api/{session}/chats/{chatId}/messages/{messageId}✔️✔️
DELETE /api/{session}/chats/{chatId}/messages/{messageId}✔️✔️
POST /api/sendImage ✔️✔️
POST /api/sendFile ✔️✔️
POST /api/sendVoice ✔️✔️
POST /api/sendVideo ✔️✔️
POST /api/sendButtons✔️
POST /api/sendPoll#189✔️
POST /api/forwardMessage✔️
#588
✔️
POST /api/sendLocation✔️✔️
POST /api/sendLinkPreview✔️
POST /api/startTyping✔️✔️
POST /api/stopTyping✔️✔️
POST /api/{session}/presence✔️✔️
POST /api/reaction✔️✔️
POST /api/star✔️✔️
GET /api/sendContactVcard✔️
GET /api/messages✔️✔️¹
GET /api/checkNumberStatus✔️✔️

  1. NOWEB - you need to Enable Store to get chats, contacts and messages

If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.


Status

WEBJSNOWEB
Send Text Status
POST /api/{session}/status/text
✔️✔️
Send Image Status
POST /api/{session}/status/image
✔️✔️
Send Voice Status
POST /api/{session}/status/voice
✔️✔️
Send Video Status
POST /api/{session}/status/video
✔️✔️
Delete Status
POST /api/{session}/status/delete
✔️

If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.


Chats

WEBJSNOWEB
Get all chats
GET /api/{session}/chats
✔️✔️¹
Unread chat
POST /api/{session}/chats/{chatId}/unread
✔️✔️¹
Archive chat
POST /api/{session}/chats/{chatId}/archive
✔️✔️¹
Unarchive chat
POST /api/{session}/chats/{chatId}/unarchive
✔️✔️¹
Delete chat
DELETE /api/{session}/chats/{chatId}
✔️
Get messages
GET /api/{session}/chats/{chatId}/messages
✔️✔️¹
Get message by id
GET /api/{session}/chats/{chatId}/messages/{messageId}
✔️✔️¹
Pin message
POST /api/{session}/chats/{chatId}/messages/{messageId}/pin
✔️✔️
Unpin message
POST /api/{session}/chats/{chatId}/messages/{messageId}/unpin
✔️✔️
Edit message
PUT /api/{session}/chats/{chatId}/messages/{messageId}
✔️✔️
Delete message
DELETE /api/{session}/chats/{chatId}/messages/{messageId}
✔️✔️
Delete all messages
DELETE /api/{session}/chats/{chatId}/messages
✔️

  1. NOWEB - you need to Enable Store to get chats, contacts and messages

If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.


Contacts

WEBJSNOWEB
Get all contacts
GET /api/contacts/all
✔️✔️*1
Get contact
GET /api/contacts
✔️✔️*1
Check phone number exists
GET /api/contacts/check-exists
✔️✔️
Get “about” contact
GET /api/contacts/about
✔️
Get profile picture
GET /api/contacts/profile-picture
✔️✔️
Block contact
POST /api/contacts/block
✔️✔️
Unblock contact
POST /api/contacts/unblock
✔️✔️

  1. NOWEB - you need to Enable Store to get chats, contacts and messages

If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.


Channels

Read more about 📢 Channels

WEBJSNOWEB
Search public channels#440#440
Create Channel
POST /api/{session}/channels
#439✔️
Get channel - by id and invite code
GET /api/{session}/channels/{ChannelID}
✔️✔️
List channels
GET /api/{session}/channels
✔️✔️
Delete channel
DELETE /api/{session}/channels/{ChannelID}
✔️
Get messages
GET /api/{session}/chats/{ChannelID}/messages
✔️✔️
#433
Send messages - Text
POST /api/sendText
✔️✔️
Send messages - Image
POST /api/sendImage
✔️✔️
Send messages - Poll
POST /api/sendPoll
Receive messages - Text
message event
✔️✔️
Receive messages - Image
message event
✔️✔️
Receive messages - Polls✔️
Receive messages - Polls Votes (in my channel)
Receive messages - Reactions (in my channel)
Channels - follow, unfollow
Channels - mute, unmute
Admins - Send Invite
Admins - Revoke Invite
Admins - Accept Invite
Admins - Demote Admin

If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.


Groups

Read more about 👥 Groups

WEBJSNOWEB
POST /api/{session}/groups✔️✔️
GET /api/{session}/groups✔️✔️
GET /api/{session}/groups/{id}✔️✔️
DELETE /api/{session}/groups/{id}✔️
GET /api/{session}/groups/{id}/settings/security/info-admin-only✔️
PUT /api/{session}/groups/{id}/settings/security/info-admin-only✔️
GET /api/{session}/groups/{id}/settings/security/messages-admin-only✔️
PUT /api/{session}/groups/{id}/settings/security/messages-admin-only✔️
POST /api/{session}/groups/{id}/leave✔️✔️
PUT /api/{session}/groups/{id}/description✔️✔️
PUT /api/{session}/groups/{id}/subject✔️✔️
GET /api/{session}/groups/{id}/invite-code✔️✔️
POST /api/{session}/groups/{id}/invite-code/revoke✔️✔️
GET /api/{session}/groups/{id}/participants✔️✔️
POST /api/{session}/groups/{id}/participants/add✔️✔️
POST /api/{session}/groups/{id}/participants/remove✔️✔️
POST /api/{session}/groups/{id}/admin/promote✔️✔️
POST /api/{session}/groups/{id}/admin/demote✔️✔️

Presence

Read more about ✅ Presence

WEBJSNOWEB
POST /api/{session}/presence✔️✔️
GET /api/{session}/presence✔️
GET /api/{session}/presence/{chatId}✔️
POST /api/{session}/presence/{chatId}/subscribe✔️

Labels

Read more about 🏷️ Labels

WEBJSNOWEB
Get labels
GET /api/{session}/labels
✔️✔️
Create label
POST /api/{session}/labels
✔️✔️
Update label
PUT /api/{session}/labels/{labelId}
✔️✔️
Delete label
DELETE /api/{session}/labels/{labelId}
✔️✔️
Get chats by label id
GET /api/{session}/labels/{labelId}/chats
✔️✔️
Get labels by chat id
GET /api/{session}/labels/chats/{chatId}/
✔️✔️
PUT labels to chat
PUT /api/{session}/labels/chats/{chatId}/
✔️✔️
label.upsert✔️
label.deleted✔️
label.chat.added✔️
label.chat.deleted✔️

If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.


Calls

Read more about 📞 Calls

WEBJSNOWEB
call.received✔️✔️
call.accepted✔️
call.rejected✔️

Storages

Read more about 🗄️ Storages

Storage Type🖥️ Session Storage🖼️ Media Storage
Local✔️✔️
MongoDB✔️#508
S3¹✔️¹
PostgresSQL#450

  1. Any S3 Compatible storage can be used, such as AWS S3, MinIO, DigitalOcean Spaces, etc. For in-house solutions, you can use MinIO.

If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.

👉 Storages are available in WAHA Plus only.


Observability

Read more about 🔍 Observability

WEBJSNOWEB
Other
GET /api/version✔️✔️
GET /health ✔️✔️