🔄 Changelog

You can find here the list of changes made to WAHA.

If you wish to get and read Release Notes - read them on one of our platforms, these posts are FREE.

Subscribe for FREE to get new updates there!


2024.6

👉 Breaking changes


Docker image has been renamed to devlikeapro/waha and devlikeapro/waha-plus!


🎉 New


Starting 2026.6.1 we publish images with {version} tag, so you can pin the version you want to use.

devlikeapro/waha-plus:chrome-{version} => devlikeapro/waha-plus:chrome-2024.6.1


Added limit and offset parameters to GET /api/{session}/chats endpoint.

  • Read more about Get all chats
  • Build: 2024.6.4
  • Engine: WEBJS
  • Engine: NOWEB

Added Out of the box HTTPS Support!

👉 Step by step guide on how to set up HTTPS for WAHA


Add Websockets support!


🎉 New - NOWEB


You asked it, we did it - contacts, chats, and messages endpoints are now available in NOWEB engine! Please make sure to Enable NOWEB Store before using these endpoints.


Generate thumbnail preview for video and image messages in NOWEB engine.

  • Build: 2024.6.3
  • Engine: NOWEB

Fix sending poll response in NOWEB engine.

  • Build: 2024.6.1
  • Engine: NOWEB
  • Issue: #356

🎉 New - DASHBOARD


Starting 2024.6.3 Dashboard is available in WAHA Core version!


Starting 2024.6.3 Dashboard allows connecting to multiple WAHA instances!


🐛 Fixes - NOWEB


Sender presence keeps on typing after sending message.

  • Issue: #379
  • Build: 2024.6.6

2024.5

🎉 New


Added WAHA_PRINT_QR environment variable to control QR code printing (by default True). Set WAHA_PRINT_QR=False to disable QR code printing.


Swagger White Label - show your own brand in the Swagger documentation!


🐛 Fixes


Don’t allow to start two sessions with the same name.

Before API allowed to start two sessions with the same name, which could lead to potential problems (no way to stop the first, abandoned session).


🐛 Fixes - WEBJS


Handling rare errors in MongoDB process for saving and restoring session data.

  • Build: 2024.5.12
  • Engine: WEBJS
  • Commit: 9c398f2

Fix send video issue POST /api/sendVideo in WEBJS.

  • Issue: #321
  • Issue: #328
  • Build: 2024.5.9
  • Engine: WEBJS

💡 If you’re experiencing “forever loading” issue - set up WAHA_WEBJS_WEB_VERSION=2.2412.54-videofix environment variable:

docker run -it -p 3000:3000/tcp -e WAHA_WEBJS_WEB_VERSION=2.2412.54-videofix devlikeapro/waha-plus:chrome

Use local cache for WEBJS engine (versions file).

  • Issue: #316
  • Build: 2024.5.4
  • Engine: WEBJS

🐛 Fixes - NOWEB


Fix message.ack event for viewing status (status@broadcast) messages.

  • Issue: #329
  • Build: 2024.5.14

Auto restart NOWEB connection every 30 minutes.

  • Issue: #336
  • Build: 2024.5.14

Set heap memory limit to 16GB for NOWEB engine.

  • Issue: #347
  • Build: 2024.5.12

Add body to messages with caption in NOWEB engine.

  • Build: 2024.5.10

Fix “document with caption” message media issue

  • Issue: #345
  • Build: 2024.5.10

Important NOWEB Engine Update! WhatsApp has deprecated the version currently being used in the NOWEB engine


2024.4

🎉 New


Add WAHA Dashboard - UI to manage your WhatsApp sessions!


Add GET /api/sessions/{session} endpoint to get information about a specific session.


Implement GET /api/contacts/profile-picture for NOWEB engine.


2024.3

🎉 New


Add message.reaction webhook in WEBJS and NOWEB engines

👉 NOWEB engine note - reactions were sent in 'message' and 'message.any' events, not it’s available only in 'message.reaction'!


Add star and unstar message endpoint PUT /api/star


Add PUT /api/{session}/chats/{chatId}/messages/{messageId} endpoint to edit the message.


