🏭 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.

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

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.

GOWS

👉 Read more about GOWS

WHATSAPP_DEFAULT_ENGINE=GOWS

GOWS engine does not require a browser to work with WhatsApp Web, it does so directly using a WebSocket.

🚀 It’s new generation engine written in Golang, future replacement for NOWEB engine.

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.

ImageCPUBrowser
WAHA Plus
devlikeapro/waha-plus:latestx86Chromium
devlikeapro/waha-plus:chromex86Chrome (supports video)
devlikeapro/waha-plus:nowebx86None
devlikeapro/waha-plus:gowsx86None
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
devlikeapro/{image}:{browser}[-cpu][-version]

{image}:

{browser}:

  • 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.)

{version}:

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

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.

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

🔄 Webhooks

WEBJSNOWEBGOWS
message✔️✔️✔️
message.reaction✔️✔️✔️
message.any✔️✔️✔️
message.ack✔️✔️✔️
message.waiting✔️
message.revoked✔️
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✔️
state.change✔️✔️✔️
engine.event✔️✔️✔️

🖥️ Sessions

Read more about 🖥️ Sessions

WEBJSNOWEBGOWS
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

Read more about 📤 Send Messages and 📥 Receive Messages

WEBJSNOWEBGOWS
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

Read more about 🟢 Status

WEBJSNOWEBGOWS
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

Read more about 💬 Chats

WEBJSNOWEBGOWS
Get all chats
GET /api/{session}/chats
✔️✔️¹
Get chats overview
GET /api/{session}/chats/overview
✔️✔️¹
Get chat picture
GET /api/{session}/chats/{chatId}/picture
✔️✔️¹
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

Read more about 👤 Contacts

WEBJSNOWEBGOWS
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

WEBJSNOWEBGOWS
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 - Video
POST /api/sendVideo
✔️✔️✔️
Send messages - Poll
POST /api/sendPoll
Receive messages - Text
message event
✔️✔️✔️
Receive messages - Media
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

WEBJSNOWEBGOWS
POST /api/{session}/groups✔️✔️
GET /api/{session}/groups✔️✔️
GET /api/{session}/groups/join-info✔️✔️
POST /api/{session}/groups/join✔️✔️
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✔️✔️

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.


✅ Presence

Read more about ✅ Presence

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

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.


🏷️ Labels

Read more about 🏷️ Labels

WEBJSNOWEBGOWS
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

WEBJSNOWEBGOWS
call.received✔️✔️
call.accepted✔️
call.rejected✔️

🗄️ Storages

Read more about 🗄️ Storages

StorageWEBJSNOWEBGOWS
🖥️ Session - Local✔️✔️✔️
🖼️ Media - Local✔️✔️✔️
🖥️ Session - PostgresSQL¹✔️✔️✔️
🖼️ Media - PostgresSQL¹✔️✔️✔️
🖼️ Media - S3¹²✔️✔️✔️
🖥️ Session - MongoDB¹³✔️✔️

  1. Available in ➕ WAHA Plus
  2. Any S3 Compatible storage can be used, such as AWS S3, MinIO, DigitalOcean Spaces, etc. For in-house solutions, you can use MinIO.
  3. MongoDB is deprecated. Use PostgresSQL instead for new installations.

🔍 Observability

Read more about 🔍 Observability

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