Add DELETE /api/{session}/chats/{chatId}/messages/{messageId} endpoint to delete the message.


Add POST /api/sendContactVcard support for NOWEB engine.


Handles caption and filename right in POST /api/sendFile


Add security settings for who can send messages PUT /api/{session}/groups/{groupId}/settings/security/messages-admin-only


Add config.debug field to POST /api/session/start to enable debug and verbose logs for the session.


👉 Breaking changes

  • NOWEB - reactions were sent in 'message' and 'message.any' events, not it’s available only in 'message.reaction'!
  • Add required body in PUT /api/{session}/groups/{groupId}/settings/security/info-admin-only endpoint.
{
  "adminsOnly": false
}
  • POST /api/sendContactVcard doesn’t work in VENOM anymore (use NOWEB engine).

2024.2

2024.1

2024.2

  • Listen for browser disconnected and page close events in WEBJS engine #262

2023.12

December 2023

2023.11

November 2023

  • Add different formats for QR code:
    1. binary image - GET /api/{session}/auth/qr
    2. base64 image - GET /api/{session}/auth/qr and set Accept: application/json header
    3. raw - GET /api/{session}/auth/qr?format=raw
  • Add different formats for the screenshot:
    1. binary image - GET /api/{session}/screenshot
    2. base64 image - GET /api/{session}/screenshot and set Accept: application/json header
  • Add WHATSAPP_SWAGGER_ENABLED=false so you can hide Swagger documentation (available only in Plus version). #185
  • Add dedicated media field in webhook payload - now you can know which media is attached to the message.
{
  "event": "message",
  "session": "default",
  "payload": {
    "hasMedia": true,
    "media": {
      "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.pdf",
      "mimetype": "application/pdf",
      "filename": "file.pdf"
    }
  }
}

  • Add WHATSAPP_DOWNLOAD_MEDIA environment variable to control media download. Available only in Plus version.
    • WHATSAPP_DOWNLOAD_MEDIA=True - download media
    • WHATSAPP_DOWNLOAD_MEDIA=False - do not download media at all.
  • Add filename field for document (file attachments) - the original filename of the document.
  • Add /api/sendVideo endpoint to NOWEB and WEBJS engines. Available only in Plus version.
  • Add security settings for edit group info GET /api/{session}/groups/{groupId}/settings/security/info-admin-only - updates the group settings to only allow admins to edit group info (title, description, photo).

2023.10

October 2023

  • Add session.status event for all engines! Now you can get the latest session’s status immediately after it changes.
  • Add message.revoked event in WEBJS engine
  • Add me field in webhook payload - now you can know which number is associated with the session
  • Add enviroment field in webhook payload - now you can know which environment is used for the session

2023.9

September 2023

2023.8

August 2023

  • Added stories (aka status) endpoints to NOWEB engine!
    • POST /api/{session}/status/text|image|voice|video - choose one that suites your!
  • Added chats endpoints
    • Get all chats - GET /api/{session/chats
    • Delete chat - DELETE /api/{session/chats/{chatId}
    • Get messages from chat - GET /api/{session/chats/{chatId}/messages?limit=1000?downloadMedia=true
    • Clear messages in the chat DELETE /api/{session/chats/{chatId}/messages
  • Added downloadMedia flag to speed up GET /api/messages and GET /api/{session/chats/{chatId}/messages performance.
  • Added set presence endpoint!
    • With online presence you can show your status as online #121
    • With offline presence you can get notifications for your device #28
  • Added security settings for edit group info PUT /api/{session}/groups/{groupId}/settings/security/info-admin-only - updates the group settings to only allow admins to edit group info (title, description, photo).

2023.7

July 2023

  • Now session can have their own Webhooks - you can define webhook configuration when you start a session with POST /api/session/start!
    • Add HMAC authentication for webhooks
    • Configure retries
    • Add you custom headers
  • Added proxy configuration with supporting proxy authentication. Thanks puntolino for the contribution! You can control proxy’s settings per session with POST /api/session/start or globally with environment variables.
  • Added presence information - now you can get online status for a contact by calling endpoints or receiving a webhook event!
  • Now you can mention contact in groups by settings mentions field in POST /api/sendText read more about it in Send Messages ->

2023.6

June 2023

Improvements on session management, restarting sessions and more:

  • Added WHATSAPP_RESTART_ALL_SESSIONS=True: Set this variable to True to start all STOPPED sessions after container restarts. By default, this variable is set to False.
    • Please note that this will start all STOPPED sessions, not just the sessions that were working before the restart. You can maintain the session list by using POST /api/session/stop with the logout: True parameter or by calling POST /api/session/logout to remove STOPPED sessions. You can see all sessions, including STOPPED sessions, in the GET /api/sessions/all=True response.
  • WHATSAPP_START_SESSION now support more than one session! Separate session names by command, and it’ll start them ALWAYS after container restart WHATSAPP_START_SESSION=session1,session2
  • WHATSAPP_SWAGGER_CONFIG_ADVANCED=true enables advanced configuration options for Swagger documentation - you can customize host, port and base URL for the requests. Disabled by default.
  • Added ?all=true parameter to GET /api/session?all=True endpoint - it’ll show you ALL session, included **STOPPED **, so you can know which one will be restarted if you set WHATSAPP_RESTART_ALL_SESSIONS=True environment variable.
  • Added POST /api/sessions/logout that allow you to logout from session - remove saved credentials.
  • Added logout boolean parameter to POST /api/sessions/stop request that allow you to stop the session AND logout at the same time.
  • Added How to deploy page -> with docker-compose.yaml example
  • Added engine field in webhook payload
{
  "event": "message",
  "session": "default",
  "engine": "WEBJS",
  "payload": {}
}

2023.5

May 2023

  • Added new NOWEB engine. NOWEB engine does not require a browser to work with WhatsApp Web, it does so directly using a WebSocket.
    • Less CPU and RAM usage!
    • Send Locations API works!
    • Send Link Preview API works!
    • ⚠ Read the article before using it How to avoid blocking ->.

2023.4

March 2023

  • Add Groups API
  • Use Chromium by default instead of Chrome

2023.1

January 2023

  • Added Contacts API
    • Get all contacts
    • Get a contact
    • Get contact “about” (status)
    • Get contact profile picture
    • Check number exists (is registered in WhatsApp) - works even if the number is not in the contact list
    • Block and unblock contact

2022.12

December 2023

  • Added GET /messages/ endpoint to get chat messages #31
  • Added WHATSAPP_SWAGGER_USERNAME and WHATSAPP_SWAGGER_PASSWORD to hide and protect swagger panel.

2022.11

Please test changes in test environment before update production!!

Engine

  1. WAHA has changed its underlying engine from Venom to Whatsapp Web.JS. It might change the response and webhook’s payloads.
  2. Optimize CPU and memory consumption.

Requests

  • For all /api/session/ requests use name field instead of sessionName.
  • For all “chatting” requests use session field instead of sessionName.

Sessions

Now you don’t have to scan QR code each time you run WAHA, WAHA saves it for you! Available only in Plus version.

Authentication

Now you can authenticate all requests for WAHA - use WHATSAPP_API_KEY=secret environment variable to set “secret key”.

If WHATSAPP_API_KEY is set - requests must have X-Api-Key header with secret value, where secret - any random secret key.

Webhooks

Instead of setting each webhook via environment variables - we use two environments variables:

  • WHATSAPP_HOOK_URL - to set a URL
  • WHATSAPP_HOOK_EVENTS - to set events that are sent to the URL
PreviousCurrent
WHATSAPP_HOOK_ONMESSAGE=https://httpbin.org/post 
WHATSAPP_HOOK_ONANYMESSAGE=https://httpbin.org/post
WHATSAPP_HOOK_URL=https://httpbin.org/post 
WHATSAPP_HOOK_EVENTS=message,message.any

Webhook payload

The data for webhooks are wrapped inside a new WAWebhook object with event and payload fields to help you identify which handler you should call based on event.

{
  "event": "message.any",
  "payload": {
  }
}