-
-
-## Contacts Sync
-**Contact information** is displayed in **Chatwoot** from **WhatsApp**:
-
-
-
-## Messages
-
-Send and receive **text messages**:
-
-
-
-
-**Reply** to specific messages:
-
-
-
-
-**Receive media** files from WhatsApp:
-
-
-
-
-**Send media files** through **Chatwoot**
-(available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}))
-
-
-
-
-View message **reactions** from WhatsApp:
-
-
-
-
-**Messages from WhatsApp** are displayed in Chatwoot:
-
-
-
-
-**Deleted messages** in **WhatsApp** are marked accordingly:
-
-
-
-
-**Delete messages** in **Chatwoot**:
-
-
-
-
-Add **private notes** visible only to agents:
-
-
-
-
-## Languages
-
-You can set your language when creating a **Chatwoot App** in the **WAHA Dashboard**:
-
-
-
-You'll receive notification messages in the selected language in **Chatwoot**:
-
-
-
-## Commands
-Use the `help` command to see available commands in **WhatsApp Integration (WAHA)** conversation:
-
-
-
-**Scan QR code** to connect WhatsApp:
-
-
-
-Get session status updates in Chatwoot:
-
-
-
-
-## Error Handling
-In case of any errors, WAHA retries a few times and then gives detailed information about the error:
-
-
-
-You can use the **WAHA Jobs Dashboard** at [http://localhost:3000/jobs](http://localhost:3000/jobs) for monitoring:
-
-
+---
+title: "WhatsApp + ChatWoot - Overview"
+description: "WhatsApp + ChatWoot - Overview"
+excerpt: "WhatsApp + ChatWoot - Overview"
+date: 2025-07-12T08:48:45+00:00
+draft: false
+images: ["waha-chatwoot.png"]
+categories: ["Apps", "ChatWoot"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: apps-chatwoot-overview
+---
+
+## Overview
+
+**WAHA** provides a seamless integration with **Chatwoot**, allowing you to manage your WhatsApp communications through a powerful customer service platform. This overview highlights the key features and capabilities of the integration.
+
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+
+
+
+
+
+## Contacts Sync
+
+**Contact information** is displayed in **Chatwoot** from **WhatsApp**:
+
+
+
+## Messages
+
+Send and receive **text messages**:
+
+
+
+
+**Reply** to specific messages:
+
+
+
+
+**Receive media** files from WhatsApp:
+
+
+
+
+**Send media files** through **Chatwoot**
+(available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}))
+
+
+
+
+View message **reactions** from WhatsApp:
+
+
+
+
+**Messages from WhatsApp** are displayed in Chatwoot:
+
+
+
+
+**Deleted messages** in **WhatsApp** are marked accordingly:
+
+
+
+
+**Delete messages** in **Chatwoot**:
+
+
+
+
+Add **private notes** visible only to agents:
+
+
+
+## Languages
+
+You can set your language when creating a **Chatwoot App** in the **WAHA Dashboard**:
+
+
+
+You'll receive notification messages in the selected language in **Chatwoot**:
+
+
+
+## Commands
+
+Use the `help` command to see available commands in **WhatsApp Integration (WAHA)** conversation:
+
+
+
+**Scan QR code** to connect WhatsApp:
+
+
+
+Get session status updates in Chatwoot:
+
+
+
+## Error Handling
+
+In case of any errors, WAHA retries a few times and then gives detailed information about the error:
+
+
+
+You can use the **WAHA Jobs Dashboard** at [http://localhost:3000/jobs](http://localhost:3000/jobs) for monitoring:
+
+
diff --git a/content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md b/content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md
index d31c9bfa3..e0759d86e 100644
--- a/content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md
+++ b/content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md
@@ -1,11 +1,12 @@
-
-{{< callout icon="outline/server" title="Using a VPS or VM via SSH?" >}}
-
-You need to **forward ports** so you can access remote server ports from your laptop.
-
-Connect to the server using the command:
-
-```bash { title="Connect to server with port forwarding" }
-ssh -L 3000:localhost:3000 -L 3009:localhost:3009 {user}@{server}
-```
-{{< /callout >}}
+
+{{< callout icon="outline/server" title="Using a VPS or VM via SSH?" >}}
+
+You need to **forward ports** so you can access remote server ports from your laptop.
+
+Connect to the server using the command:
+
+```bash { title="Connect to server with port forwarding" }
+ssh -L 3000:localhost:3000 -L 3009:localhost:3009 {user}@{server}
+```
+
+{{< /callout >}}
diff --git a/content/blog/apps-chatwoot-1-install/index.md b/content/blog/apps-chatwoot-1-install/index.md
index 50e26f58c..6719e31af 100644
--- a/content/blog/apps-chatwoot-1-install/index.md
+++ b/content/blog/apps-chatwoot-1-install/index.md
@@ -1,216 +1,243 @@
----
-title: "WhatsApp + ChatWoot - Installation Guide"
-description: "WhatsApp + ChatWoot - Installation Guide"
-excerpt: "WhatsApp + ChatWoot - Installation Guide"
-date: 2025-07-11T08:48:45+00:00
-draft: false
-images: [ "waha-chatwoot.png" ]
-categories: [ "Apps", "ChatWoot" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: apps-chatwoot-install
----
-
-## Overview
-Complete guide to install and set up production-ready **WAHA** and **Chatwoot** instances on your own infrastructure!
-
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
-
-After completing the installation guide, you'll have:
-- **WAHA** on [**http://localhost:3000**](http://localhost:3000)
-- **ChatWoot** on [**http://localhost:3009**](http://localhost:3009)
-
-{{< include file="content/docs/apps/chatwoot/-disclaimer.md" >}}
-
-## Requirements
-- **Hardware**: VM, VPS, or laptop with minimum **2 CPU** and **4GB RAM**
-- **Operating System**: **Debian** or **Ubuntu** based distributions.
-
-{{< include file="content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md" >}}
-
-## Steps to Deploy
-### Step 0: Add DNS Aliases
-First, we need to add **DNS Aliases** so everything works as inside docker containers.
-
-👉 **Run the below commands on YOUR LAPTOP/PC**, NOT on the **VPS or VM**:
-
-{{< tabs "dns-aliases" >}}
-{{< tab "MacOS" >}}
-```bash { title="Add DNS Aliases (MacOS)" }
-# Add
-echo "127.0.0.1 chatwoot" | sudo tee -a /etc/hosts
-echo "127.0.0.1 waha" | sudo tee -a /etc/hosts
-
-# Check it worked - you must see the line like:
-# 64 bytes from localhost (127.0.0.1): ...
-ping chatwoot
-ping waha
-```
-{{< /tab >}}
-
-{{< tab "Linux" >}}
-```bash { title="Add DNS Aliases (Linux)" }
-# Add
-echo "127.0.0.1 chatwoot" | sudo tee -a /etc/hosts
-echo "127.0.0.1 waha" | sudo tee -a /etc/hosts
-
-# Check it worked - you must see the line like:
-# 64 bytes from localhost (127.0.0.1): ...
-ping chatwoot
-ping waha
-```
-{{< /tab >}}
-{{< tab "Windows" >}}
-Run **PowerShell as Admin** and execute:
-```bash { title="Add DNS Aliases (Windows, PowerShell as Admin)" }
-Add-Content -Path "$env:SystemRoot\System32\drivers\etc\hosts" -Value "`n127.0.0.1 chatwoot"
-Add-Content -Path "$env:SystemRoot\System32\drivers\etc\hosts" -Value "`n127.0.0.1 waha"
-
-ping chatwoot
-ping waha
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-### Step 1: Install Docker
-```bash { title="Install Docker" }
-# example in ubuntu
-apt-get update
-apt-get upgrade
-curl -fsSL https://get.docker.com -o get-docker.sh
-sudo sh get-docker.sh
-apt install docker-compose-plugin
-```
-
-### Step 2: Download the Required Files
-```bash { title="Download files" }
-# Download the env files
-wget -O .waha.env https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/docker-compose/chatwoot/.waha.env
-wget -O .chatwoot.env https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/docker-compose/chatwoot/.chatwoot.env
-# Download docker-compose
-wget -O docker-compose.yaml https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/docker-compose/chatwoot/docker-compose.yaml
-```
-
-### Step 3: Configure Environment Variables
-Now you can tweak `.waha.env`, `.chatwoot.env` and `docker-compose.yaml` according to your preferences.
-
-Here are a few environment variables we suggest that you change before going forward (in this guide we'll use **the default values**):
-```env { title=".waha.env" }
-WAHA_API_KEY_PLAIN=00000000000000000000000000000000
-WAHA_API_KEY=sha512:98b6d128682e280b74b324ca82a6bae6e8a3f7174e0605bfd52eb9948fad8984854ec08f7652f32055c4a9f12b69add4850481d9503a7f2225501671d6124648
-WAHA_DASHBOARD_USERNAME=admin
-WAHA_DASHBOARD_PASSWORD=11111111111111111111111111111111
-WHATSAPP_SWAGGER_USERNAME=admin
-WHATSAPP_SWAGGER_PASSWORD=11111111111111111111111111111111
-```
-
-{{< callout context="danger" title="Do Not Use Default API Keys or Passwords!" icon="outline/shield-check" >}}
-Even if you're running WAHA on a private server and think the IP is unknown - it's
-straightforward for attackers to find and exploit it to send spam or abuse your WhatsApp sessions.
-
-Always set strong, random values (see a guide below) for:
-- `WAHA_API_KEY`
-- `WAHA_DASHBOARD_PASSWORD`
-- `WHATSAPP_SWAGGER_PASSWORD` - you can the same as for `WAHA_DASHBOARD_PASSWORD`
-
-**👉 How to Generate and Hash Api-Key**
-{{< include file="content/docs/how-to/security/how-to-generate-api-key.md" >}}
-{{< /callout >}}
-
-{{< details "👉 How to Generate and Hash Api-Key" >}}
-{{< include file="content/docs/how-to/security/how-to-generate-api-key.md" >}}
-{{< /details >}}
-
-### Step 4: Pull Docker Images
-{{< tabs "download-docker-image" >}}
-
-{{< tab "➕ WAHA Plus" >}}
-If you got the
-[➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}})
-, use the following commands:
-
-```bash { title="Pull Docker Images: WAHA Plus" }
-docker login -u devlikeapro -p {KEY}
-docker compose pull
-docker logout
-```
-
-👉 Go to
-[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
-to generate the command with the right version.
-{{< /tab >}}
-
-{{< tab "WAHA Core" >}}
-1. In `docker-compose.yaml` change `image: devlikeapro/waha-plus` to `image: devlikeapro/waha`
-2. Run the command:
-```bash { title="Pull Docker Images: WAHA Core" }
-docker compose pull
-```
-
-{{< /tab >}}
-
-{{< tab "WAHA (ARM)" >}}
-If you're using **ARM CPU** (like Apple M1/M2, Raspberry Pi etc.).
-
-If you got the
-[➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}}):
-1. In `docker-compose.yaml` change `image: devlikeapro/waha-plus` to `image: devlikeapro/waha-plus:arm`
-2. Run the commands:
-
-```bash { title="Pull Docker Images: WAHA Plus (ARM)" }
-docker login -u devlikeapro -p {KEY}
-docker pull devlikeapro/waha-plus:arm
-docker logout
-```
-
-👉 Go to
-[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
-to generate the command with the right version.
-
----
-
-If you want to run **WAHA Core**:
-1. In `docker-compose.yaml` change `image: devlikeapro/waha-plus` to `image: devlikeapro/waha:arm`
-2. Run the commands:
-```bash { title="Pull Docker Images: WAHA Core (ARM)" }
-docker compose pull
-```
-{{< /tab >}}
-
-{{< /tabs >}}
-
-### Step 5: Prepare ChatWoot Database
-```bash { title="Prepare ChatWoot Database" }
-docker compose run --rm chatwoot bundle exec rails db:chatwoot_prepare
-```
-
-### Step 6: Start the Services
-```bash { title="Start Services" }
-docker compose up -d
-```
-
-### Step 7: Access Your WAHA
-**Open** [**http://localhost:3000/dashboard**](http://localhost:3000/dashboard) with credentials:
-- User: `admin`
-- Password: `11111111111111111111111111111111`
-
-**Add Api Key** to your worker:
-- Api-Key: `00000000000000000000000000000000`
-
-
-
-
-### Step 8: Access Your ChatWoot
-**Open** and **finish** the onboarding guide on [**http://localhost:3009/**](http://localhost:3009/)
-
-
-
-
-## What is next?
-
-👉 Connect **WhatsApp** to **ChatWoot** in
-[**WhatsApp + ChatWoot - Configuration Guide**]({{< relref "/blog/apps-chatwoot-2-config" >}})
-
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+---
+title: "WhatsApp + ChatWoot - Installation Guide"
+description: "WhatsApp + ChatWoot - Installation Guide"
+excerpt: "WhatsApp + ChatWoot - Installation Guide"
+date: 2025-07-11T08:48:45+00:00
+draft: false
+images: ["waha-chatwoot.png"]
+categories: ["Apps", "ChatWoot"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: apps-chatwoot-install
+---
+
+## Overview
+
+Complete guide to install and set up production-ready **WAHA** and **Chatwoot** instances on your own infrastructure!
+
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+
+After completing the installation guide, you'll have:
+
+- **WAHA** on [**http://localhost:3000**](http://localhost:3000)
+- **ChatWoot** on [**http://localhost:3009**](http://localhost:3009)
+
+{{< include file="content/docs/apps/chatwoot/-disclaimer.md" >}}
+
+## Requirements
+
+- **Hardware**: VM, VPS, or laptop with minimum **2 CPU** and **4GB RAM**
+- **Operating System**: **Debian** or **Ubuntu** based distributions.
+
+{{< include file="content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md" >}}
+
+## Steps to Deploy
+
+### Step 0: Add DNS Aliases
+
+First, we need to add **DNS Aliases** so everything works as inside docker containers.
+
+👉 **Run the below commands on YOUR LAPTOP/PC**, NOT on the **VPS or VM**:
+
+{{< tabs "dns-aliases" >}}
+{{< tab "MacOS" >}}
+
+```bash { title="Add DNS Aliases (MacOS)" }
+# Add
+echo "127.0.0.1 chatwoot" | sudo tee -a /etc/hosts
+echo "127.0.0.1 waha" | sudo tee -a /etc/hosts
+
+# Check it worked - you must see the line like:
+# 64 bytes from localhost (127.0.0.1): ...
+ping chatwoot
+ping waha
+```
+
+{{< /tab >}}
+
+{{< tab "Linux" >}}
+
+```bash { title="Add DNS Aliases (Linux)" }
+# Add
+echo "127.0.0.1 chatwoot" | sudo tee -a /etc/hosts
+echo "127.0.0.1 waha" | sudo tee -a /etc/hosts
+
+# Check it worked - you must see the line like:
+# 64 bytes from localhost (127.0.0.1): ...
+ping chatwoot
+ping waha
+```
+
+{{< /tab >}}
+{{< tab "Windows" >}}
+Run **PowerShell as Admin** and execute:
+
+```bash { title="Add DNS Aliases (Windows, PowerShell as Admin)" }
+Add-Content -Path "$env:SystemRoot\System32\drivers\etc\hosts" -Value "`n127.0.0.1 chatwoot"
+Add-Content -Path "$env:SystemRoot\System32\drivers\etc\hosts" -Value "`n127.0.0.1 waha"
+
+ping chatwoot
+ping waha
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+### Step 1: Install Docker
+
+```bash { title="Install Docker" }
+# example in ubuntu
+apt-get update
+apt-get upgrade
+curl -fsSL https://get.docker.com -o get-docker.sh
+sudo sh get-docker.sh
+apt install docker-compose-plugin
+```
+
+### Step 2: Download the Required Files
+
+```bash { title="Download files" }
+# Download the env files
+wget -O .waha.env https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/docker-compose/chatwoot/.waha.env
+wget -O .chatwoot.env https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/docker-compose/chatwoot/.chatwoot.env
+# Download docker-compose
+wget -O docker-compose.yaml https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/docker-compose/chatwoot/docker-compose.yaml
+```
+
+### Step 3: Configure Environment Variables
+
+Now you can tweak `.waha.env`, `.chatwoot.env` and `docker-compose.yaml` according to your preferences.
+
+Here are a few environment variables we suggest that you change before going forward (in this guide we'll use **the default values**):
+
+```env { title=".waha.env" }
+WAHA_API_KEY_PLAIN=00000000000000000000000000000000
+WAHA_API_KEY=sha512:98b6d128682e280b74b324ca82a6bae6e8a3f7174e0605bfd52eb9948fad8984854ec08f7652f32055c4a9f12b69add4850481d9503a7f2225501671d6124648
+WAHA_DASHBOARD_USERNAME=admin
+WAHA_DASHBOARD_PASSWORD=11111111111111111111111111111111
+WHATSAPP_SWAGGER_USERNAME=admin
+WHATSAPP_SWAGGER_PASSWORD=11111111111111111111111111111111
+```
+
+{{< callout context="danger" title="Do Not Use Default API Keys or Passwords!" icon="outline/shield-check" >}}
+Even if you're running WAHA on a private server and think the IP is unknown - it's
+straightforward for attackers to find and exploit it to send spam or abuse your WhatsApp sessions.
+
+Always set strong, random values (see a guide below) for:
+
+- `WAHA_API_KEY`
+- `WAHA_DASHBOARD_PASSWORD`
+- `WHATSAPP_SWAGGER_PASSWORD` - you can the same as for `WAHA_DASHBOARD_PASSWORD`
+
+**👉 How to Generate and Hash Api-Key**
+{{< include file="content/docs/how-to/security/how-to-generate-api-key.md" >}}
+{{< /callout >}}
+
+{{< details "👉 How to Generate and Hash Api-Key" >}}
+{{< include file="content/docs/how-to/security/how-to-generate-api-key.md" >}}
+{{< /details >}}
+
+### Step 4: Pull Docker Images
+
+{{< tabs "download-docker-image" >}}
+
+{{< tab "➕ WAHA Plus" >}}
+If you got the
+[➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}})
+, use the following commands:
+
+```bash { title="Pull Docker Images: WAHA Plus" }
+docker login -u devlikeapro -p {KEY}
+docker compose pull
+docker logout
+```
+
+👉 Go to
+[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
+to generate the command with the right version.
+{{< /tab >}}
+
+{{< tab "WAHA Core" >}}
+
+1. In `docker-compose.yaml` change `image: devlikeapro/waha-plus` to `image: devlikeapro/waha`
+2. Run the command:
+
+```bash { title="Pull Docker Images: WAHA Core" }
+docker compose pull
+```
+
+{{< /tab >}}
+
+{{< tab "WAHA (ARM)" >}}
+If you're using **ARM CPU** (like Apple M1/M2, Raspberry Pi etc.).
+
+If you got the
+[➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}}):
+
+1. In `docker-compose.yaml` change `image: devlikeapro/waha-plus` to `image: devlikeapro/waha-plus:arm`
+2. Run the commands:
+
+```bash { title="Pull Docker Images: WAHA Plus (ARM)" }
+docker login -u devlikeapro -p {KEY}
+docker pull devlikeapro/waha-plus:arm
+docker logout
+```
+
+👉 Go to
+[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
+to generate the command with the right version.
+
+---
+
+If you want to run **WAHA Core**:
+
+1. In `docker-compose.yaml` change `image: devlikeapro/waha-plus` to `image: devlikeapro/waha:arm`
+2. Run the commands:
+
+```bash { title="Pull Docker Images: WAHA Core (ARM)" }
+docker compose pull
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
+
+### Step 5: Prepare ChatWoot Database
+
+```bash { title="Prepare ChatWoot Database" }
+docker compose run --rm chatwoot bundle exec rails db:chatwoot_prepare
+```
+
+### Step 6: Start the Services
+
+```bash { title="Start Services" }
+docker compose up -d
+```
+
+### Step 7: Access Your WAHA
+
+**Open** [**http://localhost:3000/dashboard**](http://localhost:3000/dashboard) with credentials:
+
+- User: `admin`
+- Password: `11111111111111111111111111111111`
+
+**Add Api Key** to your worker:
+
+- Api-Key: `00000000000000000000000000000000`
+
+
+
+### Step 8: Access Your ChatWoot
+
+**Open** and **finish** the onboarding guide on [**http://localhost:3009/**](http://localhost:3009/)
+
+
+
+## What is next?
+
+👉 Connect **WhatsApp** to **ChatWoot** in
+[**WhatsApp + ChatWoot - Configuration Guide**]({{< relref "/blog/apps-chatwoot-2-config" >}})
+
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
diff --git a/content/blog/apps-chatwoot-2-config/index.md b/content/blog/apps-chatwoot-2-config/index.md
index d93d59dfb..ebe4c35ca 100644
--- a/content/blog/apps-chatwoot-2-config/index.md
+++ b/content/blog/apps-chatwoot-2-config/index.md
@@ -1,146 +1,162 @@
----
-title: "WhatsApp + ChatWoot - Configuration Guide"
-description: "WhatsApp + ChatWoot - Configuration Guide"
-excerpt: "WhatsApp + ChatWoot - Configuration Guide"
-date: 2025-07-10T08:48:45+00:00
-draft: false
-images: [ "waha-chatwoot.png" ]
-categories: [ "Apps", "ChatWoot" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: apps-chatwoot-config
----
-
-## Overview
-Complete guide to install and set up production-ready **WAHA** and **Chatwoot** instances on your own infrastructure!
-
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
-
-After completing the configuration guide, you'll have:
-- **WhatsApp** connected to [**ChatWoot Inbox**](https://www.chatwoot.com/hc/user-guide/articles/1677492191-adding-inboxes) using **WAHA** [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
-- **WAHA** on [**http://localhost:3000**](http://localhost:3000)
-- **ChatWoot** on [**http://localhost:3009**](http://localhost:3009)
-
-{{< include file="content/docs/apps/chatwoot/-disclaimer.md" >}}
-
-## Requirements
-At this point you should have:
-- **WAHA** on [**http://localhost:3000**](http://localhost:3000)
-- **ChatWoot** on [**http://localhost:3009**](http://localhost:3009)
-
-If you don't have it - kindly follow
-[**WhatsApp + ChatWoot - Installation Guide**]({{< relref "/blog/apps-chatwoot-1-install" >}})
-
-{{< include file="content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md" >}}
-
-## Steps to Configure ChatWoot App
-Now you're ready to setup **WhatsApp** to **ChatWoot** connection using
-**WAHA** [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
-
-### Step 1: Create Session in WAHA
-{{< tabs "waha-create-session" >}}
-{{< tab "➕ WAHA Plus" >}}
-- Open [http://localhost:3000/dashboard](http://localhost:3000/dashboard)
-- Create a new **default** session
- - ⚠️ Hit **Create**, not **Create & Start**
-
-
-{{< /tab >}}
-
-{{< tab "WAHA Core" >}}
-- Open [http://localhost:3000/dashboard](http://localhost:3000/dashboard)
-- Make sure there's **default** session
-
-
-{{< /tab >}}
-
-{{< /tabs >}}
-
-### Step 2: Copy Webhook URL in WAHA
-- Open [http://localhost:3000/dashboard](http://localhost:3000/dashboard)
-- Click **Apps**
-- Click **Add App**
-- Copy **Webhook URL**
-- Keep the tab open, we'll fill the fields
-
-
-
-### Step 3: Create API Inbox in ChatWoot
-- Go to **ChatWoot** [http://localhost:3009](http://localhost:3009)
-- Open **Settings → Inboxes**
-- Click **Add Inbox**, choose **API**
-- Set fields as:
- - **Name**: `WhatsApp - default` (name can be anything, doesn't have to follow that pattern)
- - **Webhook URL**: `http://waha:3009/webhook/chatwoot/...` - Webhook URL from WAHA
-- **Finish** creation guide
-
-
-
-
-### Step 4: Collect ChatWoot Fields for WAHA
-Now we'll need to find those fields in **ChatWoot**
-
-
-
-Check the screenshots below, but here's the path how you can find the values:
-- **ChatWoot URL** - put `http://chatwoot:3009`
- - 👉 Note that it's not `localhost`, it's `chatwoot`!
-- **Account ID** - find it on **Settings → Account Settings**
-- **Account Token** - find it on **(click on profile) → Profile settings**
-- **Inbox ID** - find it on **Settings → Inboxes → (inspect browser url, the last part)**
-- **Inbox Identifier** - find it on **Settings → Inboxes → {Inbox} → Configuration**
-
-
-{{< img-sign text="Account ID: Settings → Account Settings" >}}
-
-
-{{< img-sign text="Account Token: (click on profile) → Profile settings" >}}
-
-
-{{< img-sign text="Inbox ID, Inbox Identifier: Settings → Inboxes → {Inbox} → Configuration" >}}
-
-### Step 5: Save App Configuration in WAHA
-Click **Save** after you finish all fields.
-
-
-
-### Step 6: Test Integration in ChatWoot
-Now you can open a new conversation created by WAHA and send `status` or `help` to check that integration is working.
-
-- Go to **ChatWoot** [http://localhost:3009](http://localhost:3009)
-- Find new `WhatsApp Integration (WAHA)` conversation
-- Send `status` or `help` to test **WAHA <=> ChatWoot** connection
-
-
-
-### Step 7: Start Session and Scan QR in ChatWoot
-{{< callout context="caution" title="Get your phone with WhatsApp App" icon="outline/shield-check" >}}
-Now we're ready to connect your phone with WAHA and ChatWoot.
-
-For that you'll need to
-[**Link a device**](https://faq.whatsapp.com/1317564962315842/?helpref=uf_share) on your mobile phone using QR code.
-
-Open **WhatsApp** on the phone and click on three dots at the right and **Linked Devices** and be ready to scan QR code
-{{< /callout >}}
-
-- In `WhatsApp Integration (WAHA)` conversation **send** `start` message
-- Open **WhatsApp** on your phone, click **More** (three dots), **Linked Devices**, **Link a device**
-- **Scan QR** code from ChatWoot
-
-
-
-### Step 8: Test WhatsApp Integration in ChatWoot
-Now let's see how ChatWoot WhatsApp integration works!
-
-- Send a message from **another** phone to **a connected** account using **WhatsApp**
-- Send a response from **ChatWoot**
-
-
-## What is next?
-
-👉 Setup **HTTPS** for **ChatWoot** in
-[**WhatsApp + ChatWoot - HTTPS Guide**]({{< relref "/blog/apps-chatwoot-3-https" >}})
-
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+---
+title: "WhatsApp + ChatWoot - Configuration Guide"
+description: "WhatsApp + ChatWoot - Configuration Guide"
+excerpt: "WhatsApp + ChatWoot - Configuration Guide"
+date: 2025-07-10T08:48:45+00:00
+draft: false
+images: ["waha-chatwoot.png"]
+categories: ["Apps", "ChatWoot"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: apps-chatwoot-config
+---
+
+## Overview
+
+Complete guide to install and set up production-ready **WAHA** and **Chatwoot** instances on your own infrastructure!
+
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+
+After completing the configuration guide, you'll have:
+
+- **WhatsApp** connected to [**ChatWoot Inbox**](https://www.chatwoot.com/hc/user-guide/articles/1677492191-adding-inboxes) using **WAHA** [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
+- **WAHA** on [**http://localhost:3000**](http://localhost:3000)
+- **ChatWoot** on [**http://localhost:3009**](http://localhost:3009)
+
+{{< include file="content/docs/apps/chatwoot/-disclaimer.md" >}}
+
+## Requirements
+
+At this point you should have:
+
+- **WAHA** on [**http://localhost:3000**](http://localhost:3000)
+- **ChatWoot** on [**http://localhost:3009**](http://localhost:3009)
+
+If you don't have it - kindly follow
+[**WhatsApp + ChatWoot - Installation Guide**]({{< relref "/blog/apps-chatwoot-1-install" >}})
+
+{{< include file="content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md" >}}
+
+## Steps to Configure ChatWoot App
+
+Now you're ready to setup **WhatsApp** to **ChatWoot** connection using
+**WAHA** [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
+
+### Step 1: Create Session in WAHA
+
+{{< tabs "waha-create-session" >}}
+{{< tab "➕ WAHA Plus" >}}
+
+- Open [http://localhost:3000/dashboard](http://localhost:3000/dashboard)
+- Create a new **default** session
+ - ⚠️ Hit **Create**, not **Create & Start**
+
+
+{{< /tab >}}
+
+{{< tab "WAHA Core" >}}
+
+- Open [http://localhost:3000/dashboard](http://localhost:3000/dashboard)
+- Make sure there's **default** session
+
+
+{{< /tab >}}
+
+{{< /tabs >}}
+
+### Step 2: Copy Webhook URL in WAHA
+
+- Open [http://localhost:3000/dashboard](http://localhost:3000/dashboard)
+- Click **Apps**
+- Click **Add App**
+- Copy **Webhook URL**
+- Keep the tab open, we'll fill the fields
+
+
+
+### Step 3: Create API Inbox in ChatWoot
+
+- Go to **ChatWoot** [http://localhost:3009](http://localhost:3009)
+- Open **Settings → Inboxes**
+- Click **Add Inbox**, choose **API**
+- Set fields as:
+ - **Name**: `WhatsApp - default` (name can be anything, doesn't have to follow that pattern)
+ - **Webhook URL**: `http://waha:3009/webhook/chatwoot/...` - Webhook URL from WAHA
+- **Finish** creation guide
+
+
+
+### Step 4: Collect ChatWoot Fields for WAHA
+
+Now we'll need to find those fields in **ChatWoot**
+
+
+
+Check the screenshots below, but here's the path how you can find the values:
+
+- **ChatWoot URL** - put `http://chatwoot:3009`
+ - 👉 Note that it's not `localhost`, it's `chatwoot`!
+- **Account ID** - find it on **Settings → Account Settings**
+- **Account Token** - find it on **(click on profile) → Profile settings**
+- **Inbox ID** - find it on **Settings → Inboxes → (inspect browser url, the last part)**
+- **Inbox Identifier** - find it on **Settings → Inboxes → {Inbox} → Configuration**
+
+
+{{< img-sign text="Account ID: Settings → Account Settings" >}}
+
+
+{{< img-sign text="Account Token: (click on profile) → Profile settings" >}}
+
+
+{{< img-sign text="Inbox ID, Inbox Identifier: Settings → Inboxes → {Inbox} → Configuration" >}}
+
+### Step 5: Save App Configuration in WAHA
+
+Click **Save** after you finish all fields.
+
+
+
+### Step 6: Test Integration in ChatWoot
+
+Now you can open a new conversation created by WAHA and send `status` or `help` to check that integration is working.
+
+- Go to **ChatWoot** [http://localhost:3009](http://localhost:3009)
+- Find new `WhatsApp Integration (WAHA)` conversation
+- Send `status` or `help` to test **WAHA <=> ChatWoot** connection
+
+
+
+### Step 7: Start Session and Scan QR in ChatWoot
+
+{{< callout context="caution" title="Get your phone with WhatsApp App" icon="outline/shield-check" >}}
+Now we're ready to connect your phone with WAHA and ChatWoot.
+
+For that you'll need to
+[**Link a device**](https://faq.whatsapp.com/1317564962315842/?helpref=uf_share) on your mobile phone using QR code.
+
+Open **WhatsApp** on the phone and click on three dots at the right and **Linked Devices** and be ready to scan QR code
+{{< /callout >}}
+
+- In `WhatsApp Integration (WAHA)` conversation **send** `start` message
+- Open **WhatsApp** on your phone, click **More** (three dots), **Linked Devices**, **Link a device**
+- **Scan QR** code from ChatWoot
+
+
+
+### Step 8: Test WhatsApp Integration in ChatWoot
+
+Now let's see how ChatWoot WhatsApp integration works!
+
+- Send a message from **another** phone to **a connected** account using **WhatsApp**
+- Send a response from **ChatWoot**
+
+
+
+## What is next?
+
+👉 Setup **HTTPS** for **ChatWoot** in
+[**WhatsApp + ChatWoot - HTTPS Guide**]({{< relref "/blog/apps-chatwoot-3-https" >}})
+
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
diff --git a/content/blog/apps-chatwoot-3-https/index.md b/content/blog/apps-chatwoot-3-https/index.md
index 0b4128f9d..c9caeedc6 100644
--- a/content/blog/apps-chatwoot-3-https/index.md
+++ b/content/blog/apps-chatwoot-3-https/index.md
@@ -1,231 +1,259 @@
----
-title: "WhatsApp + ChatWoot - HTTPS Guide"
-description: "WhatsApp + ChatWoot - HTTPS Guide"
-excerpt: "WhatsApp + ChatWoot - HTTPS Guide"
-date: 2025-07-07T08:48:45+00:00
-draft: false
-images: [ "waha-chatwoot.png" ]
-categories: [ "Apps", "ChatWoot" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: apps-chatwoot-3-https
----
-
-## Overview
-Complete guide to install and set up production-ready **WAHA** and **Chatwoot** instances on your own infrastructure!
-
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
-
-After completing the configuration guide, you'll have:
-- **WAHA** on `https://waha.{yourdomain}`
-- **ChatWoot** on `https://chatwoot.{yourdomain}`
-
-{{< include file="content/docs/apps/chatwoot/-disclaimer.md" >}}
-
-## Requirements
-At this point you should have:
-- **WAHA** on [**http://localhost:3000**](http://localhost:3000)
-- **ChatWoot** on [**http://localhost:3009**](http://localhost:3009)
-- **WhatsApp** connected to [**ChatWoot Inbox**](https://www.chatwoot.com/hc/user-guide/articles/1677492191-adding-inboxes) using **WAHA** [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
-
-If you don't have it - kindly follow **the previous guides in the series above ☝️**.
-
-{{< include file="content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md" >}}
-
-Now you're ready to publish your **ChatWoot** and **WAHA** instances on the internet!
-
-## Configure DNS
-If you have VPS with a Public IP address, you need to configure DNS - add **A** records to point those domains:
-1. `waha.` => `YOUR_VPS_IP_ADDRESS`
-2. `chatwoot.` => `YOUR_VPS_IP_ADDRESS`
-
-## Configure HTTPS for ChatWoot
-### Step 1: Install Nginx
-```bash { title="Install Nginx" }
-sudo apt-get install nginx
-```
-### Step 2: Add Nginx Config
-```bash { title="Add Nginx config" }
-cd /etc/nginx/sites-enabled
-nano chatwoot..conf
-```
-
-```yaml { title="chatwoot..conf" }
-server {
- server_name chatwoot.;
-
- # Point upstream to Chatwoot App Server
- set $upstream 127.0.0.1:3009;
-
- # Nginx strips out underscore in headers by default
- # Chatwoot relies on underscore in headers for API
- # Make sure that the config is set to on.
- underscores_in_headers on;
- location /.well-known {
- alias /var/www/ssl-proof/chatwoot/.well-known;
- }
-
- location / {
- proxy_pass_header Authorization;
- proxy_pass http://$upstream;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "Upgrade";
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Forwarded-Ssl on; # Optional
-
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_http_version 1.1;
- proxy_buffering off;
-
- client_max_body_size 0;
- proxy_read_timeout 36000s;
- proxy_redirect off;
- }
- listen 80;
-}
-```
-### Step 3: Verify and Reload Nginx Config
-```bash { title="Verify and reload Nginx config" }
-nginx -t
-systemctl reload nginx
-```
-
-### Step 4: Run Let's Encrypt to configure SSL certificate
-```bash { title="Run Let's Encrypt to configure SSL certificate" }
-apt install certbot
-apt-get install python3-certbot-nginx
-mkdir -p /var/www/ssl-proof/chatwoot/.well-known
-certbot --webroot -w /var/www/ssl-proof/chatwoot/ -d chatwoot. -i nginx
-```
-
-### Step 5: Update env variables
-Update `FRONTEND_URL` in `.chatwoot.env`
-```bash
-nano .chatwoot.env
-```
-
-```env { title=".chatwoot.env" }
-FRONTEND_URL=https://chatwoot.
-```
-
-Apply the changes:
-```bash
-docker compose up -d
-```
-
-### Step 6: Access your installation
-- Open `https://chatwoot.`
-- Make sure it's working
-
-### Step 7: Update ChatWoot URL in WAHA
-- Open **WAHA** [http://localhost:3000](http://localhost:3000)
-- Open **Apps** and **Edit App**
-- Update **ChatWoot URL** from `http://chatwoot:3009` to `https://chatwoot.`
-- Hit **Save**
-- Open **ChatWoot** `https://chatwoot.`
-- Send `status` message to **WhatsApp Integration (WAHA)** conversation to test **WAHA <=> ChatWoot** connection
-
-## Configure HTTPS for WAHA
-It's **optional** step - follow it if you need access to
-[**📊 Dashboard**]({{< relref "dashboard" >}}) from the internet.
-
-Otherwise - use ssh port forwarding to manage WAHA, it's usually enough.
-
-{{< include file="content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md" >}}
-
-### Step 1: Install Nginx
-```bash { title="Install Nginx" }
-sudo apt-get install nginx
-```
-
-### Step 2: Add Nginx config
-```bash { title="Add Nginx config" }
-cd /etc/nginx/sites-enabled
-nano waha..conf
-```
-
-```yaml { title="waha..conf" }
-server {
- server_name waha.;
-
- # Point upstream to WAHA Server
- set $upstream 127.0.0.1:3000;
-
- location /.well-known {
- alias /var/www/ssl-proof/waha/.well-known;
- }
-
- location / {
- proxy_pass_header Authorization;
- proxy_pass http://$upstream;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "Upgrade";
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Forwarded-Ssl on; # Optional
-
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_http_version 1.1;
- proxy_buffering off;
-
- client_max_body_size 0;
- proxy_read_timeout 36000s;
- proxy_redirect off;
- }
- listen 80;
-}
-```
-### Step 3: Verify and reload Nginx config
-```bash { title="Verify and reload Nginx config" }
-nginx -t
-systemctl reload nginx
-```
-
-### Step 4: Run Let's Encrypt to configure SSL certificate
-```bash { title="Run Let's Encrypt to configure SSL certificate" }
-apt install certbot
-apt-get install python3-certbot-nginx
-mkdir -p /var/www/ssl-proof/waha/.well-known
-certbot --webroot -w /var/www/ssl-proof/waha/ -d waha. -i nginx
-```
-
-### Step 5: Update env variables
-Update `WAHA_BASE_URL` in `.waha.env`
-```bash
-nano .waha.env
-```
-
-```env { title=".waha.env" }
-WAHA_BASE_URL=https://waha.
-```
-
-Apply the changes:
-```bash
-docker compose up -d
-```
-
-### Step 6: Access your installation
-- Open `https://waha.`
-- Make sure it's working
-
-### Step 7: Update Webhook URL in ChatWoot
-- Open **ChatWoot** `https://chatwoot.`
-- Go to **Settings → Inboxes → {Inbox}**
-- Update **Webhook URL** from `http://waha:3000/{WEBHOOKURL}` to `https://waha./{WEBHOOKURL}`
-- Click **Save**
-- Send `status` message to **WhatsApp Integration (WAHA)** conversation to test **WAHA <=> ChatWoot** connection
-
-
-## What is next?
-
-[**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})
-to see features available for **WhatsApp ChatWoot** integration using **WAHA**.
-
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
\ No newline at end of file
+---
+title: "WhatsApp + ChatWoot - HTTPS Guide"
+description: "WhatsApp + ChatWoot - HTTPS Guide"
+excerpt: "WhatsApp + ChatWoot - HTTPS Guide"
+date: 2025-07-07T08:48:45+00:00
+draft: false
+images: ["waha-chatwoot.png"]
+categories: ["Apps", "ChatWoot"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: apps-chatwoot-3-https
+---
+
+## Overview
+
+Complete guide to install and set up production-ready **WAHA** and **Chatwoot** instances on your own infrastructure!
+
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+
+After completing the configuration guide, you'll have:
+
+- **WAHA** on `https://waha.{yourdomain}`
+- **ChatWoot** on `https://chatwoot.{yourdomain}`
+
+{{< include file="content/docs/apps/chatwoot/-disclaimer.md" >}}
+
+## Requirements
+
+At this point you should have:
+
+- **WAHA** on [**http://localhost:3000**](http://localhost:3000)
+- **ChatWoot** on [**http://localhost:3009**](http://localhost:3009)
+- **WhatsApp** connected to [**ChatWoot Inbox**](https://www.chatwoot.com/hc/user-guide/articles/1677492191-adding-inboxes) using **WAHA** [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
+
+If you don't have it - kindly follow **the previous guides in the series above ☝️**.
+
+{{< include file="content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md" >}}
+
+Now you're ready to publish your **ChatWoot** and **WAHA** instances on the internet!
+
+## Configure DNS
+
+If you have VPS with a Public IP address, you need to configure DNS - add **A** records to point those domains:
+
+1. `waha.` => `YOUR_VPS_IP_ADDRESS`
+2. `chatwoot.` => `YOUR_VPS_IP_ADDRESS`
+
+## Configure HTTPS for ChatWoot
+
+### Step 1: Install Nginx
+
+```bash { title="Install Nginx" }
+sudo apt-get install nginx
+```
+
+### Step 2: Add Nginx Config
+
+```bash { title="Add Nginx config" }
+cd /etc/nginx/sites-enabled
+nano chatwoot..conf
+```
+
+```yaml { title="chatwoot..conf" }
+server {
+ server_name chatwoot.;
+
+ # Point upstream to Chatwoot App Server
+ set $upstream 127.0.0.1:3009;
+
+ # Nginx strips out underscore in headers by default
+ # Chatwoot relies on underscore in headers for API
+ # Make sure that the config is set to on.
+ underscores_in_headers on;
+ location /.well-known {
+ alias /var/www/ssl-proof/chatwoot/.well-known;
+ }
+
+ location / {
+ proxy_pass_header Authorization;
+ proxy_pass http://$upstream;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "Upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-Ssl on; # Optional
+
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ proxy_http_version 1.1;
+ proxy_buffering off;
+
+ client_max_body_size 0;
+ proxy_read_timeout 36000s;
+ proxy_redirect off;
+ }
+ listen 80;
+}
+```
+
+### Step 3: Verify and Reload Nginx Config
+
+```bash { title="Verify and reload Nginx config" }
+nginx -t
+systemctl reload nginx
+```
+
+### Step 4: Run Let's Encrypt to configure SSL certificate
+
+```bash { title="Run Let's Encrypt to configure SSL certificate" }
+apt install certbot
+apt-get install python3-certbot-nginx
+mkdir -p /var/www/ssl-proof/chatwoot/.well-known
+certbot --webroot -w /var/www/ssl-proof/chatwoot/ -d chatwoot. -i nginx
+```
+
+### Step 5: Update env variables
+
+Update `FRONTEND_URL` in `.chatwoot.env`
+
+```bash
+nano .chatwoot.env
+```
+
+```env { title=".chatwoot.env" }
+FRONTEND_URL=https://chatwoot.
+```
+
+Apply the changes:
+
+```bash
+docker compose up -d
+```
+
+### Step 6: Access your installation
+
+- Open `https://chatwoot.`
+- Make sure it's working
+
+### Step 7: Update ChatWoot URL in WAHA
+
+- Open **WAHA** [http://localhost:3000](http://localhost:3000)
+- Open **Apps** and **Edit App**
+- Update **ChatWoot URL** from `http://chatwoot:3009` to `https://chatwoot.`
+- Hit **Save**
+- Open **ChatWoot** `https://chatwoot.`
+- Send `status` message to **WhatsApp Integration (WAHA)** conversation to test **WAHA <=> ChatWoot** connection
+
+## Configure HTTPS for WAHA
+
+It's **optional** step - follow it if you need access to
+[**📊 Dashboard**]({{< relref "dashboard" >}}) from the internet.
+
+Otherwise - use ssh port forwarding to manage WAHA, it's usually enough.
+
+{{< include file="content/blog/apps-chatwoot-1-install/-ssh-port-forwarding.md" >}}
+
+### Step 1: Install Nginx
+
+```bash { title="Install Nginx" }
+sudo apt-get install nginx
+```
+
+### Step 2: Add Nginx config
+
+```bash { title="Add Nginx config" }
+cd /etc/nginx/sites-enabled
+nano waha..conf
+```
+
+```yaml { title="waha..conf" }
+server {
+ server_name waha.;
+
+ # Point upstream to WAHA Server
+ set $upstream 127.0.0.1:3000;
+
+ location /.well-known {
+ alias /var/www/ssl-proof/waha/.well-known;
+ }
+
+ location / {
+ proxy_pass_header Authorization;
+ proxy_pass http://$upstream;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "Upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-Ssl on; # Optional
+
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ proxy_http_version 1.1;
+ proxy_buffering off;
+
+ client_max_body_size 0;
+ proxy_read_timeout 36000s;
+ proxy_redirect off;
+ }
+ listen 80;
+}
+```
+
+### Step 3: Verify and reload Nginx config
+
+```bash { title="Verify and reload Nginx config" }
+nginx -t
+systemctl reload nginx
+```
+
+### Step 4: Run Let's Encrypt to configure SSL certificate
+
+```bash { title="Run Let's Encrypt to configure SSL certificate" }
+apt install certbot
+apt-get install python3-certbot-nginx
+mkdir -p /var/www/ssl-proof/waha/.well-known
+certbot --webroot -w /var/www/ssl-proof/waha/ -d waha. -i nginx
+```
+
+### Step 5: Update env variables
+
+Update `WAHA_BASE_URL` in `.waha.env`
+
+```bash
+nano .waha.env
+```
+
+```env { title=".waha.env" }
+WAHA_BASE_URL=https://waha.
+```
+
+Apply the changes:
+
+```bash
+docker compose up -d
+```
+
+### Step 6: Access your installation
+
+- Open `https://waha.`
+- Make sure it's working
+
+### Step 7: Update Webhook URL in ChatWoot
+
+- Open **ChatWoot** `https://chatwoot.`
+- Go to **Settings → Inboxes → {Inbox}**
+- Update **Webhook URL** from `http://waha:3000/{WEBHOOKURL}` to `https://waha./{WEBHOOKURL}`
+- Click **Save**
+- Send `status` message to **WhatsApp Integration (WAHA)** conversation to test **WAHA <=> ChatWoot** connection
+
+## What is next?
+
+[**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})
+to see features available for **WhatsApp ChatWoot** integration using **WAHA**.
+
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
diff --git a/content/blog/apps-chatwoot-4-how-it-works/index.md b/content/blog/apps-chatwoot-4-how-it-works/index.md
index 72ff8ee7f..3fcf3db75 100644
--- a/content/blog/apps-chatwoot-4-how-it-works/index.md
+++ b/content/blog/apps-chatwoot-4-how-it-works/index.md
@@ -1,33 +1,34 @@
----
-title: "WhatsApp + ChatWoot - How It Works"
-description: "WhatsApp + ChatWoot - How It Works"
-excerpt: "WhatsApp + ChatWoot - How It Works"
-date: 2025-07-06T08:48:45+00:00
-draft: false
-images: [ "waha-chatwoot.png" ]
-categories: [ "Apps", "ChatWoot" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: apps-chatwoot-4-how-it-works
----
-
-## Overview
-Complete guide to install and set up production-ready **WAHA** and **Chatwoot** instances on your own infrastructure!
-
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
-
-## How it works
-
-{{< include file="content/docs/apps/about/-how-it-works.md" >}}
-
-## Error Handling
-In case of any errors, WAHA retries a few times and then gives detailed information about the error:
-
-
-
-You can use the **WAHA Jobs Dashboard** at [http://localhost:3000/jobs](http://localhost:3000/jobs) for monitoring:
-
-
-
+---
+title: "WhatsApp + ChatWoot - How It Works"
+description: "WhatsApp + ChatWoot - How It Works"
+excerpt: "WhatsApp + ChatWoot - How It Works"
+date: 2025-07-06T08:48:45+00:00
+draft: false
+images: ["waha-chatwoot.png"]
+categories: ["Apps", "ChatWoot"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: apps-chatwoot-4-how-it-works
+---
+
+## Overview
+
+Complete guide to install and set up production-ready **WAHA** and **Chatwoot** instances on your own infrastructure!
+
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+
+## How it works
+
+{{< include file="content/docs/apps/about/-how-it-works.md" >}}
+
+## Error Handling
+
+In case of any errors, WAHA retries a few times and then gives detailed information about the error:
+
+
+
+You can use the **WAHA Jobs Dashboard** at [http://localhost:3000/jobs](http://localhost:3000/jobs) for monitoring:
+
+
diff --git a/content/blog/crypto-how-to/index.md b/content/blog/crypto-how-to/index.md
index 595dcca31..d43efa584 100644
--- a/content/blog/crypto-how-to/index.md
+++ b/content/blog/crypto-how-to/index.md
@@ -1,107 +1,120 @@
----
-title: "How to support WAHA using Crypto"
-description: "⚡50% OFF Yearly Crypto Offer!⚡"
-excerpt: "Step-by-step guide how to support WAHA using Crypto and get WAHA Plus or PRO versions."
-date: 2024-07-01T08:48:45+00:00
-draft: false
-images: ["tether-usdt-logo.png"]
-categories: ["Donations"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
----
-
-In this article, we're going to cover different techniques for those who not familiar with crypto payments how you can still support the project
-and get [WAHA Plus and WAHA PRO](/support-us).
-
-If you have any questions during this journey, kindly contact us at
-crypto@devlike.pro,
-we'll find a way to help you!
-
-## Get Crypto Address and Amount
-### Step 1 - Login to WAHA Portal
-
-First, go to
-WAHA Patron Portal ->
-and **Login with Email** or any other available options.
-
-
-### Step 2 - Get payment link
-- Go to
-Donate page,
-- Select **Support with Crypto**
-- Click on desired tier (we kindly suggest using **YEARly** tiers due to lower fees)
-
-
-### Step 3 - Select USDT and TRC
-On payment page, select **USDT** currency and **TRC** network
-
-
-### Step 4 - Copy Address and Amount
-Those two things we'll need later soon, so kindly copy or remember it.
-- **Address**: in `TQHuXAR8KxhBs59pa59AK7NeUbuSH9vTkg` format
-- **Amount to pay**: `$111.4`
-
-⚠️ Few things to keep in mind:
-- **Do not close this page till the full process is finished**
- - If you closed it - kindly check your email and open it from there (we always send the link to email).
-- **If the payment link expired (after 24 hours)** - go to [**WAHA Patron Portal ->**](https://portal.devlike.pro) and get a new one. DO NOT USE EXPIRED **Address**!
-
-
-
-## Option 1 - Buy Crypto using CryptoCloud
-You can buy crypto using. **No wallet required**, it'll be sent directly to payment link above!
-CryptoCloud ->.
-
-Go to the page and enter:
-- **You receive** section - select **USDT TRC-20** currency
-- **You receive** section - set `111.4` (or different amount)
-- **You send** - choose appropriate YOUR currency
-
-
-
-- Click **Continue** and select available operator.
-- Click **Continue** and put **Address** copied from the previous section (the link from WAHA Patron Portal, in `TQHuXAR8KxhBs59pa59AK7NeUbuSH9vTkg` format)
-
-
-- Click **Proceed to Payment** and go to the operator payment page
-
-On the operator page **validate Address and Amount**
-
-
-**Finish the payment on operator page** using regular Credit or Debit card! 🎉
-
-## Option 2 - Paying using Binance
-If you're new to using Binance and want to pay using USDT TRC-20, but are unsure where to start, don't worry - we've got you covered with this step-by-step guide!
-
-### Step 1: Setting Up Your Binance Account
-- If you don't already have a Binance account, you'll need to sign up for one. Visit [Binance](https://www.binance.com/) and follow the instructions to create an account.
-- Make sure to complete the necessary verification steps as required by Binance.
-
-### Step 2: Acquiring USDT TRC-20
-In order to pay using **USDT TRC-20**, you will need to acquire some first. You can do this by:
-- Buying **USDT TRC-20** on Binance using fiat currency or other cryptocurrencies.
-- Using **Binance's peer-to-peer (P2P)** trading platform to buy **USDT TRC-20** from other users.
-
-For detailed instructions on how to buy USDT on Binance or using P2P, you can refer to this [guide on buying cryptocurrency on Binance](https://www.binance.com/en/support/faq).
-
-### Step 3: Paying with Binance and USDT TRC-20
-Once you have the USDT TRC-20 in your Binance wallet, and you have the recipient's address and the amount you need to pay, follow these steps to make the payment:
-1. Log in to your Binance account.
-2. Go to the wallet section and click on the "Withdraw" option.
-3. Select USDT TRC-20.
-4. Enter the recipient's wallet address in the designated field - **Address* you copied before, in format `TQHuXAR8KxhBs59pa59AK7NeUbuSH9vTkg`.
-5. Input the amount of USDT TRC-20 you wish to send.
-6. Double-check the address and amount to ensure accuracy.
-7. Click on the "Withdraw" button to initiate the payment.
-
-And there you have it! You've successfully made a payment using Binance and USDT TRC-20. Remember to always double-check the recipient's address to avoid any errors in transactions.
-
-If you encounter any difficulties or have further questions, don't hesitate to reach out to Binance's customer support for assistance.
-
-
-## Option 3 - Paying using Bit by
-The same steps as for Binance applied to [BitBy](https://www.bybit.com/en/) platform, just make sure you're using BitBy app and web site.
-
-It has additional payment method for countries that is under the sanctions.
+---
+title: "How to support WAHA using Crypto"
+description: "⚡50% OFF Yearly Crypto Offer!⚡"
+excerpt: "Step-by-step guide how to support WAHA using Crypto and get WAHA Plus or PRO versions."
+date: 2024-07-01T08:48:45+00:00
+draft: false
+images: ["tether-usdt-logo.png"]
+categories: ["Donations"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+---
+
+In this article, we're going to cover different techniques for those who not familiar with crypto payments how you can still support the project
+and get [WAHA Plus and WAHA PRO](/support-us).
+
+If you have any questions during this journey, kindly contact us at
+crypto@devlike.pro,
+we'll find a way to help you!
+
+## Get Crypto Address and Amount
+
+### Step 1 - Login to WAHA Portal
+
+First, go to
+WAHA Patron Portal ->
+and **Login with Email** or any other available options.
+
+
+### Step 2 - Get payment link
+
+- Go to
+ Donate page,
+- Select **Support with Crypto**
+- Click on desired tier (we kindly suggest using **YEARly** tiers due to lower fees)
+ 
+
+### Step 3 - Select USDT and TRC
+
+On payment page, select **USDT** currency and **TRC** network
+
+
+### Step 4 - Copy Address and Amount
+
+Those two things we'll need later soon, so kindly copy or remember it.
+
+- **Address**: in `TQHuXAR8KxhBs59pa59AK7NeUbuSH9vTkg` format
+- **Amount to pay**: `$111.4`
+
+⚠️ Few things to keep in mind:
+
+- **Do not close this page till the full process is finished**
+ - If you closed it - kindly check your email and open it from there (we always send the link to email).
+- **If the payment link expired (after 24 hours)** - go to [**WAHA Patron Portal ->**](https://portal.devlike.pro) and get a new one. DO NOT USE EXPIRED **Address**!
+ 
+
+## Option 1 - Buy Crypto using CryptoCloud
+
+You can buy crypto using. **No wallet required**, it'll be sent directly to payment link above!
+CryptoCloud ->.
+
+Go to the page and enter:
+
+- **You receive** section - select **USDT TRC-20** currency
+- **You receive** section - set `111.4` (or different amount)
+- **You send** - choose appropriate YOUR currency
+
+
+
+- Click **Continue** and select available operator.
+- Click **Continue** and put **Address** copied from the previous section (the link from WAHA Patron Portal, in `TQHuXAR8KxhBs59pa59AK7NeUbuSH9vTkg` format)
+ 
+
+- Click **Proceed to Payment** and go to the operator payment page
+
+On the operator page **validate Address and Amount**
+
+
+**Finish the payment on operator page** using regular Credit or Debit card! 🎉
+
+## Option 2 - Paying using Binance
+
+If you're new to using Binance and want to pay using USDT TRC-20, but are unsure where to start, don't worry - we've got you covered with this step-by-step guide!
+
+### Step 1: Setting Up Your Binance Account
+
+- If you don't already have a Binance account, you'll need to sign up for one. Visit [Binance](https://www.binance.com/) and follow the instructions to create an account.
+- Make sure to complete the necessary verification steps as required by Binance.
+
+### Step 2: Acquiring USDT TRC-20
+
+In order to pay using **USDT TRC-20**, you will need to acquire some first. You can do this by:
+
+- Buying **USDT TRC-20** on Binance using fiat currency or other cryptocurrencies.
+- Using **Binance's peer-to-peer (P2P)** trading platform to buy **USDT TRC-20** from other users.
+
+For detailed instructions on how to buy USDT on Binance or using P2P, you can refer to this [guide on buying cryptocurrency on Binance](https://www.binance.com/en/support/faq).
+
+### Step 3: Paying with Binance and USDT TRC-20
+
+Once you have the USDT TRC-20 in your Binance wallet, and you have the recipient's address and the amount you need to pay, follow these steps to make the payment:
+
+1. Log in to your Binance account.
+2. Go to the wallet section and click on the "Withdraw" option.
+3. Select USDT TRC-20.
+4. Enter the recipient's wallet address in the designated field - \*_Address_ you copied before, in format `TQHuXAR8KxhBs59pa59AK7NeUbuSH9vTkg`.
+5. Input the amount of USDT TRC-20 you wish to send.
+6. Double-check the address and amount to ensure accuracy.
+7. Click on the "Withdraw" button to initiate the payment.
+
+And there you have it! You've successfully made a payment using Binance and USDT TRC-20. Remember to always double-check the recipient's address to avoid any errors in transactions.
+
+If you encounter any difficulties or have further questions, don't hesitate to reach out to Binance's customer support for assistance.
+
+## Option 3 - Paying using Bit by
+
+The same steps as for Binance applied to [BitBy](https://www.bybit.com/en/) platform, just make sure you're using BitBy app and web site.
+
+It has additional payment method for countries that is under the sanctions.
diff --git a/content/blog/how-to-send-messages-to-channels/index.md b/content/blog/how-to-send-messages-to-channels/index.md
index fe307a202..f656f6c3d 100644
--- a/content/blog/how-to-send-messages-to-channels/index.md
+++ b/content/blog/how-to-send-messages-to-channels/index.md
@@ -1,175 +1,183 @@
----
-title: "How to send a post to WhatsApp Channel via API"
-description: "How to send a post to WhatsApp Channel via API - Step By Step Guide"
-excerpt: "How to send a post to WhatsApp Channel via API - Step By Step Guide"
-date: 2024-07-16T08:48:45+00:00
-draft: false
-images: [ "whatsapp-channels.png" ]
-categories: [ "Tips" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-toc: true
----
-
-
-[WAHA](/), Free Self-Hosted WhatsApp API, supports
-[**WhatsApp Channels**]({{< relref "/whatsapp-channels" >}})
-, a brand-new feature introduced by WhatsApp.
-It is a one-way broadcast tool that allows administrators to send various content types such as text, photos, videos,
-and polls.
-Users receive push notifications from the channel, similar to a private message.
-
-In this article, we give you a **Step-By-Step guide how to send messages to WhatsApp Channels** using
-[**WAHA**](/) - free, self-hosted WhatsApp API!
-
-We'll install it on **your own server**, so no suspicious services have access to your WhatsApp account.
-
-
-
-
-
-## Step 0. Requirements
-
-WAHA works on top of **Docker**, that's the only think you'll need!
-
-
-
-
-👉 Please follow the
-
-Docker official guides to install it on Linux, Windows, and macOS
-
-
-{{< details "Why Docker?" >}}
-Docker makes it easy to ship all-in-one solution with the runtime and dependencies. You don't have to worry about
-language-specific libraries or chrome installation.
-
-Also, Docker makes installation and update processes so simple, just one command!
-{{< /details >}}
-
-## Step 1. Run WAHA
-After you installed Docker - you're ready to run WAHA!
-
-```bash
-docker run -it --rm -p 3000:3000 --name waha devlikeapro/waha
-
-# It prints logs and the last line must be
-# WhatsApp API is running on: http://[::1]:3000
-```
-
-It may take time to download the image, depending on your internet speed.
-
-If you're using **ARM** processor (like **Apple M1/M2**, **Raspberry Pi**) run the following commands instead:
-```bash
-# Download the image
-docker pull devlikeapro/waha:arm
-# Rename it, so you can use devlikeapro/waha image in other place
-docker tag devlikeapro/waha:arm devlikeapro/waha
-# Run the same command!
-docker run -it --rm -p 3000:3000 --name waha devlikeapro/waha
-
-# It prints logs and the last line must be
-# WhatsApp API is running on: http://[::1]:3000
-```
-
-👉 Now, open [Dashboard]({{< relref "/docs/how-to/dashboard" >}}) at
-
-http://localhost:3000/dashboard
-
-
-You'll see WAHA Dashboard:
-
-
-
-## Step 2. Run session
-Now you start **default** session (current status should be `STOPPED`).
-
-You can leave all configuration parameters by default:
-
-
-## Step 3. Scan QR
-Wait until the session status is `SCAN_QR` and click on "camera" icon:
-
-
-👉 If instead of QR you see **Click to reload QR** - **stop** the session and **start** it again.
-
-
-
-You'll see QR code from WhatsApp Web app, now get **your phone** with installed WhatsApp application and **scan the QR**:
-
-
-The session status will move to `WORKING` status:
-
-
-## Step 4. Get Channel ID
-One step before you can send a message to you Channel - you need to get Channel ID in format `123123123@newsletter`
-to know where to send a message.
-
-You can just execute the following curl command:
-```bash
-curl -X 'GET' \
- 'http://localhost:3000/api/default/channels?role=OWNER' \
- -H 'accept: application/json'
-```
-
-In the response you'll see all channels, choose one and copy `id`:
-
-```json
-[
- {
- "id": "111111111111111111@newsletter", // <========= copy that
- "name": "Channel Name",
- "role": "OWNER",
- ...
- }
-]
-```
-
-
-As alternative to `curl`, you can use [WAHA Swagger]({{< relref "/docs/how-to/swagger" >}}) for that, open it at
-
-http://localhost:3000/#/channels
-, scroll down to **Channels** section.
-
-- Find `GET /api/{session}/channels` endpoint and expand it
-- Click **Try it out**
-- Choose `role=OWNER` if you have your own channels or `role=ADMIN` if you're admin in the channel (you can not send messages if you're `SUBSCRIBER` in the channel)
-- Click **Execute**
-
-
-
-## Step 5. Send a message to WhatsApp Channel
-Now we're ready to send first messages to WhatsApp Channel via API!
-
-Replace `123123@newsletter` with **your newsletter id**, like `29847512@newsletter` in the bellow command:
-```bash
-curl -X 'POST' \
- 'http://localhost:3000/api/sendText' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -d '{
- "chatId": "123123123123@newsletter",
- "text": "Hi there!",
- "session": "default"
-}'
-```
-
-As alternative to `curl`, you can use [WAHA Swagger]({{< relref "/docs/how-to/swagger" >}}) for that, open it at
-
-http://localhost:3000/#/chatting
-, scroll down to **chatting** section.
-- Find `POST /api/sendText` endpoint and expand it
-- Click **Try it out**
-- Replace `123123@newsletter` with **your** newsletter id, like `29847512@newsletter` in the bellow command
-- Click **Execute**
-
-
-## What is next?
-🎉 You've sent the first message to WhatsApp Channel using WhatsApp API! 🎉
-
-Here's what you can lear next:
-- Check the full [**📢 Channels**]({{< relref "/docs/how-to/channels" >}}) documentation
-- Learn more about how to send images [**📤 Send messages**]({{< relref "/docs/how-to/send-messages" >}}) to WhatsApp Channel via API
-- Learn how to [**📥 Receive messages**]({{< relref "/docs/how-to/receive-messages" >}}) from WhatsApp Channels via [**🔄 Webhooks**]({{< relref "/docs/how-to/events" >}})
+---
+title: "How to send a post to WhatsApp Channel via API"
+description: "How to send a post to WhatsApp Channel via API - Step By Step Guide"
+excerpt: "How to send a post to WhatsApp Channel via API - Step By Step Guide"
+date: 2024-07-16T08:48:45+00:00
+draft: false
+images: ["whatsapp-channels.png"]
+categories: ["Tips"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+toc: true
+---
+
+[WAHA](/), Free Self-Hosted WhatsApp API, supports
+[**WhatsApp Channels**]({{< relref "/whatsapp-channels" >}})
+, a brand-new feature introduced by WhatsApp.
+It is a one-way broadcast tool that allows administrators to send various content types such as text, photos, videos,
+and polls.
+Users receive push notifications from the channel, similar to a private message.
+
+In this article, we give you a **Step-By-Step guide how to send messages to WhatsApp Channels** using
+[**WAHA**](/) - free, self-hosted WhatsApp API!
+
+We'll install it on **your own server**, so no suspicious services have access to your WhatsApp account.
+
+
+
+
+
+## Step 0. Requirements
+
+WAHA works on top of **Docker**, that's the only think you'll need!
+
+
+
+
+
+👉 Please follow the
+
+Docker official guides to install it on Linux, Windows, and macOS
+
+
+{{< details "Why Docker?" >}}
+Docker makes it easy to ship all-in-one solution with the runtime and dependencies. You don't have to worry about
+language-specific libraries or chrome installation.
+
+Also, Docker makes installation and update processes so simple, just one command!
+{{< /details >}}
+
+## Step 1. Run WAHA
+
+After you installed Docker - you're ready to run WAHA!
+
+```bash
+docker run -it --rm -p 3000:3000 --name waha devlikeapro/waha
+
+# It prints logs and the last line must be
+# WhatsApp API is running on: http://[::1]:3000
+```
+
+It may take time to download the image, depending on your internet speed.
+
+If you're using **ARM** processor (like **Apple M1/M2**, **Raspberry Pi**) run the following commands instead:
+
+```bash
+# Download the image
+docker pull devlikeapro/waha:arm
+# Rename it, so you can use devlikeapro/waha image in other place
+docker tag devlikeapro/waha:arm devlikeapro/waha
+# Run the same command!
+docker run -it --rm -p 3000:3000 --name waha devlikeapro/waha
+
+# It prints logs and the last line must be
+# WhatsApp API is running on: http://[::1]:3000
+```
+
+👉 Now, open [Dashboard]({{< relref "/docs/how-to/dashboard" >}}) at
+
+http://localhost:3000/dashboard
+
+
+You'll see WAHA Dashboard:
+
+
+## Step 2. Run session
+
+Now you start **default** session (current status should be `STOPPED`).
+
+You can leave all configuration parameters by default:
+
+
+## Step 3. Scan QR
+
+Wait until the session status is `SCAN_QR` and click on "camera" icon:
+
+
+👉 If instead of QR you see **Click to reload QR** - **stop** the session and **start** it again.
+
+
+
+You'll see QR code from WhatsApp Web app, now get **your phone** with installed WhatsApp application and **scan the QR**:
+
+
+The session status will move to `WORKING` status:
+
+
+## Step 4. Get Channel ID
+
+One step before you can send a message to you Channel - you need to get Channel ID in format `123123123@newsletter`
+to know where to send a message.
+
+You can just execute the following curl command:
+
+```bash
+curl -X 'GET' \
+ 'http://localhost:3000/api/default/channels?role=OWNER' \
+ -H 'accept: application/json'
+```
+
+In the response you'll see all channels, choose one and copy `id`:
+
+```json
+[
+ {
+ "id": "111111111111111111@newsletter", // <========= copy that
+ "name": "Channel Name",
+ "role": "OWNER",
+ ...
+ }
+]
+```
+
+As alternative to `curl`, you can use [WAHA Swagger]({{< relref "/docs/how-to/swagger" >}}) for that, open it at
+
+http://localhost:3000/#/channels
+, scroll down to **Channels** section.
+
+- Find `GET /api/{session}/channels` endpoint and expand it
+- Click **Try it out**
+- Choose `role=OWNER` if you have your own channels or `role=ADMIN` if you're admin in the channel (you can not send messages if you're `SUBSCRIBER` in the channel)
+- Click **Execute**
+ 
+
+## Step 5. Send a message to WhatsApp Channel
+
+Now we're ready to send first messages to WhatsApp Channel via API!
+
+Replace `123123@newsletter` with **your newsletter id**, like `29847512@newsletter` in the bellow command:
+
+```bash
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendText' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -d '{
+ "chatId": "123123123123@newsletter",
+ "text": "Hi there!",
+ "session": "default"
+}'
+```
+
+As alternative to `curl`, you can use [WAHA Swagger]({{< relref "/docs/how-to/swagger" >}}) for that, open it at
+
+http://localhost:3000/#/chatting
+, scroll down to **chatting** section.
+
+- Find `POST /api/sendText` endpoint and expand it
+- Click **Try it out**
+- Replace `123123@newsletter` with **your** newsletter id, like `29847512@newsletter` in the bellow command
+- Click **Execute**
+ 
+
+## What is next?
+
+🎉 You've sent the first message to WhatsApp Channel using WhatsApp API! 🎉
+
+Here's what you can lear next:
+
+- Check the full [**📢 Channels**]({{< relref "/docs/how-to/channels" >}}) documentation
+- Learn more about how to send images [**📤 Send messages**]({{< relref "/docs/how-to/send-messages" >}}) to WhatsApp Channel via API
+- Learn how to [**📥 Receive messages**]({{< relref "/docs/how-to/receive-messages" >}}) from WhatsApp Channels via [**🔄 Webhooks**]({{< relref "/docs/how-to/events" >}})
diff --git a/content/blog/security-alert/index.md b/content/blog/security-alert/index.md
index f580f0b86..fbb5bf25a 100644
--- a/content/blog/security-alert/index.md
+++ b/content/blog/security-alert/index.md
@@ -1,102 +1,101 @@
----
-title: "🚨 WAHA Security Alert"
-description: "🚨 WAHA Security Alert - check your API Key if your API is public!"
-excerpt: "🚨 WAHA Security Alert - check your API Key if your API is public!"
-date: 2025-04-29T08:48:45+00:00
-draft: false
-images: ["security-alert.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
-slug: security-alert
----------------
-
-## 🚨 WAHA Security Alert
-
-We’ve recently seen a disturbing trend: users running WAHA with the **API publicly exposed** and **without any form of protection**.
-
-Unfortunately, a few of them learned the hard way — their sessions were compromised, and their accounts got hacked.
-
----
-
-### ❗ What Happened?
-
-Some WAHA users deployed the API and made it accessible over the internet — **but forgot to secure it**. No API keys. No reverse proxies. Just a raw, open API ready-to-take commands from anyone who knew the endpoint.
-
-It didn’t take long for bots and malicious actors to find those ports. Once they did — they used sessions, hijacked WhatsApp accounts, sent spam messages.
-
-
-
-⚠️ **This IS NOT just a theoretical risk**. We had multiple cases this month alone. If your API is open, **you are exposed**.
-
-
-### 👥 Who Is Affected?
-
-This vulnerability affects **anyone who is running WAHA or WAHA Plus** and:
-
-* Exposes the `/api` port directly to the internet,
-* Has **no API key** set in the `.env` or Docker environment,
-* Don’t use HTTPS or any firewall/reverse proxy to restrict access.
-
-This includes Docker deployments, VPS installs, even cloud setups that skip security steps.
-
-
-### 🛠️ How to Fix It
-
-{{< callout context="caution" title="Do not expose WhatsApp API on public networks!" icon="outline/shield-check" >}}
-- Use at **least 64 symbols random string** as `WHATSAPP_API_KEY` string that contains letters (a-z, A-Z) and numbers (1-9)
-- Read more [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
-{{< /callout >}}
-
-Here's how you can immediately protect your setup:
-
-1. **Use API Key Authentication**
- WAHA requires an `api_key` for all endpoints. Make sure you set and enforce it in your environment:
-
-```bash
-WHATSAPP_API_KEY=your_strong_key_here
-```
-
-2. **Don’t expose your API directly to the internet!**
- Keep it behind:
-
- * A VPN
- * A reverse proxy with authentication
- * A firewall that limits access to trusted IPs
-
-3. **Enable HTTPS**
- Use Let's Encrypt or self-signed certificates to ensure traffic is encrypted.
-
-
-### ❓ FAQ
-
-#### 🔒 Changing ports will not save you!
-
-Obscuring your API behind a “random” port like `39823`? Doesn’t matter. Bots scan all ports. If it’s open and unprotected — they’ll find it.
-
-#### 🧱 I don't have WAHA Plus, how can I still be secure?
-
-You still have options:
-
-* **Do not expose the API port to the internet**
- Only bind the container to `localhost` or your internal network.
-
-* **Use third-party software to protect your API**
- Tools like [Ngrok](/blog/waha-ngrok) can tunnel securely, and you can wrap requests with basic auth or tokens.
-
-* **Use a firewall to restrict access**
- Restrict incoming traffic to your trusted IPs only. Tools like `ufw` or `iptables` can help with that.
-
-
-### 🚨 Final Word
-
-Leaving your API exposed is like leaving your house door wide open with a sign saying “not using locks.” WAHA gives you the tools to be secure. **Use them**.
-
-
-----
-
-**Stay safe 🛡️**
+---
+title: "🚨 WAHA Security Alert"
+description: "🚨 WAHA Security Alert - check your API Key if your API is public!"
+excerpt: "🚨 WAHA Security Alert - check your API Key if your API is public!"
+date: 2025-04-29T08:48:45+00:00
+draft: false
+images: ["security-alert.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: security-alert
+---
+
+---
+
+## 🚨 WAHA Security Alert
+
+We’ve recently seen a disturbing trend: users running WAHA with the **API publicly exposed** and **without any form of protection**.
+
+Unfortunately, a few of them learned the hard way — their sessions were compromised, and their accounts got hacked.
+
+---
+
+### ❗ What Happened?
+
+Some WAHA users deployed the API and made it accessible over the internet — **but forgot to secure it**. No API keys. No reverse proxies. Just a raw, open API ready-to-take commands from anyone who knew the endpoint.
+
+It didn’t take long for bots and malicious actors to find those ports. Once they did — they used sessions, hijacked WhatsApp accounts, sent spam messages.
+
+
+
+
+⚠️ **This IS NOT just a theoretical risk**. We had multiple cases this month alone. If your API is open, **you are exposed**.
+
+### 👥 Who Is Affected?
+
+This vulnerability affects **anyone who is running WAHA or WAHA Plus** and:
+
+- Exposes the `/api` port directly to the internet,
+- Has **no API key** set in the `.env` or Docker environment,
+- Don’t use HTTPS or any firewall/reverse proxy to restrict access.
+
+This includes Docker deployments, VPS installs, even cloud setups that skip security steps.
+
+### 🛠️ How to Fix It
+
+{{< callout context="caution" title="Do not expose WhatsApp API on public networks!" icon="outline/shield-check" >}}
+
+- Use at **least 64 symbols random string** as `WHATSAPP_API_KEY` string that contains letters (a-z, A-Z) and numbers (1-9)
+- Read more [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
+ {{< /callout >}}
+
+Here's how you can immediately protect your setup:
+
+1. **Use API Key Authentication**
+ WAHA requires an `api_key` for all endpoints. Make sure you set and enforce it in your environment:
+
+```bash
+WHATSAPP_API_KEY=your_strong_key_here
+```
+
+2. **Don’t expose your API directly to the internet!**
+ Keep it behind:
+
+ - A VPN
+ - A reverse proxy with authentication
+ - A firewall that limits access to trusted IPs
+
+3. **Enable HTTPS**
+ Use Let's Encrypt or self-signed certificates to ensure traffic is encrypted.
+
+### ❓ FAQ
+
+#### 🔒 Changing ports will not save you!
+
+Obscuring your API behind a “random” port like `39823`? Doesn’t matter. Bots scan all ports. If it’s open and unprotected — they’ll find it.
+
+#### 🧱 I don't have WAHA Plus, how can I still be secure?
+
+You still have options:
+
+- **Do not expose the API port to the internet**
+ Only bind the container to `localhost` or your internal network.
+
+- **Use third-party software to protect your API**
+ Tools like [Ngrok](/blog/waha-ngrok) can tunnel securely, and you can wrap requests with basic auth or tokens.
+
+- **Use a firewall to restrict access**
+ Restrict incoming traffic to your trusted IPs only. Tools like `ufw` or `iptables` can help with that.
+
+### 🚨 Final Word
+
+Leaving your API exposed is like leaving your house door wide open with a sign saying “not using locks.” WAHA gives you the tools to be secure. **Use them**.
+
+---
+
+**Stay safe 🛡️**
diff --git a/content/blog/waha-2024-10/index.md b/content/blog/waha-2024-10/index.md
index 198548dd1..2a03f869f 100644
--- a/content/blog/waha-2024-10/index.md
+++ b/content/blog/waha-2024-10/index.md
@@ -1,97 +1,101 @@
----
-title: "WAHA 2024.10"
-description: "WAHA 2024.10 - WAHA Core - Receive Media, n8n Low Code Integration, TypeBot Integration, ChatWoot Integration, Workflow Templates, Stability fixes"
-excerpt: "WAHA 2024.10 - WAHA Core - Receive Media, n8n Low Code Integration, TypeBot Integration, ChatWoot Integration, Workflow Templates, Stability fixes"
-date: 2024-09-30T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.10.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
-slug: waha-2024-10
----
-
-🎉 We are thrilled to announce the release of [**WAHA 2024.10**]({{< relref "/docs/overview/changelog#202410" >}}) 🎉
-
-## WAHA Core - Receive Media
-
-We published [**📥 Receive messages** ]({{}})
-in free **WAHA Core** version, so you can receive media files in your WhatsApp API for free!
-
-We'll continue to publish features from
-[**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
-to WAHA Core, so you can use them for free!
-
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "body": "Check this out (caption for the media)!",
- "from": "11111111111@c.us",
- "hasMedia": true,
- "media": {
- "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg",
- "mimetype": "image/jpeg",
- "filename": null
- }
- }
-}
-```
-
-## n8n Low Code Integration
-
-
-
-
-
-Meat the new **WAHA** integration with **n8n**!
-
-You can build your WhatsApp automation with using n8n and WAHA in pair!
-
-For that we've built [@devlikeapro/n8n-nodes-waha](https://github.com/devlikeapro/n8n-nodes-waha/)
-directly from our [Swagger](/swagger) specification, so all available API calls are available in n8n.
-
-Install it on your n8n instance and start building your first workflow:
-```
-@devlikeapro/n8n-nodes-waha
-```
-
-Read more about
-[**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}})
-
-### TypeBot Integration
-
-
-
-
-Using the n8n workflow you can integrate **TypeBot** with **WAHA**!
-
-👉 Checkout out [**🔌 TypeBot Integration**]({{< relref "/docs/integrations/typebot" >}})
-
-### ChatWoot Integration
-
-
-
-
-Using the n8n workflow you can integrate **ChatWoot** with **WAHA**!
-
-👉 Checkout out [**🔌 ChatWoot Integration**]({{< relref "/docs/integrations/chatwoot" >}})
-
-### Workflow Templates
-👉 Check out
-[**https://waha-n8n-workflows.devlike.pro**](http://waha-n8n-templates.devlike.pro/)
-for workflow templates!
-
-{{< imgo src="/images/n8n/waha-n8n.png" >}}
-
-
-## Stability fixes
-We're working on internal things to stabilize the product, to avoid any issues with the API.
-
-Check the full [**🆕 Changelog**]({{< relref "/docs/overview/changelog#202410" >}})
-for more details!
+---
+title: "WAHA 2024.10"
+description: "WAHA 2024.10 - WAHA Core - Receive Media, n8n Low Code Integration, TypeBot Integration, ChatWoot Integration, Workflow Templates, Stability fixes"
+excerpt: "WAHA 2024.10 - WAHA Core - Receive Media, n8n Low Code Integration, TypeBot Integration, ChatWoot Integration, Workflow Templates, Stability fixes"
+date: 2024-09-30T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.10.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2024-10
+---
+
+🎉 We are thrilled to announce the release of [**WAHA 2024.10**]({{< relref "/docs/overview/changelog#202410" >}}) 🎉
+
+## WAHA Core - Receive Media
+
+We published [**📥 Receive messages** ]({{}})
+in free **WAHA Core** version, so you can receive media files in your WhatsApp API for free!
+
+We'll continue to publish features from
+[**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
+to WAHA Core, so you can use them for free!
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "payload": {
+ "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "timestamp": 1667561485,
+ "body": "Check this out (caption for the media)!",
+ "from": "11111111111@c.us",
+ "hasMedia": true,
+ "media": {
+ "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg",
+ "mimetype": "image/jpeg",
+ "filename": null
+ }
+ }
+}
+```
+
+## n8n Low Code Integration
+
+
+
+
+
+Meat the new **WAHA** integration with **n8n**!
+
+You can build your WhatsApp automation with using n8n and WAHA in pair!
+
+For that we've built [@devlikeapro/n8n-nodes-waha](https://github.com/devlikeapro/n8n-nodes-waha/)
+directly from our [Swagger](/swagger) specification, so all available API calls are available in n8n.
+
+Install it on your n8n instance and start building your first workflow:
+
+```
+@devlikeapro/n8n-nodes-waha
+```
+
+Read more about
+[**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}})
+
+### TypeBot Integration
+
+
+
+
+
+Using the n8n workflow you can integrate **TypeBot** with **WAHA**!
+
+👉 Checkout out [**🔌 TypeBot Integration**]({{< relref "/docs/integrations/typebot" >}})
+
+### ChatWoot Integration
+
+
+
+
+
+Using the n8n workflow you can integrate **ChatWoot** with **WAHA**!
+
+👉 Checkout out [**🔌 ChatWoot Integration**]({{< relref "/docs/integrations/chatwoot" >}})
+
+### Workflow Templates
+
+👉 Check out
+[**https://waha-n8n-workflows.devlike.pro**](http://waha-n8n-templates.devlike.pro/)
+for workflow templates!
+
+{{< imgo src="/images/n8n/waha-n8n.png" >}}
+
+## Stability fixes
+
+We're working on internal things to stabilize the product, to avoid any issues with the API.
+
+Check the full [**🆕 Changelog**]({{< relref "/docs/overview/changelog#202410" >}})
+for more details!
diff --git a/content/blog/waha-2024-11/index.md b/content/blog/waha-2024-11/index.md
index 066580e48..2ec04c893 100644
--- a/content/blog/waha-2024-11/index.md
+++ b/content/blog/waha-2024-11/index.md
@@ -1,199 +1,207 @@
----
-title: "WAHA 2024.11"
-description: "WAHA 2024.11 - What Have We Done 😱"
-excerpt: "WAHA 2024.11 - What Have We Done 😱"
-date: 2024-11-30T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.11.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
-slug: waha-2024-11
----
-
-🎉 We are thrilled to announce the release of [**WAHA 2024.11**]({{< relref "/docs/overview/changelog#202411" >}}) 🎉
-
-## Event Monitor
-
-Now you can observe the
-[**Events**]({{< relref "/docs/how-to/events" >}})
-happening in your WAHA instance in real-time with the new
-[**Event Monitor**]({{< relref "/docs/how-to/dashboard#event-monitor" >}})
-feature!
-
-{{< imgo src="/images/waha/dashboard/dashboard-event-monitor.png" >}}
-
-Open
-[dashboard/event-monitor](/dashboard/event-monitor) or at your local instance
-[http://localhost:3000/dashboard/event-monitor](http://localhost:3000/dashboard/event-monitor)
-
-
-## Websockets
-
-
-
-WAHA now has full support for [Websockets]({{< relref "/docs/how-to/events#websockets" >}})!
-
-Here's how you can listen to it using [websocat](https://github.com/vi/websocat?tab=readme-ov-file#installation)
-
-```bash
-# Listen all sessions and events
-# -E to end the connection when the server closes it
-websocat -E ws://localhost:3000/ws
-```
-
-{{< details "Or JavaScript" >}}
-```js
-// Configuration
-const apiKey = '123'; // Replace with your API key
-const baseUrl = 'ws://localhost:3000/ws';
-const session = '*'; // Use '*' to listen to all sessions
-const events = ['session.status', 'message']; // List of events to listen to
-
-// Construct the WebSocket URL with query parameters
-const queryParams = new URLSearchParams({
- 'x-api-key': apiKey,
- session,
- ...events.reduce((acc, event) => ({ ...acc, events: event }), {}) // Add multiple 'events' params
-});
-const wsUrl = `${baseUrl}?${queryParams.toString()}`;
-
-// Initialize WebSocket connection
-const socket = new WebSocket(wsUrl);
-
-// Handle incoming messages
-socket.onmessage = (event) => {
- console.log('Received:', event.data);
-};
-
-// Handle errors
-socket.onerror = (error) => {
- console.error('WebSocket Error:', error);
-};
-
-// Handle connection open
-socket.onopen = () => {
- console.log('WebSocket connection established:', wsUrl);
-};
-
-// Handle connection close
-socket.onclose = () => {
- console.log('WebSocket connection closed');
-};
-```
-{{< /details >}}
-
-
-## Manage Labels
-
-Now you can manage (create, update, delete) [**🏷️ Labels**](/docs/how-to/labels) using WAHA API!
-
-
-
-{{< details "Create Label" >}}
-
-```http request
-POST /api/{session}/labels
-```
-
-Using `color`
-```json
-{
- "name": "New Client",
- "color": 1
-}
-```
-
-Using `colorHex`
-```json
-{
- "name": "New Client",
- "colorHex" : "#64c4ff"
-}
-```
-
-{{< /details >}}
-
-{{< details "Update Label" >}}
-
-```http request
-PUT /api/{session}/labels/{labelId}
-```
-
-Using `color`
-```json
-{
- "name": "New Client",
- "color": 1
-}
-```
-
-Using `colorHex`
-```json
-{
- "name": "New Client",
- "colorHex" : "#64c4ff"
-}
-```
-
-{{< /details >}}
-
-{{< details "Delete Label" >}}
-
-```http request
-DELETE /api/{session}/labels/{labelId}
-```
-
-{{< /details >}}
-
-## Pin Message
-
-You can [**💬 Pin and Unpin Messages**](/docs/how-to/chats#pin-message) in WAHA now!
-
-
-
-{{< details "Pin message" >}}
-
-```http request
-POST /api/{session}/chats/{chatId}/messages/{messageId}/pin
-```
-
-Payload:
-```json
-{
- "duration": 86400
-}
-```
-
-- 24 hours - `duration=86400`
-- 7 days - `duration=604800`
-- 30 days - `duration=2592000`
-
-Response:
-```json
-{
- "success": true
-}
-```
-
-
-{{< /details >}}
-
-{{< details "Unpin message" >}}
-
-```http request
-POST /api/{session}/chats/{chatId}/messages/{messageId}/unpin
-```
-
-Response:
-```json
-{
- "success": true
-}
-```
-{{< /details >}}
-
-## And More!
-Check out the full [**WAHA 2024.11 🆕 Changelog**]({{< relref "/docs/overview/changelog#202411" >}}) for more details!
\ No newline at end of file
+---
+title: "WAHA 2024.11"
+description: "WAHA 2024.11 - What Have We Done 😱"
+excerpt: "WAHA 2024.11 - What Have We Done 😱"
+date: 2024-11-30T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.11.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2024-11
+---
+
+🎉 We are thrilled to announce the release of [**WAHA 2024.11**]({{< relref "/docs/overview/changelog#202411" >}}) 🎉
+
+## Event Monitor
+
+Now you can observe the
+[**Events**]({{< relref "/docs/how-to/events" >}})
+happening in your WAHA instance in real-time with the new
+[**Event Monitor**]({{< relref "/docs/how-to/dashboard#event-monitor" >}})
+feature!
+
+{{< imgo src="/images/waha/dashboard/dashboard-event-monitor.png" >}}
+
+Open
+[dashboard/event-monitor](/dashboard/event-monitor) or at your local instance
+[http://localhost:3000/dashboard/event-monitor](http://localhost:3000/dashboard/event-monitor)
+
+## Websockets
+
+
+
+WAHA now has full support for [Websockets]({{< relref "/docs/how-to/events#websockets" >}})!
+
+Here's how you can listen to it using [websocat](https://github.com/vi/websocat?tab=readme-ov-file#installation)
+
+```bash
+# Listen all sessions and events
+# -E to end the connection when the server closes it
+websocat -E ws://localhost:3000/ws
+```
+
+{{< details "Or JavaScript" >}}
+
+```js
+// Configuration
+const apiKey = "123"; // Replace with your API key
+const baseUrl = "ws://localhost:3000/ws";
+const session = "*"; // Use '*' to listen to all sessions
+const events = ["session.status", "message"]; // List of events to listen to
+
+// Construct the WebSocket URL with query parameters
+const queryParams = new URLSearchParams({
+ "x-api-key": apiKey,
+ session,
+ ...events.reduce((acc, event) => ({ ...acc, events: event }), {}) // Add multiple 'events' params
+});
+const wsUrl = `${baseUrl}?${queryParams.toString()}`;
+
+// Initialize WebSocket connection
+const socket = new WebSocket(wsUrl);
+
+// Handle incoming messages
+socket.onmessage = (event) => {
+ console.log("Received:", event.data);
+};
+
+// Handle errors
+socket.onerror = (error) => {
+ console.error("WebSocket Error:", error);
+};
+
+// Handle connection open
+socket.onopen = () => {
+ console.log("WebSocket connection established:", wsUrl);
+};
+
+// Handle connection close
+socket.onclose = () => {
+ console.log("WebSocket connection closed");
+};
+```
+
+{{< /details >}}
+
+## Manage Labels
+
+Now you can manage (create, update, delete) [**🏷️ Labels**](/docs/how-to/labels) using WAHA API!
+
+
+
+{{< details "Create Label" >}}
+
+```http request
+POST /api/{session}/labels
+```
+
+Using `color`
+
+```json
+{
+ "name": "New Client",
+ "color": 1
+}
+```
+
+Using `colorHex`
+
+```json
+{
+ "name": "New Client",
+ "colorHex": "#64c4ff"
+}
+```
+
+{{< /details >}}
+
+{{< details "Update Label" >}}
+
+```http request
+PUT /api/{session}/labels/{labelId}
+```
+
+Using `color`
+
+```json
+{
+ "name": "New Client",
+ "color": 1
+}
+```
+
+Using `colorHex`
+
+```json
+{
+ "name": "New Client",
+ "colorHex": "#64c4ff"
+}
+```
+
+{{< /details >}}
+
+{{< details "Delete Label" >}}
+
+```http request
+DELETE /api/{session}/labels/{labelId}
+```
+
+{{< /details >}}
+
+## Pin Message
+
+You can [**💬 Pin and Unpin Messages**](/docs/how-to/chats#pin-message) in WAHA now!
+
+
+
+{{< details "Pin message" >}}
+
+```http request
+POST /api/{session}/chats/{chatId}/messages/{messageId}/pin
+```
+
+Payload:
+
+```json
+{
+ "duration": 86400
+}
+```
+
+- 24 hours - `duration=86400`
+- 7 days - `duration=604800`
+- 30 days - `duration=2592000`
+
+Response:
+
+```json
+{
+ "success": true
+}
+```
+
+{{< /details >}}
+
+{{< details "Unpin message" >}}
+
+```http request
+POST /api/{session}/chats/{chatId}/messages/{messageId}/unpin
+```
+
+Response:
+
+```json
+{
+ "success": true
+}
+```
+
+{{< /details >}}
+
+## And More!
+
+Check out the full [**WAHA 2024.11 🆕 Changelog**]({{< relref "/docs/overview/changelog#202411" >}}) for more details!
diff --git a/content/blog/waha-2024-12/index.md b/content/blog/waha-2024-12/index.md
index 49a81b91e..a650554d4 100644
--- a/content/blog/waha-2024-12/index.md
+++ b/content/blog/waha-2024-12/index.md
@@ -1,87 +1,92 @@
----
-title: "WAHA 2024.12"
-description: "WAHA 2024.12 - Chat UI API, Join Group, And More! 🎉"
-excerpt: "WAHA 2024.12 - Chat UI API, Join Group, And More! 🎉"
-date: 2024-12-30T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.12.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
-slug: waha-2024-12
----
-
-🎉🎉🎉 First of all, **Happy New Year!** We wish you all the best in the New 2025 Year! 🎉🎉🎉
-
-We are thrilled to announce the release of [**WAHA 2024.12**]({{< relref "/docs/overview/changelog#202412" >}})!
-
-## Chat Overview API
-We've added [**💬 Chats Overview API**]({{< relref "/docs/how-to/chats#get-chats-overview" >}})
-to help you build your custom UI clients!
-
-{{< imgo src="/images/waha/dashboard/waha-dashboard-chat-ui.png" >}}
-
-Get chats "overview" - the API that almost all
-[**Chat UI**]({{< relref "/docs/how-to/dashboard#chat-ui" >}})
-client needs!
-
-```http request
-GET /api/{session}/chats/overview?limit=20&offset=0
-```
-
-**Response** contains the main info you need to show in the chat list:
-1. `id` - chat id
-2. `name` - chat name (if any)
-3. `picture` - chat picture (if any)
-4. `lastMessage` - last message in the chat (if any).
-5. `_chat` - the structure depends on engine you're using
-
-## Join Groups API
-Now you can
-[**👥 Join Group**]({{< relref "/docs/how-to/groups#join-group" >}})
-by link
-and get
-[**👥 Group Info**]({{< relref "/docs/how-to/groups#get-join-info-for-group" >}})
-before joining!
-
-If you have invite URL for a group (like `https://chat.whatsapp.com/invitecode`), you can
-
-```http request
-POST /api/{session}/groups/join
-```
-
-**Body**
-```json
-{
- "code": "invitecode"
-}
-```
-
-or using full link:
-```json
-{
- "code": "https://chat.whatsapp.com/invitecode"
-}
-```
-
-```json { title="Response" }
-{
- "id": "123123123@g.us"
-}
-```
-
-## Profile Picture API improvements
-We've added optimizations in
-[**💬 Get Chat Picture**]({{< relref "/docs/how-to/chats#get-chat-picture" >}})
-and
-[**👤 Get Contact Profile Picture**]({{< relref "/docs/how-to/contacts#get-contact-profile-picture" >}})
-API!
-
-Before it could give rate-overlimit error, now it's optimized and faster!
-
-## And More!
-Check out the full [**WAHA 2024.12 🆕 Changelog**]({{< relref "/docs/overview/changelog#202412" >}}) for more details!
-
-
+---
+title: "WAHA 2024.12"
+description: "WAHA 2024.12 - Chat UI API, Join Group, And More! 🎉"
+excerpt: "WAHA 2024.12 - Chat UI API, Join Group, And More! 🎉"
+date: 2024-12-30T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.12.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2024-12
+---
+
+🎉🎉🎉 First of all, **Happy New Year!** We wish you all the best in the New 2025 Year! 🎉🎉🎉
+
+We are thrilled to announce the release of [**WAHA 2024.12**]({{< relref "/docs/overview/changelog#202412" >}})!
+
+## Chat Overview API
+
+We've added [**💬 Chats Overview API**]({{< relref "/docs/how-to/chats#get-chats-overview" >}})
+to help you build your custom UI clients!
+
+{{< imgo src="/images/waha/dashboard/waha-dashboard-chat-ui.png" >}}
+
+Get chats "overview" - the API that almost all
+[**Chat UI**]({{< relref "/docs/how-to/dashboard#chat-ui" >}})
+client needs!
+
+```http request
+GET /api/{session}/chats/overview?limit=20&offset=0
+```
+
+**Response** contains the main info you need to show in the chat list:
+
+1. `id` - chat id
+2. `name` - chat name (if any)
+3. `picture` - chat picture (if any)
+4. `lastMessage` - last message in the chat (if any).
+5. `_chat` - the structure depends on engine you're using
+
+## Join Groups API
+
+Now you can
+[**👥 Join Group**]({{< relref "/docs/how-to/groups#join-group" >}})
+by link
+and get
+[**👥 Group Info**]({{< relref "/docs/how-to/groups#get-join-info-for-group" >}})
+before joining!
+
+If you have invite URL for a group (like `https://chat.whatsapp.com/invitecode`), you can
+
+```http request
+POST /api/{session}/groups/join
+```
+
+**Body**
+
+```json
+{
+ "code": "invitecode"
+}
+```
+
+or using full link:
+
+```json
+{
+ "code": "https://chat.whatsapp.com/invitecode"
+}
+```
+
+```json { title="Response" }
+{
+ "id": "123123123@g.us"
+}
+```
+
+## Profile Picture API improvements
+
+We've added optimizations in
+[**💬 Get Chat Picture**]({{< relref "/docs/how-to/chats#get-chat-picture" >}})
+and
+[**👤 Get Contact Profile Picture**]({{< relref "/docs/how-to/contacts#get-contact-profile-picture" >}})
+API!
+
+Before it could give rate-overlimit error, now it's optimized and faster!
+
+## And More!
+
+Check out the full [**WAHA 2024.12 🆕 Changelog**]({{< relref "/docs/overview/changelog#202412" >}}) for more details!
diff --git a/content/blog/waha-2024-4/index.md b/content/blog/waha-2024-4/index.md
index 5bdc278ae..fc15b2a56 100644
--- a/content/blog/waha-2024-4/index.md
+++ b/content/blog/waha-2024-4/index.md
@@ -1,56 +1,55 @@
----
-title: "WAHA 2024.4 - Dashboard to manage your sessions!"
-description: "WAHA 2024.4 - Dashboard to manage your sessions in easy way without additional tools!"
-excerpt: "WAHA 2024.4 - Dashboard to manage your sessions in easy way without additional tools!"
-date: 2024-04-01T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.4.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
----
-
-
-
-We are thrilled to introduce the latest addition to WAHA -
-[the brand new **Dashboard**]({{< relref "/docs/how-to/dashboard" >}}),
-exclusively available in
-[**WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) version!
-
-🌟 Dashboard allows you to do:
-
-1. **Monitor Sessions**: The Dashboard displays the total number of sessions on the server along with their statuses. It conveniently highlights sessions that require actions, allowing you to address any issues promptly.
-2. **Session Management**: Take full control of your sessions with the Dashboard. Start a new session, view session information, generate QR codes, adjust settings, and stop/start or log out from sessions with ease.
-3. **Secure Server Connection**: Easily connect to a server using your API key, ensuring a secure and seamless interaction with WAHA.
-4. **Version Comparison**: Keep track of the latest project version and compare it to your current version. The Dashboard makes it easy to see when updates are available, empowering you to stay up-to-date with the latest features and improvements.
-
-🔍 Accessing the Dashboard is as simple as running (remember to update it before!) the project and opening http://localhost:3000/dashboard (or a similar URL with /dashboard appended)I.
-
-🔑 **Default username and password**: `waha / waha`
-
-If you’re using API Key, remember to set up the key in the dashboard:
-
-
-⚙️ Environment Variables:
-
-- `WAHA_DASHBOARD_ENABLED=true`: Toggle to enable or disable the dashboard (default is true; set to false to disable).
-- `WAHA_DASHBOARD_USERNAME=waha`: Default username for login (default: waha).
-- `WAHA_DASHBOARD_PASSWORD=waha`: Default password for login (default: waha).
-
-ℹ️ If you encounter any issues or wish to request a new feature, please head over to our GitHub repository and create an issue at:
-🔗 [WAHA GitHub Issues](https://github.com/devlikeapro/waha/issues)
-
-
-Thank you for your continued support and enthusiasm for the project! We appreciate each and every one of our patrons! 🙏
-
-If you don't have access to
-[WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}}) - subscribe to one of our tiers on
-the platforms and get the key to get WAHA Plus on
-our portal! [https://portal.devlike.pro/](https://portal.devlike.pro/)
-
-You can find all changes for the WAHA 2024.4 in [🆕 Changelog]({{< relref "/docs/overview/changelog" >}})
+---
+title: "WAHA 2024.4 - Dashboard to manage your sessions!"
+description: "WAHA 2024.4 - Dashboard to manage your sessions in easy way without additional tools!"
+excerpt: "WAHA 2024.4 - Dashboard to manage your sessions in easy way without additional tools!"
+date: 2024-04-01T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.4.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+---
+
+
+
+We are thrilled to introduce the latest addition to WAHA -
+[the brand new **Dashboard**]({{< relref "/docs/how-to/dashboard" >}}),
+exclusively available in
+[**WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) version!
+
+🌟 Dashboard allows you to do:
+
+1. **Monitor Sessions**: The Dashboard displays the total number of sessions on the server along with their statuses. It conveniently highlights sessions that require actions, allowing you to address any issues promptly.
+2. **Session Management**: Take full control of your sessions with the Dashboard. Start a new session, view session information, generate QR codes, adjust settings, and stop/start or log out from sessions with ease.
+3. **Secure Server Connection**: Easily connect to a server using your API key, ensuring a secure and seamless interaction with WAHA.
+4. **Version Comparison**: Keep track of the latest project version and compare it to your current version. The Dashboard makes it easy to see when updates are available, empowering you to stay up-to-date with the latest features and improvements.
+
+🔍 Accessing the Dashboard is as simple as running (remember to update it before!) the project and opening http://localhost:3000/dashboard (or a similar URL with /dashboard appended)I.
+
+🔑 **Default username and password**: `waha / waha`
+
+If you’re using API Key, remember to set up the key in the dashboard:
+
+
+⚙️ Environment Variables:
+
+- `WAHA_DASHBOARD_ENABLED=true`: Toggle to enable or disable the dashboard (default is true; set to false to disable).
+- `WAHA_DASHBOARD_USERNAME=waha`: Default username for login (default: waha).
+- `WAHA_DASHBOARD_PASSWORD=waha`: Default password for login (default: waha).
+
+ℹ️ If you encounter any issues or wish to request a new feature, please head over to our GitHub repository and create an issue at:
+🔗 [WAHA GitHub Issues](https://github.com/devlikeapro/waha/issues)
+
+Thank you for your continued support and enthusiasm for the project! We appreciate each and every one of our patrons! 🙏
+
+If you don't have access to
+[WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}}) - subscribe to one of our tiers on
+the platforms and get the key to get WAHA Plus on
+our portal! [https://portal.devlike.pro/](https://portal.devlike.pro/)
+
+You can find all changes for the WAHA 2024.4 in [🆕 Changelog]({{< relref "/docs/overview/changelog" >}})
diff --git a/content/blog/waha-2024-5/index.md b/content/blog/waha-2024-5/index.md
index a8c64b575..fb943cb97 100644
--- a/content/blog/waha-2024-5/index.md
+++ b/content/blog/waha-2024-5/index.md
@@ -1,45 +1,49 @@
----
-title: "WAHA 2024.5 - Swagger White Label and stability improvements"
-description: "WAHA 2024.5 has been released with Swagger White Label and stability improvements!"
-excerpt: "WAHA 2024.5 has been released with Swagger White Label and stability improvements!"
-date: 2024-05-30T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.5.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
----
-
-We are excited to announce the release of **WAHA 2024.5**!
-This version introduces the [Swagger White Label]({{< relref "/docs/how-to/swagger#white-label" >}})
-feature and includes several stability improvements.
-
-Check the [🆕 Changelog]({{< relref "/docs/overview/changelog#20245" >}}) for a full list of changes.
-
-# 🌟 NEW - Swagger White Label
-
-👉 Swagger White Label is available in [**WAHA Plus**]({{< relref "waha-plus#plus" >}}) version only.
-
-If you're running SaaS or want to show your brand in the Swagger documentation,
-you can now customize the Swagger documentation with your own brand!
-
-
-
-Use the following environment variables to customize the Swagger documentation:
-- `WHATSAPP_SWAGGER_TITLE` - the title of the Swagger documentation and some other places.
-- `WHATSAPP_SWAGGER_DESCRIPTION` - Markdown formatted description of your API.
-- `WHATSAPP_SWAGGER_EXTERNAL_DOC_URL` - URL to the external documentation.
-
-**Example** (consider using [docker-compose](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml#L15-L38) or other methods to store these settings):
-```bash
-docker run -it -p 3000:3000 -e WHATSAPP_SWAGGER_TITLE="AwesomeCRM" -e 'WHATSAPP_SWAGGER_DESCRIPTION=
FantasticFindz - Discover unique treasures from around the world at unbelievable prices! Read more about us!
' -e "WHATSAPP_SWAGGER_EXTERNAL_DOC_URL=https://google.com" devlikeapro/waha-plus
-```
-
-# 🛠️ Stability Improvements
-We've made several stability improvements to WEBJS and NOWEB engines, check the
-[🆕 Changelog]({{< relref "/docs/overview/changelog#20245" >}}) for more details.
-
-# Thank you for your support!
-We appreciate your [continued support](/support-us) and enthusiasm for the project!
+---
+title: "WAHA 2024.5 - Swagger White Label and stability improvements"
+description: "WAHA 2024.5 has been released with Swagger White Label and stability improvements!"
+excerpt: "WAHA 2024.5 has been released with Swagger White Label and stability improvements!"
+date: 2024-05-30T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.5.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+---
+
+We are excited to announce the release of **WAHA 2024.5**!
+This version introduces the [Swagger White Label]({{< relref "/docs/how-to/swagger#white-label" >}})
+feature and includes several stability improvements.
+
+Check the [🆕 Changelog]({{< relref "/docs/overview/changelog#20245" >}}) for a full list of changes.
+
+# 🌟 NEW - Swagger White Label
+
+👉 Swagger White Label is available in [**WAHA Plus**]({{< relref "waha-plus#plus" >}}) version only.
+
+If you're running SaaS or want to show your brand in the Swagger documentation,
+you can now customize the Swagger documentation with your own brand!
+
+
+
+Use the following environment variables to customize the Swagger documentation:
+
+- `WHATSAPP_SWAGGER_TITLE` - the title of the Swagger documentation and some other places.
+- `WHATSAPP_SWAGGER_DESCRIPTION` - Markdown formatted description of your API.
+- `WHATSAPP_SWAGGER_EXTERNAL_DOC_URL` - URL to the external documentation.
+
+**Example** (consider using [docker-compose](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml#L15-L38) or other methods to store these settings):
+
+```bash
+docker run -it -p 3000:3000 -e WHATSAPP_SWAGGER_TITLE="AwesomeCRM" -e 'WHATSAPP_SWAGGER_DESCRIPTION=
FantasticFindz - Discover unique treasures from around the world at unbelievable prices! Read more about us!
' -e "WHATSAPP_SWAGGER_EXTERNAL_DOC_URL=https://google.com" devlikeapro/waha-plus
+```
+
+# 🛠️ Stability Improvements
+
+We've made several stability improvements to WEBJS and NOWEB engines, check the
+[🆕 Changelog]({{< relref "/docs/overview/changelog#20245" >}}) for more details.
+
+# Thank you for your support!
+
+We appreciate your [continued support](/support-us) and enthusiasm for the project!
diff --git a/content/blog/waha-2024-6/index.md b/content/blog/waha-2024-6/index.md
index eb3089cc5..c5cfcbe6a 100644
--- a/content/blog/waha-2024-6/index.md
+++ b/content/blog/waha-2024-6/index.md
@@ -1,46 +1,49 @@
----
-title: "WAHA 2024.6 - NOWEB Store, Dashboard for Core, HTTPS"
-description: "Introducing NOWEB store for contacts, chats, and messages, Dashboard available in Core version, and built-in HTTPS support!"
-excerpt: "Introducing NOWEB store for contacts, chats, and messages, Dashboard available in Core version, and built-in HTTPS support!"
-date: 2024-06-30T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.6.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
----
-
-🎉 We are thrilled to announce the release of [**WAHA 2024.6**]({{< relref "/docs/overview/changelog" >}}) 🎉
-
-Here's the list of main changes we've made:
-
-## NOWEB Store
-
-You asked it, we did it - **contacts, chats, and messages** endpoints are now available in NOWEB engine!
-- [`GET /api/contacts/all`]({{< relref "/docs/how-to/contacts#get-all-contacts" >}})
-- [`GET /api/{session}/chats`]({{< relref "/docs/how-to/chats#get-all-chats" >}})
-- [`GET /api/{session}/chats/{chatId}/messages`]({{< relref "/docs/how-to/chats#get-messages-from-chat" >}})
-
-👉 Please make sure to [**🏭 Enable NOWEB Store before using these endpoints**]({{< relref "/docs/engines/NOWEB#store" >}})!
-
-
-## Dashboard now available in WAHA Core
-[📊 WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}})
-a web interface to easily manage your WhatsApp sessions now is available in Free WAHA Core version!
-
-
-
-## Built-in HTTPS Support
-WAHA supports [🔒 HTTPS out of the box now]({{< relref "/docs/how-to/security#https" >}})!
-
-👉 Here's [**Step-by-step guide on how to set up HTTPS for WAHA**]({{< relref "/blog/waha-https" >}})
-
-
-## And MORE!
-Read the [**Full Changelog for 2024.6**]({{< relref "/docs/overview/changelog" >}}) to get all updates we've made
-in 2024.6 version!
+---
+title: "WAHA 2024.6 - NOWEB Store, Dashboard for Core, HTTPS"
+description: "Introducing NOWEB store for contacts, chats, and messages, Dashboard available in Core version, and built-in HTTPS support!"
+excerpt: "Introducing NOWEB store for contacts, chats, and messages, Dashboard available in Core version, and built-in HTTPS support!"
+date: 2024-06-30T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.6.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+---
+
+🎉 We are thrilled to announce the release of [**WAHA 2024.6**]({{< relref "/docs/overview/changelog" >}}) 🎉
+
+Here's the list of main changes we've made:
+
+## NOWEB Store
+
+You asked it, we did it - **contacts, chats, and messages** endpoints are now available in NOWEB engine!
+
+- [`GET /api/contacts/all`]({{< relref "/docs/how-to/contacts#get-all-contacts" >}})
+- [`GET /api/{session}/chats`]({{< relref "/docs/how-to/chats#get-all-chats" >}})
+- [`GET /api/{session}/chats/{chatId}/messages`]({{< relref "/docs/how-to/chats#get-messages-from-chat" >}})
+
+👉 Please make sure to [**🏭 Enable NOWEB Store before using these endpoints**]({{< relref "/docs/engines/NOWEB#store" >}})!
+
+## Dashboard now available in WAHA Core
+
+[📊 WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}})
+a web interface to easily manage your WhatsApp sessions now is available in Free WAHA Core version!
+
+
+
+## Built-in HTTPS Support
+
+WAHA supports [🔒 HTTPS out of the box now]({{< relref "/docs/how-to/security#https" >}})!
+
+👉 Here's [**Step-by-step guide on how to set up HTTPS for WAHA**]({{< relref "/blog/waha-https" >}})
+
+
+## And MORE!
+
+Read the [**Full Changelog for 2024.6**]({{< relref "/docs/overview/changelog" >}}) to get all updates we've made
+in 2024.6 version!
diff --git a/content/blog/waha-2024-7/index.md b/content/blog/waha-2024-7/index.md
index 25d5a776d..8fa7c34cc 100644
--- a/content/blog/waha-2024-7/index.md
+++ b/content/blog/waha-2024-7/index.md
@@ -1,35 +1,37 @@
----
-title: "WAHA 2024.7 - WhatsApp Channels API, JSON logs"
-description: "Introducing WAHA 2024.7 - WhatsApp Channels API, JSON logs"
-excerpt: "Introducing WAHA 2024.7 - WhatsApp Channels API, JSON logs"
-date: 2024-07-20T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.7.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
----
-
-🎉 We are thrilled to announce the release of [**WAHA 2024.7**]({{< relref "/docs/overview/changelog" >}}) 🎉
-
-
-## WhatsApp Channels API
-
-
-WAHA now supports [**WhatsApp Channels**]({{< relref "/whatsapp-channels" >}}) - a brand-new feature introduced by WhatsApp.
-You can manage, read and send messages to **WhatsApp Channels** (aka Newsletters) via API.
-
-👉 Read more about available features on [**📢 Channels**]({{< relref "/docs/how-to/channels" >}}) documentation page.
-
-💡 If you're completely new with the project, we wrote a
-[**Step-By-Step Guide on How to send a post to WhatsApp Channel via API**]({{< relref "/blog/how-to-send-messages-to-channels" >}})
-
-## JSON logs
-WAHA now supports JSON logs. You can enable it by setting `WAHA_LOG_FORMAT=JSON` environment variable.
-`WAHA_LOG_FORMAT` - supports formats:
- - `WAHA_LOG_FORMAT=PRETTY` - good for local development, **default** format
- - `WAHA_LOG_FORMAT=JSON` - can be useful if you're using central logging management system
-
-👉 Learn more about logging configuration on [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}}) page.
+---
+title: "WAHA 2024.7 - WhatsApp Channels API, JSON logs"
+description: "Introducing WAHA 2024.7 - WhatsApp Channels API, JSON logs"
+excerpt: "Introducing WAHA 2024.7 - WhatsApp Channels API, JSON logs"
+date: 2024-07-20T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.7.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+---
+
+🎉 We are thrilled to announce the release of [**WAHA 2024.7**]({{< relref "/docs/overview/changelog" >}}) 🎉
+
+## WhatsApp Channels API
+
+
+
+WAHA now supports [**WhatsApp Channels**]({{< relref "/whatsapp-channels" >}}) - a brand-new feature introduced by WhatsApp.
+You can manage, read and send messages to **WhatsApp Channels** (aka Newsletters) via API.
+
+👉 Read more about available features on [**📢 Channels**]({{< relref "/docs/how-to/channels" >}}) documentation page.
+
+💡 If you're completely new with the project, we wrote a
+[**Step-By-Step Guide on How to send a post to WhatsApp Channel via API**]({{< relref "/blog/how-to-send-messages-to-channels" >}})
+
+## JSON logs
+
+WAHA now supports JSON logs. You can enable it by setting `WAHA_LOG_FORMAT=JSON` environment variable.
+`WAHA_LOG_FORMAT` - supports formats:
+
+- `WAHA_LOG_FORMAT=PRETTY` - good for local development, **default** format
+- `WAHA_LOG_FORMAT=JSON` - can be useful if you're using central logging management system
+
+👉 Learn more about logging configuration on [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}}) page.
diff --git a/content/blog/waha-2024-8/index.md b/content/blog/waha-2024-8/index.md
index 6ee0f213f..21b2298aa 100644
--- a/content/blog/waha-2024-8/index.md
+++ b/content/blog/waha-2024-8/index.md
@@ -1,136 +1,141 @@
----
-title: "WAHA 2024.8 - WhatsApp Business Labels API, Chat Archive and more!"
-description: "Introducing WAHA 2024.8 - WhatsApp Business Labels API, Chat Archive and more!"
-excerpt: "Introducing WAHA 2024.8 - WhatsApp Business Labels API, Chat Archive and more!"
-date: 2024-08-01T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.8.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
----
-
-🎉 We are thrilled to announce the release of [**WAHA 2024.8**]({{< relref "/docs/overview/changelog#20248" >}}) 🎉
-
-
-## WhatsApp Business Labels API
-You can now work with **WhatsApp Labels** available in WhatsApp Business using the API!
-
-
-
-### Labels API
-
-Here's **Get labels** API example:
-
-```http request
-GET /api/{session}/labels
-```
-
-Response:
-
-```json
-[
- {
- "id": "1",
- "name": "New Client",
- "color": 1,
- "colorHex": "#64c4ff"
- },
- ...
-]
-```
-
-👉 Read more about the WhatsApp Business Labels API on [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) page!
-
-### Labels Events
-You can now receive information about label creation, update, and deletion using webhooks!
-
-```json { title="label.upsert" }
-{
- "event": "label.upsert",
- "session": "default",
- "payload": {
- "id": "10",
- "name": "Label Name",
- "color": 14,
- "colorHex": "#00a0f2"
- },
- "engine": "NOWEB",
- ...
-}
-
-```
-👉 Read more about the Labels Events on [**🏷️ Labels**]({{< relref "docs/how-to/labels#webhooks" >}}) page!
-
-## Chat archive/unarchive
-You can now **archive and unarchive** WhatsApp Chats using API and
-receive events about chat archive in WhatsApp using webhooks!
-
-
-### Chat archive API
-
-Use the method to **archive** chat
-```http request
-POST /api/{session}/chats/{chatId}/archive
-```
-
-Use the method to **unarchive** chat
-
-```http request
-POST /api/{session}/chats/{chatId}/unarchive
-```
-
-
-👉 Read more about the endpoints on [**💬 Chats**]({{< relref "docs/how-to/chats#archive-chat" >}}) page!
-
-### Chat archive Events
-Enable `chat.archive` event when starting a new session
-and receive information about chat archive in WhatsApp using events:
-
-```json { title="chat.archive" }
-{
- "event": "chat.archive",
- "session": "default",
- "payload": {
- "id": "123123123@c.us",
- "timestamp": 1667561485,
- "archived": true <== or false
- },
- ...
-}
-```
-
-👉 Read more about the events on [**🔄 Webhooks**]({{< relref "docs/how-to/events#chatarchive" >}}) page!
-
-
-## Calls Events
-Now when the WhatsApp account receives (rejects and accepts) a new call - you can receive information about
-that using new `call.*` webhooks!
-
-
-
-Enable `call.*` events when starting a new session
-and receive information about calls in WhatsApp using events:
-
-```json { title="call.received" }
-{
- "event": "call.received",
- "session": "default",
- "payload": {
- "id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "from": "22222222222@c.us",
- "timestamp": 1721374000,
- "isVideo": false,
- "isGroup": false
- },
- ...
-}
-```
-
-👉 Read more about the events on [**📞 Calls**]({{< relref "docs/how-to/calls" >}}) page!
-
-## And more!
-
-👉 Read the full [**🆕 Changelog**]({{< relref "/docs/overview/changelog#20248" >}}) for WAHA 2024.8 release!
+---
+title: "WAHA 2024.8 - WhatsApp Business Labels API, Chat Archive and more!"
+description: "Introducing WAHA 2024.8 - WhatsApp Business Labels API, Chat Archive and more!"
+excerpt: "Introducing WAHA 2024.8 - WhatsApp Business Labels API, Chat Archive and more!"
+date: 2024-08-01T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.8.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+---
+
+🎉 We are thrilled to announce the release of [**WAHA 2024.8**]({{< relref "/docs/overview/changelog#20248" >}}) 🎉
+
+## WhatsApp Business Labels API
+
+You can now work with **WhatsApp Labels** available in WhatsApp Business using the API!
+
+
+
+### Labels API
+
+Here's **Get labels** API example:
+
+```http request
+GET /api/{session}/labels
+```
+
+Response:
+
+```json
+[
+ {
+ "id": "1",
+ "name": "New Client",
+ "color": 1,
+ "colorHex": "#64c4ff"
+ },
+ ...
+]
+```
+
+👉 Read more about the WhatsApp Business Labels API on [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) page!
+
+### Labels Events
+
+You can now receive information about label creation, update, and deletion using webhooks!
+
+```json { title="label.upsert" }
+{
+ "event": "label.upsert",
+ "session": "default",
+ "payload": {
+ "id": "10",
+ "name": "Label Name",
+ "color": 14,
+ "colorHex": "#00a0f2"
+ },
+ "engine": "NOWEB",
+ ...
+}
+
+```
+
+👉 Read more about the Labels Events on [**🏷️ Labels**]({{< relref "docs/how-to/labels#webhooks" >}}) page!
+
+## Chat archive/unarchive
+
+You can now **archive and unarchive** WhatsApp Chats using API and
+receive events about chat archive in WhatsApp using webhooks!
+
+
+
+### Chat archive API
+
+Use the method to **archive** chat
+
+```http request
+POST /api/{session}/chats/{chatId}/archive
+```
+
+Use the method to **unarchive** chat
+
+```http request
+POST /api/{session}/chats/{chatId}/unarchive
+```
+
+👉 Read more about the endpoints on [**💬 Chats**]({{< relref "docs/how-to/chats#archive-chat" >}}) page!
+
+### Chat archive Events
+
+Enable `chat.archive` event when starting a new session
+and receive information about chat archive in WhatsApp using events:
+
+```json { title="chat.archive" }
+{
+ "event": "chat.archive",
+ "session": "default",
+ "payload": {
+ "id": "123123123@c.us",
+ "timestamp": 1667561485,
+ "archived": true <== or false
+ },
+ ...
+}
+```
+
+👉 Read more about the events on [**🔄 Webhooks**]({{< relref "docs/how-to/events#chatarchive" >}}) page!
+
+## Calls Events
+
+Now when the WhatsApp account receives (rejects and accepts) a new call - you can receive information about
+that using new `call.*` webhooks!
+
+
+
+Enable `call.*` events when starting a new session
+and receive information about calls in WhatsApp using events:
+
+```json { title="call.received" }
+{
+ "event": "call.received",
+ "session": "default",
+ "payload": {
+ "id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "from": "22222222222@c.us",
+ "timestamp": 1721374000,
+ "isVideo": false,
+ "isGroup": false
+ },
+ ...
+}
+```
+
+👉 Read more about the events on [**📞 Calls**]({{< relref "docs/how-to/calls" >}}) page!
+
+## And more!
+
+👉 Read the full [**🆕 Changelog**]({{< relref "/docs/overview/changelog#20248" >}}) for WAHA 2024.8 release!
diff --git a/content/blog/waha-2024-9/index.md b/content/blog/waha-2024-9/index.md
index fd91043f3..9f543e531 100644
--- a/content/blog/waha-2024-9/index.md
+++ b/content/blog/waha-2024-9/index.md
@@ -1,190 +1,196 @@
----
-title: "WAHA 2024.9 - S3, Session API, Metadata, Dashboard and more!"
-description: "We are thrilled to announce the release of WAHA 2024.9"
-excerpt: "We are thrilled to announce the release of WAHA 2024.9 🎉"
-date: 2024-08-27T08:48:45+00:00
-draft: false
-images: ["WAHA 2024.9.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
-slug: waha-2024-9
-aliases:
- - /blog/waha-2024.9-session-api-metadata-dashboard-and-more
- - /blog/waha-2024.9-s3-session-api-metadata-dashboard-and-more/
----
-
-🎉 We are thrilled to announce the release of [**WAHA 2024.9**]({{< relref "/docs/overview/changelog#20249" >}}) 🎉
-
-The release has a lot of changes, but we'll cover only few of them in this blog post,
-kindly check the [**🆕 Changelog**]({{< relref "/docs/overview/changelog#20249" >}})
-for the full list of changes.
-
-## Session API
-{{< imgo src="/images/waha/waha-session-lifecycle.png" >}}
-
-We've added a new [**🖥️ Sessions API**]({{< relref "/docs/how-to/sessions" >}})
-to manage the session lifecycle.
-
-Now you can change configuration after the session is created,
-you can log out the session without removing it, and more!
-
-
-## Session Metadata
-`metadata` is an attribute on Session objects that lets you store more information,
-structured as key-value pairs,
-to sessions for your own use and reference.
-For example, you can store your user’s unique identifier from your system.
-
-Associated `metadata` field is available in:
-1. [List Sessions](#list-sessions) and [Get Session](#get-session) responses
-2. [**🔄 Webhooks**]({{< relref "events#metadata" >}}) events
-3. [**📊 Dashboard**]({{< relref "dashboard" >}}) for view, and search sessions by metadata
-
-
-```json
-{
- "name": "default",
- "config": {
- "metadata": {
- "user.id": "123",
- "user.email": "email@example.com"
- }
- }
-}
-```
-
-Sample `metadata` use cases:
-- **Link IDs**: Attach your system’s unique IDs to a Session object to simplify lookups. For example, add your user or tenant id.
-- **Customer details**: Annotate a customer by storing an internal information (email, customer name) for your future
- use, so you don't have to look into two systems.
-
-WAHA does not use metadata for any internal purposes, it's up to you how to use it.
-
-👉 Read more
-[**🖥️ Sessions - Metadata**]({{< relref "/docs/how-to/sessions#metadata" >}})
-
-## Media S3 Storage
-You can use the S3 storage to store the media files.
-
-{{< imgo src="/images/waha/storages/waha-storages.drawio.png" >}}
-
-Any **S3 Compatible** storage can be used, such as AWS S3, MinIO, DigitalOcean Spaces, etc. For in-house solutions, you can use [**MinIO**](https://min.io/).
-
-{{< include file="content/docs/how-to/storages/docker-compose.md" >}}
-
-
-
-After you enabled S3 here's example for [**message**]({{< relref "/docs/how-to/events#message" >}}) webhook payload:
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "engine": "WEBJS",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "hasMedia": true,
- "media": {
- "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg",
- "mimetype": "image/jpeg",
- "filename": null,
- "s3": {
- "Bucket": "bucket-name",
- "Key": "/default/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg"
- },
- "error": null // if there was an error during file download
- }
- ...
- }
-}
-```
-
-in addition to `media.*` field it will have `media.s3.*` field with the S3 bucket information.
-
-
-👉 Read more [**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}})
-
-
-## Dashboard
-Here's a quick overview of new features available in Dashboard:
-
-{{< imgo src="/images/blog/waha-2024-9/dashboard-overview.png" >}}
-- **Server Uptime** - see how long your server is running
-- **Server Restart** - restart the server
-- **Session Metadata** - see the metadata of the session
-- **Session Actions** - see the actions available for the session
-- **Session Bulk Actions** - see the bulk actions available for the session
-
-
-{{< imgo src="/images/blog/waha-2024-9/dashboard-server.png" >}}
-- **Server Environment Variables** - see the environment variables of the server
-- **Server Uptime**
-
-{{< imgo src="/images/blog/waha-2024-9/dashboard-session.png" >}}
-- **Session Metadata** - add metadata to the session
-
-## Reply on Message
-You can reply on a message with any type of message now by adding `reply_to` in the request!
-```http request
-POST /api/sendText
-```
-
-```json
-{
- "session": "default",
- "chatId": "11111111111@c.us",
- "reply_to": "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA",
- "text": "Reply text"
-}
-
-```
-
-Read more about [**📤 Send messages - reply_to**]({{< relref "/docs/how-to/send-messages#reply_to" >}})
-
-## Server API
-### Get server status
-
-Returns the server status, start timestamp, and uptime.
-
-```http request
-GET /api/server/status
-```
-
-```json
-{
- "startTimestamp": 1723788847247,
- "uptime": 3600000
-}
-```
-
-### Restart (stop) server
-
-You can stop the server by calling
-
-```http request
-POST /api/server/stop
-```
-
-```json
-{
- // By default, it gracefully stop all sessions and connections
- // but you can force it to stop immediately
- "force": false
-}
-```
-👉 If you're using Docker and followed [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) guide,
-Docker will **automatically restart** the server, so you can use this endpoint to **restart** the server.
-
-
-
-## Thank you all for your support! 🙏
-All these changes were made possible by the amazing community of supporters!
-
-We are grateful for your contributions and feedback. 🚀
-
-
-🫶
-
-
+---
+title: "WAHA 2024.9 - S3, Session API, Metadata, Dashboard and more!"
+description: "We are thrilled to announce the release of WAHA 2024.9"
+excerpt: "We are thrilled to announce the release of WAHA 2024.9 🎉"
+date: 2024-08-27T08:48:45+00:00
+draft: false
+images: ["WAHA 2024.9.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2024-9
+aliases:
+ - /blog/waha-2024.9-session-api-metadata-dashboard-and-more
+ - /blog/waha-2024.9-s3-session-api-metadata-dashboard-and-more/
+---
+
+🎉 We are thrilled to announce the release of [**WAHA 2024.9**]({{< relref "/docs/overview/changelog#20249" >}}) 🎉
+
+The release has a lot of changes, but we'll cover only few of them in this blog post,
+kindly check the [**🆕 Changelog**]({{< relref "/docs/overview/changelog#20249" >}})
+for the full list of changes.
+
+## Session API
+
+{{< imgo src="/images/waha/waha-session-lifecycle.png" >}}
+
+We've added a new [**🖥️ Sessions API**]({{< relref "/docs/how-to/sessions" >}})
+to manage the session lifecycle.
+
+Now you can change configuration after the session is created,
+you can log out the session without removing it, and more!
+
+## Session Metadata
+
+`metadata` is an attribute on Session objects that lets you store more information,
+structured as key-value pairs,
+to sessions for your own use and reference.
+For example, you can store your user’s unique identifier from your system.
+
+Associated `metadata` field is available in:
+
+1. [List Sessions](#list-sessions) and [Get Session](#get-session) responses
+2. [**🔄 Webhooks**]({{< relref "events#metadata" >}}) events
+3. [**📊 Dashboard**]({{< relref "dashboard" >}}) for view, and search sessions by metadata
+
+```json
+{
+ "name": "default",
+ "config": {
+ "metadata": {
+ "user.id": "123",
+ "user.email": "email@example.com"
+ }
+ }
+}
+```
+
+Sample `metadata` use cases:
+
+- **Link IDs**: Attach your system’s unique IDs to a Session object to simplify lookups. For example, add your user or tenant id.
+- **Customer details**: Annotate a customer by storing an internal information (email, customer name) for your future
+ use, so you don't have to look into two systems.
+
+WAHA does not use metadata for any internal purposes, it's up to you how to use it.
+
+👉 Read more
+[**🖥️ Sessions - Metadata**]({{< relref "/docs/how-to/sessions#metadata" >}})
+
+## Media S3 Storage
+
+You can use the S3 storage to store the media files.
+
+{{< imgo src="/images/waha/storages/waha-storages.drawio.png" >}}
+
+Any **S3 Compatible** storage can be used, such as AWS S3, MinIO, DigitalOcean Spaces, etc. For in-house solutions, you can use [**MinIO**](https://min.io/).
+
+{{< include file="content/docs/how-to/storages/docker-compose.md" >}}
+
+
+
+After you enabled S3 here's example for [**message**]({{< relref "/docs/how-to/events#message" >}}) webhook payload:
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "engine": "WEBJS",
+ "payload": {
+ "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "hasMedia": true,
+ "media": {
+ "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg",
+ "mimetype": "image/jpeg",
+ "filename": null,
+ "s3": {
+ "Bucket": "bucket-name",
+ "Key": "/default/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg"
+ },
+ "error": null // if there was an error during file download
+ }
+ ...
+ }
+}
+```
+
+in addition to `media.*` field it will have `media.s3.*` field with the S3 bucket information.
+
+👉 Read more [**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}})
+
+## Dashboard
+
+Here's a quick overview of new features available in Dashboard:
+
+{{< imgo src="/images/blog/waha-2024-9/dashboard-overview.png" >}}
+
+- **Server Uptime** - see how long your server is running
+- **Server Restart** - restart the server
+- **Session Metadata** - see the metadata of the session
+- **Session Actions** - see the actions available for the session
+- **Session Bulk Actions** - see the bulk actions available for the session
+
+{{< imgo src="/images/blog/waha-2024-9/dashboard-server.png" >}}
+
+- **Server Environment Variables** - see the environment variables of the server
+- **Server Uptime**
+
+{{< imgo src="/images/blog/waha-2024-9/dashboard-session.png" >}}
+
+- **Session Metadata** - add metadata to the session
+
+## Reply on Message
+
+You can reply on a message with any type of message now by adding `reply_to` in the request!
+
+```http request
+POST /api/sendText
+```
+
+```json
+{
+ "session": "default",
+ "chatId": "11111111111@c.us",
+ "reply_to": "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA",
+ "text": "Reply text"
+}
+```
+
+Read more about [**📤 Send messages - reply_to**]({{< relref "/docs/how-to/send-messages#reply_to" >}})
+
+## Server API
+
+### Get server status
+
+Returns the server status, start timestamp, and uptime.
+
+```http request
+GET /api/server/status
+```
+
+```json
+{
+ "startTimestamp": 1723788847247,
+ "uptime": 3600000
+}
+```
+
+### Restart (stop) server
+
+You can stop the server by calling
+
+```http request
+POST /api/server/stop
+```
+
+```json
+{
+ // By default, it gracefully stop all sessions and connections
+ // but you can force it to stop immediately
+ "force": false
+}
+```
+
+👉 If you're using Docker and followed [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) guide,
+Docker will **automatically restart** the server, so you can use this endpoint to **restart** the server.
+
+## Thank you all for your support! 🙏
+
+All these changes were made possible by the amazing community of supporters!
+
+We are grateful for your contributions and feedback. 🚀
+
+
+🫶
+
diff --git a/content/blog/waha-2025-1/index.md b/content/blog/waha-2025-1/index.md
index a949baa3a..818d9a4cf 100644
--- a/content/blog/waha-2025-1/index.md
+++ b/content/blog/waha-2025-1/index.md
@@ -1,69 +1,72 @@
----
-title: "WAHA 2025.1"
-description: "WAHA 2025.1 - PostgreSQL support, GOWS engine and more! 🎉"
-excerpt: "WAHA 2025.1 - PostgreSQL support, GOWS engine and more! 🎉"
-date: 2025-01-30T08:48:45+00:00
-draft: false
-images: ["WAHA 2025.1.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
-slug: waha-2025-1
----
-
-
-🎉 We are thrilled to announce the changes we made during the [**WAHA 2025.1**]({{< relref "/docs/overview/changelog#20251" >}}) 🎉
-
-## GOWS engine
-Meet **GOWS** - new, fast, super-reliable and stable [**🏭 Engine**]({{< relref "/docs/how-to/engines" >}}) for your WAHA instance!
-
-**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.
-
-You can test it by setting `WHATSAPP_DEFAULT_ENGINE=GOWS` environment variable.
-```bash
-docker run -it -e "WHATSAPP_DEFAULT_ENGINE=GOWS" devlikeapro/waha
-```
-
-👉 [Read more about **GOWS**]({{< relref "/docs/how-to/engines" >}}), it doesn't support all features yet, but we're working on it!
-
-
-## PostgreSQL support
-
-Now you can use **PostgreSQL** as a [**🗄️ Storage**]({{< relref "/docs/how-to/storages" >}}) for your WAHA instance!
-
-| Storage | WEBJS | NOWEB | GOWS |
-|-----------------------------------|:-----:|:-----:|:----:|
-| **🖥️ Session** - **PostgresSQL** | ✔️ | ✔️ | ✔️ |
-| **🖼️ Media** - **PostgresSQL** | ✔️ | ✔️ | ✔️ |
-
-It works with both
-[**🖥️ Session** Storage]({{< relref "/docs/how-to/storages#session-storage" >}})
-and
-[**🖼️ Media** Storage]({{< relref "/docs/how-to/storages#media-storage" >}}),
-support all engines and available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
-
-How to connect to your **PostgresSQL** instance?
-
-Connect **🖥️ Session** Storage:
-```bash
-docker run -p 3000:3000 -it -e WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable devlikeapro/waha-plus
-```
-- Set `WHATSAPP_SESSIONS_POSTGRESQL_URL` with your credentials and database name.
-
-Connect **🖼️ Media** Storage:
-```bash
-docker run -p 3000:3000 -it -e WAHA_MEDIA_STORAGE=POSTGRESQL WAHA_MEDIA_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable devlikeapro/waha-plus
-```
-- Set `WAHA_MEDIA_POSTGRESQL_URL` with your credentials and database name.
-- Set `WAHA_MEDIA_STORAGE=POSTGRESQL` to enable **PostgresSQL** as a media storage.
-
-💡 You can use the same connection URL for `WAHA_MEDIA_POSTGRESQL_URL` and `WHATSAPP_SESSIONS_POSTGRESQL_URL` if you want to use the same database for both storages.
-
-## And More!
-Check out the full [**WAHA 2025.1 🆕 Changelog**]({{< relref "/docs/overview/changelog#20251" >}}) for more details!
-
-
+---
+title: "WAHA 2025.1"
+description: "WAHA 2025.1 - PostgreSQL support, GOWS engine and more! 🎉"
+excerpt: "WAHA 2025.1 - PostgreSQL support, GOWS engine and more! 🎉"
+date: 2025-01-30T08:48:45+00:00
+draft: false
+images: ["WAHA 2025.1.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2025-1
+---
+
+🎉 We are thrilled to announce the changes we made during the [**WAHA 2025.1**]({{< relref "/docs/overview/changelog#20251" >}}) 🎉
+
+## GOWS engine
+
+Meet **GOWS** - new, fast, super-reliable and stable [**🏭 Engine**]({{< relref "/docs/how-to/engines" >}}) for your WAHA instance!
+
+**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.
+
+You can test it by setting `WHATSAPP_DEFAULT_ENGINE=GOWS` environment variable.
+
+```bash
+docker run -it -e "WHATSAPP_DEFAULT_ENGINE=GOWS" devlikeapro/waha
+```
+
+👉 [Read more about **GOWS**]({{< relref "/docs/how-to/engines" >}}), it doesn't support all features yet, but we're working on it!
+
+## PostgreSQL support
+
+Now you can use **PostgreSQL** as a [**🗄️ Storage**]({{< relref "/docs/how-to/storages" >}}) for your WAHA instance!
+
+| Storage | WEBJS | NOWEB | GOWS |
+| -------------------------------- | :---: | :---: | :--: |
+| **🖥️ Session** - **PostgresSQL** | ✔️ | ✔️ | ✔️ |
+| **🖼️ Media** - **PostgresSQL** | ✔️ | ✔️ | ✔️ |
+
+It works with both
+[**🖥️ Session** Storage]({{< relref "/docs/how-to/storages#session-storage" >}})
+and
+[**🖼️ Media** Storage]({{< relref "/docs/how-to/storages#media-storage" >}}),
+support all engines and available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
+
+How to connect to your **PostgresSQL** instance?
+
+Connect **🖥️ Session** Storage:
+
+```bash
+docker run -p 3000:3000 -it -e WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable devlikeapro/waha-plus
+```
+
+- Set `WHATSAPP_SESSIONS_POSTGRESQL_URL` with your credentials and database name.
+
+Connect **🖼️ Media** Storage:
+
+```bash
+docker run -p 3000:3000 -it -e WAHA_MEDIA_STORAGE=POSTGRESQL WAHA_MEDIA_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable devlikeapro/waha-plus
+```
+
+- Set `WAHA_MEDIA_POSTGRESQL_URL` with your credentials and database name.
+- Set `WAHA_MEDIA_STORAGE=POSTGRESQL` to enable **PostgresSQL** as a media storage.
+
+💡 You can use the same connection URL for `WAHA_MEDIA_POSTGRESQL_URL` and `WHATSAPP_SESSIONS_POSTGRESQL_URL` if you want to use the same database for both storages.
+
+## And More!
+
+Check out the full [**WAHA 2025.1 🆕 Changelog**]({{< relref "/docs/overview/changelog#20251" >}}) for more details!
diff --git a/content/blog/waha-2025-2/index.md b/content/blog/waha-2025-2/index.md
index 5a9680683..91fbd6e52 100644
--- a/content/blog/waha-2025-2/index.md
+++ b/content/blog/waha-2025-2/index.md
@@ -1,136 +1,144 @@
----
-title: "WAHA 2025.2"
-description: "WAHA 2025.2 - Search Channels API, Profile API and more! 🎉"
-excerpt: "WAHA 2025.2 - Search Channels API, Profile API and more! 🎉"
-date: 2025-02-27T08:48:45+00:00
-draft: false
-images: [ "waha-2025-2.png" ]
-categories: [ "Releases" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: waha-2025-2
----
-
-
-🎉 We are thrilled to announce the changes we made during the
-[**WAHA 2025.2**]({{< relref "/docs/overview/changelog#20252" >}}) 🎉
-
-## 🆔 Profile API
-Managing your WhatsApp profile has never been easier.
-
-With the new
-[**🆔 Profile API**]({{< relref "/docs/how-to/profile" >}})
-, you can customize your profile details!
-
-{{< imgo src="/images/whatsapp/whatsapp-profile.jpg" full="false" >}}
-
-**Retrieve your profile details**
-
-```http request
-GET /api/{SESSION}/profile
-```
-
-**Set Your Profile Name**
-
-```http request
-PUT /api/{session}/profile/name
-```
-
-**Set a custom status ("About")**
-
-```http request
-PUT /api/{session}/profile/status
-```
-
-**Update a profile picture**
-
-```http request
-PUT /api/{session}/profile/picture
-```
-
-```http request
-DELETE /api/{session}/profile/picture
-```
-
-## 📢🔎 Search Channels API
-
-{{< callout context="tip" icon="outline/hand-finger-right" >}}
-Available in [**➕ WAHA Plus**]({{< relref "waha-plus#plus" >}}) version.
-{{< /callout >}}
-
-Discovering public channels is now **effortless** with the
-[**📢 Channels - Search API**]({{< relref "/docs/how-to/channels#search-api" >}})!
-
-### Search channels by view
-
-{{< imgo src="/images/whatsapp/channels/channels-views.png" full="false" >}}
-
-You can search **public** (not subscribed yet) channels **by view**:
-
-```http request
-POST /api/{session}/channels/search/by-view
-```
-
-### Search channels by text
-{{< imgo src="/images/whatsapp/channels/channels-text.png" full="false" >}}
-
-You can search **public** (not subscribed yet) channels **by text**:
-```http request
-POST /api/{session}/channels/search/by-text
-```
-
-
-## 👥 Update Group Picture API
-Added [**👥 Set Group Picture API**]({{< relref "/docs/how-to/groups#set-group-picture" >}}) to update the group picture.
-
-**Set Group Picture**
-{{< callout context="tip" icon="outline/hand-finger-right" >}}
-Available in [**➕ WAHA Plus**]({{< relref "waha-plus#plus" >}}) version.
-{{< /callout >}}
-
-```http request
-PUT /api/{SESSION}/groups/{ID}/picture
-```
-
-- `{SESSION}` - session name
-- `{ID}` - group id. Remember to encode `@` symbol - `123123123123%40g.us`
-
-```json { title="Body" }
-{
- "file": {
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- }
-}
-```
-
-## 👥 Groups API - NOWEB, GOWS
-**NOWEB** and **GOWS** engines now support the
-[**👥 Groups API**]({{< relref "/docs/how-to/groups" >}})!
-
-{{< include file="content/docs/how-to/groups/features.md" >}}
-
-## 🔄 group.v2.* events
-We added new `group.v2.*` events and made `payload` body **the same** across of all engines!
-
-Check
-[**🔄 Webhooks**]({{< relref "/docs/how-to/events" >}}) or
-[**👥 Groups API**]({{< relref "/docs/how-to/groups" >}}) for more details.
-
-
-### group.v2.join
-{{< include file="content/docs/how-to/groups/events-group.v2.join.md" >}}
-
-### group.v2.leave
-{{< include file="content/docs/how-to/groups/events-group.v2.leave.md" >}}
-
-### group.v2.participants
-{{< include file="content/docs/how-to/groups/events-group.v2.participants.md" >}}
-
-### group.v2.update
-{{< include file="content/docs/how-to/groups/events-group.v2.update.md" >}}
-
-## And More!
-Check out the full list of changes in the
-[**WAHA 2025.2**]({{< relref "/docs/overview/changelog#20252" >}}) 🎉
+---
+title: "WAHA 2025.2"
+description: "WAHA 2025.2 - Search Channels API, Profile API and more! 🎉"
+excerpt: "WAHA 2025.2 - Search Channels API, Profile API and more! 🎉"
+date: 2025-02-27T08:48:45+00:00
+draft: false
+images: ["waha-2025-2.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2025-2
+---
+
+🎉 We are thrilled to announce the changes we made during the
+[**WAHA 2025.2**]({{< relref "/docs/overview/changelog#20252" >}}) 🎉
+
+## 🆔 Profile API
+
+Managing your WhatsApp profile has never been easier.
+
+With the new
+[**🆔 Profile API**]({{< relref "/docs/how-to/profile" >}})
+, you can customize your profile details!
+
+{{< imgo src="/images/whatsapp/whatsapp-profile.jpg" full="false" >}}
+
+**Retrieve your profile details**
+
+```http request
+GET /api/{SESSION}/profile
+```
+
+**Set Your Profile Name**
+
+```http request
+PUT /api/{session}/profile/name
+```
+
+**Set a custom status ("About")**
+
+```http request
+PUT /api/{session}/profile/status
+```
+
+**Update a profile picture**
+
+```http request
+PUT /api/{session}/profile/picture
+```
+
+```http request
+DELETE /api/{session}/profile/picture
+```
+
+## 📢🔎 Search Channels API
+
+{{< callout context="tip" icon="outline/hand-finger-right" >}}
+Available in [**➕ WAHA Plus**]({{< relref "waha-plus#plus" >}}) version.
+{{< /callout >}}
+
+Discovering public channels is now **effortless** with the
+[**📢 Channels - Search API**]({{< relref "/docs/how-to/channels#search-api" >}})!
+
+### Search channels by view
+
+{{< imgo src="/images/whatsapp/channels/channels-views.png" full="false" >}}
+
+You can search **public** (not subscribed yet) channels **by view**:
+
+```http request
+POST /api/{session}/channels/search/by-view
+```
+
+### Search channels by text
+
+{{< imgo src="/images/whatsapp/channels/channels-text.png" full="false" >}}
+
+You can search **public** (not subscribed yet) channels **by text**:
+
+```http request
+POST /api/{session}/channels/search/by-text
+```
+
+## 👥 Update Group Picture API
+
+Added [**👥 Set Group Picture API**]({{< relref "/docs/how-to/groups#set-group-picture" >}}) to update the group picture.
+
+**Set Group Picture**
+{{< callout context="tip" icon="outline/hand-finger-right" >}}
+Available in [**➕ WAHA Plus**]({{< relref "waha-plus#plus" >}}) version.
+{{< /callout >}}
+
+```http request
+PUT /api/{SESSION}/groups/{ID}/picture
+```
+
+- `{SESSION}` - session name
+- `{ID}` - group id. Remember to encode `@` symbol - `123123123123%40g.us`
+
+```json { title="Body" }
+{
+ "file": {
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ }
+}
+```
+
+## 👥 Groups API - NOWEB, GOWS
+
+**NOWEB** and **GOWS** engines now support the
+[**👥 Groups API**]({{< relref "/docs/how-to/groups" >}})!
+
+{{< include file="content/docs/how-to/groups/features.md" >}}
+
+## 🔄 group.v2.\* events
+
+We added new `group.v2.*` events and made `payload` body **the same** across of all engines!
+
+Check
+[**🔄 Webhooks**]({{< relref "/docs/how-to/events" >}}) or
+[**👥 Groups API**]({{< relref "/docs/how-to/groups" >}}) for more details.
+
+### group.v2.join
+
+{{< include file="content/docs/how-to/groups/events-group.v2.join.md" >}}
+
+### group.v2.leave
+
+{{< include file="content/docs/how-to/groups/events-group.v2.leave.md" >}}
+
+### group.v2.participants
+
+{{< include file="content/docs/how-to/groups/events-group.v2.participants.md" >}}
+
+### group.v2.update
+
+{{< include file="content/docs/how-to/groups/events-group.v2.update.md" >}}
+
+## And More!
+
+Check out the full list of changes in the
+[**WAHA 2025.2**]({{< relref "/docs/overview/changelog#20252" >}}) 🎉
diff --git a/content/blog/waha-2025-3/index.md b/content/blog/waha-2025-3/index.md
index 9d409b984..72cbbd564 100644
--- a/content/blog/waha-2025-3/index.md
+++ b/content/blog/waha-2025-3/index.md
@@ -1,57 +1,58 @@
----
-title: "WAHA 2025.3"
-description: "WAHA 2025.3 - GOWS 1.0, NOWEB stability, and More!"
-excerpt: "WAHA 2025.3 - GOWS 1.0, NOWEB stability, and More!"
-date: 2025-03-26T08:48:45+00:00
-draft: false
-images: [ "waha-2025-3.png" ]
-categories: [ "Releases" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: waha-2025-3
----
-
-We’re excited to roll out [**WAHA 2025.3**]({{< relref "/docs/overview/changelog#202503" >}})!
-
-## GOWS 1.0
-
-[**GOWS Engine**]({{< relref "/docs/how-to/engines#gows" >}}) just got its **1.0** moment!
-
-Here’s what’s new:
-- Enable Link Previews - {{< issue 763 >}}
-- Delete Status Message - {{< issue 754 >}}
-- Delete Message - {{< issue 796 >}}
-- Edit Message - {{< issue 797 >}}
-- Reply To Message - {{< issue 799 >}}
-- Add `filename` on `/api/sendFile` - {{< issue 853 >}}
-- Extract `replyTo` - {{< issue 876 >}}
-
-## NOWEB Stability
-If you faced any issues with the NOWEB engine, like
-{{< issue 821 >}}, {{< issue 860 >}}, {{< issue 869 >}}
-we have fixed them in this release!
-
-No more container restarts due to Out of Memory errors and sessions restarts!
-
-## Status to 50K Contacts
-
-You can now send [**WhatsApp Status updates to up to 50,000 contacts**]({{< relref "/docs/how-to/status" >}}) at once!
-
-Need more control?
-
-👉 Use the guide: [**Send Status to 10K Contacts Manually**]({{< relref "/docs/how-to/status#send-status-to-10k-contacts-manually" >}})
-
-## Disappearing Messages
-
-Under the hood, WAHA now supports for WhatsApp! {{< issue 736 >}}
-
-
-## Full Changelog
-
-Catch all the updates and minor releases in the [**🆕 2025.3 Changelog**]({{< relref "/docs/overview/changelog#202503" >}})
-
----
-
-Thanks for being part of WAHA community! 🙌
\ No newline at end of file
+---
+title: "WAHA 2025.3"
+description: "WAHA 2025.3 - GOWS 1.0, NOWEB stability, and More!"
+excerpt: "WAHA 2025.3 - GOWS 1.0, NOWEB stability, and More!"
+date: 2025-03-26T08:48:45+00:00
+draft: false
+images: ["waha-2025-3.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2025-3
+---
+
+We’re excited to roll out [**WAHA 2025.3**]({{< relref "/docs/overview/changelog#202503" >}})!
+
+## GOWS 1.0
+
+[**GOWS Engine**]({{< relref "/docs/how-to/engines#gows" >}}) just got its **1.0** moment!
+
+Here’s what’s new:
+
+- Enable Link Previews - {{< issue 763 >}}
+- Delete Status Message - {{< issue 754 >}}
+- Delete Message - {{< issue 796 >}}
+- Edit Message - {{< issue 797 >}}
+- Reply To Message - {{< issue 799 >}}
+- Add `filename` on `/api/sendFile` - {{< issue 853 >}}
+- Extract `replyTo` - {{< issue 876 >}}
+
+## NOWEB Stability
+
+If you faced any issues with the NOWEB engine, like
+{{< issue 821 >}}, {{< issue 860 >}}, {{< issue 869 >}}
+we have fixed them in this release!
+
+No more container restarts due to Out of Memory errors and sessions restarts!
+
+## Status to 50K Contacts
+
+You can now send [**WhatsApp Status updates to up to 50,000 contacts**]({{< relref "/docs/how-to/status" >}}) at once!
+
+Need more control?
+
+👉 Use the guide: [**Send Status to 10K Contacts Manually**]({{< relref "/docs/how-to/status#send-status-to-10k-contacts-manually" >}})
+
+## Disappearing Messages
+
+Under the hood, WAHA now supports for WhatsApp! {{< issue 736 >}}
+
+## Full Changelog
+
+Catch all the updates and minor releases in the [**🆕 2025.3 Changelog**]({{< relref "/docs/overview/changelog#202503" >}})
+
+---
+
+Thanks for being part of WAHA community! 🙌
diff --git a/content/blog/waha-2025-4/index.md b/content/blog/waha-2025-4/index.md
index 9485913e9..02d6c7909 100644
--- a/content/blog/waha-2025-4/index.md
+++ b/content/blog/waha-2025-4/index.md
@@ -1,99 +1,103 @@
----
-title: "WAHA 2025.4 - Read Chat Messages, Group Acks, and Engines Stability!"
-description: "WAHA 2025.4 - Mark messages as read, track receipts in groups, stability fixes and more!"
-excerpt: "WAHA 2025.4 - Mark messages as read, track receipts in groups, stability fixes and more!"
-date: 2025-04-29T08:48:45+00:00
-draft: false
-images: ["waha-2025-4.png"]
-categories: ["Releases"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
-slug: waha-2025-4
----------------
-
-We’re excited to introduce [**WAHA 2025.4**]({{< relref "/docs/overview/changelog#20254" >}}), packed with new API capabilities, group handling improvements, and crucial bug fixes across all engines!
-
----
-
-## 🆕 What's New?
-
-### ✅ Mark Messages as Read!
-
-You can now use the brand new [**💬 Read Messages API**]({{< relref "/docs/how-to/chats/#read-messages" >}}) to mark unread messages as read!
-
-Works across **WEBJS**, **NOWEB**, and **GOWS**!
-[#783](https://github.com/devlikeapro/waha/issues/783)
-
----
-
-### 📥 Group Receipts Tracking
-
-**WEBJS** now includes:
-
-* `message.ack` events for group & status messages
-* `message._data.receipts` in [**Get Message by ID**]({{< relref "/docs/how-to/chats/#get-message-by-id" >}})
-
-You can now **track delivery for each participant**!
-[#495](https://github.com/devlikeapro/waha/issues/495), [#900](https://github.com/devlikeapro/waha/issues/900)
-
----
-
-### 👁️🗨️ Bulk Read Support
-
-Use `messageIds` in [**Send Seen API**]({{< relref "/docs/how-to/send-messages/#send-seen" >}}) to mark **multiple messages as read** in one request.
-**NOWEB**, **GOWS**
-
----
-
-### 🧰 Filter by Ack
-
-New `filter.ack` option in [**Get Messages API**]({{< relref "/docs/how-to/chats/#get-messages" >}}) — filter messages based on delivery status.
-**All engines**
-
-### 🟢 Send Reaction to Channels
-
-[**Send Reaction to Channels**]({{< relref "/docs/how-to/channels/#send-reaction-to-the-channel" >}}) is now fixed for **GOWS** and **NOWEB** engines.
-[#889](https://github.com/devlikeapro/waha/issues/889)
-
-### 🌐 Send Link Custom Preview
-
-[**Send Link Custom Preview**]({{< relref "/docs/how-to/send-messages/#send-link-custom-preview" >}}) has been improved for **GOWS** and **NOWEB** engines.
-[#880](https://github.com/devlikeapro/waha/issues/880), [#596](https://github.com/devlikeapro/waha/issues/596)
-
-
-
----
-
-## 🛠️ Fixes & Stability
-
-* **NOWEB**:
-
- * Fix for `protocolMessage` crash [#932](https://github.com/devlikeapro/waha/issues/932)
- * Message status updated on `/api/sendSeen` [#635](https://github.com/devlikeapro/waha/issues/635)
- * Correct `ack` for new messages (`DEVICE` instead of `UNKNOWN`)
- * Fix sending/receiving in **anonymous groups** and **status**
-* **WEBJS**:
-
- * Auto-restart browser on `ProtocolError` & other errors
- [#244](https://github.com/devlikeapro/waha/issues/244), [#936](https://github.com/devlikeapro/waha/issues/936)
-* **GOWS**:
-
- * Group `message.ack` now sent for **all participants**
- * Stability improvements for group/status messages
- * Fix sending reactions to other users' messages [#894](https://github.com/devlikeapro/waha/issues/894)
-
----
-
-## ⚙️ Engine Updates
-
-* Updated engines:
-
- * **NOWEB** - latest version
- * **GOWS** - latest version
- * **WEBJS** - updated **puppeteer** and **chrome** images
-
----
-
-Check out the full list of updates in the [**🆕 WAHA 2025.4 Changelog**]({{< relref "/docs/overview/changelog#20254" >}}) and stay tuned for more!
+---
+title: "WAHA 2025.4 - Read Chat Messages, Group Acks, and Engines Stability!"
+description: "WAHA 2025.4 - Mark messages as read, track receipts in groups, stability fixes and more!"
+excerpt: "WAHA 2025.4 - Mark messages as read, track receipts in groups, stability fixes and more!"
+date: 2025-04-29T08:48:45+00:00
+draft: false
+images: ["waha-2025-4.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2025-4
+---
+
+---
+
+We’re excited to introduce [**WAHA 2025.4**]({{< relref "/docs/overview/changelog#20254" >}}), packed with new API capabilities, group handling improvements, and crucial bug fixes across all engines!
+
+---
+
+## 🆕 What's New?
+
+### ✅ Mark Messages as Read!
+
+You can now use the brand new [**💬 Read Messages API**]({{< relref "/docs/how-to/chats/#read-messages" >}}) to mark unread messages as read!
+
+Works across **WEBJS**, **NOWEB**, and **GOWS**!
+[#783](https://github.com/devlikeapro/waha/issues/783)
+
+---
+
+### 📥 Group Receipts Tracking
+
+**WEBJS** now includes:
+
+- `message.ack` events for group & status messages
+- `message._data.receipts` in [**Get Message by ID**]({{< relref "/docs/how-to/chats/#get-message-by-id" >}})
+
+You can now **track delivery for each participant**!
+[#495](https://github.com/devlikeapro/waha/issues/495), [#900](https://github.com/devlikeapro/waha/issues/900)
+
+---
+
+### 👁️🗨️ Bulk Read Support
+
+Use `messageIds` in [**Send Seen API**]({{< relref "/docs/how-to/send-messages/#send-seen" >}}) to mark **multiple messages as read** in one request.
+**NOWEB**, **GOWS**
+
+---
+
+### 🧰 Filter by Ack
+
+New `filter.ack` option in [**Get Messages API**]({{< relref "/docs/how-to/chats/#get-messages" >}}) — filter messages based on delivery status.
+**All engines**
+
+### 🟢 Send Reaction to Channels
+
+[**Send Reaction to Channels**]({{< relref "/docs/how-to/channels/#send-reaction-to-the-channel" >}}) is now fixed for **GOWS** and **NOWEB** engines.
+[#889](https://github.com/devlikeapro/waha/issues/889)
+
+### 🌐 Send Link Custom Preview
+
+[**Send Link Custom Preview**]({{< relref "/docs/how-to/send-messages/#send-link-custom-preview" >}}) has been improved for **GOWS** and **NOWEB** engines.
+[#880](https://github.com/devlikeapro/waha/issues/880), [#596](https://github.com/devlikeapro/waha/issues/596)
+
+
+
+---
+
+## 🛠️ Fixes & Stability
+
+- **NOWEB**:
+
+ - Fix for `protocolMessage` crash [#932](https://github.com/devlikeapro/waha/issues/932)
+ - Message status updated on `/api/sendSeen` [#635](https://github.com/devlikeapro/waha/issues/635)
+ - Correct `ack` for new messages (`DEVICE` instead of `UNKNOWN`)
+ - Fix sending/receiving in **anonymous groups** and **status**
+
+- **WEBJS**:
+
+ - Auto-restart browser on `ProtocolError` & other errors
+ [#244](https://github.com/devlikeapro/waha/issues/244), [#936](https://github.com/devlikeapro/waha/issues/936)
+
+- **GOWS**:
+
+ - Group `message.ack` now sent for **all participants**
+ - Stability improvements for group/status messages
+ - Fix sending reactions to other users' messages [#894](https://github.com/devlikeapro/waha/issues/894)
+
+---
+
+## ⚙️ Engine Updates
+
+- Updated engines:
+
+ - **NOWEB** - latest version
+ - **GOWS** - latest version
+ - **WEBJS** - updated **puppeteer** and **chrome** images
+
+---
+
+Check out the full list of updates in the [**🆕 WAHA 2025.4 Changelog**]({{< relref "/docs/overview/changelog#20254" >}}) and stay tuned for more!
diff --git a/content/blog/waha-2025-5/index.md b/content/blog/waha-2025-5/index.md
index beea55c5c..6829725eb 100644
--- a/content/blog/waha-2025-5/index.md
+++ b/content/blog/waha-2025-5/index.md
@@ -1,59 +1,60 @@
----
-title: "WAHA 2025.5 - Presence, Polls, Labels and More!"
-description: "WAHA 2025.5 - Presence, Polls, Labels and More!"
-excerpt: "WAHA 2025.5 - Presence, Polls, Labels and More!"
-date: 2025-05-29T08:48:45+00:00
-draft: false
-images: [ "waha-2025-5.png" ]
-categories: [ "Releases" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: waha-2025-5
----
-
-## 🆕 What's New?
-
-### ✅ Presence (WEBJS)
-
-In **WEBJS**, you can now use the
-[**✅ Presence**]({{}}) API and Events
-to track your customers' online status!
-
-### 📶 Polls (GOWS)
-
-We've added [**📶 Polls**]({{< relref "docs/how-to/polls" >}}) support to **GOWS** -
-including API to send polls and Events to receive poll answers!
-
-### 🏷️ Labels (GOWS)
-
-Added [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) support in the **GOWS** engine.
-
-### 👤 @lid to @c.us API
-
-Introduced new
-[**👤 Contacts - Lids API**]({{< relref "/docs/how-to/contacts/#api---lids" >}})
-to convert `@lid` format to phone numbers (`@c.us`).
-
-Available in all engines: **WEBJS**, **GOWS**, **NOWEB**!
-
-### 💬 Filter Chats by IDs
-
-You can now filter chats by `ids` in the
-[**💬 Chats - Get Chats Overview**]({{< relref "/docs/how-to/chats#get-chats-overview" >}}) API.
-
-Available in all engines: **WEBJS**, **GOWS**, **NOWEB**!
-
-## 🛠️ Key Fixes
-
-- Fixed media fetching from S3/PostgreSQL
-- Improved presence subscription handling
-- Fixed pairing for Business Accounts connected to Meta API
-- Added `tini` to Docker to handle zombie processes
-- Fixed empty session name issues in Local Storage
-
----
-
-## 🆕 Changelog
-Check out the full list of updates in the [**🆕 WAHA 2025.5 Changelog**]({{< relref "/docs/overview/changelog#20255" >}}) and stay tuned for more!
+---
+title: "WAHA 2025.5 - Presence, Polls, Labels and More!"
+description: "WAHA 2025.5 - Presence, Polls, Labels and More!"
+excerpt: "WAHA 2025.5 - Presence, Polls, Labels and More!"
+date: 2025-05-29T08:48:45+00:00
+draft: false
+images: ["waha-2025-5.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2025-5
+---
+
+## 🆕 What's New?
+
+### ✅ Presence (WEBJS)
+
+In **WEBJS**, you can now use the
+[**✅ Presence**]({{}}) API and Events
+to track your customers' online status!
+
+### 📶 Polls (GOWS)
+
+We've added [**📶 Polls**]({{< relref "docs/how-to/polls" >}}) support to **GOWS** -
+including API to send polls and Events to receive poll answers!
+
+### 🏷️ Labels (GOWS)
+
+Added [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) support in the **GOWS** engine.
+
+### 👤 @lid to @c.us API
+
+Introduced new
+[**👤 Contacts - Lids API**]({{< relref "/docs/how-to/contacts/#api---lids" >}})
+to convert `@lid` format to phone numbers (`@c.us`).
+
+Available in all engines: **WEBJS**, **GOWS**, **NOWEB**!
+
+### 💬 Filter Chats by IDs
+
+You can now filter chats by `ids` in the
+[**💬 Chats - Get Chats Overview**]({{< relref "/docs/how-to/chats#get-chats-overview" >}}) API.
+
+Available in all engines: **WEBJS**, **GOWS**, **NOWEB**!
+
+## 🛠️ Key Fixes
+
+- Fixed media fetching from S3/PostgreSQL
+- Improved presence subscription handling
+- Fixed pairing for Business Accounts connected to Meta API
+- Added `tini` to Docker to handle zombie processes
+- Fixed empty session name issues in Local Storage
+
+---
+
+## 🆕 Changelog
+
+Check out the full list of updates in the [**🆕 WAHA 2025.5 Changelog**]({{< relref "/docs/overview/changelog#20255" >}}) and stay tuned for more!
diff --git a/content/blog/waha-2025-6/index.md b/content/blog/waha-2025-6/index.md
index 4cb31f7dc..4651bb825 100644
--- a/content/blog/waha-2025-6/index.md
+++ b/content/blog/waha-2025-6/index.md
@@ -1,48 +1,47 @@
----
-title: "WAHA 2025.6 - Security in WAHA Core, Message Edit Event, and Media Conversion"
-description: "Enhanced security, message edit tracking, and simplified media conversion in WAHA 2025.6"
-excerpt: "Secure API keys, message edit events, and built-in media conversion without manual setup."
-date: 2025-06-29T08:48:45+00:00
-draft: false
-images: [ "waha-2025-6.png" ]
-categories: [ "Releases" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: waha-2025-6
----
-
-## 🆕 What's New?
-
-### 🔒 Security in WAHA Core
-
-**WAHA Core** now comes with robust, built-in security features!
-You can protect your API with an **API Key** - and now, for even greater security, you can store only the hash of your key using `WAHA_API_KEY=sha512:{HASH}`.
-This means your API key is never stored in plain text, reducing the risk if your environment variables are exposed.
-
-[**🔒 Security →**]({{< relref "/docs/how-to/security" >}})
-
-### ✏️ Message Edit Event
-
-You can now track when a message is edited!
-The new [`message.edited`]({{< relref "/docs/how-to/events#messageedited" >}}) event is available in **WEBJS**, **GOWS**, and **NOWEB** engines.
-
-- **NOWEB note**: Edited protocol messages are now only available via `message.edited` (not in `message` or `message.any`).
-
-### 🖼️ Media Conversion for WAHA Plus (Voice/Video)
-
-Sending voice or video files just got easier!
-
-**WAHA Plus** now supports **built-in media conversion** - no more manual `ffmpeg` setup required.
-
-- **Voice**: Send any audio file, set `"convert": true`, and WAHA will convert it to WhatsApp’s required OPUS/OGG format.
-- **Video**: Send any video file, set `"convert": true`, and WAHA will convert it to WhatsApp’s required MP4 format.
-- **APIs**:
- - [**POST /api/{session}/media/convert/voice**]({{< relref "/docs/how-to/send-messages#media---convert-voice" >}})
- - [**POST /api/{session}/media/convert/video**]({{< relref "/docs/how-to/send-messages#media---convert-video" >}})
-
-
-## 🆕 Changelog
-
-Check out the full list of updates in the [**🆕 WAHA 2025.6 Changelog**]({{< relref "/docs/overview/changelog#20256" >}}) and stay tuned for more!
+---
+title: "WAHA 2025.6 - Security in WAHA Core, Message Edit Event, and Media Conversion"
+description: "Enhanced security, message edit tracking, and simplified media conversion in WAHA 2025.6"
+excerpt: "Secure API keys, message edit events, and built-in media conversion without manual setup."
+date: 2025-06-29T08:48:45+00:00
+draft: false
+images: ["waha-2025-6.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2025-6
+---
+
+## 🆕 What's New?
+
+### 🔒 Security in WAHA Core
+
+**WAHA Core** now comes with robust, built-in security features!
+You can protect your API with an **API Key** - and now, for even greater security, you can store only the hash of your key using `WAHA_API_KEY=sha512:{HASH}`.
+This means your API key is never stored in plain text, reducing the risk if your environment variables are exposed.
+
+[**🔒 Security →**]({{< relref "/docs/how-to/security" >}})
+
+### ✏️ Message Edit Event
+
+You can now track when a message is edited!
+The new [`message.edited`]({{< relref "/docs/how-to/events#messageedited" >}}) event is available in **WEBJS**, **GOWS**, and **NOWEB** engines.
+
+- **NOWEB note**: Edited protocol messages are now only available via `message.edited` (not in `message` or `message.any`).
+
+### 🖼️ Media Conversion for WAHA Plus (Voice/Video)
+
+Sending voice or video files just got easier!
+
+**WAHA Plus** now supports **built-in media conversion** - no more manual `ffmpeg` setup required.
+
+- **Voice**: Send any audio file, set `"convert": true`, and WAHA will convert it to WhatsApp’s required OPUS/OGG format.
+- **Video**: Send any video file, set `"convert": true`, and WAHA will convert it to WhatsApp’s required MP4 format.
+- **APIs**:
+ - [**POST /api/{session}/media/convert/voice**]({{< relref "/docs/how-to/send-messages#media---convert-voice" >}})
+ - [**POST /api/{session}/media/convert/video**]({{< relref "/docs/how-to/send-messages#media---convert-video" >}})
+
+## 🆕 Changelog
+
+Check out the full list of updates in the [**🆕 WAHA 2025.6 Changelog**]({{< relref "/docs/overview/changelog#20256" >}}) and stay tuned for more!
diff --git a/content/blog/waha-2025-7/index.md b/content/blog/waha-2025-7/index.md
index 894035089..09f577ee3 100644
--- a/content/blog/waha-2025-7/index.md
+++ b/content/blog/waha-2025-7/index.md
@@ -1,54 +1,55 @@
----
-title: "WAHA 2025.7 - ChatWoot App, Dashboard i18n, and more!"
-description: "WAHA 2025.7 - ChatWoot App, Dashboard i18n, and more!"
-excerpt: "WAHA 2025.7 - ChatWoot App, Dashboard i18n, and more!"
-date: 2025-07-29T08:48:45+00:00
-draft: false
-images: [ "waha-2025-7.png" ]
-categories: [ "Releases" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-slug: waha-2025-7
----
-
-## 🧩 ChatWoot App
-Meet the first built-in app in WAHA - [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
-
-
-
-
-WAHA now provides a built-in app to integrate your **WhatsApp** account with **ChatWoot**,
-eliminating the need to run n8n or use other third-party products!
-
-We cover all installation and configuration aspects in the following series of articles:
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
-
-## 👤 Update Contact on Phone
-You can now use the
-[**👤 Update Contact API**]({{< relref "/docs/how-to/contacts#update-contact" >}})
-to **update contacts** in **your phone address book** (and in WhatsApp)!
-
-```http request
-PUT /api/{session}/contacts/{chatId}
-```
-
-```json { title="Body" }
-{
- "firstName": "John",
- "lastName": "Doe"
-}
-```
-
-See details: {{< issue 1124 >}}
-
-## 📊 Dashboard i18n
-
-[**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}}) now has language options available!
-
-
-
-## 🆕 And More!
-
-Check out the full list of updates in the [**🆕 WAHA 2025.7 Changelog**]({{< relref "/docs/overview/changelog#20257" >}}) and stay tuned for more!
+---
+title: "WAHA 2025.7 - ChatWoot App, Dashboard i18n, and more!"
+description: "WAHA 2025.7 - ChatWoot App, Dashboard i18n, and more!"
+excerpt: "WAHA 2025.7 - ChatWoot App, Dashboard i18n, and more!"
+date: 2025-07-29T08:48:45+00:00
+draft: false
+images: ["waha-2025-7.png"]
+categories: ["Releases"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-2025-7
+---
+
+## 🧩 ChatWoot App
+
+Meet the first built-in app in WAHA - [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
+
+
+
+WAHA now provides a built-in app to integrate your **WhatsApp** account with **ChatWoot**,
+eliminating the need to run n8n or use other third-party products!
+
+We cover all installation and configuration aspects in the following series of articles:
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+
+## 👤 Update Contact on Phone
+
+You can now use the
+[**👤 Update Contact API**]({{< relref "/docs/how-to/contacts#update-contact" >}})
+to **update contacts** in **your phone address book** (and in WhatsApp)!
+
+```http request
+PUT /api/{session}/contacts/{chatId}
+```
+
+```json { title="Body" }
+{
+ "firstName": "John",
+ "lastName": "Doe"
+}
+```
+
+See details: {{< issue 1124 >}}
+
+## 📊 Dashboard i18n
+
+[**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}}) now has language options available!
+
+
+
+## 🆕 And More!
+
+Check out the full list of updates in the [**🆕 WAHA 2025.7 Changelog**]({{< relref "/docs/overview/changelog#20257" >}}) and stay tuned for more!
diff --git a/content/blog/waha-docker-image-name/index.md b/content/blog/waha-docker-image-name/index.md
index ffcd6b06c..12bae772b 100644
--- a/content/blog/waha-docker-image-name/index.md
+++ b/content/blog/waha-docker-image-name/index.md
@@ -1,22 +1,22 @@
----
-title: "📣 Docker Image has been renamed to devlikeapro/waha! 📣"
-description: "We have renamed docker image to devlikeapro/waha! 🎉"
-excerpt: "We have renamed docker image to devlikeapro/waha! 🎉"
-date: 2024-05-30T08:48:45+00:00
-draft: false
-images: ["new-name.jpg"]
-categories: ["News"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
----
-
-We have renamed docker image from `devlikeapro/whatsapp-http-api` to `devlikeapro/waha`! 🎉
-
-You can find the image on Docker Hub by the new name.
-- Read more about [WAHA Docker images]({{< relref "/docs/how-to/engines#docker-images" >}})
-- `devlikeapro/waha` - for the Core version
-- `devlikeapro/waha-plus` - for the Plus version
-- Build: `2024.6.2`
-
+---
+title: "📣 Docker Image has been renamed to devlikeapro/waha! 📣"
+description: "We have renamed docker image to devlikeapro/waha! 🎉"
+excerpt: "We have renamed docker image to devlikeapro/waha! 🎉"
+date: 2024-05-30T08:48:45+00:00
+draft: false
+images: ["new-name.jpg"]
+categories: ["News"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+---
+
+We have renamed docker image from `devlikeapro/whatsapp-http-api` to `devlikeapro/waha`! 🎉
+
+You can find the image on Docker Hub by the new name.
+
+- Read more about [WAHA Docker images]({{< relref "/docs/how-to/engines#docker-images" >}})
+- `devlikeapro/waha` - for the Core version
+- `devlikeapro/waha-plus` - for the Plus version
+- Build: `2024.6.2`
diff --git a/content/blog/waha-geonode/index.md b/content/blog/waha-geonode/index.md
index 265aec413..341e43009 100644
--- a/content/blog/waha-geonode/index.md
+++ b/content/blog/waha-geonode/index.md
@@ -1,149 +1,148 @@
----
-title: "WAHA + Geonode Proxy - bypassing errors on Cloud or VPS"
-description: "Step-by-step guide on how to use Geonode proxy with WAHA"
-excerpt: "Step-by-step guide on how to use Geonode proxy with WAHA"
-date: 2024-06-11T08:48:45+00:00
-draft: false
-images: [ "proxy.png" ]
-categories: [ "Tips" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-toc: true
----
-
-## WAHA + Geonode Proxy
-
-If you see the below error, you can use
-the Geonode proxies to solve this issue.
-
-Read more about [Proxies]({{< relref "/docs/how-to/proxy" >}}).
-
-> Could not log in. Check your phone's internet connection and try again.
-> 
-
-Unfortunately, that issue is caused by the WhatsApp server blocking your IP address - likely you're using Cloud or VPS.
-The Geonode proxy is a solution that allows you to bypass this block and continue using WAHA.
-
-**The issue has nothing to do with WAHA** itself, but with the WhatsApp server blocking your IP address.
-
-Using
-Geonode proxy
-you can bypass the block and continue using WAHA in Cloud or VPS.
-
-💡 **Alternative** is to run [**WAHA locally and expose it with Ngrok**]({{< relref "waha-ngrok" >}}) to bypass the block.
-
-## Step 1: Register on Geonode
-
-Go ahead and [Sign Up on Geonode](https://geonode.com/?ref=90920)!
-
-## Step 2: Get Premium Residential Proxy
-
-Now you need to get a Premium Residential Proxy from Geonode.
-
-
-
-
-
-**1GB ($4)** is enough for the start and tests, but you can get more if you need it
-(it depends on your usage and how many sessions you want to run).
-
-
-
-## Step 3: Setup sticky session
-
-After you've purchased the proxy, you need to set up a sticky session.
-
-Go to [Premium Residential Proxy](https://app.geonode.com/pay-as-you-go-residential) and scroll down to **Proxy
-Configuration** and select:
-
-- **Proxy type: Sticky**
-- **Protocol: HTTP/HTTPS**
-- **Rotating Interval: 24 hours**
-
-
-
-
-
-Now let's configure **Country Targeting (Optional)** (it's not optional for us).
-
-- Select **Country** where YOUR ACCOUNTS (phone numbers) from.
-- (Optional) - select **State** if you want to target a specific state
-- (Optional) - select **City** if you want to target a specific city
-- Select any available **Ports** (one is enough for tests), like `10000`
-- Click **Add**
-
-
-
-Now you can check the proxy works - copy `curl` command at the top of the page and change port to `10000` (or any you've
-selected).
-
-
-
-```bash
-curl -x premium-residential.geonode.com:10000 -U geonode_1111111111:11111111-1111-1111-1111-111111111111 http://ip-api.com
-```
-
-
-
-> If it doesn't work, check the proxy targeting configuration and try again with different ports.
-
-## Step 4: Start WAHA session with Geonode proxy
-
-Copy those values from the Geonode dashboard:
-
-- Username
-- Password
-
-### Option 1 - Start a session using WAHA Dashboard
-
-Start a session using [WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}}).
-
-
-
-### Option 2 - Start a session using Swagger
-
-Or you can use swagger or `curl` to send `POST /api/sessions/` request with payload
-
-```json
-{
- "name": "default",
- "start": true,
- "config": {
- "proxy": {
- "server": "premium-residential.geonode.com:10000",
- "username": "geonode_1111111111",
- "password": "11111111-1111-1111-1111-111111111111"
- }
- }
-}
-```
-
-After that - scan a QR code and it should work!
-
-👉 If you see "Could not connect device, try aging later" - **stop** and **start** session again and scan a new QR.
-
-## Step 5 (optional): Disable proxy for a session
-
-After you got the session working and **waited for 2 minutes** - you can **stop** a session and **start** it again
-**without a proxy**.
-
-```json
-{
- "name": "default"
-}
-```
-
-**Why disable proxy?**
-
-1. It looks that WA checks the IP address at the start of the session, so you can start a session with a proxy and then
- disable it.
-2. Proxy is not super stable, so you can disable it and enable it again if you see issues.
-3. Proxy is not free, so you can disable it when you don't need it.
-
-## Alternative
-
-If that doesn't work for you - you can run [WAHA on your local network and use Ngrok to expose it to the internet]({{<
-relref "waha-ngrok" >}}).
-
+---
+title: "WAHA + Geonode Proxy - bypassing errors on Cloud or VPS"
+description: "Step-by-step guide on how to use Geonode proxy with WAHA"
+excerpt: "Step-by-step guide on how to use Geonode proxy with WAHA"
+date: 2024-06-11T08:48:45+00:00
+draft: false
+images: ["proxy.png"]
+categories: ["Tips"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+toc: true
+---
+
+## WAHA + Geonode Proxy
+
+If you see the below error, you can use
+the Geonode proxies to solve this issue.
+
+Read more about [Proxies]({{< relref "/docs/how-to/proxy" >}}).
+
+> Could not log in. Check your phone's internet connection and try again.
+> 
+
+Unfortunately, that issue is caused by the WhatsApp server blocking your IP address - likely you're using Cloud or VPS.
+The Geonode proxy is a solution that allows you to bypass this block and continue using WAHA.
+
+**The issue has nothing to do with WAHA** itself, but with the WhatsApp server blocking your IP address.
+
+Using
+Geonode proxy
+you can bypass the block and continue using WAHA in Cloud or VPS.
+
+💡 **Alternative** is to run [**WAHA locally and expose it with Ngrok**]({{< relref "waha-ngrok" >}}) to bypass the block.
+
+## Step 1: Register on Geonode
+
+Go ahead and [Sign Up on Geonode](https://geonode.com/?ref=90920)!
+
+## Step 2: Get Premium Residential Proxy
+
+Now you need to get a Premium Residential Proxy from Geonode.
+
+
+
+
+
+**1GB ($4)** is enough for the start and tests, but you can get more if you need it
+(it depends on your usage and how many sessions you want to run).
+
+
+
+## Step 3: Setup sticky session
+
+After you've purchased the proxy, you need to set up a sticky session.
+
+Go to [Premium Residential Proxy](https://app.geonode.com/pay-as-you-go-residential) and scroll down to **Proxy
+Configuration** and select:
+
+- **Proxy type: Sticky**
+- **Protocol: HTTP/HTTPS**
+- **Rotating Interval: 24 hours**
+
+
+
+
+
+Now let's configure **Country Targeting (Optional)** (it's not optional for us).
+
+- Select **Country** where YOUR ACCOUNTS (phone numbers) from.
+- (Optional) - select **State** if you want to target a specific state
+- (Optional) - select **City** if you want to target a specific city
+- Select any available **Ports** (one is enough for tests), like `10000`
+- Click **Add**
+
+
+
+Now you can check the proxy works - copy `curl` command at the top of the page and change port to `10000` (or any you've
+selected).
+
+
+
+```bash
+curl -x premium-residential.geonode.com:10000 -U geonode_1111111111:11111111-1111-1111-1111-111111111111 http://ip-api.com
+```
+
+
+
+> If it doesn't work, check the proxy targeting configuration and try again with different ports.
+
+## Step 4: Start WAHA session with Geonode proxy
+
+Copy those values from the Geonode dashboard:
+
+- Username
+- Password
+
+### Option 1 - Start a session using WAHA Dashboard
+
+Start a session using [WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}}).
+
+
+
+### Option 2 - Start a session using Swagger
+
+Or you can use swagger or `curl` to send `POST /api/sessions/` request with payload
+
+```json
+{
+ "name": "default",
+ "start": true,
+ "config": {
+ "proxy": {
+ "server": "premium-residential.geonode.com:10000",
+ "username": "geonode_1111111111",
+ "password": "11111111-1111-1111-1111-111111111111"
+ }
+ }
+}
+```
+
+After that - scan a QR code and it should work!
+
+👉 If you see "Could not connect device, try aging later" - **stop** and **start** session again and scan a new QR.
+
+## Step 5 (optional): Disable proxy for a session
+
+After you got the session working and **waited for 2 minutes** - you can **stop** a session and **start** it again
+**without a proxy**.
+
+```json
+{
+ "name": "default"
+}
+```
+
+**Why disable proxy?**
+
+1. It looks that WA checks the IP address at the start of the session, so you can start a session with a proxy and then
+ disable it.
+2. Proxy is not super stable, so you can disable it and enable it again if you see issues.
+3. Proxy is not free, so you can disable it when you don't need it.
+
+## Alternative
+
+If that doesn't work for you - you can run [WAHA on your local network and use Ngrok to expose it to the internet]({{<
+relref "waha-ngrok" >}}).
diff --git a/content/blog/waha-https/index.md b/content/blog/waha-https/index.md
index ed9c6c47c..72365b513 100644
--- a/content/blog/waha-https/index.md
+++ b/content/blog/waha-https/index.md
@@ -1,191 +1,196 @@
----
-title: "Setting up HTTPS for WAHA"
-description: "Step-by-step guide on how to set up HTTPS for WAHA"
-excerpt: "Step-by-step guide on how to set up HTTPS for WAHA"
-date: 2024-06-17T08:48:45+00:00
-draft: false
-images: [ "https_icon.png" ]
-categories: [ "Tips" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-toc: true
----
-
-## Why bother with HTTPS?
-
-Even if you have set up WAHA and protected it with an API key and username/password
-(as we recommend on [**🔒 Security**]({{< relref "/docs/how-to/security" >}})) - it's still not enough, because of
-[Man-in-the-middle attacks](https://en.wikipedia.org/wiki/Man-in-the-middle_attack).
-
-
-If you're exposing WAHA to the internet, you should **always use HTTPS** to protect your data from being intercepted.
-
-{{< include file="content/docs/how-to/security/use-nginx-for-https.md" >}}
-
-You can set up the following environment variables to enable HTTPS:
-
-1. [**Let's Encrypt**](#lets-encrypt-certbot--waha) - use [Certbot](https://certbot.eff.org/) to get a free certificate from Let's Encrypt.
-2. [**Self-signed certificate**](#self-signed-certificate--waha) - generate a self-signed certificate and use it for HTTPS.
-3. [**Using reverse proxy**](#using-external-reverse-proxy) - use Nginx as a reverse proxy and set up HTTPS there.
-4. [**Using Ngrok**](#using-ngrok) - expose your WAHA safely on internet, even without Public IP or DNS name.
-
-## Configuration
-
-
-WAHA supports HTTPS out of the box if you don't want to use a reverse proxy like Nginx.
-
-You can set up the following environment variables to enable HTTPS:
-
-- `WAHA_HTTPS_ENABLED=true`: Set this variable to `true` to enable HTTPS. By default, it's `false`.
-- `WAHA_HTTPS_PATH_KEY=/path/to/key.pem`: The path to the key file for HTTPS. By default `./.secrets/privkey.pem`
-- `WAHA_HTTPS_PATH_CERT=/path/to/cert.pem`: The path to the certificate file for HTTPS. By default `./.secrets/cert.pem`
-- `WAHA_HTTPS_PATH_CA=/path/to/ca.pem`: The path to the CA file for HTTPS. By default `./.secrets/chain.pem`
-
-## Let's Encrypt (Certbot) + WAHA
-
-
-
-[**Certbot**](https://certbot.eff.org/) is a free and open-source tool that can be used to get a free certificate
-from [Let's Encrypt](https://letsencrypt.org/).
-
-WAHA can use the certificate generated by Certbot to enable HTTPS.
-
-### Step 0: Requirements
-
-Here's assumptions for this guide:
-
-1. **Dedicated server or VPS** with Public IP (
- like [DigitalOcean DropLet](https://www.digitalocean.com/products/droplets/))
-2. **Ubuntu 22.04** - clean installation
-3. **Public IP** assigned to the server (like `109.71.242.111`)
-4. **Domain** pointed to the Public IP (like `waha.example.pro`)
-
-You can get the updated [Certbot documentation](https://certbot.eff.org/instructions?ws=other&os=ubuntufocal),
-and **Step 7: Install your certificate** - this is where we need to configure WAHA to use the certificates.
-
-### Step 1: Install Certbot
-
-```bash
-sudo snap install --classic certbot
-sudo ln -s /snap/bin/certbot /usr/bin/certbot
-```
-
-### Step 2: Issuing certificate
-
-Choose how you'd like to run Certbot - Are you ok with temporarily stopping your website?
-
-- **Yes, my web server is not currently running on this machine.**
-
-Stop your webserver, then run this command to get a certificate. Certbot will temporarily spin up a webserver on your
-machine.
-
-```bash
-sudo systemctl stop nginx
-sudo certbot certonly --standalone -d waha.example.com # <=== change to your domain
-```
-
-- **No, I need to keep my web server running.**
-
-```bash
-sudo certbot certonly --webroot
-# sudo certbot certonly --webroot /var/www/html
-```
-
-### Step 3: Run WAHA
-
-After you get the certificates, you can run it
-
-👇 Few notes:
-- Change `waha.example.pro` to your domain
-- We're running it with `-it` flag to see the logs, in production you need to run it with `docker run -d` instead.
-- We map the whole `/etc/letsencrypt` folder because of the way how letsencrypt works with "live" keys (it's symlinks to "archive" directory files)
-
-```bash
-DOMAIN=waha.example.pro # Change it to your domain!
-
-docker run -it \
- -p 3000:3000 \
- -v $(pwd)/.sessions:/app/.sessions \
- -v /etc/letsencrypt:/etc/letsencrypt \
- --env WAHA_HTTPS_ENABLED=true \
- --env WAHA_HTTPS_PATH_KEY=/etc/letsencrypt/live/$DOMAIN/privkey.pem \
- --env WAHA_HTTPS_PATH_CERT=/etc/letsencrypt/live/$DOMAIN/cert.pem \
- --env WAHA_HTTPS_PATH_CA=/etc/letsencrypt/live/$DOMAIN/chain.pem \
- --env WHATSAPP_API_SCHEMA=https,
- --env WHATSAPP_API_PORT=3000,
- --env WHATSAPP_API_HOSTNAME=$DOMAIN \
- --restart always \
- devlikeapro/waha-plus
-```
-
-Now open [https://waha.example.com:3000](https://waha.example.com:3000)
-and check the HTTPS connection.
-
-If it works - consider using [docker-compose](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml)
-file for running the project, it can be hard to write such long command or using sh scripts for that.
-
-### Step 4: Test auto renewal
-
-When Certbot renew the certificate - WAHA automatically updates HTTPS server and use new certificate with no restart.
-
-```bash
-sudo certbot renew --dry-run
-```
-
-## Self-signed certificate + WAHA
-
-As an alternative, you can issue self-signed certificate (for instance, to test the connection on localhost).
-
-It'll show you an error on browser, so you need to accept it before accessing the site,
-but it won't show expose the API key during network communication even in public networks.
-
-
-### Step 1: Generate certificates
-```bash
-mkdir .secrets
-openssl genpkey -algorithm RSA -out .secrets/privkey.pem -pkeyopt rsa_keygen_bits:2048
-openssl req -new -key .secrets/privkey.pem -out .secrets/cert.csr -subj "/"
-openssl req -x509 -days 3650 -key .secrets/privkey.pem -in .secrets/cert.csr -out .secrets/cert.pem
-cp .secrets/cert.pem .secrets/chain.pem
-echo "DONE!"
-```
-
-### Step 2: Run WAHA
-👇 Few notes:
-- We're running it with `-it` flag to see the logs, in production you need to run it with `docker run -d` instead.
-
-```bash
-docker run -it \
- -p 3000:3000 \
- -v $(pwd)/.sessions:/app/.sessions \
- -v $(pwd)/.secrets:/app/.secrets \
- -e WAHA_HTTPS_ENABLED=true \
- -e WAHA_HTTPS_PATH_KEY=.secrets/privkey.pem \
- -e WAHA_HTTPS_PATH_CERT=.secrets/cert.pem \
- -e WAHA_HTTPS_PATH_CA=.secrets/chain.pem \
- devlikeapro/waha-plus
-```
-
-Open [https://localhost:3000](https://localhost:3000) and accept self-signed certificate in your browser.
-
-If it works - consider using [docker-compose](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml)
-file for running the project, it can be hard to write such long command or using sh scripts for that.
-
-## Using External Reverse Proxy
-
-
-The best way to set up HTTPS is to use a reverse proxy like Nginx.
-The idea is WAHA exposes the HTTP port and Nginx handles the HTTPS part and forwards the requests to WAHA.
-It distributes the load and make it easier to manage the HTTPS part.
-
-Unfortunately, it's a bit more complicated than the previous options, so we don't cover it in the guide.
-
-Here's some articles that can help you set up HTTPS with Nginx and docker-compose:
-1. [**Certbot + Nginx + Docker**](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04)
-
-## Using Ngrok
-WAHA + Ngrok - Running WAHA on local network
-You also can set up [**WAHA to use Ngrok**]({{< relref "/blog/waha-ngrok" >}})
-so it handles HTTPS for you, even if you're running it NOT on local server!
+---
+title: "Setting up HTTPS for WAHA"
+description: "Step-by-step guide on how to set up HTTPS for WAHA"
+excerpt: "Step-by-step guide on how to set up HTTPS for WAHA"
+date: 2024-06-17T08:48:45+00:00
+draft: false
+images: ["https_icon.png"]
+categories: ["Tips"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+toc: true
+---
+
+## Why bother with HTTPS?
+
+Even if you have set up WAHA and protected it with an API key and username/password
+(as we recommend on [**🔒 Security**]({{< relref "/docs/how-to/security" >}})) - it's still not enough, because of
+[Man-in-the-middle attacks](https://en.wikipedia.org/wiki/Man-in-the-middle_attack).
+
+
+If you're exposing WAHA to the internet, you should **always use HTTPS** to protect your data from being intercepted.
+
+{{< include file="content/docs/how-to/security/use-nginx-for-https.md" >}}
+
+You can set up the following environment variables to enable HTTPS:
+
+1. [**Let's Encrypt**](#lets-encrypt-certbot--waha) - use [Certbot](https://certbot.eff.org/) to get a free certificate from Let's Encrypt.
+2. [**Self-signed certificate**](#self-signed-certificate--waha) - generate a self-signed certificate and use it for HTTPS.
+3. [**Using reverse proxy**](#using-external-reverse-proxy) - use Nginx as a reverse proxy and set up HTTPS there.
+4. [**Using Ngrok**](#using-ngrok) - expose your WAHA safely on internet, even without Public IP or DNS name.
+
+## Configuration
+
+WAHA supports HTTPS out of the box if you don't want to use a reverse proxy like Nginx.
+
+You can set up the following environment variables to enable HTTPS:
+
+- `WAHA_HTTPS_ENABLED=true`: Set this variable to `true` to enable HTTPS. By default, it's `false`.
+- `WAHA_HTTPS_PATH_KEY=/path/to/key.pem`: The path to the key file for HTTPS. By default `./.secrets/privkey.pem`
+- `WAHA_HTTPS_PATH_CERT=/path/to/cert.pem`: The path to the certificate file for HTTPS. By default `./.secrets/cert.pem`
+- `WAHA_HTTPS_PATH_CA=/path/to/ca.pem`: The path to the CA file for HTTPS. By default `./.secrets/chain.pem`
+
+## Let's Encrypt (Certbot) + WAHA
+
+
+
+[**Certbot**](https://certbot.eff.org/) is a free and open-source tool that can be used to get a free certificate
+from [Let's Encrypt](https://letsencrypt.org/).
+
+WAHA can use the certificate generated by Certbot to enable HTTPS.
+
+### Step 0: Requirements
+
+Here's assumptions for this guide:
+
+1. **Dedicated server or VPS** with Public IP (
+ like [DigitalOcean DropLet](https://www.digitalocean.com/products/droplets/))
+2. **Ubuntu 22.04** - clean installation
+3. **Public IP** assigned to the server (like `109.71.242.111`)
+4. **Domain** pointed to the Public IP (like `waha.example.pro`)
+
+You can get the updated [Certbot documentation](https://certbot.eff.org/instructions?ws=other&os=ubuntufocal),
+and **Step 7: Install your certificate** - this is where we need to configure WAHA to use the certificates.
+
+### Step 1: Install Certbot
+
+```bash
+sudo snap install --classic certbot
+sudo ln -s /snap/bin/certbot /usr/bin/certbot
+```
+
+### Step 2: Issuing certificate
+
+Choose how you'd like to run Certbot - Are you ok with temporarily stopping your website?
+
+- **Yes, my web server is not currently running on this machine.**
+
+Stop your webserver, then run this command to get a certificate. Certbot will temporarily spin up a webserver on your
+machine.
+
+```bash
+sudo systemctl stop nginx
+sudo certbot certonly --standalone -d waha.example.com # <=== change to your domain
+```
+
+- **No, I need to keep my web server running.**
+
+```bash
+sudo certbot certonly --webroot
+# sudo certbot certonly --webroot /var/www/html
+```
+
+### Step 3: Run WAHA
+
+After you get the certificates, you can run it
+
+👇 Few notes:
+
+- Change `waha.example.pro` to your domain
+- We're running it with `-it` flag to see the logs, in production you need to run it with `docker run -d` instead.
+- We map the whole `/etc/letsencrypt` folder because of the way how letsencrypt works with "live" keys (it's symlinks to "archive" directory files)
+
+```bash
+DOMAIN=waha.example.pro # Change it to your domain!
+
+docker run -it \
+ -p 3000:3000 \
+ -v $(pwd)/.sessions:/app/.sessions \
+ -v /etc/letsencrypt:/etc/letsencrypt \
+ --env WAHA_HTTPS_ENABLED=true \
+ --env WAHA_HTTPS_PATH_KEY=/etc/letsencrypt/live/$DOMAIN/privkey.pem \
+ --env WAHA_HTTPS_PATH_CERT=/etc/letsencrypt/live/$DOMAIN/cert.pem \
+ --env WAHA_HTTPS_PATH_CA=/etc/letsencrypt/live/$DOMAIN/chain.pem \
+ --env WHATSAPP_API_SCHEMA=https,
+ --env WHATSAPP_API_PORT=3000,
+ --env WHATSAPP_API_HOSTNAME=$DOMAIN \
+ --restart always \
+ devlikeapro/waha-plus
+```
+
+Now open [https://waha.example.com:3000](https://waha.example.com:3000)
+and check the HTTPS connection.
+
+If it works - consider using [docker-compose](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml)
+file for running the project, it can be hard to write such long command or using sh scripts for that.
+
+### Step 4: Test auto renewal
+
+When Certbot renew the certificate - WAHA automatically updates HTTPS server and use new certificate with no restart.
+
+```bash
+sudo certbot renew --dry-run
+```
+
+## Self-signed certificate + WAHA
+
+As an alternative, you can issue self-signed certificate (for instance, to test the connection on localhost).
+
+It'll show you an error on browser, so you need to accept it before accessing the site,
+but it won't show expose the API key during network communication even in public networks.
+
+
+### Step 1: Generate certificates
+
+```bash
+mkdir .secrets
+openssl genpkey -algorithm RSA -out .secrets/privkey.pem -pkeyopt rsa_keygen_bits:2048
+openssl req -new -key .secrets/privkey.pem -out .secrets/cert.csr -subj "/"
+openssl req -x509 -days 3650 -key .secrets/privkey.pem -in .secrets/cert.csr -out .secrets/cert.pem
+cp .secrets/cert.pem .secrets/chain.pem
+echo "DONE!"
+```
+
+### Step 2: Run WAHA
+
+👇 Few notes:
+
+- We're running it with `-it` flag to see the logs, in production you need to run it with `docker run -d` instead.
+
+```bash
+docker run -it \
+ -p 3000:3000 \
+ -v $(pwd)/.sessions:/app/.sessions \
+ -v $(pwd)/.secrets:/app/.secrets \
+ -e WAHA_HTTPS_ENABLED=true \
+ -e WAHA_HTTPS_PATH_KEY=.secrets/privkey.pem \
+ -e WAHA_HTTPS_PATH_CERT=.secrets/cert.pem \
+ -e WAHA_HTTPS_PATH_CA=.secrets/chain.pem \
+ devlikeapro/waha-plus
+```
+
+Open [https://localhost:3000](https://localhost:3000) and accept self-signed certificate in your browser.
+
+If it works - consider using [docker-compose](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml)
+file for running the project, it can be hard to write such long command or using sh scripts for that.
+
+## Using External Reverse Proxy
+
+
+The best way to set up HTTPS is to use a reverse proxy like Nginx.
+The idea is WAHA exposes the HTTP port and Nginx handles the HTTPS part and forwards the requests to WAHA.
+It distributes the load and make it easier to manage the HTTPS part.
+
+Unfortunately, it's a bit more complicated than the previous options, so we don't cover it in the guide.
+
+Here's some articles that can help you set up HTTPS with Nginx and docker-compose:
+
+1. [**Certbot + Nginx + Docker**](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04)
+
+## Using Ngrok
+
+WAHA + Ngrok - Running WAHA on local network
+You also can set up [**WAHA to use Ngrok**]({{< relref "/blog/waha-ngrok" >}})
+so it handles HTTPS for you, even if you're running it NOT on local server!
diff --git a/content/blog/waha-n8n/index.md b/content/blog/waha-n8n/index.md
index 4e0e77931..53279a390 100644
--- a/content/blog/waha-n8n/index.md
+++ b/content/blog/waha-n8n/index.md
@@ -1,143 +1,161 @@
----
-title: "WAHA + n8n: No Code Low Code WhatsApp Automation Step-By-Step Guide"
-description: "Start developing your WhatsApp automation with using n8n and WAHA in pair!"
-excerpt: "Start developing your WhatsApp automation with using n8n and WAHA in pair!"
-date: 2024-08-27T08:48:45+00:00
-draft: false
-images: ["waha-n8n.png"]
-categories: ["Tips"]
-tags: []
-contributors: ["devlikeapro"]
-pinned: false
-homepage: false
-slug: waha-n8n
-aliases:
- - /blog/waha-n8n
----
-
-
-
-
-
-Here's how you can start developing your WhatsApp automation with using **n8n** and **WAHA** in pair so you can create
-your own no-code or low-code **WhatsApp automation**:
-
-{{< imgo src="/images/n8n/waha-n8n.png" >}}
-
-## Installation
-Here's a quick docker-compose we have prepared for you to start using **n8n** with **WAHA**:
-
-```bash
-wget https://raw.githubusercontent.com/devlikeapro/waha/core/docker-compose/n8n/docker-compose.yaml
-```
-
-
-- If you're using [**WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) (donation version) - kindly go to
-[https://portal.devlike.pro](https://portal.devlike.pro)
-and docker pull the image with your credentials:
-```bash
-docker login -u devlikeapro -p
-docker pull devlikeapro/waha-plus
-docker logout
-```
-
-- If you're using **WAHA Core** (free version) - you can use the image from Docker Hub:
-```bash
-sed -i 's/devlikeapro\/waha-plus/devlikeapro\/waha/g' docker-compose.yaml
-```
-
-Now you're ready to run:
-```bash
-docker compose up
-# to run in background:
-# docker compose up -d
-```
-
-After that, open:
-1. **n8n** at [https://localhost:5678](https://localhost:5678) and set up your email/password
-2. **WAHA** at [https://localhost:3000/dashboard](https://localhost:3000/dashboard) (`admin/admin`)
-
-### Install WAHA n8n node
-We provide WAHA Node, which you can install at your n8n installation.
-
-Go to your **n8n** => **Settings** => **Community nodes** and install:
-```bash
-@devlikeapro/n8n-nodes-waha
-```
-
-If you need help with that, check the
-[**Install community nodes**](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
-
-
-## First WhatsApp workflow
-We'll build simple workflow - when your WhatsApp account got any message,
-it responds with **"Hi there"** message
-
-### Step 1: Add WAHA API credentials
-Before starting using the node, you need to add **WAHA API** credentials.
-1. Go to your **n8n** => **Home** => **Credentials** => **Add first credential**
-2. Find **WAHA API** in dropdown
-3. **Host URL** - `http://waha:3000` or use your domain
-4. **API Key** - `admin` or your API key set in `docker-compose.yaml`
-5. Click **Save** - it'll check the connection and save the credentials
-
-{{< imgo src="/images/blog/waha-n8n/waha-n8n-credentials.png" >}}
-
-If you need help with that, check the
-[**Create credentials**](https://docs.n8n.io/credentials/add-edit-credentials/)
-
-### Step 2: Create a new workflow
-1. Go to **n8n** => **Home** => **Workflows** => **Create new workflow**.
-2. Remove **Manual trigger**
-
-{{< imgo src="/images/blog/waha-n8n/waha-n8n-init-workflow.png" >}}
-
-### Step 3: Add WAHA Trigger
-Add **WAHA Trigger** node.
-
-{{< imgo src="/images/blog/waha-n8n/waha-n8n-WAHATrigger.png" >}}
-
-### Step 4: Add Send a text message action
-Add **Send a text message** **WAHA Action** and connect it to `message` **WAHA Trigger** output:
-{{< imgo src="/images/blog/waha-n8n/waha-n8n-actions.png" >}}
-
-### Step 5: Activate the workflow
-Click **Save** and **Activate** the workflow:
-{{< imgo src="/images/blog/waha-n8n/waha-n8n-activate-workflow.png" >}}
-
-### Step 6: Start a new session
-Open the **WAHA Trigger** and expand **Webhook URLs** => **Production URL**
-{{< imgo src="/images/blog/waha-n8n/waha-n8n-WAHATrigger-url.png" >}}
-
-Go to [http://localhost:3000/dashboard/](http://localhost:3000/dashboard/) (`admin/admin`) and
-**Start New** session with the URL you got from the **WAHA Trigger**:
-{{< imgo src="/images/blog/waha-n8n/waha-n8n-dashboard-session.png" >}}
-
-**Scan QR** and wait till session in `WORKING` state:
-{{< imgo src="/images/blog/waha-n8n/waha-n8n-dashboard-scan-qr.png" >}}
-
-### Step 7: Send a message
-Now you can **send any message** to your WhatsApp account, and it'll respond with **"Hi there"** message!
-
-## Workflow Templates
-👉 Check out
-[**https://waha-n8n-workflows.devlike.pro**](http://waha-n8n-templates.devlike.pro/)
-for workflow templates!
-
-{{< imgo src="/images/n8n/waha-n8n.png" >}}
-
-## Troubleshooting
-If you're experiencing any issues or have a feature request, please check the below resources:
-**WAHA**:
-- [**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}})
-- [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
-- [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}})
-
-**n8n**:
-- [**Installation guide**](https://docs.n8n.io/hosting/installation/docker/#starting-n8n)
-- [**Install community nodes**](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
-- [**Create credentials**](https://docs.n8n.io/credentials/add-edit-credentials/)
-
-If that doesn't help - kindly open an issue in the
-[**devlikeapro/n8n-nodes-waha**](https://github.com/devlikeapro/n8n-nodes-waha/)
-GitHub repository, we're happy to help you out!
+---
+title: "WAHA + n8n: No Code Low Code WhatsApp Automation Step-By-Step Guide"
+description: "Start developing your WhatsApp automation with using n8n and WAHA in pair!"
+excerpt: "Start developing your WhatsApp automation with using n8n and WAHA in pair!"
+date: 2024-08-27T08:48:45+00:00
+draft: false
+images: ["waha-n8n.png"]
+categories: ["Tips"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+slug: waha-n8n
+aliases:
+ - /blog/waha-n8n
+---
+
+
+
+
+
+Here's how you can start developing your WhatsApp automation with using **n8n** and **WAHA** in pair so you can create
+your own no-code or low-code **WhatsApp automation**:
+
+{{< imgo src="/images/n8n/waha-n8n.png" >}}
+
+## Installation
+
+Here's a quick docker-compose we have prepared for you to start using **n8n** with **WAHA**:
+
+```bash
+wget https://raw.githubusercontent.com/devlikeapro/waha/core/docker-compose/n8n/docker-compose.yaml
+```
+
+- If you're using [**WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) (donation version) - kindly go to
+ [https://portal.devlike.pro](https://portal.devlike.pro)
+ and docker pull the image with your credentials:
+
+```bash
+docker login -u devlikeapro -p
+docker pull devlikeapro/waha-plus
+docker logout
+```
+
+- If you're using **WAHA Core** (free version) - you can use the image from Docker Hub:
+
+```bash
+sed -i 's/devlikeapro\/waha-plus/devlikeapro\/waha/g' docker-compose.yaml
+```
+
+Now you're ready to run:
+
+```bash
+docker compose up
+# to run in background:
+# docker compose up -d
+```
+
+After that, open:
+
+1. **n8n** at [https://localhost:5678](https://localhost:5678) and set up your email/password
+2. **WAHA** at [https://localhost:3000/dashboard](https://localhost:3000/dashboard) (`admin/admin`)
+
+### Install WAHA n8n node
+
+We provide WAHA Node, which you can install at your n8n installation.
+
+Go to your **n8n** => **Settings** => **Community nodes** and install:
+
+```bash
+@devlikeapro/n8n-nodes-waha
+```
+
+If you need help with that, check the
+[**Install community nodes**](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
+
+## First WhatsApp workflow
+
+We'll build simple workflow - when your WhatsApp account got any message,
+it responds with **"Hi there"** message
+
+### Step 1: Add WAHA API credentials
+
+Before starting using the node, you need to add **WAHA API** credentials.
+
+1. Go to your **n8n** => **Home** => **Credentials** => **Add first credential**
+2. Find **WAHA API** in dropdown
+3. **Host URL** - `http://waha:3000` or use your domain
+4. **API Key** - `admin` or your API key set in `docker-compose.yaml`
+5. Click **Save** - it'll check the connection and save the credentials
+
+{{< imgo src="/images/blog/waha-n8n/waha-n8n-credentials.png" >}}
+
+If you need help with that, check the
+[**Create credentials**](https://docs.n8n.io/credentials/add-edit-credentials/)
+
+### Step 2: Create a new workflow
+
+1. Go to **n8n** => **Home** => **Workflows** => **Create new workflow**.
+2. Remove **Manual trigger**
+
+{{< imgo src="/images/blog/waha-n8n/waha-n8n-init-workflow.png" >}}
+
+### Step 3: Add WAHA Trigger
+
+Add **WAHA Trigger** node.
+
+{{< imgo src="/images/blog/waha-n8n/waha-n8n-WAHATrigger.png" >}}
+
+### Step 4: Add Send a text message action
+
+Add **Send a text message** **WAHA Action** and connect it to `message` **WAHA Trigger** output:
+{{< imgo src="/images/blog/waha-n8n/waha-n8n-actions.png" >}}
+
+### Step 5: Activate the workflow
+
+Click **Save** and **Activate** the workflow:
+{{< imgo src="/images/blog/waha-n8n/waha-n8n-activate-workflow.png" >}}
+
+### Step 6: Start a new session
+
+Open the **WAHA Trigger** and expand **Webhook URLs** => **Production URL**
+{{< imgo src="/images/blog/waha-n8n/waha-n8n-WAHATrigger-url.png" >}}
+
+Go to [http://localhost:3000/dashboard/](http://localhost:3000/dashboard/) (`admin/admin`) and
+**Start New** session with the URL you got from the **WAHA Trigger**:
+{{< imgo src="/images/blog/waha-n8n/waha-n8n-dashboard-session.png" >}}
+
+**Scan QR** and wait till session in `WORKING` state:
+{{< imgo src="/images/blog/waha-n8n/waha-n8n-dashboard-scan-qr.png" >}}
+
+### Step 7: Send a message
+
+Now you can **send any message** to your WhatsApp account, and it'll respond with **"Hi there"** message!
+
+## Workflow Templates
+
+👉 Check out
+[**https://waha-n8n-workflows.devlike.pro**](http://waha-n8n-templates.devlike.pro/)
+for workflow templates!
+
+{{< imgo src="/images/n8n/waha-n8n.png" >}}
+
+## Troubleshooting
+
+If you're experiencing any issues or have a feature request, please check the below resources:
+**WAHA**:
+
+- [**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}})
+- [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
+- [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}})
+
+**n8n**:
+
+- [**Installation guide**](https://docs.n8n.io/hosting/installation/docker/#starting-n8n)
+- [**Install community nodes**](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
+- [**Create credentials**](https://docs.n8n.io/credentials/add-edit-credentials/)
+
+If that doesn't help - kindly open an issue in the
+[**devlikeapro/n8n-nodes-waha**](https://github.com/devlikeapro/n8n-nodes-waha/)
+GitHub repository, we're happy to help you out!
diff --git a/content/blog/waha-ngrok/index.md b/content/blog/waha-ngrok/index.md
index c8050fef5..a4177e947 100644
--- a/content/blog/waha-ngrok/index.md
+++ b/content/blog/waha-ngrok/index.md
@@ -1,70 +1,70 @@
----
-title: "WAHA + Ngrok - Running WAHA on local network"
-description: "Step-by-step guide on how to run WAHA on local network using Ngrok"
-excerpt: "Step-by-step guide on how to run WAHA on local network using Ngrok (so you can use it on Cloud or VPS)"
-date: 2024-06-11T08:48:45+00:00
-draft: false
-images: [ "ngrok.png" ]
-categories: [ "Tips" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
-toc: true
----
-
-## WAHA + Ngrok
-
-If you see the below error, you can use
-the Geonode proxies to solve this issue.
-
-> Could not log in. Check your phone's internet connection and try again.
-> 
-
-Unfortunately, that issue is caused by the WhatsApp server blocking your IP address - likely you're using Cloud or VPS.
-The Geonode proxy is a solution that allows you to bypass this block and continue using WAHA.
-
-**The issue has nothing to do with WAHA** itself, but with the WhatsApp server blocking your IP address.
-
-You can bypass the block and continue using WAHA in Cloud or VPS by hosting it on your local network and using Ngrok to
-expose it to the internet.
-
-💡 **Alternative** is to [**use Geonode proxy with WAHA**]({{< relref "waha-geonode" >}}) to bypass the block.
-
-## Step 1: Run WAHA on local network
-
-Run WAHA on local network (like dedicated home server, spare laptop):
-
-```bash
-docker run -d --name waha -v `pwd`/.sessions:/app/.sessions -p 3000:3000 devlikeapro/waha-plus
-# Or WAHA Core
-# docker run -p 3000:3000 devlikeapro/waha
-```
-
-Start and scan the QR code to connect to WhatsApp.
-
-## Step 2: Expose WAHA with Ngrok
-
-Download and install [Ngrok](https://ngrok.com/).
-
-{{< callout context="note" icon="outline/info-circle" >}}
-You can test it with a free account, but you'll need a paid account to use a static name.
-{{< /callout >}}
-
-Run Ngrok and expose the WAHA port:
-
-```bash
-ngrok http 3000
-```
-
-Now you can see the Ngrok URL that you can use to access WAHA from the internet.
-
-
-## Step 3: Use Ngrok URL in your app
-
-Now you can use the Ngrok URL in your app to connect to WAHA!
-
-## Alternative
-
-If you don't want to run WAHA on your local network, you can [use Geonode proxy]({{< relref "waha-geonode" >}}) to
-bypass the block.
+---
+title: "WAHA + Ngrok - Running WAHA on local network"
+description: "Step-by-step guide on how to run WAHA on local network using Ngrok"
+excerpt: "Step-by-step guide on how to run WAHA on local network using Ngrok (so you can use it on Cloud or VPS)"
+date: 2024-06-11T08:48:45+00:00
+draft: false
+images: ["ngrok.png"]
+categories: ["Tips"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+toc: true
+---
+
+## WAHA + Ngrok
+
+If you see the below error, you can use
+the Geonode proxies to solve this issue.
+
+> Could not log in. Check your phone's internet connection and try again.
+> 
+
+Unfortunately, that issue is caused by the WhatsApp server blocking your IP address - likely you're using Cloud or VPS.
+The Geonode proxy is a solution that allows you to bypass this block and continue using WAHA.
+
+**The issue has nothing to do with WAHA** itself, but with the WhatsApp server blocking your IP address.
+
+You can bypass the block and continue using WAHA in Cloud or VPS by hosting it on your local network and using Ngrok to
+expose it to the internet.
+
+💡 **Alternative** is to [**use Geonode proxy with WAHA**]({{< relref "waha-geonode" >}}) to bypass the block.
+
+## Step 1: Run WAHA on local network
+
+Run WAHA on local network (like dedicated home server, spare laptop):
+
+```bash
+docker run -d --name waha -v `pwd`/.sessions:/app/.sessions -p 3000:3000 devlikeapro/waha-plus
+# Or WAHA Core
+# docker run -p 3000:3000 devlikeapro/waha
+```
+
+Start and scan the QR code to connect to WhatsApp.
+
+## Step 2: Expose WAHA with Ngrok
+
+Download and install [Ngrok](https://ngrok.com/).
+
+{{< callout context="note" icon="outline/info-circle" >}}
+You can test it with a free account, but you'll need a paid account to use a static name.
+{{< /callout >}}
+
+Run Ngrok and expose the WAHA port:
+
+```bash
+ngrok http 3000
+```
+
+Now you can see the Ngrok URL that you can use to access WAHA from the internet.
+
+
+## Step 3: Use Ngrok URL in your app
+
+Now you can use the Ngrok URL in your app to connect to WAHA!
+
+## Alternative
+
+If you don't want to run WAHA on your local network, you can [use Geonode proxy]({{< relref "waha-geonode" >}}) to
+bypass the block.
diff --git a/content/blog/waha-scaling/index.md b/content/blog/waha-scaling/index.md
index 05790dbb0..fa2bf7002 100644
--- a/content/blog/waha-scaling/index.md
+++ b/content/blog/waha-scaling/index.md
@@ -1,197 +1,198 @@
----
-title: "WAHA Scaling - How To Handle 500+ Sessions"
-description: "WAHA Scaling - how to scale WAHA for >500 sessions with Vertical and Horizontal scaling"
-excerpt: "WAHA Scaling - how to scale WAHA for >500 sessions with Vertical and Horizontal scaling"
-date: 2024-08-14T08:48:45+00:00
-draft: false
-images: [ "horizontal-vs-vertical-scaling.png" ]
-categories: [ "Tips" ]
-tags: [ ]
-contributors: [ "devlikeapro" ]
-pinned: false
-homepage: false
----
-
-## Overview
-
-This article is for people who want to scale their WhatsApp API for customers, like CRM, SaaS, or other services and
-who need to handle a lot (**>100**) of [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}}) (WhatsApp Accounts).
-
-If you're using WAHA for **1-10** sessions - just make sure to follow the
-[**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) guide.
-It handles all the necessary steps to make it work. 🚀
-
-There are two ways to scale WAHA:
-
-1. [**Vertical Scaling**](#vertical-scaling) - adding more resources (CPU, RAM) to **a single server** to
- handle more sessions. That's a good way to go if you need to handle up to **50** sessions (**WEBJS**) or **500**
- sessions (**NOWEB**).
-2. [**Horizontal Scaling**](#horizontal-scaling---sharding) - adding more servers to handle more sessions.
- Requires a bit more work to set up, but it's the best way to go if you need to handle more than **500** sessions.
-
-## Vertical Scaling
-
-
-
-**Vertical Scaling** is the process of adding more resources (CPU, RAM) to a single server to handle more sessions.
-
-Assuming you've followed the guide [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) and
-you have something like this architecture:
-
-{{< imgo src="/images/waha/scaling/waha-vertical-scaling.drawio.png" >}}
-
-**How many sessions can you run by adding more resources (CPU and RAM) to a single WAHA server?**
-
-Here's an
-[approximate example of how many sessions you can run on a single server]({{< relref "/docs/overview/faq#system-requirements" >}})
-using the **Vertical Scaling** approach:
-
-| [**🏭 Engine**]({{< relref "/docs/how-to/engines" >}}) | Sessions | CPU | Memory |
-|:-------------------------------------------------------|----------|-------|--------|
-| **WEBJS** | 10 | 270% | 2.5GB |
-| **WEBJS** | 50 | 1500% | 20GB |
-| **NOWEB** | 50 | 150% | 4GB |
-| **NOWEB** | 500 | 300% | 30GB |
-
-👉 The benchmark may differ from case to case, depending on usage patterns - how many messages you receive,
-how many you send, etc.
-
-So if you need to run up to **50** sessions on the **WEBJS** engine or up to **500** sessions on **NOWEB** - you
-can just keep adding more resources (CPU and RAM) to the single server!
-Fast to scale, easy to manage. 🎉
-
-If you want to run more sessions - you need to consider **Horizontal Scaling**.
-It's not safe to run more than the above numbers on a single server!
-
-## Horizontal Scaling - Sharding
-
-
-
-**Horizontal Scaling** is the process of adding **more servers** to handle more sessions.
-
-Right now, the only way to do it is to run multiple WAHA instances and distribute the sessions between them in
-**Your Application** logic using the **Sharding** technique:
-
-{{< imgo src="/images/waha/scaling/waha-horizontal-scaling.drawio.png" >}}
-
-Here are the key points for setting up **Horizontal Scaling** using the **Sharding** technique:
-
-1. You run **multiple WAHA** instances listening on different **hostnames**
-(`http://waha1.example.com`, `http://waha2.example.com`, etc.) or **ports**
-(`http://waha.example.com:3001`, `http://waha.example.com:3002`, etc.).
-2. You save the list of `url`, `api-key`, `capacity` to **Your Application Database** -
-[**Entities Schema**](#entities-schema)
-3. When a new user asks to run a new session - you follow the [**Where to run a new session?**](#where-to-run-a-new-session)
- logic to find a suitable WAHA instance and save the `user <-> session <-> server` association to **Your Application Database**.
-4. When you need to send a request to WhatsApp API - you follow the
- [**Where to find the session?**](#where-to-find-the-session) logic to find the WAHA instance to send the request.
-5. All webhooks come to **Your Application** directly from the WAHA instance, so you don't need to worry about it.
-
-We'll guide you through the process of setting up **Horizontal Scaling**
-using the **Sharding** technique in the next sections.
-
-👉 Please note that each **WAHA Worker** must have its own database or `WAHA_WORKER_ID=waha{N}` environment variable set
-for either **File Storage** or **MongoDB** URL (not a database).
-
-### Entities Schema
-
-In order to save WAHA instances and session associations, you
-need to have the following entities in **Your Application Database**:
-
-
-#### Worker
-
-**Worker** represents a single WAHA instance that can handle sessions.
-
-- `id` - unique identifier
-- `url` - URL of the WAHA instance, `http://waha1.example.com`, `http://waha2.example.com`, etc.
-- `api_key` - API Key to authorize requests
-- `capacity` - how many sessions can be run on the WAHA instance (for simplicity, we're using a single field,
- but it can be a new model **AvailableSession** or similar).
-
-By setting `capacity`, you can manage the WAHA Worker usage and prevent overloading.
-
-#### User
-
-**User** is a user of **Your Application** that can run sessions.
-
-- `id` - unique identifier
-
-👉 You can use either **User** or **Tenant** or **Organization** - it completely depends on your application logic
-and business model.
-We'll use **User** for simplicity with a single field:
-
-#### WAHASession
-
-**WAHASession** represents a single session that is running on the WAHA **Worker** associated with the **User**.
-
-- `id` - unique identifier
-- `name` - WAHA session `name`
-- `user_id` - reference to the **User**
-- `worker_id` - reference to the **Worker**
-
-### Where to run a new session?
-
-When a new user asks to **run a new session** - you need to find a suitable WAHA instance to run it.
-You can simply get a list of sessions with `capacity>0` and pick the one with the highest `capacity`.
-{{< imgo src="/images/waha/scaling/waha-run-session.png" >}}
-
-This is just an example with simple logic. You can adjust it and distribute WhatsApp sessions based on **country**, **proxy
-settings**,
-customer level, etc.
-
-### Where to find the session?
-
-When you need to **send a request** to WhatsApp API - you need to find the WAHA instance to send the request.
-You can simply get the `worker_id` from the **WAHASession** and send the request to the WAHA instance using
-the `url` and `api_key`.
-{{< imgo src="/images/waha/scaling/waha-send-request.png" >}}
-
-### Why this way?
-
-**WAHA** is not a stateless application, it has **a runtime state** (not technically a state as in database, but still a
-state) - **the connection to WhatsApp** (either browser or websocket connection) which cannot be moved automatically,
-so all HTTP requests MUST be **"sticky"**, meaning they **MUST** go only to the certain "worker" - **one with a "running" session**.
-
-This is why we cannot simply run more containers using Kubernetes Deployment/AWS ECS
-(though you can use [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) for k8s).
-We need to care about WHERE we run the session and WHERE we send the request.
-
-And a few more reasons:
-
-- **Simple** - you don't need to worry about the load balancer, k8s, docker, etc.
-- **Independent** - you can run WAHA instances on different servers, different cloud providers, bare-metal, etc.
-- **No single point of failure** - if one WAHA instance goes down - the others are still working.
-- **Flexible** - you can configure HOW you distribute sessions across different servers based on your business logic.
-- **Frees our hands** - we can focus on building the best WhatsApp API and adding new features,
- and you can focus on building the best application. 😊
-
-### Single Dashboard - Multiple Servers
-If you're running multiple servers,
-you can run a dedicated WAHA [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}}) just to have a single place from which you can manage all servers:
-
-{{< imgo src="/images/waha/dashboard/waha-dashboard-servers.drawio.png" >}}
-
-After that, you can connect all servers to the single dashboard:
-
-{{< imgo src="/images/waha/dashboard/waha-single-dashboard-multiple-servers.png" >}}
-
-## Horizontal Scaling - Auto-Scaling
-
-🚧🔨⏳ Auto-Scaling **IS NOT AVAILABLE** out-of-the-box in WAHA yet! ⏳🔨🚧
-
-We're working on it, but it's not ready yet, so we're just giving you a future vision of how it will work.
-
-The idea is to build **WAHA Hub** that will handle all API requests and distribute them to the **WAHA Workers**
-based on information about where each session is running.
-
-It'll also control (using underlying k8s or docker infrastructure) the number of workers based on the load.
-
-{{< imgo src="/images/waha/scaling/waha-hub.png" >}}
-
-Kindly [**support the project**]({{< relref "/support-us" >}}) on the **PRO** tier if you wish to
-use this feature in the future! 🙏
-
-For now, [**Vertical Scaling**](#vertical-scaling) and
-[**Horizontal Scaling - Sharding**](#horizontal-scaling---sharding)
-are the ways to go.
+---
+title: "WAHA Scaling - How To Handle 500+ Sessions"
+description: "WAHA Scaling - how to scale WAHA for >500 sessions with Vertical and Horizontal scaling"
+excerpt: "WAHA Scaling - how to scale WAHA for >500 sessions with Vertical and Horizontal scaling"
+date: 2024-08-14T08:48:45+00:00
+draft: false
+images: ["horizontal-vs-vertical-scaling.png"]
+categories: ["Tips"]
+tags: []
+contributors: ["devlikeapro"]
+pinned: false
+homepage: false
+---
+
+## Overview
+
+This article is for people who want to scale their WhatsApp API for customers, like CRM, SaaS, or other services and
+who need to handle a lot (**>100**) of [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}}) (WhatsApp Accounts).
+
+If you're using WAHA for **1-10** sessions - just make sure to follow the
+[**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) guide.
+It handles all the necessary steps to make it work. 🚀
+
+There are two ways to scale WAHA:
+
+1. [**Vertical Scaling**](#vertical-scaling) - adding more resources (CPU, RAM) to **a single server** to
+ handle more sessions. That's a good way to go if you need to handle up to **50** sessions (**WEBJS**) or **500**
+ sessions (**NOWEB**).
+2. [**Horizontal Scaling**](#horizontal-scaling---sharding) - adding more servers to handle more sessions.
+ Requires a bit more work to set up, but it's the best way to go if you need to handle more than **500** sessions.
+
+## Vertical Scaling
+
+
+
+**Vertical Scaling** is the process of adding more resources (CPU, RAM) to a single server to handle more sessions.
+
+Assuming you've followed the guide [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) and
+you have something like this architecture:
+
+{{< imgo src="/images/waha/scaling/waha-vertical-scaling.drawio.png" >}}
+
+**How many sessions can you run by adding more resources (CPU and RAM) to a single WAHA server?**
+
+Here's an
+[approximate example of how many sessions you can run on a single server]({{< relref "/docs/overview/faq#system-requirements" >}})
+using the **Vertical Scaling** approach:
+
+| [**🏭 Engine**]({{< relref "/docs/how-to/engines" >}}) | Sessions | CPU | Memory |
+| :----------------------------------------------------- | -------- | ----- | ------ |
+| **WEBJS** | 10 | 270% | 2.5GB |
+| **WEBJS** | 50 | 1500% | 20GB |
+| **NOWEB** | 50 | 150% | 4GB |
+| **NOWEB** | 500 | 300% | 30GB |
+
+👉 The benchmark may differ from case to case, depending on usage patterns - how many messages you receive,
+how many you send, etc.
+
+So if you need to run up to **50** sessions on the **WEBJS** engine or up to **500** sessions on **NOWEB** - you
+can just keep adding more resources (CPU and RAM) to the single server!
+Fast to scale, easy to manage. 🎉
+
+If you want to run more sessions - you need to consider **Horizontal Scaling**.
+It's not safe to run more than the above numbers on a single server!
+
+## Horizontal Scaling - Sharding
+
+
+
+**Horizontal Scaling** is the process of adding **more servers** to handle more sessions.
+
+Right now, the only way to do it is to run multiple WAHA instances and distribute the sessions between them in
+**Your Application** logic using the **Sharding** technique:
+
+{{< imgo src="/images/waha/scaling/waha-horizontal-scaling.drawio.png" >}}
+
+Here are the key points for setting up **Horizontal Scaling** using the **Sharding** technique:
+
+1. You run **multiple WAHA** instances listening on different **hostnames**
+ (`http://waha1.example.com`, `http://waha2.example.com`, etc.) or **ports**
+ (`http://waha.example.com:3001`, `http://waha.example.com:3002`, etc.).
+2. You save the list of `url`, `api-key`, `capacity` to **Your Application Database** -
+ [**Entities Schema**](#entities-schema)
+3. When a new user asks to run a new session - you follow the [**Where to run a new session?**](#where-to-run-a-new-session)
+ logic to find a suitable WAHA instance and save the `user <-> session <-> server` association to **Your Application Database**.
+4. When you need to send a request to WhatsApp API - you follow the
+ [**Where to find the session?**](#where-to-find-the-session) logic to find the WAHA instance to send the request.
+5. All webhooks come to **Your Application** directly from the WAHA instance, so you don't need to worry about it.
+
+We'll guide you through the process of setting up **Horizontal Scaling**
+using the **Sharding** technique in the next sections.
+
+👉 Please note that each **WAHA Worker** must have its own database or `WAHA_WORKER_ID=waha{N}` environment variable set
+for either **File Storage** or **MongoDB** URL (not a database).
+
+### Entities Schema
+
+In order to save WAHA instances and session associations, you
+need to have the following entities in **Your Application Database**:
+
+
+#### Worker
+
+**Worker** represents a single WAHA instance that can handle sessions.
+
+- `id` - unique identifier
+- `url` - URL of the WAHA instance, `http://waha1.example.com`, `http://waha2.example.com`, etc.
+- `api_key` - API Key to authorize requests
+- `capacity` - how many sessions can be run on the WAHA instance (for simplicity, we're using a single field,
+ but it can be a new model **AvailableSession** or similar).
+
+By setting `capacity`, you can manage the WAHA Worker usage and prevent overloading.
+
+#### User
+
+**User** is a user of **Your Application** that can run sessions.
+
+- `id` - unique identifier
+
+👉 You can use either **User** or **Tenant** or **Organization** - it completely depends on your application logic
+and business model.
+We'll use **User** for simplicity with a single field:
+
+#### WAHASession
+
+**WAHASession** represents a single session that is running on the WAHA **Worker** associated with the **User**.
+
+- `id` - unique identifier
+- `name` - WAHA session `name`
+- `user_id` - reference to the **User**
+- `worker_id` - reference to the **Worker**
+
+### Where to run a new session?
+
+When a new user asks to **run a new session** - you need to find a suitable WAHA instance to run it.
+You can simply get a list of sessions with `capacity>0` and pick the one with the highest `capacity`.
+{{< imgo src="/images/waha/scaling/waha-run-session.png" >}}
+
+This is just an example with simple logic. You can adjust it and distribute WhatsApp sessions based on **country**, **proxy
+settings**,
+customer level, etc.
+
+### Where to find the session?
+
+When you need to **send a request** to WhatsApp API - you need to find the WAHA instance to send the request.
+You can simply get the `worker_id` from the **WAHASession** and send the request to the WAHA instance using
+the `url` and `api_key`.
+{{< imgo src="/images/waha/scaling/waha-send-request.png" >}}
+
+### Why this way?
+
+**WAHA** is not a stateless application, it has **a runtime state** (not technically a state as in database, but still a
+state) - **the connection to WhatsApp** (either browser or websocket connection) which cannot be moved automatically,
+so all HTTP requests MUST be **"sticky"**, meaning they **MUST** go only to the certain "worker" - **one with a "running" session**.
+
+This is why we cannot simply run more containers using Kubernetes Deployment/AWS ECS
+(though you can use [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) for k8s).
+We need to care about WHERE we run the session and WHERE we send the request.
+
+And a few more reasons:
+
+- **Simple** - you don't need to worry about the load balancer, k8s, docker, etc.
+- **Independent** - you can run WAHA instances on different servers, different cloud providers, bare-metal, etc.
+- **No single point of failure** - if one WAHA instance goes down - the others are still working.
+- **Flexible** - you can configure HOW you distribute sessions across different servers based on your business logic.
+- **Frees our hands** - we can focus on building the best WhatsApp API and adding new features,
+ and you can focus on building the best application. 😊
+
+### Single Dashboard - Multiple Servers
+
+If you're running multiple servers,
+you can run a dedicated WAHA [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}}) just to have a single place from which you can manage all servers:
+
+{{< imgo src="/images/waha/dashboard/waha-dashboard-servers.drawio.png" >}}
+
+After that, you can connect all servers to the single dashboard:
+
+{{< imgo src="/images/waha/dashboard/waha-single-dashboard-multiple-servers.png" >}}
+
+## Horizontal Scaling - Auto-Scaling
+
+🚧🔨⏳ Auto-Scaling **IS NOT AVAILABLE** out-of-the-box in WAHA yet! ⏳🔨🚧
+
+We're working on it, but it's not ready yet, so we're just giving you a future vision of how it will work.
+
+The idea is to build **WAHA Hub** that will handle all API requests and distribute them to the **WAHA Workers**
+based on information about where each session is running.
+
+It'll also control (using underlying k8s or docker infrastructure) the number of workers based on the load.
+
+{{< imgo src="/images/waha/scaling/waha-hub.png" >}}
+
+Kindly [**support the project**]({{< relref "/support-us" >}}) on the **PRO** tier if you wish to
+use this feature in the future! 🙏
+
+For now, [**Vertical Scaling**](#vertical-scaling) and
+[**Horizontal Scaling - Sharding**](#horizontal-scaling---sharding)
+are the ways to go.
diff --git a/content/contact/_index.md b/content/contact/_index.md
index 5aaa2adc2..8edfcb34f 100644
--- a/content/contact/_index.md
+++ b/content/contact/_index.md
@@ -1,12 +1,9 @@
----
-title: "Contact"
-description: "Drop us an email."
-date: 2020-08-27T19:25:12+02:00
-lastmod: 2020-08-27T19:25:12+02:00
-draft: false
-
----
-
-Get In Touch With The Team!
-
-
+---
+title: "Contact"
+description: "Drop us an email."
+date: 2020-08-27T19:25:12+02:00
+lastmod: 2020-08-27T19:25:12+02:00
+draft: false
+---
+
+Get In Touch With The Team!
diff --git a/content/contributors/_index.md b/content/contributors/_index.md
index 1a7e2654c..a98ac51d7 100644
--- a/content/contributors/_index.md
+++ b/content/contributors/_index.md
@@ -1,10 +1,9 @@
----
-title: "Contributors"
-description: "The WAHA contributors."
-date: 2020-10-06T08:50:29+00:00
-lastmod: 2020-10-06T08:50:29+00:00
-draft: false
-
----
-
-The WAHA contributors.
+---
+title: "Contributors"
+description: "The WAHA contributors."
+date: 2020-10-06T08:50:29+00:00
+lastmod: 2020-10-06T08:50:29+00:00
+draft: false
+---
+
+The WAHA contributors.
diff --git a/content/contributors/devlikeapro/_index.md b/content/contributors/devlikeapro/_index.md
index 98eaabded..3864d256b 100644
--- a/content/contributors/devlikeapro/_index.md
+++ b/content/contributors/devlikeapro/_index.md
@@ -1,12 +1,11 @@
----
-title: "devlikeapro"
-description: "Creator of WAHA."
-date: 2020-10-06T08:50:45+00:00
-lastmod: 2020-10-06T08:50:45+00:00
-draft: false
-
----
-
-Creator of WAHA
-
-[@devlikeapro](https://github.com/devlikeapro)
+---
+title: "devlikeapro"
+description: "Creator of WAHA."
+date: 2020-10-06T08:50:45+00:00
+lastmod: 2020-10-06T08:50:45+00:00
+draft: false
+---
+
+Creator of WAHA
+
+[@devlikeapro](https://github.com/devlikeapro)
diff --git a/content/docs/_index.md b/content/docs/_index.md
index 635f9376f..ad33e0241 100644
--- a/content/docs/_index.md
+++ b/content/docs/_index.md
@@ -1,9 +1,8 @@
----
-title : "Docs"
-description: "Docs Doks."
-lead: ""
-date: 2020-10-06T08:48:23+00:00
-lastmod: 2020-10-06T08:48:23+00:00
-draft: false
-
----
+---
+title: "Docs"
+description: "Docs Doks."
+lead: ""
+date: 2020-10-06T08:48:23+00:00
+lastmod: 2020-10-06T08:48:23+00:00
+draft: false
+---
diff --git a/content/docs/apps/_index.md b/content/docs/apps/_index.md
index 2c10637a2..7aa137c6f 100644
--- a/content/docs/apps/_index.md
+++ b/content/docs/apps/_index.md
@@ -1,14 +1,13 @@
----
-title: "🧩 Apps"
-description: "Apps"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 300
-sidebar:
- collapsed: true
----
-
-
-Here you can find detailed information about apps.
\ No newline at end of file
+---
+title: "🧩 Apps"
+description: "Apps"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 300
+sidebar:
+ collapsed: true
+---
+
+Here you can find detailed information about apps.
diff --git a/content/docs/apps/about/-config.md b/content/docs/apps/about/-config.md
index fa4be0480..d714e50c9 100644
--- a/content/docs/apps/about/-config.md
+++ b/content/docs/apps/about/-config.md
@@ -1,28 +1,28 @@
-
-
-To use
-[**🧩 Apps**]({{< relref "/docs/apps/about" >}})
-, you need to configure the following environment variables in addition to the standard
-[**⚙️ Configuration**]({{< relref "/docs/how-to/config" >}}):
-
-**Apps**:
-
-- `WAHA_APPS_ENABLED=True` - Enables the [**🧩 Apps**]({{< relref "/docs/apps/about" >}}) functionality
-- `REDIS_URL=redis://:redis@redis:6379` - Specifies the Redis URL required for processing background jobs
-- `WHATSAPP_DEFAULT_ENGINE=GOWS` - Sets the recommended engine for reliable **WhatsApp** automation
-- `WAHA_API_KEY_PLAIN=0000000000000000` - plain password **required** for Apps in environment variables
- - It's a quick solution, we're working on removing it so you can use `sha512` version as in `WAHA_API_KEY`
-
-**Jobs**:
-
-You can configure a background worker [http://localhost:3000/jobs](http://localhost:3000/jobs)
-
-- `WAHA_APPS_JOBS_CONCURRENCY=50` - Maximum number of jobs processed concurrently
-- `WAHA_APPS_JOBS_REMOVE_ON_COMPLETE_AGE=259200` - Remove completed jobs after 3 days (in seconds)
-- `WAHA_APPS_JOBS_REMOVE_ON_COMPLETE_COUNT=1000` - Maximum number of completed jobs to keep
-- `WAHA_APPS_JOBS_REMOVE_ON_FAIL_AGE=2678400` - Remove failed jobs after 31 days (in seconds)
-- `WAHA_APPS_JOBS_REMOVE_ON_FAIL_COUNT=1000` - Maximum number of failed jobs to keep
-
-Note: `*_AGE` parameters are specified in **seconds** by default.
-
-Under the hood it uses [bullmq](https://docs.bullmq.io/).
+
+
+To use
+[**🧩 Apps**]({{< relref "/docs/apps/about" >}})
+, you need to configure the following environment variables in addition to the standard
+[**⚙️ Configuration**]({{< relref "/docs/how-to/config" >}}):
+
+**Apps**:
+
+- `WAHA_APPS_ENABLED=True` - Enables the [**🧩 Apps**]({{< relref "/docs/apps/about" >}}) functionality
+- `REDIS_URL=redis://:redis@redis:6379` - Specifies the Redis URL required for processing background jobs
+- `WHATSAPP_DEFAULT_ENGINE=GOWS` - Sets the recommended engine for reliable **WhatsApp** automation
+- `WAHA_API_KEY_PLAIN=0000000000000000` - plain password **required** for Apps in environment variables
+ - It's a quick solution, we're working on removing it so you can use `sha512` version as in `WAHA_API_KEY`
+
+**Jobs**:
+
+You can configure a background worker [http://localhost:3000/jobs](http://localhost:3000/jobs)
+
+- `WAHA_APPS_JOBS_CONCURRENCY=50` - Maximum number of jobs processed concurrently
+- `WAHA_APPS_JOBS_REMOVE_ON_COMPLETE_AGE=259200` - Remove completed jobs after 3 days (in seconds)
+- `WAHA_APPS_JOBS_REMOVE_ON_COMPLETE_COUNT=1000` - Maximum number of completed jobs to keep
+- `WAHA_APPS_JOBS_REMOVE_ON_FAIL_AGE=2678400` - Remove failed jobs after 31 days (in seconds)
+- `WAHA_APPS_JOBS_REMOVE_ON_FAIL_COUNT=1000` - Maximum number of failed jobs to keep
+
+Note: `*_AGE` parameters are specified in **seconds** by default.
+
+Under the hood it uses [bullmq](https://docs.bullmq.io/).
diff --git a/content/docs/apps/about/-how-it-works.md b/content/docs/apps/about/-how-it-works.md
index a5d4f0bdc..7dbb1e089 100644
--- a/content/docs/apps/about/-how-it-works.md
+++ b/content/docs/apps/about/-how-it-works.md
@@ -1,73 +1,76 @@
-
-
-**Apps** connect **WhatsApp** with **external services** using **Redis** as a message broker.
-
-**Apps** architecture consists of:
-- **HTTP API**, **Worker**, and **Session** on **WAHA** side
-- **Redis** acts as the central message broker.
-- **External Services**, like **ChatWoot**
-
-```kroki {type=mermaid}
-architecture-beta
- group waha(cloud)[WAHA]
- service api(server)[HTTP API] in waha
- service worker(server)[Worker] in waha
- service session(internet)[Session] in waha
- service redis(database)[Redis]
-
- group app(cloud)[ChatWoot]
- service 3api(internet)[HTTP API] in app
-
- api:L --> R:session
- redis:R <--> B:worker
- redis:T <-- B:session
- 3api:L --> R:api
- worker:R --> B:3api
- worker:T --> B:api
-```
-
-**WhatsApp to External Service Flow**:
-- When a new message arrives in **WhatsApp**, **WAHA** captures it and publishes a **message event** to **Redis**.
-- The **Worker** then picks up this event, processes it, and forwards the message to **ChatWoot** via its **API**.
-- After successful delivery, the job is marked as processed in **Redis**.
-
-```kroki {type=mermaid}
-sequenceDiagram
- participant WA_Session as WhatsApp
- participant Redis as Redis
- participant Worker as Worker
- participant ChatWoot as ChatWoot API
-
- WA_Session ->> WA_Session: Receive a new message
- WA_Session ->> Redis: 'message.any' event
- Redis ->> Worker: Fire Job
- Worker ->> ChatWoot: Send message via ChatWoot API
- ChatWoot -->> Worker: 200 OK
- Worker -->> Redis: Mark job as processed
-```
-
-**External Service to WhatsApp Flow**:
-- When a new message is created in **ChatWoot**, it calls the **WAHA API** webhook.
-- The **API** saves this job to the **Redis** queue, from which the **Worker** retrieves it.
-- The **Worker** then requests the **WAHA API** to send the message to **WhatsApp**.
-- After **WhatsApp** confirms delivery, the **API** acknowledges the **Worker**, which then marks the job as processed in **Redis**.
-
-```kroki {type=mermaid}
-sequenceDiagram
- participant ChatWoot as ChatWoot API
- participant WA_API as WAHA API
- participant Redis as Redis
- participant Worker as Worker
- participant WA_Session as WhatsApp
-
- ChatWoot ->> ChatWoot: New message created
- ChatWoot ->> WA_API: Call Webhook
- WA_API -->> ChatWoot: 200 OK
- WA_API ->> Redis: 'message_created' event
- Redis ->> Worker: Fire Job
- Worker ->> WA_API: /api/sendText
- WA_API ->> WA_Session: Send message to WhatsApp
- WA_Session -->> WA_API: ACK: Server
- WA_API -->> Worker: 200 OK
- Worker -->> Redis: Mark job as processed
-```
+
+
+**Apps** connect **WhatsApp** with **external services** using **Redis** as a message broker.
+
+**Apps** architecture consists of:
+
+- **HTTP API**, **Worker**, and **Session** on **WAHA** side
+- **Redis** acts as the central message broker.
+- **External Services**, like **ChatWoot**
+
+```kroki {type=mermaid}
+architecture-beta
+ group waha(cloud)[WAHA]
+ service api(server)[HTTP API] in waha
+ service worker(server)[Worker] in waha
+ service session(internet)[Session] in waha
+ service redis(database)[Redis]
+
+ group app(cloud)[ChatWoot]
+ service 3api(internet)[HTTP API] in app
+
+ api:L --> R:session
+ redis:R <--> B:worker
+ redis:T <-- B:session
+ 3api:L --> R:api
+ worker:R --> B:3api
+ worker:T --> B:api
+```
+
+**WhatsApp to External Service Flow**:
+
+- When a new message arrives in **WhatsApp**, **WAHA** captures it and publishes a **message event** to **Redis**.
+- The **Worker** then picks up this event, processes it, and forwards the message to **ChatWoot** via its **API**.
+- After successful delivery, the job is marked as processed in **Redis**.
+
+```kroki {type=mermaid}
+sequenceDiagram
+ participant WA_Session as WhatsApp
+ participant Redis as Redis
+ participant Worker as Worker
+ participant ChatWoot as ChatWoot API
+
+ WA_Session ->> WA_Session: Receive a new message
+ WA_Session ->> Redis: 'message.any' event
+ Redis ->> Worker: Fire Job
+ Worker ->> ChatWoot: Send message via ChatWoot API
+ ChatWoot -->> Worker: 200 OK
+ Worker -->> Redis: Mark job as processed
+```
+
+**External Service to WhatsApp Flow**:
+
+- When a new message is created in **ChatWoot**, it calls the **WAHA API** webhook.
+- The **API** saves this job to the **Redis** queue, from which the **Worker** retrieves it.
+- The **Worker** then requests the **WAHA API** to send the message to **WhatsApp**.
+- After **WhatsApp** confirms delivery, the **API** acknowledges the **Worker**, which then marks the job as processed in **Redis**.
+
+```kroki {type=mermaid}
+sequenceDiagram
+ participant ChatWoot as ChatWoot API
+ participant WA_API as WAHA API
+ participant Redis as Redis
+ participant Worker as Worker
+ participant WA_Session as WhatsApp
+
+ ChatWoot ->> ChatWoot: New message created
+ ChatWoot ->> WA_API: Call Webhook
+ WA_API -->> ChatWoot: 200 OK
+ WA_API ->> Redis: 'message_created' event
+ Redis ->> Worker: Fire Job
+ Worker ->> WA_API: /api/sendText
+ WA_API ->> WA_Session: Send message to WhatsApp
+ WA_Session -->> WA_API: ACK: Server
+ WA_API -->> Worker: 200 OK
+ Worker -->> Redis: Mark job as processed
+```
diff --git a/content/docs/apps/about/apps-vs-integrations.md b/content/docs/apps/about/apps-vs-integrations.md
index 4d746eae6..0556d9c5a 100644
--- a/content/docs/apps/about/apps-vs-integrations.md
+++ b/content/docs/apps/about/apps-vs-integrations.md
@@ -1,7 +1,7 @@
-
-{{< callout context="tip" icon="outline/bulb" title="🧩 Apps vs 🔌 Integrations" >}}
-- [**🧩 Apps**]({{< relref "/docs/apps/about" >}})
-are **built-in WAHA connections** supported by the WAHA team
-- [**🔌 Integrations**]({{< relref "/docs/integrations/about" >}})
-are **external ecosystem tools** that **may or may not** be directly supported by the WAHA team.
-{{< /callout >}}
+
+{{< callout context="tip" icon="outline/bulb" title="🧩 Apps vs 🔌 Integrations" >}}
+- [**🧩 Apps**]({{< relref "/docs/apps/about" >}})
+are **built-in WAHA connections** supported by the WAHA team
+- [**🔌 Integrations**]({{< relref "/docs/integrations/about" >}})
+are **external ecosystem tools** that **may or may not** be directly supported by the WAHA team.
+{{< /callout >}}
diff --git a/content/docs/apps/about/index.md b/content/docs/apps/about/index.md
index f764c9387..896fd0ac5 100644
--- a/content/docs/apps/about/index.md
+++ b/content/docs/apps/about/index.md
@@ -1,39 +1,40 @@
----
-title: "Apps"
-description: "Understanding WAHA 🧩 Apps"
-lead: "Understanding WAHA 🧩 Apps"
-date: 2024-07-13T12:00:00+00:00
-lastmod: 2024-07-13T12:00:00+00:00
-draft: false
-weight: 301
-images: []
-toc: true
-slug: "about"
----
-
-**🧩 Apps** are **built-in connections** that integrate **WAHA** with **other services** in a few steps.
-
-**WAHA Team** fully supports **🧩 Apps**.
-
-{{< include file="content/docs/apps/about/apps-vs-integrations.md" >}}
-
-## Available Apps
-Apps available to connect:
-- [**ChatWoot**]({{< relref "/docs/apps/chatwoot" >}}) - use your **WhatsApp** in **ChatWoot CRM**
-
-## Configuration
-
-{{< include file="content/docs/apps/about/-config.md" >}}
-
-## How it works
-
-{{< include file="content/docs/apps/about/-how-it-works.md" >}}
-
-You can use the **WAHA Jobs Dashboard** at [http://localhost:3000/jobs](http://localhost:3000/jobs) for monitoring **Worker** and it's jobs:
-
-
-
-## Apps SDK
-
-> This section is currently under development. Check back soon for detailed information about the integration architecture and workflow.
-
+---
+title: "Apps"
+description: "Understanding WAHA 🧩 Apps"
+lead: "Understanding WAHA 🧩 Apps"
+date: 2024-07-13T12:00:00+00:00
+lastmod: 2024-07-13T12:00:00+00:00
+draft: false
+weight: 301
+images: []
+toc: true
+slug: "about"
+---
+
+**🧩 Apps** are **built-in connections** that integrate **WAHA** with **other services** in a few steps.
+
+**WAHA Team** fully supports **🧩 Apps**.
+
+{{< include file="content/docs/apps/about/apps-vs-integrations.md" >}}
+
+## Available Apps
+
+Apps available to connect:
+
+- [**ChatWoot**]({{< relref "/docs/apps/chatwoot" >}}) - use your **WhatsApp** in **ChatWoot CRM**
+
+## Configuration
+
+{{< include file="content/docs/apps/about/-config.md" >}}
+
+## How it works
+
+{{< include file="content/docs/apps/about/-how-it-works.md" >}}
+
+You can use the **WAHA Jobs Dashboard** at [http://localhost:3000/jobs](http://localhost:3000/jobs) for monitoring **Worker** and it's jobs:
+
+
+
+## Apps SDK
+
+> This section is currently under development. Check back soon for detailed information about the integration architecture and workflow.
diff --git a/content/docs/apps/chatwoot/-chatwoot-articles.md b/content/docs/apps/chatwoot/-chatwoot-articles.md
index 2a22fd3e8..9e4220e9b 100644
--- a/content/docs/apps/chatwoot/-chatwoot-articles.md
+++ b/content/docs/apps/chatwoot/-chatwoot-articles.md
@@ -1,13 +1,13 @@
-
-{{< callout context="tip" title="ChatWoot Articles" icon="outline/article" >}}
-Series of articles about **WhatsApp** and **ChatWoot** integration using [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}}):
-
-0. [**WhatsApp + ChatWoot - Overview**]({{< relref "/blog/apps-chatwoot-0-overview" >}})
-1. [**WhatsApp + ChatWoot - Installation Guide**]({{< relref "/blog/apps-chatwoot-1-install" >}})
-2. [**WhatsApp + ChatWoot - Configuration Guide**]({{< relref "/blog/apps-chatwoot-2-config" >}})
-3. [**WhatsApp + ChatWoot - HTTPS Guide**]({{< relref "/blog/apps-chatwoot-3-https" >}})
-4. [**WhatsApp + ChatWoot - How It Works**]({{< relref "/blog/apps-chatwoot-4-how-it-works" >}})
-
-You can follow them **one by one** or skip some parts if you don't need them.
-
-{{< /callout >}}
+
+{{< callout context="tip" title="ChatWoot Articles" icon="outline/article" >}}
+Series of articles about **WhatsApp** and **ChatWoot** integration using [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}}):
+
+0. [**WhatsApp + ChatWoot - Overview**]({{< relref "/blog/apps-chatwoot-0-overview" >}})
+1. [**WhatsApp + ChatWoot - Installation Guide**]({{< relref "/blog/apps-chatwoot-1-install" >}})
+2. [**WhatsApp + ChatWoot - Configuration Guide**]({{< relref "/blog/apps-chatwoot-2-config" >}})
+3. [**WhatsApp + ChatWoot - HTTPS Guide**]({{< relref "/blog/apps-chatwoot-3-https" >}})
+4. [**WhatsApp + ChatWoot - How It Works**]({{< relref "/blog/apps-chatwoot-4-how-it-works" >}})
+
+You can follow them **one by one** or skip some parts if you don't need them.
+
+{{< /callout >}}
diff --git a/content/docs/apps/chatwoot/-disclaimer.md b/content/docs/apps/chatwoot/-disclaimer.md
index 5727b2bad..0f3404e8b 100644
--- a/content/docs/apps/chatwoot/-disclaimer.md
+++ b/content/docs/apps/chatwoot/-disclaimer.md
@@ -1,6 +1,6 @@
-
-{{< callout context="info" title="Disclaimer" icon="outline/gavel" >}}
-This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with **WhatsApp**, **ChatWoot**, or any of their respective subsidiaries or affiliates. The official websites can be found at [https://whatsapp.com](https://whatsapp.com) and [https://chatwoot.com](https://chatwoot.com).
-
-For businesses seeking to integrate with WhatsApp for critical applications, we strongly recommend using [officially supported methods](https://www.chatwoot.com/hc/user-guide/articles/1677832735-how-to-setup-a-whats_app-channel).
-{{< /callout >}}
+
+{{< callout context="info" title="Disclaimer" icon="outline/gavel" >}}
+This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with **WhatsApp**, **ChatWoot**, or any of their respective subsidiaries or affiliates. The official websites can be found at [https://whatsapp.com](https://whatsapp.com) and [https://chatwoot.com](https://chatwoot.com).
+
+For businesses seeking to integrate with WhatsApp for critical applications, we strongly recommend using [officially supported methods](https://www.chatwoot.com/hc/user-guide/articles/1677832735-how-to-setup-a-whats_app-channel).
+{{< /callout >}}
diff --git a/content/docs/apps/chatwoot/index.md b/content/docs/apps/chatwoot/index.md
index e5df6e5bc..7bbed95a5 100644
--- a/content/docs/apps/chatwoot/index.md
+++ b/content/docs/apps/chatwoot/index.md
@@ -1,49 +1,49 @@
----
-title: "Chatwoot"
-description: "Chatwoot App"
-lead: "Chatwoot App"
-date: 2025-07-10T08:49:31+00:00
-lastmod: 2024-07-10T08:49:31+00:00
-draft: false
-menu:
-docs:
-weight: 302
-images: ["waha-chatwoot.png"]
-toc: true
----
-
-
-
-
-
-**WAHA** provides a built-in **WhatsApp** integration for
-[**Chatwoot**](https://www.chatwoot.com/) that you can configure in a few steps using
-[**🧩 Apps**]({{< relref "/docs/apps/about" >}})!
-
-
-
-
-{{< include file="content/docs/apps/chatwoot/-disclaimer.md" >}}
-
-
-## Installation
-We cover all installation and configuration aspects in the following series of articles:
-{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
-
-## Configuration
-
-{{< include file="content/docs/apps/about/-config.md" >}}
-
-## How it works
-
-{{< include file="content/docs/apps/about/-how-it-works.md" >}}
-
-### Error Handling
-In case of any errors, WAHA retries a few times and then gives detailed information about the error:
-
-
-
-You can use the **WAHA Jobs Dashboard** at [http://localhost:3000/jobs](http://localhost:3000/jobs) for monitoring:
-
-
-
+---
+title: "Chatwoot"
+description: "Chatwoot App"
+lead: "Chatwoot App"
+date: 2025-07-10T08:49:31+00:00
+lastmod: 2024-07-10T08:49:31+00:00
+draft: false
+menu:
+docs:
+weight: 302
+images: ["waha-chatwoot.png"]
+toc: true
+---
+
+
+
+
+
+**WAHA** provides a built-in **WhatsApp** integration for
+[**Chatwoot**](https://www.chatwoot.com/) that you can configure in a few steps using
+[**🧩 Apps**]({{< relref "/docs/apps/about" >}})!
+
+
+
+
+{{< include file="content/docs/apps/chatwoot/-disclaimer.md" >}}
+
+## Installation
+
+We cover all installation and configuration aspects in the following series of articles:
+{{< include file="content/docs/apps/chatwoot/-chatwoot-articles.md" >}}
+
+## Configuration
+
+{{< include file="content/docs/apps/about/-config.md" >}}
+
+## How it works
+
+{{< include file="content/docs/apps/about/-how-it-works.md" >}}
+
+### Error Handling
+
+In case of any errors, WAHA retries a few times and then gives detailed information about the error:
+
+
+
+You can use the **WAHA Jobs Dashboard** at [http://localhost:3000/jobs](http://localhost:3000/jobs) for monitoring:
+
+
diff --git a/content/docs/engines/_index.md b/content/docs/engines/_index.md
index 4c1163899..0d80c6ffa 100644
--- a/content/docs/engines/_index.md
+++ b/content/docs/engines/_index.md
@@ -1,16 +1,15 @@
----
-title: "🏭 Engines"
-description: "Engines"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 400
-sidebar:
- collapsed: true
----
-
-
-Here you can find detailed information about engines.
-
-👉 Read overview on [**🏭 Engines page**]({{< relref "/docs/how-to/engines" >}}).
+---
+title: "🏭 Engines"
+description: "Engines"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 400
+sidebar:
+ collapsed: true
+---
+
+Here you can find detailed information about engines.
+
+👉 Read overview on [**🏭 Engines page**]({{< relref "/docs/how-to/engines" >}}).
diff --git a/content/docs/engines/gows.md b/content/docs/engines/gows.md
index c1d851cab..0315fcb43 100644
--- a/content/docs/engines/gows.md
+++ b/content/docs/engines/gows.md
@@ -1,30 +1,29 @@
----
-title: "GOWS"
-description: "Lightweight golang based engine"
-lead: ""
-date: 2025-01-06T08:48:45+00:00
-lastmod: 2025-01-06T08:48:45+00:00
-draft: false
-
-weight: 411
----
-
-## Overview
-
-**GOWS** 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!
-
-## Run GOWS
-
-```bash
-# Plus
-docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=GOWS" devlikeapro/waha-plus
-
-# Core
-docker run -it -e "WHATSAPP_DEFAULT_ENGINE=GOWS" devlikeapro/waha
-```
-
-## Links
-
-- [https://github.com/devlikeapro/gows](https://github.com/devlikeapro/gows)
-
+---
+title: "GOWS"
+description: "Lightweight golang based engine"
+lead: ""
+date: 2025-01-06T08:48:45+00:00
+lastmod: 2025-01-06T08:48:45+00:00
+draft: false
+
+weight: 411
+---
+
+## Overview
+
+**GOWS** 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!
+
+## Run GOWS
+
+```bash
+# Plus
+docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=GOWS" devlikeapro/waha-plus
+
+# Core
+docker run -it -e "WHATSAPP_DEFAULT_ENGINE=GOWS" devlikeapro/waha
+```
+
+## Links
+
+- [https://github.com/devlikeapro/gows](https://github.com/devlikeapro/gows)
diff --git a/content/docs/engines/noweb/index.md b/content/docs/engines/noweb/index.md
index 9ec91f2b9..f77525341 100644
--- a/content/docs/engines/noweb/index.md
+++ b/content/docs/engines/noweb/index.md
@@ -1,225 +1,232 @@
----
-title: "NOWEB"
-description: "Lightweight, fast, and flexible."
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-
-weight: 411
----
-
-## Overview
-
-**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!
-
-⚠ Read the article before using **NOWEB** engine
-[How to avoid blocking ->]({{< relref "/docs/overview/how-to-avoid-blocking" >}}).
-
-## Run NOWEB
-
-```bash
-# Plus
-docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=NOWEB" devlikeapro/waha-plus
-
-# Core
-docker run -it -e "WHATSAPP_DEFAULT_ENGINE=NOWEB" devlikeapro/waha
-
-```
-
-## Configuration
-- `markOnline: true` - send `online` **presence** when session starts (default `true`).
- - Required if you want to get notifications in your phone
- - Read more about [**✅ Presence**]({{< relref "/docs/how-to/presence" >}})
-
-
-```json
-{
- "name": "default",
- "config": {
- "noweb": {
- "markOnline": false,
- "store": {
- ...
- }
- }
- }
-}
-```
-
-## Store
-By default, **NOWEB** doesn't store any contacts, chats, or messages, so it's your application's responsibility to store them.
-It's fine for CRM cases like "appointment reminders" or "order notifications" where you don't need to store the chat history.
-
-These endpoints doesn't work by default in **NOWEB** engine.
-- [`GET /api/contacts/all`]({{< relref "/docs/how-to/contacts#get-all-contacts" >}})
-- [`GET /api/{session}/chats`]({{< relref "/docs/how-to/chats#get-all-chats" >}})
-- [`GET /api/{session}/chats/{chatId}/messages`]({{< relref "/docs/how-to/chats#get-messages-from-chat" >}})
-
-Here's how you can enable the store feature:
-
-### Enable store
-If you want to get the **contacts, chats or messages** you need to enable it explicitly by settings additional fields
-in `config` at [POST /api/sessions/]({{< relref "/docs/how-to/sessions#create-session" >}}) body.
-
-👉 Do not change the values after you scanned QR, it can lead to the loss of the chat history.
-
-```json
-{
- "name": "default",
- "config": {
- "noweb": {
- "store": {
- "enabled": true,
- "fullSync": false
- }
- }
- }
-}
-```
-
-- `config.noweb.enabled.store=true` - to enable the store feature (`false` by default)
-- `config.noweb.enabled.fullSync=true` - emulate a desktop connection (and receive more message history).
- - `fullSync=false` you'll get about 3 months of message history.
- - `fullSync=true` you'll get about 1 year of message history (max 100K messages per chat).
- -
-Or enable it on [WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}}) when **starting a new session**:
-
-
-
-
-### Get messages
-When you enabled store - you can [**Get messages from chat**]({{< relref "/docs/how-to/chats#get-messages-from-chat" >}}), it's the store with some additional fields in `_data`:
-- `reactions` - reactions to the message
-- `pollUpdates` - encrypted votes to the polls
-(not decrypted yet, please create [an issue](https://github.com/devlikeapro/waha/issues) if you wish to get the summary of polls in the response.
-- `userReceipt` - **broadcast and group messages** - the user receipt of the message (aka ACK flag, green checkmarks) for
-
-**Reactions**
-```json
-[
- {
- "id": "true_111111@c.us_AAAAAAAAAAAAAA",
- // Regular fields here,
- "_data": {
- "key": {
- "remoteJid": "111111@s.whatsapp.net",
- "fromMe": true,
- "id": "AAAAAAAAAAAAAA"
- },
- "messageTimestamp": 1718265764,
- "pushName": "Sim2",
- "broadcast": false,
- "status": 2,
- "reactions": [ // <==== Reactions
- {
- "key": {
- "remoteJid": "111111@s.whatsapp.net",
- "fromMe": true,
- "id": "11111111111111111111111111111111"
- },
- "text": "❤️",
- "senderTimestampMs": 1718265740788
- }
- ]
- }
- }
-]
-```
-
-**Poll votes**
-```json
-[
- {
- "id": "true_111111@c.us_AAAAAAAAAAAAAA",
- // Regular fields here,
- "_data": {
- "key": {
- "remoteJid": "111111@s.whatsapp.net",
- "fromMe": true,
- "id": "AAAAAAAAAAAAAA"
- },
- "messageTimestamp": 1718265764,
- "pushName": "Sim2",
- "broadcast": false,
- "status": 2,
- "pollUpdates": [
- {
- /// Encrypted poll votes
- }
- ]
- }
- }
-]
-
-```
-
-**User receipt** for group messages and `status@broadcast` messages (aka [Status]({{< relref "/docs/how-to/send-messages#status" >}}) field)
-```json
-[
- {
- "id": "true_111111111111111111111@g.us_AAAAAAAAAAAAAAAAA",
- "timestamp": 1718266155,
- "from": "111111111111111111111@g.us",
- "fromMe": true,
- "body": "Hdhf",
- "to": "111111111111111111111@g.us",
- "participant": "33333@c.us",
- "hasMedia": false,
- "ack": 1,
- "ackName": "SERVER",
- "_data": {
- "key": {
- "remoteJid": "111111111111111111111@g.us",
- "fromMe": true,
- "id": "AAAAAAAAAAAAAAAAA",
- "participant": "33333@s.whatsapp.net"
- },
- "messageTimestamp": 1718266155,
- "pushName": "Sim2",
- "broadcast": false,
- "status": 2,
- "message": {
- "conversation": "Test"
- },
- "userReceipt": [ // <<<==== User receipt
- {
- "userJid": "1111111@s.whatsapp.net",
- "readTimestamp": 1718266160 // aka ackName: READ
- },
- {
- "userJid": "22222@s.whatsapp.net",
- "receiptTimestamp": 1718266162 // aka ackName: DEVICE
- }
- ]
- }
- }
-]
-```
-
-### Get chats and contacts
-When you enabled store - you can [**Get all chats**]({{< relref "/docs/how-to/chats#get-all-chats" >}}) and [**Get all contacts**]({{< relref "/docs/how-to/contacts#get-all-contacts" >}}).
-
-Here's some ids you can meet there:
-- `123123123@c.us` **Phone numbers** accounts - international phone number without + at the start and add `@c.us` at the end.
- For phone number `12132132131` the `chatId` is `12132132131@c.us`
-- `123123123@s.whatsapp.net` can also appear in **internal data for NOWEB**, just convert it to `@c.us` to work
- with that properly. Kindly don't use it in `chatId` when sending messages
-- `12312312123133@g.us` - **Groups** uses random number with `@g.us` at the end.
-- `123123123@lid` - **is a hidden user ID**, each user has a regular ID along with a hidden one. WhatsApp added that type of ID along with communities functionality.
-- `123123123@newsletter` - for [**📰 WhatsApp Channels**]({{< relref "/docs/how-to/channels" >}}).
-
-### Store under the hood
-Under the hood, the **NOWEB** stores the session data in database based on [**🗄️ Storage**]({{< relref "/docs/how-to/storages" >}}) you choose - either in files or in MongoDB.
-
-- For [File local storage]({{< relref "/docs/how-to/storages#sessions---local-files" >}}) it creates sqlite3 database at `.sessions/noweb/{sessionName}/store.sqlite3` store with `chats`, `contacts`, `messages` tables with proper indexes.
- - 👉 **We don't recommend opening it manually when the session is running**, even for reading, it can lead to the loss of the chat history.
-- For [MongoDB]({{< relref "/docs/how-to/storages#sessions---mongodb" >}}) in `waha_{engine}_{sessionName}` it creates `chats`, `contacts`, `messages` collections with proper indexes.
- - 👉 You can safely READ from the database, but **DO NOT WRITE** to it manually, it can lead to the loss of the chat history.
-
-
-## Links
-
-- [https://github.com/devlikeapro/Baileys](https://github.com/devlikeapro/Baileys)
-
+---
+title: "NOWEB"
+description: "Lightweight, fast, and flexible."
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+
+weight: 411
+---
+
+## Overview
+
+**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!
+
+⚠ Read the article before using **NOWEB** engine
+[How to avoid blocking ->]({{< relref "/docs/overview/how-to-avoid-blocking" >}}).
+
+## Run NOWEB
+
+```bash
+# Plus
+docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=NOWEB" devlikeapro/waha-plus
+
+# Core
+docker run -it -e "WHATSAPP_DEFAULT_ENGINE=NOWEB" devlikeapro/waha
+
+```
+
+## Configuration
+
+- `markOnline: true` - send `online` **presence** when session starts (default `true`).
+ - Required if you want to get notifications in your phone
+ - Read more about [**✅ Presence**]({{< relref "/docs/how-to/presence" >}})
+
+```json
+{
+ "name": "default",
+ "config": {
+ "noweb": {
+ "markOnline": false,
+ "store": {
+ ...
+ }
+ }
+ }
+}
+```
+
+## Store
+
+By default, **NOWEB** doesn't store any contacts, chats, or messages, so it's your application's responsibility to store them.
+It's fine for CRM cases like "appointment reminders" or "order notifications" where you don't need to store the chat history.
+
+These endpoints doesn't work by default in **NOWEB** engine.
+
+- [`GET /api/contacts/all`]({{< relref "/docs/how-to/contacts#get-all-contacts" >}})
+- [`GET /api/{session}/chats`]({{< relref "/docs/how-to/chats#get-all-chats" >}})
+- [`GET /api/{session}/chats/{chatId}/messages`]({{< relref "/docs/how-to/chats#get-messages-from-chat" >}})
+
+Here's how you can enable the store feature:
+
+### Enable store
+
+If you want to get the **contacts, chats or messages** you need to enable it explicitly by settings additional fields
+in `config` at [POST /api/sessions/]({{< relref "/docs/how-to/sessions#create-session" >}}) body.
+
+👉 Do not change the values after you scanned QR, it can lead to the loss of the chat history.
+
+```json
+{
+ "name": "default",
+ "config": {
+ "noweb": {
+ "store": {
+ "enabled": true,
+ "fullSync": false
+ }
+ }
+ }
+}
+```
+
+- `config.noweb.enabled.store=true` - to enable the store feature (`false` by default)
+- `config.noweb.enabled.fullSync=true` - emulate a desktop connection (and receive more message history).
+ - `fullSync=false` you'll get about 3 months of message history.
+ - `fullSync=true` you'll get about 1 year of message history (max 100K messages per chat).
+ - Or enable it on [WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}}) when **starting a new session**:
+ 
+
+### Get messages
+
+When you enabled store - you can [**Get messages from chat**]({{< relref "/docs/how-to/chats#get-messages-from-chat" >}}), it's the store with some additional fields in `_data`:
+
+- `reactions` - reactions to the message
+- `pollUpdates` - encrypted votes to the polls
+ (not decrypted yet, please create [an issue](https://github.com/devlikeapro/waha/issues) if you wish to get the summary of polls in the response.
+- `userReceipt` - **broadcast and group messages** - the user receipt of the message (aka ACK flag, green checkmarks) for
+
+**Reactions**
+
+```json
+[
+ {
+ "id": "true_111111@c.us_AAAAAAAAAAAAAA",
+ // Regular fields here,
+ "_data": {
+ "key": {
+ "remoteJid": "111111@s.whatsapp.net",
+ "fromMe": true,
+ "id": "AAAAAAAAAAAAAA"
+ },
+ "messageTimestamp": 1718265764,
+ "pushName": "Sim2",
+ "broadcast": false,
+ "status": 2,
+ "reactions": [
+ // <==== Reactions
+ {
+ "key": {
+ "remoteJid": "111111@s.whatsapp.net",
+ "fromMe": true,
+ "id": "11111111111111111111111111111111"
+ },
+ "text": "❤️",
+ "senderTimestampMs": 1718265740788
+ }
+ ]
+ }
+ }
+]
+```
+
+**Poll votes**
+
+```json
+[
+ {
+ "id": "true_111111@c.us_AAAAAAAAAAAAAA",
+ // Regular fields here,
+ "_data": {
+ "key": {
+ "remoteJid": "111111@s.whatsapp.net",
+ "fromMe": true,
+ "id": "AAAAAAAAAAAAAA"
+ },
+ "messageTimestamp": 1718265764,
+ "pushName": "Sim2",
+ "broadcast": false,
+ "status": 2,
+ "pollUpdates": [
+ {
+ /// Encrypted poll votes
+ }
+ ]
+ }
+ }
+]
+```
+
+**User receipt** for group messages and `status@broadcast` messages (aka [Status]({{< relref "/docs/how-to/send-messages#status" >}}) field)
+
+```json
+[
+ {
+ "id": "true_111111111111111111111@g.us_AAAAAAAAAAAAAAAAA",
+ "timestamp": 1718266155,
+ "from": "111111111111111111111@g.us",
+ "fromMe": true,
+ "body": "Hdhf",
+ "to": "111111111111111111111@g.us",
+ "participant": "33333@c.us",
+ "hasMedia": false,
+ "ack": 1,
+ "ackName": "SERVER",
+ "_data": {
+ "key": {
+ "remoteJid": "111111111111111111111@g.us",
+ "fromMe": true,
+ "id": "AAAAAAAAAAAAAAAAA",
+ "participant": "33333@s.whatsapp.net"
+ },
+ "messageTimestamp": 1718266155,
+ "pushName": "Sim2",
+ "broadcast": false,
+ "status": 2,
+ "message": {
+ "conversation": "Test"
+ },
+ "userReceipt": [
+ // <<<==== User receipt
+ {
+ "userJid": "1111111@s.whatsapp.net",
+ "readTimestamp": 1718266160 // aka ackName: READ
+ },
+ {
+ "userJid": "22222@s.whatsapp.net",
+ "receiptTimestamp": 1718266162 // aka ackName: DEVICE
+ }
+ ]
+ }
+ }
+]
+```
+
+### Get chats and contacts
+
+When you enabled store - you can [**Get all chats**]({{< relref "/docs/how-to/chats#get-all-chats" >}}) and [**Get all contacts**]({{< relref "/docs/how-to/contacts#get-all-contacts" >}}).
+
+Here's some ids you can meet there:
+
+- `123123123@c.us` **Phone numbers** accounts - international phone number without + at the start and add `@c.us` at the end.
+ For phone number `12132132131` the `chatId` is `12132132131@c.us`
+- `123123123@s.whatsapp.net` can also appear in **internal data for NOWEB**, just convert it to `@c.us` to work
+ with that properly. Kindly don't use it in `chatId` when sending messages
+- `12312312123133@g.us` - **Groups** uses random number with `@g.us` at the end.
+- `123123123@lid` - **is a hidden user ID**, each user has a regular ID along with a hidden one. WhatsApp added that type of ID along with communities functionality.
+- `123123123@newsletter` - for [**📰 WhatsApp Channels**]({{< relref "/docs/how-to/channels" >}}).
+
+### Store under the hood
+
+Under the hood, the **NOWEB** stores the session data in database based on [**🗄️ Storage**]({{< relref "/docs/how-to/storages" >}}) you choose - either in files or in MongoDB.
+
+- For [File local storage]({{< relref "/docs/how-to/storages#sessions---local-files" >}}) it creates sqlite3 database at `.sessions/noweb/{sessionName}/store.sqlite3` store with `chats`, `contacts`, `messages` tables with proper indexes.
+ - 👉 **We don't recommend opening it manually when the session is running**, even for reading, it can lead to the loss of the chat history.
+- For [MongoDB]({{< relref "/docs/how-to/storages#sessions---mongodb" >}}) in `waha_{engine}_{sessionName}` it creates `chats`, `contacts`, `messages` collections with proper indexes.
+ - 👉 You can safely READ from the database, but **DO NOT WRITE** to it manually, it can lead to the loss of the chat history.
+
+## Links
+
+- [https://github.com/devlikeapro/Baileys](https://github.com/devlikeapro/Baileys)
diff --git a/content/docs/engines/venom.md b/content/docs/engines/venom.md
index 97c94c34a..b323438dc 100644
--- a/content/docs/engines/venom.md
+++ b/content/docs/engines/venom.md
@@ -1,41 +1,39 @@
----
-title: "VENOM"
-description: "DEPRECATED"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-
-weight: 419
----
-
-## Overview
-
-{{< callout context="caution" title="VENOM engine is DEPRECATED" icon="outline/alert-triangle" >}}
-
-Use
-[**GOWS**]({{< relref "/docs/engines/gows" >}}),
-[**WEBJS**]({{< relref "/docs/engines/webjs" >}}),
-or
-[**NOWEB**]({{< relref "/docs/engines/noweb" >}})
-instead.
-{{< /callout >}}
-
-
-It's a high-performance system developed with JavaScript to create a bot for WhatsApp.
-It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocked.
-
-## Run VENOM
-
-```bash
-# Core
-docker run -it -e "WHATSAPP_DEFAULT_ENGINE=VENOM" devlikeapro/waha
-
-# Plus
-docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=VENOM" devlikeapro/waha-plus
-```
-
-## Links
-
-- [https://github.com/devlikeapro/venom](https://github.com/devlikeapro/venom)
-
+---
+title: "VENOM"
+description: "DEPRECATED"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+
+weight: 419
+---
+
+## Overview
+
+{{< callout context="caution" title="VENOM engine is DEPRECATED" icon="outline/alert-triangle" >}}
+
+Use
+[**GOWS**]({{< relref "/docs/engines/gows" >}}),
+[**WEBJS**]({{< relref "/docs/engines/webjs" >}}),
+or
+[**NOWEB**]({{< relref "/docs/engines/noweb" >}})
+instead.
+{{< /callout >}}
+
+It's a high-performance system developed with JavaScript to create a bot for WhatsApp.
+It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocked.
+
+## Run VENOM
+
+```bash
+# Core
+docker run -it -e "WHATSAPP_DEFAULT_ENGINE=VENOM" devlikeapro/waha
+
+# Plus
+docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=VENOM" devlikeapro/waha-plus
+```
+
+## Links
+
+- [https://github.com/devlikeapro/venom](https://github.com/devlikeapro/venom)
diff --git a/content/docs/engines/webjs.md b/content/docs/engines/webjs.md
index d4851b8b8..da69439c4 100644
--- a/content/docs/engines/webjs.md
+++ b/content/docs/engines/webjs.md
@@ -1,40 +1,42 @@
----
-title: "WEBJS"
-description: "Stable, reliable, and predictable."
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-
-weight: 410
----
-
-## Overview
-
-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.
-
-👉 **WAHA** uses **WhatsApp WebJS** engine by default (if you don't set `WHATSAPP_DEFAULT_ENGINE` environment variable to
-another engine).
-
-⚠ Read the article before using **WEBJS** engine
-[How to avoid blocking ->]({{< relref "/docs/overview/how-to-avoid-blocking" >}}).
-
-## Run WEBJS
-
-```bash
-# Plus
-docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha-plus
-
-# Core
-docker run -it -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha
-```
-
-## Configuration
-You can use some of the following environment variables to configure the [**WEBJS**]({{< relref "/docs/how-to/engines#webjs" >}}) session:
-- `WAHA_WEBJS_CACHE_TYPE=local` - enable cache (aka use the latest version) for the **web page** in the browser. By default, it's `none` (no cache)
-- `WAHA_WEBJS_WEB_VERSION=2.3000.XXXX` - set the version of the WhatsApp Web to use. By default, we're using the latest compatible version. Only works with `local` cache type.
-
-## Links
-
-- [https://github.com/devlikeapro/whatsapp-web.js](https://github.com/devlikeapro/whatsapp-web.js)
+---
+title: "WEBJS"
+description: "Stable, reliable, and predictable."
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+
+weight: 410
+---
+
+## Overview
+
+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.
+
+👉 **WAHA** uses **WhatsApp WebJS** engine by default (if you don't set `WHATSAPP_DEFAULT_ENGINE` environment variable to
+another engine).
+
+⚠ Read the article before using **WEBJS** engine
+[How to avoid blocking ->]({{< relref "/docs/overview/how-to-avoid-blocking" >}}).
+
+## Run WEBJS
+
+```bash
+# Plus
+docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha-plus
+
+# Core
+docker run -it -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha
+```
+
+## Configuration
+
+You can use some of the following environment variables to configure the [**WEBJS**]({{< relref "/docs/how-to/engines#webjs" >}}) session:
+
+- `WAHA_WEBJS_CACHE_TYPE=local` - enable cache (aka use the latest version) for the **web page** in the browser. By default, it's `none` (no cache)
+- `WAHA_WEBJS_WEB_VERSION=2.3000.XXXX` - set the version of the WhatsApp Web to use. By default, we're using the latest compatible version. Only works with `local` cache type.
+
+## Links
+
+- [https://github.com/devlikeapro/whatsapp-web.js](https://github.com/devlikeapro/whatsapp-web.js)
diff --git a/content/docs/how-to/_index.md b/content/docs/how-to/_index.md
index 48d527171..6c6c66f91 100644
--- a/content/docs/how-to/_index.md
+++ b/content/docs/how-to/_index.md
@@ -1,17 +1,16 @@
----
-title: "🔍 How-to guides"
-description: "How-to guides"
-lead: ""
-date: 2020-10-06T08:49:15+00:00
-lastmod: 2020-10-06T08:49:15+00:00
-draft: false
-weight: 200
-slug: how-to
-sidebar:
- collapsed: true
----
-
-How-to guides for **WAHA** - WhatsApp API.
-
-Discover how to use the WAHA, what you can do with it, and how to configure it right for your needs.
-
+---
+title: "🔍 How-to guides"
+description: "How-to guides"
+lead: ""
+date: 2020-10-06T08:49:15+00:00
+lastmod: 2020-10-06T08:49:15+00:00
+draft: false
+weight: 200
+slug: how-to
+sidebar:
+ collapsed: true
+---
+
+How-to guides for **WAHA** - WhatsApp API.
+
+Discover how to use the WAHA, what you can do with it, and how to configure it right for your needs.
diff --git a/content/docs/how-to/calls/features-events.md b/content/docs/how-to/calls/features-events.md
index a37eef25f..99e24faf4 100644
--- a/content/docs/how-to/calls/features-events.md
+++ b/content/docs/how-to/calls/features-events.md
@@ -1,10 +1,10 @@
-
-{{< details "**📞 Calls - Events**" >}}
-
-| **Events** | WEBJS | NOWEB | GOWS |
-|-----------------|:-----:|:-----:|:-----|
-| `call.received` | ✔️ | ✔️ | |
-| `call.accepted` | | ✔️ | |
-| `call.rejected` | | ✔️ | |
-
-{{< /details >}}
+
+{{< details "**📞 Calls - Events**" >}}
+
+| **Events** | WEBJS | NOWEB | GOWS |
+| --------------- | :---: | :---: | :--- |
+| `call.received` | ✔️ | ✔️ | |
+| `call.accepted` | | ✔️ | |
+| `call.rejected` | | ✔️ | |
+
+{{< /details >}}
diff --git a/content/docs/how-to/calls/index.md b/content/docs/how-to/calls/index.md
index bc39d005b..804f57b83 100644
--- a/content/docs/how-to/calls/index.md
+++ b/content/docs/how-to/calls/index.md
@@ -1,40 +1,40 @@
----
-title: "📞 Calls"
-description: "Calls"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 293
-slug: calls
-images: [ "whatsapp-phone-call.png" ]
----
-You can receive events about calls in WhatsApp using API!
-
-
-
-## Features
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/calls/features-events.md" >}}
-
-## Events
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
-
-### call.received
-
-{{< include file="content/docs/how-to/calls/webhooks-call-received.md" >}}
-
-### call.accepted
-
-{{< include file="content/docs/how-to/calls/webhooks-call-accepted.md" >}}
-
-### call.rejected
-
-{{< include file="content/docs/how-to/calls/webhooks-call-rejected.md" >}}
-
-
-
+---
+title: "📞 Calls"
+description: "Calls"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 293
+slug: calls
+images: ["whatsapp-phone-call.png"]
+---
+
+You can receive events about calls in WhatsApp using API!
+
+
-
-## Features
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/chats/features.md" >}}
-
-{{< include file="content/docs/how-to/chats/features-events.md" >}}
-
-## API
-Parameters in path that you can find in below endpoints:
-- `{session}` - use the session name for Whatsapp instance that you created with `POST /api/sessions` endpoint
-- `{chatId}` - chat id in format `123123123123@[c.us|g.us]`, `c.us` for direct chats and `g.us` for groups.
-
-### Get all chats
-Get all chats
-```http request
-GET /api/{session}/chats
-```
-
-#### Chats Pagination
-If you see timeout or the request takes too long - consider using `limit` parameter to get chats in smaller chunks
-
-```http request
-GET /api/{session}/chats?limit=100&offset=0&sortBy=messageTimestamp&sortOrder=desc
-```
-
-- `limit=100` - limit the number of chats to return
-- `offset=0` - skip the number of chats from the start
-- `sortBy={field}` - sort by field
- - `sortBy=messageTimestamp` - sort by last message timestamp
- - `sortBy=id` - sort by chat id
- - `sortBy=name` - sort by chat name
-- `sortOrder=desc|asc` - sort order
- - `desc` - descending order (New first, A-Z)
- - `asc` - ascending order (Old first, Z-A)
-
-### Get chats overview
-Get chats "overview" - the API that almost all
-[**Chat UI**]({{< relref "/docs/how-to/dashboard#chat-ui" >}})
-client needs!
-
-```http request
-GET /api/{session}/chats/overview?limit=20&offset=0
-```
-
-**Query Parameters**:
-- `limit=100` - limit the number of chats to return
-- `offset=0` - skip the number of chats from the start
-- `ids=11111&ids=9999@c.us` - optional, filter result by chat id or phone number
-
-
-{{< callout context="tip" icon="outline/hand-finger-right" >}}
-Use `POST` request if you have a lot of chats (>400) in `ids` filter
-{{< /callout >}}
-
-```http request
-POST /api/{session}/chats/overview
-```
-
-```json { title="Request (POST)" }
-{
- "pagination": {
- "limit": 20,
- "offset": 0
- },
- "filter": {
- "ids": ["111111@c.us"]
- }
-}
-```
-
-**Response** contains the main info you need to show in the chat list:
-1. `id` - chat id
-2. `name` - chat name (if any)
-3. `picture` - chat picture (if any)
-4. `lastMessage` - last message in the chat (if any).
-5. `_chat` - the structure depends on engine you're using
-
-⚠️ `lastMessage` doesn't have media attachments, you need to [get message by id]({{< relref "#get-message-by-id" >}}) to get media attachments.
-
-```json { title="Response" }
-[
- {
- "id": "12312l123@c.us",
- "name": "John Doe",
- "picture": "https://example.com/picture.jpg",
- "lastMessage": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "from": "11111111111@c.us",
- "fromMe": true,
- "to": "11111111111@c.us",
- "body": "Hi there!",
- ...
- },
- "_chat": {
- ...
- }
- }
-]
-
-```
-
-
-### Get chat picture
-Get chat picture (avatar, profile picture, group image) by chat id
-```http request
-GET /api/{session}/chats/{chatId}/picture[?refresh=True]
-```
-
-**Query**
-- `refresh=True` - force refresh the picture. By default, we cache it 24 hours. Do not frequently refresh the picture to avoid `rate-overlimit` error.
-
-```json { title="Response" }
-{
- "url": "https://example.com/picture.jpg"
-}
-```
-- `url` can be `null` if there's no picture for the chat
-
-### Archive chat
-
-Use the method to archive chat
-```http request
-POST /api/{session}/chats/{chatId}/archive
-```
-
-### Unarchive chat
-
-Use the method to unarchive chat
-
-```http request
-POST /api/{session}/chats/{chatId}/unarchive
-```
-
-### Unread chat
-Mark chat as unread
-
-```http request
-POST /api/{session}/chats/{chatId}/unread
-```
-
-### Delete chat
-Use the method to delete chat
-
-```http request
-DELETE /api/{session}/chats/{chatId}
-```
-
-### Read messages
-You can mark all **unread** messages in the chat as **read** (double blue checkmark) using one query:
-
-It'll find all unread messages in the chat and mark them as read.
-
-```http request
-POST /api/{SESSION}/chats/{chatId}/messages/read
-```
-
-```json { title="Body" }
-{}
-```
-
-```json { title="Response" }
-{
- "ids": [
- "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA",
- "true_99999999999@c.us_AAAAAAAAAAAAAAAAAAAA"
- ]
-}
-```
-- `ids` - list of message ids that were marked as read
-
-{{< callout context="note" icon="outline/info-circle" >}}
-👉 **NOWEB**: Please make sure to [**🏭 Enable NOWEB Store before using this API**]({{< relref "/docs/engines/NOWEB#store" >}})!
-{{< /callout >}}
-
-Optionally, you can control how many messages you need to read:
-
-```json { title="Body" }
-{
- "messages": 30,
- "days": 7
-}
-```
-- `messages: 30` - how many messages you need to read
- - defaults is `30` for **direct chats** and `100` for **groups**
-- `days: 7` - how many days you need to read
- - default is `7`
-
-For more granular control, you can use the
-[**POST /api/sendSeen**]({{< relref "/docs/how-to/send-messages#send-seen" >}})
-API.
-
-### Get messages
-Get **10 messages** from the chat
-
-```http request
-GET /api/{session}/chats/{chatId}/messages?limit=10
-```
-
-Available parameters:
-- `downloadMedia=true` - download media files (images, files) or not
-- `chatId=123@c.us` - chatId, phone number
- - `chatId=all` - get messages from all chats (works on [**NOWEB**]({{< relref "/docs/how-to/engines#noweb" >}}) engine only)
-- `limit=100` - limit the number of chats to return
-- `offset=0` - skip the number of chats from the start
-- `filter.timestamp.lte=1727745026` - filter messages by timestamp less than or equal to `1727745026`
-- `filter.timestamp.gte=1727745026` - filter messages by timestamp greater than or equal to `1727745026`
-- `filter.fromMe=false` - filter messages from me (by default, shows all messages)
-- `filter.ack=DEVICE` - filter messages by ack
- - `ERROR, ack: -1` - error occurred
- - `PENDING, ack: 0` - message is pending
- - `SERVER, ack: 1` - message was sent to server
- - `DEVICE, ack: 2` - message was sent to the device
- - `READ, ack: 3` - recipient read message
- - `PLAYED, ack: 4` - recipient played the message
-
-Get **10 messages** from the chat, skip **downloading media** (images, files)
-
-```http request
-GET /api/{session}/chats/{chatId}/messages?limit=10&downloadMedia=false
-```
-
-```json
-[
- {
- "id": "false_123123@c.us_AAAAAA",
- "timestamp": 1727745026,
- "from": "123123@c.us",
- "fromMe": false,
- "body": "I'm good!",
- "hasMedia": false,
- "ack": 3,
- "ackName": "READ",
- "replyTo": null,
- "_data": {
- ... // Raw Engine Data
- }
- }
-]
-```
-
-Get **10 messages** from 1727745026 timestamp, not from me
-
-```http request
-GET /api/{session}/chats/{chatId}/messages?limit=10&filter.timestamp.gte=1727745026&filter.fromMe=false
-```
-
-👉 If you have more messages - you can set `offset` flag
-(increase it always for `limit` amount, even if you get less messages)
-```http request
-GET /api/{session}/chats/{chatId}/messages?limit=10&offset=10&filter.timestamp.gte=1727745026&filter.fromMe=false
-```
-
-
-### Get message by id
-Get message by id
-```http request
-GET /api/{session}/chats/{chatId}/messages/{messageId}?downloadMedia=true
-```
-
-```json { title="Response" }
-{
- "id": "false_123123@c.us_AAAAAA",
- "timestamp": 1727745026,
- "from": "123123@c.us",
- "fromMe": false,
- "body": "I'm good!",
- "hasMedia": false,
- "ack": 3,
- "ackName": "READ",
- "replyTo": null,
- "_data": {
- ... // Raw Engine Data
- }
-}
-```
-
-- `chatId` - in format `123123123@c.us`
-- `messageId` - must be in format `{true|false}_213213@c.us_AAAAAAA`)
-- `downloadMedia` - download media files (images, files) or not
-
-### Pin message
-
-```http request
-POST /api/{session}/chats/{chatId}/messages/{messageId}/pin
-```
-
-```json { title="Body" }
-{
- "duration": 86400
-}
-```
-
-- 24 hours - `duration=86400`
-- 7 days - `duration=604800`
-- 30 days - `duration=2592000`
-
-```json { title="Response" }
-{
- "success": true
-}
-```
-
-### Unpin message
-
-```http request
-POST /api/{session}/chats/{chatId}/messages/{messageId}/unpin
-```
-
-```json { title="Response" }
-{
- "success": true
-}
-```
-
-### Edit message
-You can edit **text** messages or **"caption"** in media messages.
-
-```http request
-PUT /api/{session}/chats/{chatId}/messages/{messageId}
-```
-👉 Remember to escape `@` in `chatId` and `messageId` with `%40`.
-
-So if you want to edit `true_123@c.us_AAA` message in `123@c.us` chat you need to send request to:
-```http request
-PUT /api/{session}/chats/123%40c.us/messages/true_123%40c.us_AAA
-```
-
-```json { title="Body" }
-{
- "text": "Hello, world!"
-}
-```
-
-### Delete message
-You can delete messages from the chat.
-
-```http request
-DELETE /api/{session}/chats/{chatId}/messages/{messageId}
-```
-
-👉 Remember to escape `@` in `chatId` and `messageId` with `%40`.
-
-So if you want to delete `true_123@c.us_AAA` message in `123@c.us` chat you need to send request to:
-```http request
-DELETE /api/{session}/chats/123%40c.us/messages/true_123%40c.us_AAA
-```
-
-### Delete all messages
-Use the method to clear all messages from the chat
-
-```http request
-DELETE /api/{session}/chats/{chatId}/messages
-```
-
-## Events
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
-
-### chat.archive
-{{< include file="content/docs/how-to/chats/webhooks-chat-archive.md" >}}
+---
+title: "💬 Chats"
+description: "Chats"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 227
+images: ["chats.jpg"]
+slug: chats
+---
+
+Chats methods.
+
+
+
+## Features
+
+Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
+
+{{< include file="content/docs/how-to/chats/features.md" >}}
+
+{{< include file="content/docs/how-to/chats/features-events.md" >}}
+
+## API
+
+Parameters in path that you can find in below endpoints:
+
+- `{session}` - use the session name for Whatsapp instance that you created with `POST /api/sessions` endpoint
+- `{chatId}` - chat id in format `123123123123@[c.us|g.us]`, `c.us` for direct chats and `g.us` for groups.
+
+### Get all chats
+
+Get all chats
+
+```http request
+GET /api/{session}/chats
+```
+
+#### Chats Pagination
+
+If you see timeout or the request takes too long - consider using `limit` parameter to get chats in smaller chunks
+
+```http request
+GET /api/{session}/chats?limit=100&offset=0&sortBy=messageTimestamp&sortOrder=desc
+```
+
+- `limit=100` - limit the number of chats to return
+- `offset=0` - skip the number of chats from the start
+- `sortBy={field}` - sort by field
+ - `sortBy=messageTimestamp` - sort by last message timestamp
+ - `sortBy=id` - sort by chat id
+ - `sortBy=name` - sort by chat name
+- `sortOrder=desc|asc` - sort order
+ - `desc` - descending order (New first, A-Z)
+ - `asc` - ascending order (Old first, Z-A)
+
+### Get chats overview
+
+Get chats "overview" - the API that almost all
+[**Chat UI**]({{< relref "/docs/how-to/dashboard#chat-ui" >}})
+client needs!
+
+```http request
+GET /api/{session}/chats/overview?limit=20&offset=0
+```
+
+**Query Parameters**:
+
+- `limit=100` - limit the number of chats to return
+- `offset=0` - skip the number of chats from the start
+- `ids=11111&ids=9999@c.us` - optional, filter result by chat id or phone number
+
+{{< callout context="tip" icon="outline/hand-finger-right" >}}
+Use `POST` request if you have a lot of chats (>400) in `ids` filter
+{{< /callout >}}
+
+```http request
+POST /api/{session}/chats/overview
+```
+
+```json { title="Request (POST)" }
+{
+ "pagination": {
+ "limit": 20,
+ "offset": 0
+ },
+ "filter": {
+ "ids": ["111111@c.us"]
+ }
+}
+```
+
+**Response** contains the main info you need to show in the chat list:
+
+1. `id` - chat id
+2. `name` - chat name (if any)
+3. `picture` - chat picture (if any)
+4. `lastMessage` - last message in the chat (if any).
+5. `_chat` - the structure depends on engine you're using
+
+⚠️ `lastMessage` doesn't have media attachments, you need to [get message by id]({{< relref "#get-message-by-id" >}}) to get media attachments.
+
+```json { title="Response" }
+[
+ {
+ "id": "12312l123@c.us",
+ "name": "John Doe",
+ "picture": "https://example.com/picture.jpg",
+ "lastMessage": {
+ "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "timestamp": 1667561485,
+ "from": "11111111111@c.us",
+ "fromMe": true,
+ "to": "11111111111@c.us",
+ "body": "Hi there!",
+ ...
+ },
+ "_chat": {
+ ...
+ }
+ }
+]
+
+```
+
+### Get chat picture
+
+Get chat picture (avatar, profile picture, group image) by chat id
+
+```http request
+GET /api/{session}/chats/{chatId}/picture[?refresh=True]
+```
+
+**Query**
+
+- `refresh=True` - force refresh the picture. By default, we cache it 24 hours. Do not frequently refresh the picture to avoid `rate-overlimit` error.
+
+```json { title="Response" }
+{
+ "url": "https://example.com/picture.jpg"
+}
+```
+
+- `url` can be `null` if there's no picture for the chat
+
+### Archive chat
+
+Use the method to archive chat
+
+```http request
+POST /api/{session}/chats/{chatId}/archive
+```
+
+### Unarchive chat
+
+Use the method to unarchive chat
+
+```http request
+POST /api/{session}/chats/{chatId}/unarchive
+```
+
+### Unread chat
+
+Mark chat as unread
+
+```http request
+POST /api/{session}/chats/{chatId}/unread
+```
+
+### Delete chat
+
+Use the method to delete chat
+
+```http request
+DELETE /api/{session}/chats/{chatId}
+```
+
+### Read messages
+
+You can mark all **unread** messages in the chat as **read** (double blue checkmark) using one query:
+
+It'll find all unread messages in the chat and mark them as read.
+
+```http request
+POST /api/{SESSION}/chats/{chatId}/messages/read
+```
+
+```json { title="Body" }
+{}
+```
+
+```json { title="Response" }
+{
+ "ids": ["false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA", "true_99999999999@c.us_AAAAAAAAAAAAAAAAAAAA"]
+}
+```
+
+- `ids` - list of message ids that were marked as read
+
+{{< callout context="note" icon="outline/info-circle" >}}
+👉 **NOWEB**: Please make sure to [**🏭 Enable NOWEB Store before using this API**]({{< relref "/docs/engines/NOWEB#store" >}})!
+{{< /callout >}}
+
+Optionally, you can control how many messages you need to read:
+
+```json { title="Body" }
+{
+ "messages": 30,
+ "days": 7
+}
+```
+
+- `messages: 30` - how many messages you need to read
+ - defaults is `30` for **direct chats** and `100` for **groups**
+- `days: 7` - how many days you need to read
+ - default is `7`
+
+For more granular control, you can use the
+[**POST /api/sendSeen**]({{< relref "/docs/how-to/send-messages#send-seen" >}})
+API.
+
+### Get messages
+
+Get **10 messages** from the chat
+
+```http request
+GET /api/{session}/chats/{chatId}/messages?limit=10
+```
+
+Available parameters:
+
+- `downloadMedia=true` - download media files (images, files) or not
+- `chatId=123@c.us` - chatId, phone number
+ - `chatId=all` - get messages from all chats (works on [**NOWEB**]({{< relref "/docs/how-to/engines#noweb" >}}) engine only)
+- `limit=100` - limit the number of chats to return
+- `offset=0` - skip the number of chats from the start
+- `filter.timestamp.lte=1727745026` - filter messages by timestamp less than or equal to `1727745026`
+- `filter.timestamp.gte=1727745026` - filter messages by timestamp greater than or equal to `1727745026`
+- `filter.fromMe=false` - filter messages from me (by default, shows all messages)
+- `filter.ack=DEVICE` - filter messages by ack
+ - `ERROR, ack: -1` - error occurred
+ - `PENDING, ack: 0` - message is pending
+ - `SERVER, ack: 1` - message was sent to server
+ - `DEVICE, ack: 2` - message was sent to the device
+ - `READ, ack: 3` - recipient read message
+ - `PLAYED, ack: 4` - recipient played the message
+
+Get **10 messages** from the chat, skip **downloading media** (images, files)
+
+```http request
+GET /api/{session}/chats/{chatId}/messages?limit=10&downloadMedia=false
+```
+
+```json
+[
+ {
+ "id": "false_123123@c.us_AAAAAA",
+ "timestamp": 1727745026,
+ "from": "123123@c.us",
+ "fromMe": false,
+ "body": "I'm good!",
+ "hasMedia": false,
+ "ack": 3,
+ "ackName": "READ",
+ "replyTo": null,
+ "_data": {
+ ... // Raw Engine Data
+ }
+ }
+]
+```
+
+Get **10 messages** from 1727745026 timestamp, not from me
+
+```http request
+GET /api/{session}/chats/{chatId}/messages?limit=10&filter.timestamp.gte=1727745026&filter.fromMe=false
+```
+
+👉 If you have more messages - you can set `offset` flag
+(increase it always for `limit` amount, even if you get less messages)
+
+```http request
+GET /api/{session}/chats/{chatId}/messages?limit=10&offset=10&filter.timestamp.gte=1727745026&filter.fromMe=false
+```
+
+### Get message by id
+
+Get message by id
+
+```http request
+GET /api/{session}/chats/{chatId}/messages/{messageId}?downloadMedia=true
+```
+
+```json { title="Response" }
+{
+ "id": "false_123123@c.us_AAAAAA",
+ "timestamp": 1727745026,
+ "from": "123123@c.us",
+ "fromMe": false,
+ "body": "I'm good!",
+ "hasMedia": false,
+ "ack": 3,
+ "ackName": "READ",
+ "replyTo": null,
+ "_data": {
+ ... // Raw Engine Data
+ }
+}
+```
+
+- `chatId` - in format `123123123@c.us`
+- `messageId` - must be in format `{true|false}_213213@c.us_AAAAAAA`)
+- `downloadMedia` - download media files (images, files) or not
+
+### Pin message
+
+```http request
+POST /api/{session}/chats/{chatId}/messages/{messageId}/pin
+```
+
+```json { title="Body" }
+{
+ "duration": 86400
+}
+```
+
+- 24 hours - `duration=86400`
+- 7 days - `duration=604800`
+- 30 days - `duration=2592000`
+
+```json { title="Response" }
+{
+ "success": true
+}
+```
+
+### Unpin message
+
+```http request
+POST /api/{session}/chats/{chatId}/messages/{messageId}/unpin
+```
+
+```json { title="Response" }
+{
+ "success": true
+}
+```
+
+### Edit message
+
+You can edit **text** messages or **"caption"** in media messages.
+
+```http request
+PUT /api/{session}/chats/{chatId}/messages/{messageId}
+```
+
+👉 Remember to escape `@` in `chatId` and `messageId` with `%40`.
+
+So if you want to edit `true_123@c.us_AAA` message in `123@c.us` chat you need to send request to:
+
+```http request
+PUT /api/{session}/chats/123%40c.us/messages/true_123%40c.us_AAA
+```
+
+```json { title="Body" }
+{
+ "text": "Hello, world!"
+}
+```
+
+### Delete message
+
+You can delete messages from the chat.
+
+```http request
+DELETE /api/{session}/chats/{chatId}/messages/{messageId}
+```
+
+👉 Remember to escape `@` in `chatId` and `messageId` with `%40`.
+
+So if you want to delete `true_123@c.us_AAA` message in `123@c.us` chat you need to send request to:
+
+```http request
+DELETE /api/{session}/chats/123%40c.us/messages/true_123%40c.us_AAA
+```
+
+### Delete all messages
+
+Use the method to clear all messages from the chat
+
+```http request
+DELETE /api/{session}/chats/{chatId}/messages
+```
+
+## Events
+
+Read more about
+[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
+
+### chat.archive
+
+{{< include file="content/docs/how-to/chats/webhooks-chat-archive.md" >}}
diff --git a/content/docs/how-to/chats/webhooks-chat-archive.md b/content/docs/how-to/chats/webhooks-chat-archive.md
index 73301169a..bb001aa05 100644
--- a/content/docs/how-to/chats/webhooks-chat-archive.md
+++ b/content/docs/how-to/chats/webhooks-chat-archive.md
@@ -1,14 +1,14 @@
-The `chat.archive` event is triggered when a chat is archived or unarchived.
-
-```json { title="chat.archive" }
-{
- "event": "chat.archive",
- "session": "default",
- "payload": {
- "id": "123123123@c.us",
- "timestamp": 1667561485,
- "archived": true <== or false
- },
- ...
-}
-```
+The `chat.archive` event is triggered when a chat is archived or unarchived.
+
+```json { title="chat.archive" }
+{
+ "event": "chat.archive",
+ "session": "default",
+ "payload": {
+ "id": "123123123@c.us",
+ "timestamp": 1667561485,
+ "archived": true <== or false
+ },
+ ...
+}
+```
diff --git a/content/docs/how-to/config/index.md b/content/docs/how-to/config/index.md
index 52a4c58d0..42e8e9e24 100644
--- a/content/docs/how-to/config/index.md
+++ b/content/docs/how-to/config/index.md
@@ -1,321 +1,339 @@
----
-title: "⚙️ Configuration"
-description: "Configuration"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 299
-slug: config
----
-
-You can configure WhatsApp API behavior via environment variables.
-
-{{< tabs "config-methods" >}}
-
-{{< tab "docker run" >}}
-You can add environment variables by adding `-e WHATSAPP_VARNAME=value` at the
-beginning of the command line or by using [other options](https://docs.docker.com/engine/reference/commandline/run/)
-
-```bash
-docker run -it -e "WAHA_WORKER_ID=waha" -e WAHA_PRINT_QR=False devlikeapro/waha-plus
-```
-{{< /tab >}}
-
-{{< tab "docker compose" >}}
-It's not necessary to always run such a long command - you can save all data in
-[docker-compose.yaml](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml)
-file as described on [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}).
-
-```yaml { title="docker-compose.yaml" }
-version: '3'
-
-services:
- waha:
- image: devlikeapro/waha-plus
- container_name: waha
- restart: unless-stopped
- ports:
- - "127.0.0.1:3000:3000"
- environment:
- - WAHA_WORKER_ID=waha
- - WAHA_PRINT_QR=False
-```
-
-```bash
-docker compose up -d
-```
-{{< /tab >}}
-
-{{< tab ".env" >}}
-You can also use a `.env` file to set environment variables. Create a `.env` file in the same directory as your docker-compose.yaml file.
-
-```json { title=".env" }
-WAHA_WORKER_ID=waha
-WAHA_PRINT_QR=False
-```
-
-Then reference it in your docker-compose.yaml file:
-
-```yaml { title="docker-compose.yaml" }
-version: '3'
-
-services:
- waha:
- image: devlikeapro/waha-plus
- container_name: waha
- restart: unless-stopped
- ports:
- - "127.0.0.1:3000:3000"
- env_file:
- - .env
-```
-
-```bash
-docker compose up -d
-```
-{{< /tab >}}
-
-{{< /tabs >}}
-
-
-## Common
-- `WHATSAPP_API_PORT=3000`: The port number that the HTTP server will listen on. The default value is `3000`.
- - `PORT=3000` is also supported (for Heroku compatibility)
-- `WHATSAPP_API_HOSTNAME=localhost`: The hostname for the HTTP server. The default value is `localhost`.
-- `WHATSAPP_API_SCHEMA=https` - it just changes `media.url` schema when you receive media (with files) messages.
-- `WAHA_BASE_URL` - will be used to construct the `media.url` field in the webhook events.
- - By default, it's `{WHATSAPP_API_SCHEMA}://{WHATSAPP_API_HOSTNAME}:{WHATSAPP_API_PORT}`.
-- `TZ=Europe/Warsaw` - set the timezone for the container. The default value is `UTC`. Find [your timezone in the list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
-- `WAHA_DEBUG_MODE=false` - enables some API only for development or troubleshooting purposes. Disabled by default.
- - Read more on [**🔍 Observability**]({{< relref "/docs/how-to/observability#waha-debug-mode" >}}) page.
-
-
-## Logging
-
-Read more about [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
-
-Options you can use to control how WAHA outputs logs:
-- `WAHA_LOG_FORMAT` - supports formats:
- - `WAHA_LOG_FORMAT=PRETTY` - good for local development, **default** format
- - `WAHA_LOG_FORMAT=JSON` - can be useful if you're using a central logging management system
-- `WAHA_LOG_LEVEL` - how much information to log `error | warn | info | debug | trace`.
- - 👉 Do not set `debug` and `trace` in production, as these levels generate excessive log output.
-- `WAHA_HTTP_LOG_LEVEL=info` - controls the level of `request completed` log (HTTP access). You can set it to `error | warn | info | debug | trace`.
-- `DEBUG=1` - you can set this environment variable as a shortcut for `WAHA_LOG_LEVEL=debug`, `DEBUG=1` overrides the `WAHA_LOG_LEVEL` to `debug` if both defined.
-👉 Learn more about logging configuration on [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}}) page.
-
-
-## Engines
-Read more about [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}})
-
-- `WHATSAPP_DEFAULT_ENGINE=WEBJS` - set the default engine for all sessions. Available options: `WEBJS`, `NOWEB`, `GOWS`. By default, it's `WEBJS`.
-
-### WEBJS
-You can use some of the following environment variables to configure the [**WEBJS**]({{< relref "/docs/how-to/engines#webjs" >}}) session:
-- `WAHA_WEBJS_CACHE_TYPE=local` - enable cache (aka use the latest version) for the **web page** in the browser. By default, it's `none` (no cache)
-- `WAHA_WEBJS_WEB_VERSION=2.3000.XXXX` - set the version of the WhatsApp Web to use. By default, we're using the latest compatible version. Only works with `local` cache type.
-
-## Sessions
-
-Read more about [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}}) and [**🗄️ Storages**]({{< relref "/docs/how-to/storages#sessions" >}})
-
-- `WAHA_AUTO_START_DELAY_SECONDS=0` - when docker-container restarts, WAHA starts all `STOPPED` sessions (or all sessions if you set `WAHA_RESTART_ALL_SESSIONS=True`). You can set the delay between session restarts in seconds.
- - By default, it's `0`.
- - **WEBJS** - consider setting it to `5` if you have many sessions
- - **NOWEB** - it's fine to leave to `0` or you can increase to `1` if you experience issues with starting sessions.
-- `WAHA_PRINT_QR=True` - set this variable to `False` to disable printing QR codes to the console. By default, `True`.
-- `WAHA_WORKER_ID=waha1` - set the worker ID for the session.
- - Workers restore sessions if worker got restarted. If you have multiple workers, each worker will restore its own sessions.
-- `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`.
-
-Rarely used:
-- `WAHA_WORKER_RESTART_SESSIONS=True` - restart all sessions when the worker is restarted. By default, `True`.
-- `WHATSAPP_START_SESSION=session1,session2`: This variable can be used to start sessions with the specified names right
- after launching the API. Separate session names with a comma.
-- `WAHA_ZIPPER=ZIPUNZIP` - use `zip` and `unzip` system binaries to pack **WEBJS** authentication data. Disabled by default.
- - It's relevant if you're using **WEBJS + MongoDB**. Install `zip` and `unzip` if you don't use our official docker image and set the variable
-
-### Sessions - Local
-- `WAHA_LOCAL_STORE_BASE_DIR=/app/.sessions` - Override the base directory for local storage of session data
-
-### Sessions - PostgreSQL
-- `WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable` - PostgreSQL connection URL for storing session data
-
-### Sessions - MongoDB
-- `WHATSAPP_SESSIONS_MONGO_URL=mongodb://user:password@host:port/` - MongoDB connection URL for storing session data
-
-## Apps
-
-{{< include file="content/docs/apps/about/-config.md" >}}
-
-## Webhooks
-
-Read more about [**🔄 Events & Webhooks**]({{< relref "/docs/how-to/events" >}})
-
-💡 You can open [https://webhook.site](https://webhook.site) and paste UUID from it to `url` field,
-and you'll see all requests immediately in your browser to intercept the webhook's payload.
-
-### Global webhooks
-You can configure webhooks for **all sessions** at once by setting these environment variables:
-
-- `WHATSAPP_HOOK_URL=https://webhook.site/11111111-1111-1111-1111-11111111` - to set up a URL for the webhook
-- `WHATSAPP_HOOK_EVENTS=message,message.any,state.change` - specify events.
- - `WHATSAPP_HOOK_EVENTS=*` - subscribe to all events.
- - We don't suggest using `*` or all events for production, it can generate a lot of requests.
-- `WHATSAPP_HOOK_HMAC_KEY=your-secret-key` - the same as `hmac.key` field in the webhook configuration.
-- `WHATSAPP_HOOK_RETRIES_POLICY=linear` - the same as `retries.policy` field in the webhook configuration.
-- `WHATSAPP_HOOK_RETRIES_DELAY_SECONDS=2` - the same as `retries.delaySeconds` field in the webhook configuration.
-- `WHATSAPP_HOOK_RETRIES_ATTEMPTS=4`
-- `WHATSAPP_HOOK_CUSTOM_HEADERS=X-My-Custom-Header-1:Value;X-My-Custom-Header-2:Value` - the same as `customHeaders` field in the webhook configuration.
- - Use `Header:Value` format and separate them by `;`.
-
-That webhook configuration **does not appear** in `session.config` field in `GET /api/sessions/` request.
-
-💡 You can open [https://webhook.site](https://webhook.site) and paste URL from it to `url` field,
-and you'll see all requests immediately in your browser to intercept the webhook's payload.
-
-### Session webhooks
-You can configure webhook when you start session by setting `config.webhook` fields.
-
-Read more about it on [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions#configure-webhook" >}}).
-
-## Swagger
-
-Read more about [**📚 Swagger**]({{< relref "/docs/how-to/swagger" >}})
-
-- `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.
-- `WHATSAPP_SWAGGER_ENABLED=false` - disables Swagger documentation. Enabled by default. Available in **WAHA Plus** only.
-- `WHATSAPP_SWAGGER_USERNAME=admin` and `WHATSAPP_SWAGGER_PASSWORD=admin` - these variables can be used to protect the Swagger panel
- with `admin / admin` credentials. This does not affect API access. Available in **WAHA Plus** only.
-- `WHATSAPP_SWAGGER_TITLE` - the title of the Swagger documentation and some other places.
-- `WHATSAPP_SWAGGER_DESCRIPTION` - Markdown formatted description of your API.
-- `WHATSAPP_SWAGGER_EXTERNAL_DOC_URL` - URL to the external documentation.
-- `WHATSAPP_SWAGGER_VIDEO_EXAMPLE_URL` - link to the video example.
-- `WHATSAPP_SWAGGER_OPUS_EXAMPLE_URL` - link to the opus example.
-- `WHATSAPP_SWAGGER_JPG_EXAMPLE_URL` - link to the jpg example.
-
-## Proxy
-
-Read more about [**🔌 Proxy**]({{< relref "/docs/how-to/proxy" >}})
-
-### Global proxy
-If you need to use a proxy, you can set the following environment variables:
-
-- `WHATSAPP_PROXY_SERVER=localhost:3128`: Use this variable to set the proxy server in the format `host:port`, without http or https.
-- `WHATSAPP_PROXY_SERVER_USERNAME=username` and `WHATSAPP_PROXY_SERVER_PASSWORD=password`: Use these variables to set up credentials for the proxy.
-- `WHATSAPP_PROXY_SERVER_LIST=host1.example.com:3138,host2.example.com:3138`: Use this variable to set a comma-separated list of addresses to use, using a round-robin algorithm to choose the server for the session.
-- `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-`: Use this variable to parse the session name for the prefix and find the appropriate session.
- For example, if you have set `WHATSAPP_PROXY_SERVER_LIST=host-first:80,host-second:80,host-third:80` and `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-` and you run `proxy-3` session, the `host-third:80` proxy will be chosen for that session.
- This is a way to select a proxy from while you start session.
-
-### Session proxy
-You can configure proxy when you start session by setting `config.proxy` fields.
-Read more about it on [**Session page** ->]({{< relref "/docs/how-to/sessions#configure-proxy" >}}).
-
-Keep in mind that session's proxy configuration takes precedence over proxy configuration set by environment variables!
-
-## HTTPS
-
-Read more about [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
-
-{{< include file="content/docs/how-to/security/use-nginx-for-https.md" >}}
-
-Enable HTTPS directly in WAHA by setting the following environment variables:
-
-- `WAHA_HTTPS_ENABLED=true`: Set this variable to `true` to enable HTTPS. By default, it's `false`.
-- `WAHA_HTTPS_PATH_KEY=/path/to/key.pem`: The path to the key file for HTTPS. By default `./.secrets/privkey.pem`
-- `WAHA_HTTPS_PATH_CERT=/path/to/cert.pem`: The path to the certificate file for HTTPS. By default `./.secrets/cert.pem`
-- `WAHA_HTTPS_PATH_CA=/path/to/ca.pem`: The path to the CA file for HTTPS. By default `./.secrets/chain.pem`
-
-
-## Security
-
-Read more about [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
-
-**API**
-- `WAHA_API_KEY=sha512:{SHA512_HEX_HASH}`: require `X-Api-Key: {KEY}` header in all requests to the API.
- - `WAHA_API_KEY=sha512:c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec`: require `X-Api-Key: admin` header in all requests to the API.
- - `WAHA_API_KEY=admin`- plain key works, but it's better to set **SHA512** instead.
- - `WHATSAPP_API_KEY=admin` - also works, but it's better to set **SHA512** instead.
-- `WHATSAPP_API_KEY_EXCLUDE_PATH=ping,health` - exclude URI from key auth [#451](https://github.com/devlikeapro/waha/issues/451)
-
-**Dashboard**
-- `WAHA_DASHBOARD_ENABLED=true`: Toggle to enable or disable the dashboard.
-- `WAHA_DASHBOARD_USERNAME=waha`: Default username for login (default: waha).
-- `WAHA_DASHBOARD_PASSWORD=waha`: Default password for login (default: waha).
-
-**Swagger**
-- `WHATSAPP_SWAGGER_ENABLED=true`: Toggle to enable or disable the Swagger.
-- `WHATSAPP_SWAGGER_USERNAME=admin`
-- `WHATSAPP_SWAGGER_PASSWORD=admin`
-Swagger panel with `admin / admin` credentials. This does not affect API access.
-
-
-## Files
-
-Read more about [**🖼️ Media Storage**]({{< relref "/docs/how-to/storages#media-storage" >}}) and [**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}})
-
-
-### Files - Local
-The following environment variables can be used to configure the file storage options for the WAHA:
-
-- `WHATSAPP_FILES_MIMETYPES`: This variable can be used to download only specific mimetypes from messages.
- By default, all files are downloaded. The mimetypes must be separated by a comma, without spaces.
- For example: `audio,image/png,image/gif`. To choose a specific type, use a prefix (like `audio,image`). See usage below.
-- `WHATSAPP_DOWNLOAD_MEDIA=true` - this variable can be used to **completely** disable downloading media files. By default, all files are downloaded.
- Set this variable to `WHATSAPP_DOWNLOAD_MEDIA=false` to disable downloading media files.
- - Under the hood, it sets `WHATSAPP_FILES_MIMETYPES=mimetype/ignore-all-media` to ignore all media files.
-- `WHATSAPP_FILES_LIFETIME`: This variable can be used to set the time (in seconds) after which files will be removed to
- free up space. The default value is `180`.
- - Set this variable to `0` to disable the file lifetime.
-- `WHATSAPP_FILES_FOLDER`: This variable can be used to set the folder where files from chats (images, voice messages)
- will be stored. The default value is `/tmp/whatsapp-files`.
- - The folder must be mounted to the host machine to keep the files between container restarts. [ Read more about how to persist files ->]({{< relref "/docs/how-to/storages#media" >}})
-
-💡 When media files are not processed due to `WHATSAPP_FILES_MIMETYPES` or `WHATSAPP_DOWNLOAD_MEDIA` settings,
-you'll still receive a webhook event with `hasMedia: True` field, but without a `media.url`.
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "payload": {
- "hasMedia": true,
- "media": {
- "url": null,
- "mimetype": "video/mp4",
- "filename": null,
- "error": null // if there was an error during file download
- }
- }
-}
-```
-
-### Files - S3
-- `WAHA_MEDIA_STORAGE=S3` - enable the S3 storage
-- `WAHA_S3_REGION=eu-west-1` - the region of the S3 bucket
-- `WAHA_S3_BUCKET=waha` - the name of the S3 bucket
-- `WAHA_S3_ACCESS_KEY_ID=minioadmin` - the access key of the S3 bucket
-- `WAHA_S3_SECRET_ACCESS_KEY=minioadmin` - the secret access key of the S3 bucket
-- `WAHA_S3_ENDPOINT=http://127.0.0.1:9000` - the endpoint of the S3 bucket (not required for AWS S3)
-- `WAHA_S3_FORCE_PATH_STYLE=True` - force path style for the S3 bucket (not required for AWS S3)
-- `WAHA_S3_PROXY_FILES` - proxy media files through WAHA (`False` by default)
- - `WAHA_S3_PROXY_FILES=False` - generate pre-signed URLs for media files and send them to the client in `media.url`
- - `WAHA_S3_PROXY_FILES=True` - WAHA will proxy media files through itself in `media.url`
-
-### Files - PostgreSQL
-- `WAHA_MEDIA_STORAGE=POSTGRESQL` - enable the PostgreSQL storage for media files
-- `WAHA_MEDIA_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable` - PostgreSQL connection URL for storing media files
-
-## Health Check
-
-Read more about [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
-
-Health check is available in [WAHA Plus ]({{< relref "/docs/how-to/waha-plus" >}}) only.
-
-The following environment variables can be used to configure the Health Check:
-- `WHATSAPP_HEALTH_MEDIA_FILES_THRESHOLD_MB` - the threshold in MB for the media files storage. The default value is `100`.
-- `WHATSAPP_HEALTH_SESSIONS_FILES_THRESHOLD_MB` - the threshold in MB for the sessions files storage. The default value is `100`.
-- `WHATSAPP_HEALTH_MONGODB_TIMEOUT` - the timeout in milliseconds for the MongoDB health check. The default value is `5000`.
+---
+title: "⚙️ Configuration"
+description: "Configuration"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 299
+slug: config
+---
+
+You can configure WhatsApp API behavior via environment variables.
+
+{{< tabs "config-methods" >}}
+
+{{< tab "docker run" >}}
+You can add environment variables by adding `-e WHATSAPP_VARNAME=value` at the
+beginning of the command line or by using [other options](https://docs.docker.com/engine/reference/commandline/run/)
+
+```bash
+docker run -it -e "WAHA_WORKER_ID=waha" -e WAHA_PRINT_QR=False devlikeapro/waha-plus
+```
+
+{{< /tab >}}
+
+{{< tab "docker compose" >}}
+It's not necessary to always run such a long command - you can save all data in
+[docker-compose.yaml](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml)
+file as described on [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}).
+
+```yaml { title="docker-compose.yaml" }
+version: "3"
+
+services:
+ waha:
+ image: devlikeapro/waha-plus
+ container_name: waha
+ restart: unless-stopped
+ ports:
+ - "127.0.0.1:3000:3000"
+ environment:
+ - WAHA_WORKER_ID=waha
+ - WAHA_PRINT_QR=False
+```
+
+```bash
+docker compose up -d
+```
+
+{{< /tab >}}
+
+{{< tab ".env" >}}
+You can also use a `.env` file to set environment variables. Create a `.env` file in the same directory as your docker-compose.yaml file.
+
+```json { title=".env" }
+WAHA_WORKER_ID=waha
+WAHA_PRINT_QR=False
+```
+
+Then reference it in your docker-compose.yaml file:
+
+```yaml { title="docker-compose.yaml" }
+version: "3"
+
+services:
+ waha:
+ image: devlikeapro/waha-plus
+ container_name: waha
+ restart: unless-stopped
+ ports:
+ - "127.0.0.1:3000:3000"
+ env_file:
+ - .env
+```
+
+```bash
+docker compose up -d
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
+
+## Common
+
+- `WHATSAPP_API_PORT=3000`: The port number that the HTTP server will listen on. The default value is `3000`.
+ - `PORT=3000` is also supported (for Heroku compatibility)
+- `WHATSAPP_API_HOSTNAME=localhost`: The hostname for the HTTP server. The default value is `localhost`.
+- `WHATSAPP_API_SCHEMA=https` - it just changes `media.url` schema when you receive media (with files) messages.
+- `WAHA_BASE_URL` - will be used to construct the `media.url` field in the webhook events.
+ - By default, it's `{WHATSAPP_API_SCHEMA}://{WHATSAPP_API_HOSTNAME}:{WHATSAPP_API_PORT}`.
+- `TZ=Europe/Warsaw` - set the timezone for the container. The default value is `UTC`. Find [your timezone in the list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
+- `WAHA_DEBUG_MODE=false` - enables some API only for development or troubleshooting purposes. Disabled by default.
+ - Read more on [**🔍 Observability**]({{< relref "/docs/how-to/observability#waha-debug-mode" >}}) page.
+
+## Logging
+
+Read more about [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
+
+Options you can use to control how WAHA outputs logs:
+
+- `WAHA_LOG_FORMAT` - supports formats:
+ - `WAHA_LOG_FORMAT=PRETTY` - good for local development, **default** format
+ - `WAHA_LOG_FORMAT=JSON` - can be useful if you're using a central logging management system
+- `WAHA_LOG_LEVEL` - how much information to log `error | warn | info | debug | trace`.
+ - 👉 Do not set `debug` and `trace` in production, as these levels generate excessive log output.
+- `WAHA_HTTP_LOG_LEVEL=info` - controls the level of `request completed` log (HTTP access). You can set it to `error | warn | info | debug | trace`.
+- `DEBUG=1` - you can set this environment variable as a shortcut for `WAHA_LOG_LEVEL=debug`, `DEBUG=1` overrides the `WAHA_LOG_LEVEL` to `debug` if both defined.
+ 👉 Learn more about logging configuration on [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}}) page.
+
+## Engines
+
+Read more about [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}})
+
+- `WHATSAPP_DEFAULT_ENGINE=WEBJS` - set the default engine for all sessions. Available options: `WEBJS`, `NOWEB`, `GOWS`. By default, it's `WEBJS`.
+
+### WEBJS
+
+You can use some of the following environment variables to configure the [**WEBJS**]({{< relref "/docs/how-to/engines#webjs" >}}) session:
+
+- `WAHA_WEBJS_CACHE_TYPE=local` - enable cache (aka use the latest version) for the **web page** in the browser. By default, it's `none` (no cache)
+- `WAHA_WEBJS_WEB_VERSION=2.3000.XXXX` - set the version of the WhatsApp Web to use. By default, we're using the latest compatible version. Only works with `local` cache type.
+
+## Sessions
+
+Read more about [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}}) and [**🗄️ Storages**]({{< relref "/docs/how-to/storages#sessions" >}})
+
+- `WAHA_AUTO_START_DELAY_SECONDS=0` - when docker-container restarts, WAHA starts all `STOPPED` sessions (or all sessions if you set `WAHA_RESTART_ALL_SESSIONS=True`). You can set the delay between session restarts in seconds.
+ - By default, it's `0`.
+ - **WEBJS** - consider setting it to `5` if you have many sessions
+ - **NOWEB** - it's fine to leave to `0` or you can increase to `1` if you experience issues with starting sessions.
+- `WAHA_PRINT_QR=True` - set this variable to `False` to disable printing QR codes to the console. By default, `True`.
+- `WAHA_WORKER_ID=waha1` - set the worker ID for the session.
+ - Workers restore sessions if worker got restarted. If you have multiple workers, each worker will restore its own sessions.
+- `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`.
+
+Rarely used:
+
+- `WAHA_WORKER_RESTART_SESSIONS=True` - restart all sessions when the worker is restarted. By default, `True`.
+- `WHATSAPP_START_SESSION=session1,session2`: This variable can be used to start sessions with the specified names right
+ after launching the API. Separate session names with a comma.
+- `WAHA_ZIPPER=ZIPUNZIP` - use `zip` and `unzip` system binaries to pack **WEBJS** authentication data. Disabled by default.
+ - It's relevant if you're using **WEBJS + MongoDB**. Install `zip` and `unzip` if you don't use our official docker image and set the variable
+
+### Sessions - Local
+
+- `WAHA_LOCAL_STORE_BASE_DIR=/app/.sessions` - Override the base directory for local storage of session data
+
+### Sessions - PostgreSQL
+
+- `WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable` - PostgreSQL connection URL for storing session data
+
+### Sessions - MongoDB
+
+- `WHATSAPP_SESSIONS_MONGO_URL=mongodb://user:password@host:port/` - MongoDB connection URL for storing session data
+
+## Apps
+
+{{< include file="content/docs/apps/about/-config.md" >}}
+
+## Webhooks
+
+Read more about [**🔄 Events & Webhooks**]({{< relref "/docs/how-to/events" >}})
+
+💡 You can open [https://webhook.site](https://webhook.site) and paste UUID from it to `url` field,
+and you'll see all requests immediately in your browser to intercept the webhook's payload.
+
+### Global webhooks
+
+You can configure webhooks for **all sessions** at once by setting these environment variables:
+
+- `WHATSAPP_HOOK_URL=https://webhook.site/11111111-1111-1111-1111-11111111` - to set up a URL for the webhook
+- `WHATSAPP_HOOK_EVENTS=message,message.any,state.change` - specify events.
+ - `WHATSAPP_HOOK_EVENTS=*` - subscribe to all events.
+ - We don't suggest using `*` or all events for production, it can generate a lot of requests.
+- `WHATSAPP_HOOK_HMAC_KEY=your-secret-key` - the same as `hmac.key` field in the webhook configuration.
+- `WHATSAPP_HOOK_RETRIES_POLICY=linear` - the same as `retries.policy` field in the webhook configuration.
+- `WHATSAPP_HOOK_RETRIES_DELAY_SECONDS=2` - the same as `retries.delaySeconds` field in the webhook configuration.
+- `WHATSAPP_HOOK_RETRIES_ATTEMPTS=4`
+- `WHATSAPP_HOOK_CUSTOM_HEADERS=X-My-Custom-Header-1:Value;X-My-Custom-Header-2:Value` - the same as `customHeaders` field in the webhook configuration.
+ - Use `Header:Value` format and separate them by `;`.
+
+That webhook configuration **does not appear** in `session.config` field in `GET /api/sessions/` request.
+
+💡 You can open [https://webhook.site](https://webhook.site) and paste URL from it to `url` field,
+and you'll see all requests immediately in your browser to intercept the webhook's payload.
+
+### Session webhooks
+
+You can configure webhook when you start session by setting `config.webhook` fields.
+
+Read more about it on [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions#configure-webhook" >}}).
+
+## Swagger
+
+Read more about [**📚 Swagger**]({{< relref "/docs/how-to/swagger" >}})
+
+- `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.
+- `WHATSAPP_SWAGGER_ENABLED=false` - disables Swagger documentation. Enabled by default. Available in **WAHA Plus** only.
+- `WHATSAPP_SWAGGER_USERNAME=admin` and `WHATSAPP_SWAGGER_PASSWORD=admin` - these variables can be used to protect the Swagger panel
+ with `admin / admin` credentials. This does not affect API access. Available in **WAHA Plus** only.
+- `WHATSAPP_SWAGGER_TITLE` - the title of the Swagger documentation and some other places.
+- `WHATSAPP_SWAGGER_DESCRIPTION` - Markdown formatted description of your API.
+- `WHATSAPP_SWAGGER_EXTERNAL_DOC_URL` - URL to the external documentation.
+- `WHATSAPP_SWAGGER_VIDEO_EXAMPLE_URL` - link to the video example.
+- `WHATSAPP_SWAGGER_OPUS_EXAMPLE_URL` - link to the opus example.
+- `WHATSAPP_SWAGGER_JPG_EXAMPLE_URL` - link to the jpg example.
+
+## Proxy
+
+Read more about [**🔌 Proxy**]({{< relref "/docs/how-to/proxy" >}})
+
+### Global proxy
+
+If you need to use a proxy, you can set the following environment variables:
+
+- `WHATSAPP_PROXY_SERVER=localhost:3128`: Use this variable to set the proxy server in the format `host:port`, without http or https.
+- `WHATSAPP_PROXY_SERVER_USERNAME=username` and `WHATSAPP_PROXY_SERVER_PASSWORD=password`: Use these variables to set up credentials for the proxy.
+- `WHATSAPP_PROXY_SERVER_LIST=host1.example.com:3138,host2.example.com:3138`: Use this variable to set a comma-separated list of addresses to use, using a round-robin algorithm to choose the server for the session.
+- `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-`: Use this variable to parse the session name for the prefix and find the appropriate session.
+ For example, if you have set `WHATSAPP_PROXY_SERVER_LIST=host-first:80,host-second:80,host-third:80` and `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-` and you run `proxy-3` session, the `host-third:80` proxy will be chosen for that session.
+ This is a way to select a proxy from while you start session.
+
+### Session proxy
+
+You can configure proxy when you start session by setting `config.proxy` fields.
+Read more about it on [**Session page** ->]({{< relref "/docs/how-to/sessions#configure-proxy" >}}).
+
+Keep in mind that session's proxy configuration takes precedence over proxy configuration set by environment variables!
+
+## HTTPS
+
+Read more about [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
+
+{{< include file="content/docs/how-to/security/use-nginx-for-https.md" >}}
+
+Enable HTTPS directly in WAHA by setting the following environment variables:
+
+- `WAHA_HTTPS_ENABLED=true`: Set this variable to `true` to enable HTTPS. By default, it's `false`.
+- `WAHA_HTTPS_PATH_KEY=/path/to/key.pem`: The path to the key file for HTTPS. By default `./.secrets/privkey.pem`
+- `WAHA_HTTPS_PATH_CERT=/path/to/cert.pem`: The path to the certificate file for HTTPS. By default `./.secrets/cert.pem`
+- `WAHA_HTTPS_PATH_CA=/path/to/ca.pem`: The path to the CA file for HTTPS. By default `./.secrets/chain.pem`
+
+## Security
+
+Read more about [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
+
+**API**
+
+- `WAHA_API_KEY=sha512:{SHA512_HEX_HASH}`: require `X-Api-Key: {KEY}` header in all requests to the API.
+ - `WAHA_API_KEY=sha512:c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec`: require `X-Api-Key: admin` header in all requests to the API.
+ - `WAHA_API_KEY=admin`- plain key works, but it's better to set **SHA512** instead.
+ - `WHATSAPP_API_KEY=admin` - also works, but it's better to set **SHA512** instead.
+- `WHATSAPP_API_KEY_EXCLUDE_PATH=ping,health` - exclude URI from key auth [#451](https://github.com/devlikeapro/waha/issues/451)
+
+**Dashboard**
+
+- `WAHA_DASHBOARD_ENABLED=true`: Toggle to enable or disable the dashboard.
+- `WAHA_DASHBOARD_USERNAME=waha`: Default username for login (default: waha).
+- `WAHA_DASHBOARD_PASSWORD=waha`: Default password for login (default: waha).
+
+**Swagger**
+
+- `WHATSAPP_SWAGGER_ENABLED=true`: Toggle to enable or disable the Swagger.
+- `WHATSAPP_SWAGGER_USERNAME=admin`
+- `WHATSAPP_SWAGGER_PASSWORD=admin`
+ Swagger panel with `admin / admin` credentials. This does not affect API access.
+
+## Files
+
+Read more about [**🖼️ Media Storage**]({{< relref "/docs/how-to/storages#media-storage" >}}) and [**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}})
+
+### Files - Local
+
+The following environment variables can be used to configure the file storage options for the WAHA:
+
+- `WHATSAPP_FILES_MIMETYPES`: This variable can be used to download only specific mimetypes from messages.
+ By default, all files are downloaded. The mimetypes must be separated by a comma, without spaces.
+ For example: `audio,image/png,image/gif`. To choose a specific type, use a prefix (like `audio,image`). See usage below.
+- `WHATSAPP_DOWNLOAD_MEDIA=true` - this variable can be used to **completely** disable downloading media files. By default, all files are downloaded.
+ Set this variable to `WHATSAPP_DOWNLOAD_MEDIA=false` to disable downloading media files.
+ - Under the hood, it sets `WHATSAPP_FILES_MIMETYPES=mimetype/ignore-all-media` to ignore all media files.
+- `WHATSAPP_FILES_LIFETIME`: This variable can be used to set the time (in seconds) after which files will be removed to
+ free up space. The default value is `180`.
+ - Set this variable to `0` to disable the file lifetime.
+- `WHATSAPP_FILES_FOLDER`: This variable can be used to set the folder where files from chats (images, voice messages)
+ will be stored. The default value is `/tmp/whatsapp-files`.
+ - The folder must be mounted to the host machine to keep the files between container restarts. [ Read more about how to persist files ->]({{< relref "/docs/how-to/storages#media" >}})
+
+💡 When media files are not processed due to `WHATSAPP_FILES_MIMETYPES` or `WHATSAPP_DOWNLOAD_MEDIA` settings,
+you'll still receive a webhook event with `hasMedia: True` field, but without a `media.url`.
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "payload": {
+ "hasMedia": true,
+ "media": {
+ "url": null,
+ "mimetype": "video/mp4",
+ "filename": null,
+ "error": null // if there was an error during file download
+ }
+ }
+}
+```
+
+### Files - S3
+
+- `WAHA_MEDIA_STORAGE=S3` - enable the S3 storage
+- `WAHA_S3_REGION=eu-west-1` - the region of the S3 bucket
+- `WAHA_S3_BUCKET=waha` - the name of the S3 bucket
+- `WAHA_S3_ACCESS_KEY_ID=minioadmin` - the access key of the S3 bucket
+- `WAHA_S3_SECRET_ACCESS_KEY=minioadmin` - the secret access key of the S3 bucket
+- `WAHA_S3_ENDPOINT=http://127.0.0.1:9000` - the endpoint of the S3 bucket (not required for AWS S3)
+- `WAHA_S3_FORCE_PATH_STYLE=True` - force path style for the S3 bucket (not required for AWS S3)
+- `WAHA_S3_PROXY_FILES` - proxy media files through WAHA (`False` by default)
+ - `WAHA_S3_PROXY_FILES=False` - generate pre-signed URLs for media files and send them to the client in `media.url`
+ - `WAHA_S3_PROXY_FILES=True` - WAHA will proxy media files through itself in `media.url`
+
+### Files - PostgreSQL
+
+- `WAHA_MEDIA_STORAGE=POSTGRESQL` - enable the PostgreSQL storage for media files
+- `WAHA_MEDIA_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable` - PostgreSQL connection URL for storing media files
+
+## Health Check
+
+Read more about [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
+
+Health check is available in [WAHA Plus ]({{< relref "/docs/how-to/waha-plus" >}}) only.
+
+The following environment variables can be used to configure the Health Check:
+
+- `WHATSAPP_HEALTH_MEDIA_FILES_THRESHOLD_MB` - the threshold in MB for the media files storage. The default value is `100`.
+- `WHATSAPP_HEALTH_SESSIONS_FILES_THRESHOLD_MB` - the threshold in MB for the sessions files storage. The default value is `100`.
+- `WHATSAPP_HEALTH_MONGODB_TIMEOUT` - the timeout in milliseconds for the MongoDB health check. The default value is `5000`.
diff --git a/content/docs/how-to/contacts/features.md b/content/docs/how-to/contacts/features.md
index 2ae960b6c..93b3b856b 100644
--- a/content/docs/how-to/contacts/features.md
+++ b/content/docs/how-to/contacts/features.md
@@ -1,30 +1,30 @@
-
-{{< details "**👤 Contacts - API**" >}}
-
-| **API** | WEBJS | NOWEB | GOWS |
-|---------------------------------------------------------------------|:-----:|:----------------:|:----:|
-| **Get all contacts** `GET /api/contacts/all` | ✔️ | ✔️[*1](#heading) | ✔️ |
-| **Get contact** `GET /api/contacts` | ✔️ | ✔️[*1](#heading) | ✔️ |
-| **Update contact** `PUT /api/{session}/contacts/{chatId}` | ✔️ | ✔️ | ✔️ |
-| **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**]({{< relref "/docs/engines/noweb#store" >}}) to get **chats, contacts and messages**
-
-{{< /details >}}
-
-{{< details "**👤 Lids - API**" >}}
-
-| **API** | WEBJS | NOWEB | GOWS |
-|-----------------------------------------------------------------------------|:-----:|:----------------:|:----:|
-| **Get Known LIDs** `GET /api/{session}/lids` | ✔️ | ✔️[*1](#heading) | ✔️ |
-| **Get Count of LIDs** `GET /api/{session}/lids/count` | ✔️ | ✔️[*1](#heading) | ✔️ |
-| **Get Phone Number by LID** `GET /api/{session}/lids/{lid}` | ✔️ | ✔️[*1](#heading) | ✔️ |
-| **Get LID by Phone Number** `GET /api/{session}/lids/pn/{phoneNumber}` | ✔️ | ✔️[*1](#heading) | ✔️ |
-
-1. **NOWEB** - you need to [**Enable Store**]({{< relref "/docs/engines/noweb#store" >}}) to get **chats, contacts and messages**
-
-{{< /details >}}
+
+{{< details "**👤 Contacts - API**" >}}
+
+| **API** | WEBJS | NOWEB | GOWS |
+| ------------------------------------------------------------------- | :---: | :---------------: | :--: |
+| **Get all contacts** `GET /api/contacts/all` | ✔️ | ✔️[\*1](#heading) | ✔️ |
+| **Get contact** `GET /api/contacts` | ✔️ | ✔️[\*1](#heading) | ✔️ |
+| **Update contact** `PUT /api/{session}/contacts/{chatId}` | ✔️ | ✔️ | ✔️ |
+| **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**]({{< relref "/docs/engines/noweb#store" >}}) to get **chats, contacts and messages**
+
+{{< /details >}}
+
+{{< details "**👤 Lids - API**" >}}
+
+| **API** | WEBJS | NOWEB | GOWS |
+| --------------------------------------------------------------------------- | :---: | :---------------: | :--: |
+| **Get Known LIDs** `GET /api/{session}/lids` | ✔️ | ✔️[\*1](#heading) | ✔️ |
+| **Get Count of LIDs** `GET /api/{session}/lids/count` | ✔️ | ✔️[\*1](#heading) | ✔️ |
+| **Get Phone Number by LID** `GET /api/{session}/lids/{lid}` | ✔️ | ✔️[\*1](#heading) | ✔️ |
+| **Get LID by Phone Number** `GET /api/{session}/lids/pn/{phoneNumber}` | ✔️ | ✔️[\*1](#heading) | ✔️ |
+
+1. **NOWEB** - you need to [**Enable Store**]({{< relref "/docs/engines/noweb#store" >}}) to get **chats, contacts and messages**
+
+{{< /details >}}
diff --git a/content/docs/how-to/contacts/index.md b/content/docs/how-to/contacts/index.md
index e4522d7f1..f6e86e100 100644
--- a/content/docs/how-to/contacts/index.md
+++ b/content/docs/how-to/contacts/index.md
@@ -1,314 +1,337 @@
----
-title : "👤 Contacts"
-description: "Contacts"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 230
-images: ["contacts.png"]
-slug: contacts
----
-
-Methods for contacts.
-
-
-
-## Features
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/contacts/features.md" >}}
-
-{{< callout context="note" icon="outline/info-circle" >}}
-WhatsApp Web does not support adding contacts, so the API doesn't support it too.
-{{< /callout >}}
-
-## API - Contacts
-See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
-
-### Get all contacts
-
-Get your contacts
-
-```http request
-GET /api/contacts/all?session={NAME}
-```
-
-```json {title="Response"}
-[
- {
- "id": "11231231231@c.us",
- "number": "11231231231",
- "name": "Contact Name",
- "pushname": "Pushname",
- "shortName": "Shortname",
- "isMe": true,
- "isGroup": false,
- "isWAContact": true,
- "isMyContact": true,
- "isBlocked": false
- }
-]
-```
-
-#### Contacts Pagination
-If you see timeout or the request takes too long - consider using `limit` parameter to get contacts in smaller chunks
-
-```http request
-GET /api/contacts/all?session={NAME}&limit=100&offset=0&sortBy=id&sortOrder=asc
-```
-
-- `limit=100` - limit the number of chats to return
-- `offset=0` - skip the number of chats from the start
-- `sortBy={field}` - sort by field
- - `sortBy=id` - sort by contact id
- - `sortBy=name` - sort by contact name
-- `sortOrder=desc|asc` - sort order
- - `desc` - descending order (A-Z)
- - `asc` - ascending order (Z-A)
-
-### Get contact
-
-Get contact
-```http request
-GET /api/contacts?contactId={ID}&session={SESSION}
-```
-
-- `ID` - either phone number (`123123123`) or chat id (`123123@c.us`)
-
-```json {title="Response"}
-{
- "id": "11231231231@c.us",
- "number": "11231231231",
- "name": "Contact Name",
- "pushname": "Pushname",
- "shortName": "Shortname",
- "isMe": true,
- "isGroup": false,
- "isWAContact": true,
- "isMyContact": true,
- "isBlocked": false
-}
-```
-
-### Update contact
-**Update contact** on **your phone address book** (and in WhatsApp):
-
-```http request
-PUT /api/{session}/contacts/{chatId}
-```
-
-```json { title="Body" }
-{
- "firstName": "John",
- "lastName": "Doe"
-}
-```
-
-**Path Parameters**:
-- `{session}` - session name - `default`
-- `{chatId}` - chat ID can end with "@c.us" or can be just a phone number - `12132132130`
-
-{{< callout context="note" icon="outline/address-book" title="Phone Address Book Update Note" >}}
-- If you have multiple **WhatsApp** apps installed on your phone, the API might only work with one account.
-- You may need to make **a few API requests** with the same parameters and wait **a few seconds** between requests to update your **phone address book**.
-{{< /callout >}}
-
-### Check phone number exists
-
-If you want to check if phone number is registered in WhatsApp (even if the number is not in your contact list) - use
-this endpoint for that.
-```http request
-GET /api/contacts/check-exists?phone=11231231231&session=default
-```
-
-It returns `numberExists` field with `true` or `false` value and `chatId` field with chat ID of the number (if exists).
-
-```json { title="Response" }
-{
- "numberExists": true,
- "chatId": "123123123@c.us"
-}
-```
-**Note for 🇧🇷 Brazilian Phone Numbers**
-
-You should use the `GET /api/contacts/check-exists` endpoint **before sending a message to a new phone number**
-to get the correct chatId because of the additional 9-digit number added after 2012.
-
-Read more about
-[error sending text to half of Brazilian numbers (every number registered before 2012) ->](https://github.com/devlikeapro/waha/issues/238)
-
-It's fine to send the response to `chatId` for incoming messages, though - the payload already has the correct `chatId`.
-
-### Get "about" contact
-
-```http request
-GET /api/contacts/about?contactId={ID}&session={SESSION}
-```
-
-- `ID` - either phone number (`123123123`) or chat id (`123123@c.us`)
-
-```json { title="Response" }
-{
- "about": "Hi, I use WhatsApp!"
-}
-```
-
-### Get contact profile picture
-```http request
-GET /api/contacts/profile-picture?contactId=11231231231&session=default`
-```
-
-**Query**:
-- `contactId` - contact ID
-- `session` - session name
-- `refresh=True` - force refresh the picture. By default, we cache it 24 hours. Do not frequently refresh the picture to avoid `rate-overlimit` error.
-
-```json { title="Response" }
-{
- "profilePictureURL": "https://example.com/profile.jpg"
-}
-```
-
-### Block (unblock) contact
-Block contact
-```http request
-POST /api/contacts/block
-```
-
-Unblock contact
-```http request
-POST /api/contacts/unblock
-```
-
-```json { title="Body" }
-{
- "contactId": "11231231231",
- "session": "default"
-}
-```
-
-## API - Lids
-
-WhatsApp uses so-called **Linked ID** (`lid`) identifier to hide a user phone number (`pn`) from public groups and other places.
-
-The API below you can use to map a linked identifier (`@lid`) to a contact phone number (`@c.us`).
-
-### Get All Known LIDs
-
-```http request
-GET /api/{session}/lids
-```
-
-Query all known LID-to-phone number mappings for a session.
-
-**Query Parameters:**
-
-* `limit`: (optional, default: 100) Number of records to return
-* `offset`: (optional, default: 0) Pagination offset
-
-**Response:**
-
-```json
-[
- {
- "lid": "123123123@lid",
- "pn": "123456789@c.us"
- }
-]
-```
-
-{{< callout context="tip" icon="outline/hand-finger-right" >}}
-Call
-[**Get all groups**]({{< relref "/docs/how-to/groups/#get-all-groups" >}})
-or
-[**Refresh groups**]({{< relref "/docs/how-to/groups/#refresh-groups" >}}) to populate lid to phone number mapping for all groups.
-{{< /callout >}}
-
-### Get Count of LIDs
-
-```http request
-GET /api/{session}/lids/count
-```
-
-Returns the number of known LID mappings for a session.
-
-**Response:**
-
-```json
-{
- "count": 123
-}
-```
-
-### Get Phone Number by LID
-
-```http request
-GET /api/{session}/lids/{lid}
-```
-
-Retrieve the associated phone number for a specific LID.
-
-👉 Remember to escape `@` in `lid` with `%40` (`123123%40lid`) or use just a number (`123123`)
-
-{{< tabs "lids-get-pn-response" >}}
-{{< tab "Response (Found)" >}}
-```json
-{
- "lid": "123123123@lid",
- "pn": "123456789@c.us"
-}
-```
-{{< /tab >}}
-{{< tab "Response (Not Found)" >}}
-```json
-{
- "lid": "123123123@lid",
- "pn": null
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-### Get LID by Phone Number
-
-```http request
-GET /api/{session}/lids/pn/{phoneNumber}
-```
-
-Fetch the LID for a given phone number (chat ID).
-
-👉 Remember to escape `@` in `phoneNumber` with `%40` (`123123%40lid`) or use just a number (`123123`)
-
-{{< tabs "lids-get-lid-response" >}}
-{{< tab "Response (Found)" >}}
-```json
-{
- "lid": "123123123@lid",
- "pn": "123456789@c.us"
-}
-```
-{{< /tab >}}
-{{< tab "Response (Not Found)" >}}
-```json
-{
- "lid": null,
- "pn": "123456789@c.us"
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-### Lids FAQ
-- If you **don't find a phone number by lid** - you don't have the phone number in your contact list or you're not **admin** in the group.
-- For [**👥 Groups**]({{< relref "/docs/how-to/groups" >}}) - try [**Refresh groups**]({{< relref "/docs/how-to/groups" >}}) if you don't find the `lid` but you're **admin** in the group.
-
-{{< callout context="tip" icon="outline/hand-finger-right" >}}
-👉 If nothing helped, and **you see phone number for participant on your phone app** - please
-[**open an issue**](https://github.com/devlikeapro/waha)
-and tell what
-[**🏭 Engine**]({{< relref "/docs/how-to/engines" >}})
-you're using and what behaviour you see.
-{{< /callout >}}
+---
+title: "👤 Contacts"
+description: "Contacts"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 230
+images: ["contacts.png"]
+slug: contacts
+---
+
+Methods for contacts.
+
+
+
+## Features
+
+Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
+
+{{< include file="content/docs/how-to/contacts/features.md" >}}
+
+{{< callout context="note" icon="outline/info-circle" >}}
+WhatsApp Web does not support adding contacts, so the API doesn't support it too.
+{{< /callout >}}
+
+## API - Contacts
+
+See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
+
+### Get all contacts
+
+Get your contacts
+
+```http request
+GET /api/contacts/all?session={NAME}
+```
+
+```json {title="Response"}
+[
+ {
+ "id": "11231231231@c.us",
+ "number": "11231231231",
+ "name": "Contact Name",
+ "pushname": "Pushname",
+ "shortName": "Shortname",
+ "isMe": true,
+ "isGroup": false,
+ "isWAContact": true,
+ "isMyContact": true,
+ "isBlocked": false
+ }
+]
+```
+
+#### Contacts Pagination
+
+If you see timeout or the request takes too long - consider using `limit` parameter to get contacts in smaller chunks
+
+```http request
+GET /api/contacts/all?session={NAME}&limit=100&offset=0&sortBy=id&sortOrder=asc
+```
+
+- `limit=100` - limit the number of chats to return
+- `offset=0` - skip the number of chats from the start
+- `sortBy={field}` - sort by field
+ - `sortBy=id` - sort by contact id
+ - `sortBy=name` - sort by contact name
+- `sortOrder=desc|asc` - sort order
+ - `desc` - descending order (A-Z)
+ - `asc` - ascending order (Z-A)
+
+### Get contact
+
+Get contact
+
+```http request
+GET /api/contacts?contactId={ID}&session={SESSION}
+```
+
+- `ID` - either phone number (`123123123`) or chat id (`123123@c.us`)
+
+```json {title="Response"}
+{
+ "id": "11231231231@c.us",
+ "number": "11231231231",
+ "name": "Contact Name",
+ "pushname": "Pushname",
+ "shortName": "Shortname",
+ "isMe": true,
+ "isGroup": false,
+ "isWAContact": true,
+ "isMyContact": true,
+ "isBlocked": false
+}
+```
+
+### Update contact
+
+**Update contact** on **your phone address book** (and in WhatsApp):
+
+```http request
+PUT /api/{session}/contacts/{chatId}
+```
+
+```json { title="Body" }
+{
+ "firstName": "John",
+ "lastName": "Doe"
+}
+```
+
+**Path Parameters**:
+
+- `{session}` - session name - `default`
+- `{chatId}` - chat ID can end with "@c.us" or can be just a phone number - `12132132130`
+
+{{< callout context="note" icon="outline/address-book" title="Phone Address Book Update Note" >}}
+
+- If you have multiple **WhatsApp** apps installed on your phone, the API might only work with one account.
+- You may need to make **a few API requests** with the same parameters and wait **a few seconds** between requests to update your **phone address book**.
+ {{< /callout >}}
+
+### Check phone number exists
+
+If you want to check if phone number is registered in WhatsApp (even if the number is not in your contact list) - use
+this endpoint for that.
+
+```http request
+GET /api/contacts/check-exists?phone=11231231231&session=default
+```
+
+It returns `numberExists` field with `true` or `false` value and `chatId` field with chat ID of the number (if exists).
+
+```json { title="Response" }
+{
+ "numberExists": true,
+ "chatId": "123123123@c.us"
+}
+```
+
+**Note for 🇧🇷 Brazilian Phone Numbers**
+
+You should use the `GET /api/contacts/check-exists` endpoint **before sending a message to a new phone number**
+to get the correct chatId because of the additional 9-digit number added after 2012.
+
+Read more about
+[error sending text to half of Brazilian numbers (every number registered before 2012) ->](https://github.com/devlikeapro/waha/issues/238)
+
+It's fine to send the response to `chatId` for incoming messages, though - the payload already has the correct `chatId`.
+
+### Get "about" contact
+
+```http request
+GET /api/contacts/about?contactId={ID}&session={SESSION}
+```
+
+- `ID` - either phone number (`123123123`) or chat id (`123123@c.us`)
+
+```json { title="Response" }
+{
+ "about": "Hi, I use WhatsApp!"
+}
+```
+
+### Get contact profile picture
+
+```http request
+GET /api/contacts/profile-picture?contactId=11231231231&session=default`
+```
+
+**Query**:
+
+- `contactId` - contact ID
+- `session` - session name
+- `refresh=True` - force refresh the picture. By default, we cache it 24 hours. Do not frequently refresh the picture to avoid `rate-overlimit` error.
+
+```json { title="Response" }
+{
+ "profilePictureURL": "https://example.com/profile.jpg"
+}
+```
+
+### Block (unblock) contact
+
+Block contact
+
+```http request
+POST /api/contacts/block
+```
+
+Unblock contact
+
+```http request
+POST /api/contacts/unblock
+```
+
+```json { title="Body" }
+{
+ "contactId": "11231231231",
+ "session": "default"
+}
+```
+
+## API - Lids
+
+WhatsApp uses so-called **Linked ID** (`lid`) identifier to hide a user phone number (`pn`) from public groups and other places.
+
+The API below you can use to map a linked identifier (`@lid`) to a contact phone number (`@c.us`).
+
+### Get All Known LIDs
+
+```http request
+GET /api/{session}/lids
+```
+
+Query all known LID-to-phone number mappings for a session.
+
+**Query Parameters:**
+
+- `limit`: (optional, default: 100) Number of records to return
+- `offset`: (optional, default: 0) Pagination offset
+
+**Response:**
+
+```json
+[
+ {
+ "lid": "123123123@lid",
+ "pn": "123456789@c.us"
+ }
+]
+```
+
+{{< callout context="tip" icon="outline/hand-finger-right" >}}
+Call
+[**Get all groups**]({{< relref "/docs/how-to/groups/#get-all-groups" >}})
+or
+[**Refresh groups**]({{< relref "/docs/how-to/groups/#refresh-groups" >}}) to populate lid to phone number mapping for all groups.
+{{< /callout >}}
+
+### Get Count of LIDs
+
+```http request
+GET /api/{session}/lids/count
+```
+
+Returns the number of known LID mappings for a session.
+
+**Response:**
+
+```json
+{
+ "count": 123
+}
+```
+
+### Get Phone Number by LID
+
+```http request
+GET /api/{session}/lids/{lid}
+```
+
+Retrieve the associated phone number for a specific LID.
+
+👉 Remember to escape `@` in `lid` with `%40` (`123123%40lid`) or use just a number (`123123`)
+
+{{< tabs "lids-get-pn-response" >}}
+{{< tab "Response (Found)" >}}
+
+```json
+{
+ "lid": "123123123@lid",
+ "pn": "123456789@c.us"
+}
+```
+
+{{< /tab >}}
+{{< tab "Response (Not Found)" >}}
+
+```json
+{
+ "lid": "123123123@lid",
+ "pn": null
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+### Get LID by Phone Number
+
+```http request
+GET /api/{session}/lids/pn/{phoneNumber}
+```
+
+Fetch the LID for a given phone number (chat ID).
+
+👉 Remember to escape `@` in `phoneNumber` with `%40` (`123123%40lid`) or use just a number (`123123`)
+
+{{< tabs "lids-get-lid-response" >}}
+{{< tab "Response (Found)" >}}
+
+```json
+{
+ "lid": "123123123@lid",
+ "pn": "123456789@c.us"
+}
+```
+
+{{< /tab >}}
+{{< tab "Response (Not Found)" >}}
+
+```json
+{
+ "lid": null,
+ "pn": "123456789@c.us"
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+### Lids FAQ
+
+- If you **don't find a phone number by lid** - you don't have the phone number in your contact list or you're not **admin** in the group.
+- For [**👥 Groups**]({{< relref "/docs/how-to/groups" >}}) - try [**Refresh groups**]({{< relref "/docs/how-to/groups" >}}) if you don't find the `lid` but you're **admin** in the group.
+
+{{< callout context="tip" icon="outline/hand-finger-right" >}}
+👉 If nothing helped, and **you see phone number for participant on your phone app** - please
+[**open an issue**](https://github.com/devlikeapro/waha)
+and tell what
+[**🏭 Engine**]({{< relref "/docs/how-to/engines" >}})
+you're using and what behaviour you see.
+{{< /callout >}}
diff --git a/content/docs/how-to/dashboard/index.md b/content/docs/how-to/dashboard/index.md
index 38a8e9928..8df715814 100644
--- a/content/docs/how-to/dashboard/index.md
+++ b/content/docs/how-to/dashboard/index.md
@@ -1,89 +1,92 @@
----
-title: "📊 Dashboard"
-description: "Dashboard - UI to manage your WhatsApp sessions!"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 202
-slug: dashboard
-images: ['waha-dashboard.png']
-aliases:
- - /docs/how-to/waha-dashboard
----
-
-**Dashboard** is a UI to manage your WhatsApp sessions!
-
-
-
-You can access **Dashboard** by running the project and opening
-http://localhost:3000/dashboard
-(or similar, but with /dashboard at the end).
-
-ℹ️ **Default username and password**: `admin/admin` (or `waha/waha`)
-
-```bash
-docker run -it -p 3000:3000 devlikeapro/waha-plus #waha-plus
-```
-
-## Configuration
-
-When running WAHA you can set the following environment variables to configure the dashboard:
-
-- `WAHA_DASHBOARD_ENABLED=true` - enable or disable the dashboard, by default `true`. Set to `false` to disable the
- dashboard.
-- `WAHA_DASHBOARD_USERNAME=waha` - username used to log in, by default `admin` or `waha`
-- `WAHA_DASHBOARD_PASSWORD=waha` - password used to log in, by default `admin` or `waha`
-
-```bash
-docker run -it -p 3000:3000 -e WAHA_DASHBOARD_USERNAME=waha -e WAHA_DASHBOARD_PASSWORD=waha devlikeapro/waha-plus
-```
-
-## Api Key
-If you're using [API Key]({{< relref "security" >}}), remember to set up the key in the dashboard.
-
-
-
-## Event Monitor
-You can observe [**Events**]({{< relref "events" >}}) in real-time using **Event Monitor**:
-
-[http://localhost:3000/dashboard/event-monitor](http://localhost:3000/dashboard/event-monitor)
-
-
-
-## Chat UI
-We've built a simple **Chat UI** in Dashboard, so you can see what is possible to implement using WAHA!
-
-{{< imgo src="/images/waha/dashboard/waha-dashboard-chat-ui.png" >}}
-
-You can implement **Live Chat**, **Multiple Agents**, and more features using
-[**WAHA API**](https://waha.devlike.pro/):
-- [**💬 Chats API**]({{< relref "/docs/how-to/chats" >}})
- to get chats overview and messages.
-- [**📤 Send messages API**]({{< relref "/docs/how-to/send-messages" >}})
- to send messages to chats.
-- [**🔄 Message ACK**]({{< relref "/docs/how-to/events#messageack" >}})
- to get message status.
-- [**🔄 Websockets**]({{< relref "/docs/how-to/events#websockets" >}})
- to get real-time messages on the client side.
-
-👉 [**Source Code on Github**](https://github.com/devlikeapro/waha-hub/tree/main/ui/components/chat)
-(Vue3 + PrimeVue) available for [WAHA PRO](https://waha.devlike.pro/support-us/#tier-pro) supporters!
-
-
-
-## Notes
-### Single Dashboard - Multiple Servers
-If you're running multiple servers
-(like [**using sharding to handle 50+ sessions ->**]({{< relref "/blog/waha-scaling" >}}))
-you can run a dedicated WAHA just to have a single place where from you can manage all servers:
-
-{{< imgo src="/images/waha/dashboard/waha-dashboard-servers.drawio.png" >}}
-
-After that you can connect all server to the single dashboard:
-
-{{< imgo src="/images/waha/dashboard/waha-single-dashboard-multiple-servers.png" >}}
-
+---
+title: "📊 Dashboard"
+description: "Dashboard - UI to manage your WhatsApp sessions!"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 202
+slug: dashboard
+images: ["waha-dashboard.png"]
+aliases:
+ - /docs/how-to/waha-dashboard
+---
+
+**Dashboard** is a UI to manage your WhatsApp sessions!
+
+
+
+You can access **Dashboard** by running the project and opening
+http://localhost:3000/dashboard
+(or similar, but with /dashboard at the end).
+
+ℹ️ **Default username and password**: `admin/admin` (or `waha/waha`)
+
+```bash
+docker run -it -p 3000:3000 devlikeapro/waha-plus #waha-plus
+```
+
+## Configuration
+
+When running WAHA you can set the following environment variables to configure the dashboard:
+
+- `WAHA_DASHBOARD_ENABLED=true` - enable or disable the dashboard, by default `true`. Set to `false` to disable the
+ dashboard.
+- `WAHA_DASHBOARD_USERNAME=waha` - username used to log in, by default `admin` or `waha`
+- `WAHA_DASHBOARD_PASSWORD=waha` - password used to log in, by default `admin` or `waha`
+
+```bash
+docker run -it -p 3000:3000 -e WAHA_DASHBOARD_USERNAME=waha -e WAHA_DASHBOARD_PASSWORD=waha devlikeapro/waha-plus
+```
+
+## Api Key
+
+If you're using [API Key]({{< relref "security" >}}), remember to set up the key in the dashboard.
+
+
+
+## Event Monitor
+
+You can observe [**Events**]({{< relref "events" >}}) in real-time using **Event Monitor**:
+
+[http://localhost:3000/dashboard/event-monitor](http://localhost:3000/dashboard/event-monitor)
+
+
+
+## Chat UI
+
+We've built a simple **Chat UI** in Dashboard, so you can see what is possible to implement using WAHA!
+
+{{< imgo src="/images/waha/dashboard/waha-dashboard-chat-ui.png" >}}
+
+You can implement **Live Chat**, **Multiple Agents**, and more features using
+[**WAHA API**](https://waha.devlike.pro/):
+
+- [**💬 Chats API**]({{< relref "/docs/how-to/chats" >}})
+ to get chats overview and messages.
+- [**📤 Send messages API**]({{< relref "/docs/how-to/send-messages" >}})
+ to send messages to chats.
+- [**🔄 Message ACK**]({{< relref "/docs/how-to/events#messageack" >}})
+ to get message status.
+- [**🔄 Websockets**]({{< relref "/docs/how-to/events#websockets" >}})
+ to get real-time messages on the client side.
+
+👉 [**Source Code on Github**](https://github.com/devlikeapro/waha-hub/tree/main/ui/components/chat)
+(Vue3 + PrimeVue) available for [WAHA PRO](https://waha.devlike.pro/support-us/#tier-pro) supporters!
+
+## Notes
+
+### Single Dashboard - Multiple Servers
+
+If you're running multiple servers
+(like [**using sharding to handle 50+ sessions ->**]({{< relref "/blog/waha-scaling" >}}))
+you can run a dedicated WAHA just to have a single place where from you can manage all servers:
+
+{{< imgo src="/images/waha/dashboard/waha-dashboard-servers.drawio.png" >}}
+
+After that you can connect all server to the single dashboard:
+
+{{< imgo src="/images/waha/dashboard/waha-single-dashboard-multiple-servers.png" >}}
diff --git a/content/docs/how-to/engines/index.md b/content/docs/how-to/engines/index.md
index 7e77ff6f9..c21961c50 100644
--- a/content/docs/how-to/engines/index.md
+++ b/content/docs/how-to/engines/index.md
@@ -1,243 +1,258 @@
----
-title: "🏭 Engines"
-description: "Under the hood WAHA allows you to use different engines."
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 295
-images: []
-slug: 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.
-
-```bash
-docker run -it -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha
-```
-
-If you have any problems with one engine - try another!
-
-{{< callout context="note" icon="outline/info-circle" >}}
-API responses and webhook payloads may differ significantly, test everything before changing the engine
-{{< /callout >}}
-
-All engines are available in both
-Core and
-[Plus versions]({{< relref "/docs/how-to/waha-plus" >}}).
-
-| | WEBJS | NOWEB | GOWS |
-|------------------------------------------------------------------|:-----:|:-----:|:-----|
-| Run a **browser** (chromium\chrome) to communicate with WhatsApp | ✔️ | | |
-| Communicate with WhatsApp via **websocket (no browser)** | | ✔️ | ✔️ |
-
-### 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.
-
-```bash
-WHATSAPP_DEFAULT_ENGINE=WEBJS
-```
-
-{{< link-card title="👉 Read more about WEBJS" href="/docs/engines/webjs/" >}}
-
-### GOWS
-
-**GOWS** engine **does not require a browser** to work with WhatsApp Web, it does so directly using a WebSocket.
-
-🚀 It's a new generation engine written in **Golang**, a future replacement for **NOWEB** engine.
-
-```bash
-WHATSAPP_DEFAULT_ENGINE=GOWS
-```
-
-{{< link-card title="👉 Read more about GOWS" href="/docs/engines/gows/" >}}
-
-### 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!
-
-```bash
-WHATSAPP_DEFAULT_ENGINE=NOWEB
-```
-
-{{< link-card title="👉 Read more about NOWEB" href="/docs/engines/noweb/" >}}
-
-
-## Docker images
-WAHA provides few docker images with different setup.
-
-👉 Go to
-[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
-to generate the command with the latest version and your key.
-
-| Image | CPU | Browser |
-|----------------------------------------------------------|-----|-------------------------|
-| [**WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) | | |
-| `devlikeapro/waha-plus:latest` | x86 | Chromium |
-| `devlikeapro/waha-plus:chrome` | x86 | Chrome (supports video) |
-| `devlikeapro/waha-plus:noweb` | x86 | None |
-| `devlikeapro/waha-plus:gows` | x86 | None |
-| `devlikeapro/waha-plus:arm` | ARM | Chromium |
-| `-` | ARM | Chrome |
-| `devlikeapro/waha-plus:noweb-arm` | ARM | None |
-| **WAHA Core** | | |
-| `devlikeapro/waha:latest` | x86 | Chromium |
-| `devlikeapro/waha:chrome` | x86 | Chrome |
-| `devlikeapro/waha:noweb` | x86 | None |
-| `-` | ARM | Chrome |
-| `devlikeapro/waha:arm` | ARM | Chromium |
-| `devlikeapro/waha:noweb-arm` | ARM | None |
-
-
-```bash
-devlikeapro/{image}:{browser}[-cpu][-version]
-```
-
-`{image}`:
-- `waha-plus` - [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) image
-- `waha` - **WAHA Core** 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.
-
-| Symbol | Meaning |
-|:--------------------------------------------------:|-----------------------------------------------------------------------------------|
-| ✔️ | The engines supports the feature. |
-| [#123](https://github.com/devlikeapro/waha/issues) | Feature request or bug for the endpoint |
-| | The feature available in [WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}}). |
-
-If you don't specify `WHATSAPP_DEFAULT_ENGINE` environment variable - look at **WEBJS** engine,
-it's the engine WAHA runs by default.
-
-
-### 🖥️ Sessions
-Read more about
-[**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}})
-
-{{< include file="content/docs/how-to/sessions/features.md" >}}
-
-{{< include file="content/docs/how-to/sessions/features-events.md" >}}
-
-### 📤 Messages
-Read more about
-[**📤 Send Messages**]({{< relref "/docs/how-to/send-messages" >}})
-and
-[**📥 Receive Messages**]({{< relref "/docs/how-to/receive-messages" >}})
-
-{{< include file="content/docs/how-to/send-messages/features.md" >}}
-
-{{< include file="content/docs/how-to/receive-messages/features-events.md" >}}
-
-### 🟢 Status
-Read more about
-[**🟢 Status**]({{< relref "/docs/how-to/status" >}})
-
-{{< include file="content/docs/how-to/status/features.md" >}}
-
-### 💬 Chats
-Read more about
-[**💬 Chats**]({{< relref "/docs/how-to/chats" >}})
-
-{{< include file="content/docs/how-to/chats/features.md" >}}
-
-{{< include file="content/docs/how-to/chats/features-events.md" >}}
-
-### 👤 Contacts
-Read more about
-[**👤 Contacts**]({{< relref "/docs/how-to/contacts" >}})
-
-{{< include file="content/docs/how-to/contacts/features.md" >}}
-
-### 📢 Channels
-Read more about
-[**📢 Channels**]({{< relref "/docs/how-to/channels" >}})
-
-{{< include file="content/docs/how-to/channels/features.md" >}}
-
-### 👥 Groups
-Read more about
-[**👥 Groups**]({{< relref "/docs/how-to/groups" >}})
-
-{{< include file="content/docs/how-to/groups/features.md" >}}
-
-{{< include file="content/docs/how-to/groups/features-events.md" >}}
-
-### ✅ Presence
-Read more about
-[**✅ Presence**]({{< relref "/docs/how-to/presence" >}})
-
-{{< include file="content/docs/how-to/presence/features.md" >}}
-
-{{< include file="content/docs/how-to/presence/features-events.md" >}}
-
-### 🏷️ Labels
-Read more about
-[**🏷️ Labels**]({{< relref "/docs/how-to/labels" >}})
-
-{{< include file="content/docs/how-to/labels/features.md" >}}
-
-{{< include file="content/docs/how-to/labels/features-events.md" >}}
-
-### 📅 Event Message
-Read more about
-[**📅 Event Message**]({{< relref "/docs/how-to/event-message" >}})
-
-{{< include file="content/docs/how-to/event-message/features.md" >}}
-
-{{< include file="content/docs/how-to/event-message/features-events.md" >}}
-
-### 📶 Polls
-Read more about
-[**📶 Polls**]({{< relref "/docs/how-to/polls" >}})
-
-{{< include file="content/docs/how-to/polls/features.md" >}}
-
-{{< include file="content/docs/how-to/polls/features-events.md" >}}
-
-### 📞 Calls
-Read more about
-[**📞 Calls**]({{< relref "/docs/how-to/calls" >}})
-
-{{< include file="content/docs/how-to/calls/features-events.md" >}}
-
-### 🗄️ Storages
-Read more about
-[**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}})
-
-
-{{< details "**🗄️ Storages**" >}}
-{{< include file="content/docs/how-to/storages/features.md" >}}
-{{< /details >}}
-
-### 🔍 Observability
-
-Read more about
-[**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
-
-### 🔄 Events
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
-
-{{< include file="content/docs/how-to/events/features-events.md" >}}
-
+---
+title: "🏭 Engines"
+description: "Under the hood WAHA allows you to use different engines."
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 295
+images: []
+slug: 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.
+
+```bash
+docker run -it -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha
+```
+
+If you have any problems with one engine - try another!
+
+{{< callout context="note" icon="outline/info-circle" >}}
+API responses and webhook payloads may differ significantly, test everything before changing the engine
+{{< /callout >}}
+
+All engines are available in both
+Core and
+[Plus versions]({{< relref "/docs/how-to/waha-plus" >}}).
+
+| | WEBJS | NOWEB | GOWS |
+| ---------------------------------------------------------------- | :---: | :---: | :--- |
+| Run a **browser** (chromium\chrome) to communicate with WhatsApp | ✔️ | | |
+| Communicate with WhatsApp via **websocket (no browser)** | | ✔️ | ✔️ |
+
+### 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.
+
+```bash
+WHATSAPP_DEFAULT_ENGINE=WEBJS
+```
+
+{{< link-card title="👉 Read more about WEBJS" href="/docs/engines/webjs/" >}}
+
+### GOWS
+
+**GOWS** engine **does not require a browser** to work with WhatsApp Web, it does so directly using a WebSocket.
+
+🚀 It's a new generation engine written in **Golang**, a future replacement for **NOWEB** engine.
+
+```bash
+WHATSAPP_DEFAULT_ENGINE=GOWS
+```
+
+{{< link-card title="👉 Read more about GOWS" href="/docs/engines/gows/" >}}
+
+### 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!
+
+```bash
+WHATSAPP_DEFAULT_ENGINE=NOWEB
+```
+
+{{< link-card title="👉 Read more about NOWEB" href="/docs/engines/noweb/" >}}
+
+## Docker images
+
+WAHA provides few docker images with different setup.
+
+👉 Go to
+[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
+to generate the command with the latest version and your key.
+
+| Image | CPU | Browser |
+| -------------------------------------------------------- | --- | ----------------------- |
+| [**WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) | | |
+| `devlikeapro/waha-plus:latest` | x86 | Chromium |
+| `devlikeapro/waha-plus:chrome` | x86 | Chrome (supports video) |
+| `devlikeapro/waha-plus:noweb` | x86 | None |
+| `devlikeapro/waha-plus:gows` | x86 | None |
+| `devlikeapro/waha-plus:arm` | ARM | Chromium |
+| `-` | ARM | Chrome |
+| `devlikeapro/waha-plus:noweb-arm` | ARM | None |
+| **WAHA Core** | | |
+| `devlikeapro/waha:latest` | x86 | Chromium |
+| `devlikeapro/waha:chrome` | x86 | Chrome |
+| `devlikeapro/waha:noweb` | x86 | None |
+| `-` | ARM | Chrome |
+| `devlikeapro/waha:arm` | ARM | Chromium |
+| `devlikeapro/waha:noweb-arm` | ARM | None |
+
+```bash
+devlikeapro/{image}:{browser}[-cpu][-version]
+```
+
+`{image}`:
+
+- `waha-plus` - [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) image
+- `waha` - **WAHA Core** 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.
+
+| Symbol | Meaning |
+| :------------------------------------------------: | ------------------------------------------------------------------------------ |
+| ✔️ | The engines supports the feature. |
+| [#123](https://github.com/devlikeapro/waha/issues) | Feature request or bug for the endpoint |
+| | The feature available in [WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}}). |
+
+If you don't specify `WHATSAPP_DEFAULT_ENGINE` environment variable - look at **WEBJS** engine,
+it's the engine WAHA runs by default.
+
+### 🖥️ Sessions
+
+Read more about
+[**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}})
+
+{{< include file="content/docs/how-to/sessions/features.md" >}}
+
+{{< include file="content/docs/how-to/sessions/features-events.md" >}}
+
+### 📤 Messages
+
+Read more about
+[**📤 Send Messages**]({{< relref "/docs/how-to/send-messages" >}})
+and
+[**📥 Receive Messages**]({{< relref "/docs/how-to/receive-messages" >}})
+
+{{< include file="content/docs/how-to/send-messages/features.md" >}}
+
+{{< include file="content/docs/how-to/receive-messages/features-events.md" >}}
+
+### 🟢 Status
+
+Read more about
+[**🟢 Status**]({{< relref "/docs/how-to/status" >}})
+
+{{< include file="content/docs/how-to/status/features.md" >}}
+
+### 💬 Chats
+
+Read more about
+[**💬 Chats**]({{< relref "/docs/how-to/chats" >}})
+
+{{< include file="content/docs/how-to/chats/features.md" >}}
+
+{{< include file="content/docs/how-to/chats/features-events.md" >}}
+
+### 👤 Contacts
+
+Read more about
+[**👤 Contacts**]({{< relref "/docs/how-to/contacts" >}})
+
+{{< include file="content/docs/how-to/contacts/features.md" >}}
+
+### 📢 Channels
+
+Read more about
+[**📢 Channels**]({{< relref "/docs/how-to/channels" >}})
+
+{{< include file="content/docs/how-to/channels/features.md" >}}
+
+### 👥 Groups
+
+Read more about
+[**👥 Groups**]({{< relref "/docs/how-to/groups" >}})
+
+{{< include file="content/docs/how-to/groups/features.md" >}}
+
+{{< include file="content/docs/how-to/groups/features-events.md" >}}
+
+### ✅ Presence
+
+Read more about
+[**✅ Presence**]({{< relref "/docs/how-to/presence" >}})
+
+{{< include file="content/docs/how-to/presence/features.md" >}}
+
+{{< include file="content/docs/how-to/presence/features-events.md" >}}
+
+### 🏷️ Labels
+
+Read more about
+[**🏷️ Labels**]({{< relref "/docs/how-to/labels" >}})
+
+{{< include file="content/docs/how-to/labels/features.md" >}}
+
+{{< include file="content/docs/how-to/labels/features-events.md" >}}
+
+### 📅 Event Message
+
+Read more about
+[**📅 Event Message**]({{< relref "/docs/how-to/event-message" >}})
+
+{{< include file="content/docs/how-to/event-message/features.md" >}}
+
+{{< include file="content/docs/how-to/event-message/features-events.md" >}}
+
+### 📶 Polls
+
+Read more about
+[**📶 Polls**]({{< relref "/docs/how-to/polls" >}})
+
+{{< include file="content/docs/how-to/polls/features.md" >}}
+
+{{< include file="content/docs/how-to/polls/features-events.md" >}}
+
+### 📞 Calls
+
+Read more about
+[**📞 Calls**]({{< relref "/docs/how-to/calls" >}})
+
+{{< include file="content/docs/how-to/calls/features-events.md" >}}
+
+### 🗄️ Storages
+
+Read more about
+[**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}})
+
+
+{{< details "**🗄️ Storages**" >}}
+{{< include file="content/docs/how-to/storages/features.md" >}}
+{{< /details >}}
+
+### 🔍 Observability
+
+Read more about
+[**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
+
+### 🔄 Events
+
+Read more about
+[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
+
+{{< include file="content/docs/how-to/events/features-events.md" >}}
diff --git a/content/docs/how-to/event-message/events-event-response-failed.md b/content/docs/how-to/event-message/events-event-response-failed.md
index d1dc6344d..c7116c51b 100644
--- a/content/docs/how-to/event-message/events-event-response-failed.md
+++ b/content/docs/how-to/event-message/events-event-response-failed.md
@@ -1,35 +1,35 @@
-Sometimes it happens that we didn't manager to decrypt the response for the event.
-In that case you'll get `event.response.failed` event with `eventResponse: null`.
-
-**Resend the Event Message** one more time if you get this event to get a new response
-
-```json { title="event.response.failed" }
-{
- "id": "evt_00000000000000000000001",
- "session": "default",
- "event": "event.response.failed",
- "payload": {
- "id": "false_11111111111111111@c.us_58BBBBBBBBBBBBBBBBBBBBBBBB",
- "timestamp": 1747707858,
- "from": "11111111111111111@c.us",
- "participant": null,
- "fromMe": false,
- "eventCreationKey": {
- "id": "false_999999999999@c.us_3EBAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "to": "me",
- "from": "999999999999@c.us",
- "fromMe": false
- },
- "eventResponse": null, // <=== eventResponse will be null in that case
- "source": "app",
- "ack": null,
- "ackName": "UNKNOWN",
- "replyTo": null,
- "_data": {...},
- }
-}
-```
-
-
-**Payload**:
-- the same as for `event.response` payload, but with `eventResponse: null`
\ No newline at end of file
+Sometimes it happens that we didn't manager to decrypt the response for the event.
+In that case you'll get `event.response.failed` event with `eventResponse: null`.
+
+**Resend the Event Message** one more time if you get this event to get a new response
+
+```json { title="event.response.failed" }
+{
+ "id": "evt_00000000000000000000001",
+ "session": "default",
+ "event": "event.response.failed",
+ "payload": {
+ "id": "false_11111111111111111@c.us_58BBBBBBBBBBBBBBBBBBBBBBBB",
+ "timestamp": 1747707858,
+ "from": "11111111111111111@c.us",
+ "participant": null,
+ "fromMe": false,
+ "eventCreationKey": {
+ "id": "false_999999999999@c.us_3EBAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "to": "me",
+ "from": "999999999999@c.us",
+ "fromMe": false
+ },
+ "eventResponse": null, // <=== eventResponse will be null in that case
+ "source": "app",
+ "ack": null,
+ "ackName": "UNKNOWN",
+ "replyTo": null,
+ "_data": {...},
+ }
+}
+```
+
+**Payload**:
+
+- the same as for `event.response` payload, but with `eventResponse: null`
diff --git a/content/docs/how-to/event-message/events-event-response.md b/content/docs/how-to/event-message/events-event-response.md
index 115bf98e5..577e6ef69 100644
--- a/content/docs/how-to/event-message/events-event-response.md
+++ b/content/docs/how-to/event-message/events-event-response.md
@@ -1,49 +1,50 @@
-```json { title="event.response" }
-{
- "id": "evt_00000000000000000000001",
- "session": "default",
- "event": "event.response",
- "payload": {
- "id": "false_11111111111111111@c.us_58BBBBBBBBBBBBBBBBBBBBBBBB",
- "timestamp": 1747707858,
- "from": "11111111111111111@c.us",
- "participant": null,
- "fromMe": false,
- "eventCreationKey": {
- "id": "false_999999999999@c.us_3EBAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "to": "me",
- "from": "999999999999@c.us",
- "fromMe": false
- },
- "eventResponse": {
- "response": "GOING",
- "timestampMs": 1747707858429,
- "extraGuestCount": 0
- },
- "source": "app",
- "ack": null,
- "ackName": "UNKNOWN",
- "replyTo": null,
- "_data": {...},
- }
-}
-```
-
-**Payload**:
-- **Most of the fields** are the same as for `message` and `message.any` events
-- `eventCreationKey`: Information about the original event message
- - `id`: Unique identifier of the original event message
- - Format `{fromMe}_{chatId}_{messageId}[_{participant}]`)
- - You need to parse it to get `messageId` and find event that you sent previously, `fromMe` and `chatId` is **from participant**, not yours.
- - `to`: Recipient of the original event message (usually "me")
- - `from`: WhatsApp ID of the sender of the original event message
- - `fromMe`: Boolean indicating if the original event was sent by you
-- `eventResponse`: Details of the user's response to the event
- - `response`: The selected response option: `GOING`, `NOT_GOING`, `MAYBE`
- - `timestampMs`: Unix timestamp in milliseconds when the response was made
- - `extraGuestCount`: Number of additional guests the respondent is bringing (`0\1`)
-- `source`: Source of the message (usually "app")
-- `ack`: Acknowledgment status code
-- `ackName`: Human-readable acknowledgment status
-- `replyTo`: Reference to a message being replied to (null if not a reply)
-- `_data`: Raw data object containing additional information
+```json { title="event.response" }
+{
+ "id": "evt_00000000000000000000001",
+ "session": "default",
+ "event": "event.response",
+ "payload": {
+ "id": "false_11111111111111111@c.us_58BBBBBBBBBBBBBBBBBBBBBBBB",
+ "timestamp": 1747707858,
+ "from": "11111111111111111@c.us",
+ "participant": null,
+ "fromMe": false,
+ "eventCreationKey": {
+ "id": "false_999999999999@c.us_3EBAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "to": "me",
+ "from": "999999999999@c.us",
+ "fromMe": false
+ },
+ "eventResponse": {
+ "response": "GOING",
+ "timestampMs": 1747707858429,
+ "extraGuestCount": 0
+ },
+ "source": "app",
+ "ack": null,
+ "ackName": "UNKNOWN",
+ "replyTo": null,
+ "_data": {...},
+ }
+}
+```
+
+**Payload**:
+
+- **Most of the fields** are the same as for `message` and `message.any` events
+- `eventCreationKey`: Information about the original event message
+ - `id`: Unique identifier of the original event message
+ - Format `{fromMe}_{chatId}_{messageId}[_{participant}]`)
+ - You need to parse it to get `messageId` and find event that you sent previously, `fromMe` and `chatId` is **from participant**, not yours.
+ - `to`: Recipient of the original event message (usually "me")
+ - `from`: WhatsApp ID of the sender of the original event message
+ - `fromMe`: Boolean indicating if the original event was sent by you
+- `eventResponse`: Details of the user's response to the event
+ - `response`: The selected response option: `GOING`, `NOT_GOING`, `MAYBE`
+ - `timestampMs`: Unix timestamp in milliseconds when the response was made
+ - `extraGuestCount`: Number of additional guests the respondent is bringing (`0\1`)
+- `source`: Source of the message (usually "app")
+- `ack`: Acknowledgment status code
+- `ackName`: Human-readable acknowledgment status
+- `replyTo`: Reference to a message being replied to (null if not a reply)
+- `_data`: Raw data object containing additional information
diff --git a/content/docs/how-to/event-message/features-events.md b/content/docs/how-to/event-message/features-events.md
index 9a4850917..e9d339004 100644
--- a/content/docs/how-to/event-message/features-events.md
+++ b/content/docs/how-to/event-message/features-events.md
@@ -1,9 +1,9 @@
-
-{{< details "**📅 Event Message - Events**" >}}
-
-| **Events** | WEBJS | NOWEB | GOWS |
-|-------------------------|:-----:|:-----:|:----:|
-| `event.response` | | | ✔️ |
-| `event.response.failed` | | | ✔️ |
-
-{{< /details >}}
+
+{{< details "**📅 Event Message - Events**" >}}
+
+| **Events** | WEBJS | NOWEB | GOWS |
+| ----------------------- | :---: | :---: | :--: |
+| `event.response` | | | ✔️ |
+| `event.response.failed` | | | ✔️ |
+
+{{< /details >}}
diff --git a/content/docs/how-to/event-message/features.md b/content/docs/how-to/event-message/features.md
index 0d09fd17a..4f58d2df6 100644
--- a/content/docs/how-to/event-message/features.md
+++ b/content/docs/how-to/event-message/features.md
@@ -1,8 +1,8 @@
-
-{{< details "**📅 Event Message - API**" >}}
-
-| **API** | WEBJS | NOWEB | GOWS |
-|----------------------------------------------------------|:-----:|:-----:|:----:|
-| **Send Event Message** `POST /api/{SESSION}/events` | | | ✔️ |
-
-{{< /details >}}
+
+{{< details "**📅 Event Message - API**" >}}
+
+| **API** | WEBJS | NOWEB | GOWS |
+| -------------------------------------------------------- | :---: | :---: | :--: |
+| **Send Event Message** `POST /api/{SESSION}/events` | | | ✔️ |
+
+{{< /details >}}
diff --git a/content/docs/how-to/event-message/index.md b/content/docs/how-to/event-message/index.md
index 0cf461c40..a76e322c7 100644
--- a/content/docs/how-to/event-message/index.md
+++ b/content/docs/how-to/event-message/index.md
@@ -1,79 +1,82 @@
----
-title: "📅 Event Message"
-description: "Event Message"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 293
-slug: event-message
-images: [ "whatsapp-event-message.jpg"]
----
-You can **send Event Message** and **receive responses** in WhatsApp using API .
-
-Remind clients about their appointments natively:
-
-
-
-## Features
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/event-message/features.md" >}}
-{{< include file="content/docs/how-to/event-message/features-events.md" >}}
-
-## API
-
-### Send Event Message
-```http request
-POST /api/{SESSION}/events
-```
-
-```json { title="Body" }
-{
- "chatId": "123123@c.us",
- "reply_to": null,
- "event": {
- "name": "John's Nail Appointment 💅",
- "description": "It's time for your nail care session! 🌟\\n\\nYou'll be getting a *classic gel manicure* – clean, polished, and long-lasting. 💖\\n\\n📍 *Location:* Luxe Nail Studio\\nWe're on the *2nd floor of the Plaza Mall*, next to the flower shop. Look for the *pink neon sign*!\\n\\nFeel free to arrive *5–10 mins early* so we can get started on time 😊",
- "startTime": 2063137000,
- "endTime": null,
- "location": {
- "name": "Luxe Nail Studio 💅"
- },
- "extraGuestsAllowed": false
- }
-}
-```
-
-Fields:
-- `chatId` - The WhatsApp ID of the chat where you want to send the event message (e.g., "123123@c.us")
-- `event` - Object containing event details:
- - `name` - The title of the event
- - `description` - Detailed description of the event (supports formatting with \n for newlines and * for bold text)
- - `startTime` - Event start time in Unix timestamp format (**seconds** since epoch)
- - `endTime` - Event end time in Unix timestamp format (optional, can be null)
- - `location` - (Optional) Object containing location details
- - `name` - Name of the location
- - `extraGuestsAllowed` - indicating whether additional guests are allowed (true/false)
-- `reply_to` - Message ID to reply to (optional, can be null)
-
-
-## Events
-Receive responses for your event using events!
-
-{{< include file="content/docs/how-to/event-message/features-events.md" >}}
-
-
+
+## Features
+
+Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
+
+{{< include file="content/docs/how-to/event-message/features.md" >}}
+{{< include file="content/docs/how-to/event-message/features-events.md" >}}
+
+## API
+
+### Send Event Message
+
+```http request
+POST /api/{SESSION}/events
+```
+
+```json { title="Body" }
+{
+ "chatId": "123123@c.us",
+ "reply_to": null,
+ "event": {
+ "name": "John's Nail Appointment 💅",
+ "description": "It's time for your nail care session! 🌟\\n\\nYou'll be getting a *classic gel manicure* – clean, polished, and long-lasting. 💖\\n\\n📍 *Location:* Luxe Nail Studio\\nWe're on the *2nd floor of the Plaza Mall*, next to the flower shop. Look for the *pink neon sign*!\\n\\nFeel free to arrive *5–10 mins early* so we can get started on time 😊",
+ "startTime": 2063137000,
+ "endTime": null,
+ "location": {
+ "name": "Luxe Nail Studio 💅"
+ },
+ "extraGuestsAllowed": false
+ }
+}
+```
+
+Fields:
+
+- `chatId` - The WhatsApp ID of the chat where you want to send the event message (e.g., "123123@c.us")
+- `event` - Object containing event details:
+ - `name` - The title of the event
+ - `description` - Detailed description of the event (supports formatting with \n for newlines and \* for bold text)
+ - `startTime` - Event start time in Unix timestamp format (**seconds** since epoch)
+ - `endTime` - Event end time in Unix timestamp format (optional, can be null)
+ - `location` - (Optional) Object containing location details
+ - `name` - Name of the location
+ - `extraGuestsAllowed` - indicating whether additional guests are allowed (true/false)
+- `reply_to` - Message ID to reply to (optional, can be null)
+
+## Events
+
+Receive responses for your event using events!
+
+{{< include file="content/docs/how-to/event-message/features-events.md" >}}
+
+
+
+### event.response
+
+{{< include file="content/docs/how-to/event-message/events-event-response.md" >}}
+
+### event.response.failed
+
+{{< include file="content/docs/how-to/event-message/events-event-response-failed.md" >}}
diff --git a/content/docs/how-to/events/features-events.md b/content/docs/how-to/events/features-events.md
index 17ea11f59..8c90ce7c3 100644
--- a/content/docs/how-to/events/features-events.md
+++ b/content/docs/how-to/events/features-events.md
@@ -1,16 +1,16 @@
-
-{{< include file="content/docs/how-to/sessions/features-events.md" >}}
-
-{{< include file="content/docs/how-to/receive-messages/features-events.md" >}}
-
-{{< include file="content/docs/how-to/chats/features-events.md" >}}
-
-{{< include file="content/docs/how-to/groups/features-events.md" >}}
-
-{{< include file="content/docs/how-to/labels/features-events.md" >}}
-
-{{< include file="content/docs/how-to/presence/features-events.md" >}}
-
-{{< include file="content/docs/how-to/polls/features-events.md" >}}
-
-{{< include file="content/docs/how-to/calls/features-events.md" >}}
+
+{{< include file="content/docs/how-to/sessions/features-events.md" >}}
+
+{{< include file="content/docs/how-to/receive-messages/features-events.md" >}}
+
+{{< include file="content/docs/how-to/chats/features-events.md" >}}
+
+{{< include file="content/docs/how-to/groups/features-events.md" >}}
+
+{{< include file="content/docs/how-to/labels/features-events.md" >}}
+
+{{< include file="content/docs/how-to/presence/features-events.md" >}}
+
+{{< include file="content/docs/how-to/polls/features-events.md" >}}
+
+{{< include file="content/docs/how-to/calls/features-events.md" >}}
diff --git a/content/docs/how-to/events/index.md b/content/docs/how-to/events/index.md
index 8be68cdff..b654b31c2 100644
--- a/content/docs/how-to/events/index.md
+++ b/content/docs/how-to/events/index.md
@@ -1,807 +1,836 @@
----
-title : "🔄 Events"
-description: "Events - how to set up and handle them using Webhooks and Websockets"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 223
-slug: events
-images: [ "webhooks.png" ]
-aliases:
- - /docs/how-to/events
- - /docs/how-to/webhooks
- - /docs/how-to/websockets
----
-
-In order to notify your application about events in the WhatsApp API, you can use
-[**Webhooks**](#webhooks) and [**Websockets**](#websockets).
-
-👉 See the list of all available events in the [**Events**](#events) section.
-
-🌟 You can observe **Events** in real-time using
-[**📊 Dashboard - Event Monitor**]({{< relref "dashboard#event-monitor" >}})!
-
-## Webhooks
-
-
-
-**Webhooks** are a way for two different applications to communicate with each other in real-time.
-When a certain event happens in one application, it sends a message to another application through a webhook URL.
-The receiving application can then take action based on the information received.
-
-### Session webhooks
-You can define webhooks configuration per session when you start it with `POST /api/sessions/` request data.
-
-Here's a simple example:
-```json
-{
- "name": "default",
- "config": {
- "webhooks": [
- {
- "url": "https://webhook.site/11111111-1111-1111-1111-11111111",
- "events": [
- "message"
- ]
- }
- ]
- }
-}
-
-```
-
-Here's available configuration options for webhooks
-```json
-{
- "name": "default",
- "config": {
- "webhooks": [
- {
- "url": "https://webhook.site/11111111-1111-1111-1111-11111111",
- "events": [
- "message"
- ],
- "hmac": {
- "key": "your-secret-key"
- },
- "retries": {
- "policy": "constant",
- "delaySeconds": 2,
- "attempts": 15
- },
- "customHeaders": [
- {
- "name": "X-My-Custom-Header",
- "value": "Value"
- }
- ]
- }
- ]
- }
-}
-```
-
-### Global webhooks
-There's a way how you can configure
-[**🔄 Webhooks**]({{< relref "/docs/how-to/events#webhooks" >}})
-for **all sessions** at once - by settings these environment variables:
-
-- `WHATSAPP_HOOK_URL=https://webhook.site/11111111-1111-1111-1111-11111111` - to set up a URL for the webhook
-- `WHATSAPP_HOOK_EVENTS=message,message.any,state.change` - specify events.
- - `WHATSAPP_HOOK_EVENTS=*` - subscribe to all events.
- - We don't suggest using `*` or all events for production, it can generate a lot of requests.
-- `WHATSAPP_HOOK_HMAC_KEY=your-secret-key` - the same as `hmac.key` field in the webhook configuration.
-- `WHATSAPP_HOOK_RETRIES_POLICY=linear` - the same as `retries.policy` field in the webhook configuration.
-- `WHATSAPP_HOOK_RETRIES_DELAY_SECONDS=2` - the same as `retries.delaySeconds` field in the webhook configuration.
-- `WHATSAPP_HOOK_RETRIES_ATTEMPTS=4`
-- `WHATSAPP_HOOK_CUSTOM_HEADERS=X-My-Custom-Header-1:Value;X-My-Custom-Header-2:Value` - the same as `customHeaders` field in the webhook configuration.
- - Use `Header:Value` format and separate them by `;`.
-
-That webhook configuration **does not appear** in `session.config` field in `GET /api/sessions/` request.
-
-
-💡 You can open [https://webhook.site](https://webhook.site) and paste URL from it to `url` field,
-and you'll see all requests immediately in your browser to intercept the webhook's payload.
-
-### Retries
-You can configure retry policy for webhooks by settings `config.retries` structure when `POST /api/sessions/`:
-
-```json
-{
- "name": "default",
- "config": {
- "webhooks": [
- {
- "url": "https://webhook.site/11111111-1111-1111-1111-11111111",
- "events": [
- "message"
- ],
- "retries": {
- "policy": "constant",
- "delaySeconds": 2,
- "attempts": 15
- }
- }
- ]
- }
-}
-
-```
-
-Possible `policy`:
-- `constant` - retry with the same delay between attempts (2, 2, 2, 2)
-- `linear` - retry with linear backoff (2, 4, 6, 8)
-- `exponential` - retry with exponential backoff with 20% jitter (2, 4.1, 8.4, 16.3).
-
-### Headers
-When you receive a webhook request to your API endpoint, you'll get **those headers**:
-- `X-Webhook-Request-Id` - unique request id for each webhook request.
-- `X-Webhook-Timestamp` - Unix timestamp in milliseconds when the webhook was sent.
-
-If you're using [**HMAC authentication**](#hmac-authentication) you'll get two additional headers:
-- `X-Webhook-Hmac` - message authentication code for the raw **body** in HTTP POST request that send to your endpoint.
-- `X-Webhook-Hmac-Algorithm` - `sha512` - algorithm that have been used to create `X-Webhook-Hmac` value.
-
-You can send any **customer headers** by defining `config.webhooks.customHeaders` fields this way:
-```json
-{
- "name": "default",
- "config": {
- "webhooks": [
- {
- "url": "https://webhook.site/11111111-1111-1111-1111-11111111",
- "events": [
- "message"
- ],
- "customHeaders": [
- {
- "name": "X-My-Custom-Header",
- "value": "Value"
- }
- ]
- }
- ]
- }
-}
-```
-
-
-### HMAC authentication
-
-You can authenticate webhook sender by using [HMAC Authentication](https://www.okta.com/identity-101/hmac/).
-
-1. Define you secret key in `config.hmac.key` field when you start session with `POST /api/sessions/`:
-
-```json
-{
- "name": "default",
- "config": {
- "webhooks": [
- {
- "url": "https://webhook.site/11111111-1111-1111-1111-11111111",
- "events": [
- "message"
- ],
- "hmac": {
- "key": "your-secret-key"
- }
- }
- ]
- }
-}
-```
-
-2. After that you'll receive all webhooks payload with two additional headers:
-- `X-Webhook-Hmac` - message authentication code for the raw **body** in HTTP POST request that send to your endpoint.
-- `X-Webhook-Hmac-Algorithm` - `sha512` - algorithm that have been used to create `X-Webhook-Hmac` value.
-
-3. Implement the authentication algorithm by hashing body and using secret key and then verifying it with `X-Webhook-Hmac`
-value. Please [check your implementation here ->](https://www.devglan.com/online-tools/hmac-sha256-online)
-
-Here's example for
-```
-# Full body
-{"event":"message","session":"default","engine":"WEBJS"}
-# Secret key
-my-secret-key
-# X-Webhook-Hmac-Algorithm
-sha512
-# X-Webhook-Hmac
-208f8a55dde9e05519e898b10b89bf0d0b3b0fdf11fdbf09b6b90476301b98d8097c462b2b17a6ce93b6b47a136cf2e78a33a63f6752c2c1631777076153fa89
-```
-
-### Examples
-Here's few examples of how to handle webhook in different languages:
-1. [Python guide]({{< relref "/docs/integrations/waha+python" >}})
-
-**Do you use another language?**
-
-Please create a short guide how to handle webhook and send message after you finish your setup!
-You can create a pull request with your favorite language in the
-[GitHub, in examples folder ->](https://github.com/devlikeapro/waha/tree/core/examples).
-
-## Websockets
-You can use Websockets to receive messages in real-time!
-
-Install [websocat](https://github.com/vi/websocat?tab=readme-ov-file#installation) first.
-
-```bash
-# Listen all sessions and events
-# -E to end the connection when the server closes it
-websocat -E ws://localhost:3000/ws
-
-# Use secure (SSL/HTTPS) connection - add wss://
-websocat -E wss://localhost:3000/ws
-
-# Add your API key
-websocat -E ws://localhost:3000/ws?x-api-key=123
-
-# Listen all sessions and events
-websocat -E ws://localhost:3000/ws?session=*&events=*
-
-# Listen certain events
-websocat -E ws://localhost:3000/ws?session=*&events=session.status&events=message
-
-# If you want to see the logs and ping the server every 10 seconds
-websocat -v --ping-interval=10 -E ws://localhost:3000/ws
-
-# Listen certain session
-websocat -E ws://localhost:3000/ws?session=default&events=session.status
-
-# With API Key
-websocat -E ws://localhost:3000/ws?x-api-key=123
-```
-
-Parameters:
-- `session` - session name, `*` for all sessions
-- `events` - list of events, `*` for all events
- - `events=*` doesn't include `engine.event`. You need to specify `events=*&events=engine.event` if you want to listen all events
-- `x-api-key` - your API key
-
-### Examples
-#### JavaScript
-```javascript
-// Configuration
-const apiKey = '123'; // Replace with your API key
-const baseUrl = 'ws://localhost:3000/ws';
-const session = '*'; // Use '*' to listen to all sessions
-const events = ['session.status', 'message']; // List of events to listen to
-
-// Construct the WebSocket URL with query parameters
-const queryParams = new URLSearchParams({
- 'x-api-key': apiKey,
- session,
- ...events.reduce((acc, event) => ({ ...acc, events: event }), {}) // Add multiple 'events' params
-});
-const wsUrl = `${baseUrl}?${queryParams.toString()}`;
-
-// Initialize WebSocket connection
-const socket = new WebSocket(wsUrl);
-
-// Handle incoming messages
-socket.onmessage = (event) => {
- console.log('Received:', event.data);
-};
-
-// Handle errors
-socket.onerror = (error) => {
- console.error('WebSocket Error:', error);
-};
-
-// Handle connection open
-socket.onopen = () => {
- console.log('WebSocket connection established:', wsUrl);
-};
-
-// Handle connection close
-socket.onclose = () => {
- console.log('WebSocket connection closed');
-};
-```
-
-## Event Payload
-### Structure
-In [**Webhooks**](#webhooks) or [**Websockets**](#websockets) you'll receive the following payload:
-
-```json
-{
- // lower case ULID - https://github.com/ulid/spec
- "id": "evt_1111111111111111111111111111",
- // timestamp in milliseconds
- "timestamp": 1741249702485,
- // event name
- "event": "message",
- // session name
- "session": "default",
- // 'metadata' provided when you created the session
- "metadata": {
- "user.id": "123",
- "user.email": "email@example.com"
- },
- // me - your own contact, if authenticated and WORKING
- "me": {
- "id": "71111111111@c.us",
- "pushName": "~"
- },
- "payload": {
- ... // event specific data
- },
- "environment": {
- "tier": "PLUS",
- "version": "2023.10.12"
- },
- "engine": "WEBJS"
-}
-```
-
-### Metadata
-You can provide additional `metadata` when you start the session with
-[**Start Session**]({{< relref "/docs/how-to/sessions#start-session" >}})
-request data.
-
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- // 'metadata' provided when you created the session
- "metadata": {
- "user.id": "123",
- "user.email": "email@example.com"
- },
- ...
-}
-```
-
-You'll receive the same `metadata` in the webhook payload.
-
-
-## Events
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-
-{{< include file="content/docs/how-to/events/features-events.md" >}}
-
-### session.status
-The `session.status` event is triggered when the session status changes.
-- `STOPPED` - session is stopped
-- `STARTING` - session is starting
-- `SCAN_QR_CODE` - session is required to scan QR code or login via phone number
- - When you receive the `session.status` event with `SCAN_QR_CODE` status, you can [**fetch updated QR ->**]({{< relref "/docs/how-to/sessions#get-qr" >}})
- - The `SCAN_QR_CODE` is issued every time when QR updated (WhatsApp requirements)
-- `WORKING` - session is working and ready to use
-- `FAILED` - session is failed due to some error. It's likely that authorization is required again or device has been disconnected from that account.
- Try to restart the session and if it doesn't help - logout and start the session again.
-
-```json { title="session.status" }
-{
- "event": "session.status",
- "session": "default",
- "me": {
- "id": "7911111@c.us",
- "pushName": "~"
- },
- "payload": {
- "status": "WORKING"
- },
- "engine": "WEBJS",
- "environment": {
- "version": "2023.10.12",
- "engine": "WEBJS",
- "tier": "PLUS"
- }
-}
-```
-
-### message
-
-Incoming message (text/audio/files)
-
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "engine": "WEBJS",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "from": "11111111111@c.us",
- "fromMe": true,
- "source": "app",
- "to": "11111111111@c.us",
- "body": "Hi there!",
- "hasMedia": false,
- "ack": 1,
- "vCards": [],
- "_data": {
- ...
- }
- }
-}
-```
-
-Fields:
-- `hasMedia: true | false` - indicates if the message has media attached
-- `media.url: http://localhost:8000/...` - the URL to download the media
-- `_data` - internal **engine** data, can be different for each engine
-- `source: app|api` - can be `api` for [message.any](#messageany) event if you send a message via WAHA API. Otherwise, it's `app`.
-
-It's possible to have `hasMedia: true`, but `media: null` - it means WAHA didn't download media due to configuration.
-
-### message.any
-
-Fired on all message creations, including your own. The payload is the same as for [message](#message) event.
-
-```json { title="message.any" }
- "event": "message.any",
- "session": "default",
- "engine": "WEBJS",
- "payload": {
- ...
- }
-}
-```
-
-Fields:
-- `source: app|api` - can be `api` for [message.any](#messageany) event if you send a message via WAHA API. Otherwise, it's `app`.
-
-### message.reaction
-Receive events when a message is reacted to by a user (or **yourself** reacting to a message).
-- `payload.reaction.text` - emoji that was used to react to the message. It'll be an empty string if the reaction was removed.
-- `payload.reaction.messageId` - id of the message that was reacted to.
-
-```json { title="message.reaction" }
-{
- "event": "message.reaction",
- "session": "default",
- "me": {
- "id": "79222222222@c.us",
- "pushName": "WAHA"
- },
- "payload": {
- "id": "false_79111111@c.us_11111111111111111111111111111111",
- "from": "79111111@c.us",
- "fromMe": false,
- "participant": "79111111@c.us",
- "to": "79111111@c.us",
- "timestamp": 1710481111.853,
- "reaction": {
- "text": "🙏",
- "messageId": "true_79111111@c.us_11111111111111111111111111111111"
- }
- },
- "engine": "WEBJS",
- "environment": {
- "version": "2024.3.3",
- "engine": "WEBJS",
- "tier": "PLUS",
- "browser": "/usr/bin/google-chrome-stable"
- }
-}
-```
-
-{{< callout context="note" icon="outline/info-circle" >}}
-NOWEB engine note - reactions were sent in 'message' and 'message.any' events, not it's available only in 'message.reaction'!"
-{{< /callout >}}
-
-### message.ack
-Receive events when server or recipient gets the message, read or played it.
-
-`ackName` field contains message status (`ack` has the same meaning, but show the value in int, but we keep it for backward compatability, they much to each other)
-
-Possible message ack statuses:
-- `ackName: ERROR, ack: -1` - error occurred
-- `ackName: PENDING, ack: 0` - message is pending
-- `ackName: SERVER, ack: 1` - message was sent to server
-- `ackName: DEVICE, ack: 2` - message was sent to the device
-- `ackName: READ, ack: 3` - recipient read message
-- `ackName: PLAYED, ack: 4` - recipient played the message
-
-
-The payload may have more fields, it depends on the engine you use, but here's a minimum amount that all engines send:
-```json { title="message.ack" }
-{
- "event": "message.ack",
- "session": "default",
- "engine": "WEBJS",
- "payload": {
- "id":"true_11111111111@c.us_4CC5EDD64BC22EBA6D639F2AF571346C",
- "from":"11111111111@c.us",
- "participant": null,
- "fromMe":true,
- "ack":3,
- "ackName":"READ"
- }
-}
-```
-
-### message.waiting
-Happens when you see
-[Waiting for this message. This may take a while.](https://faq.whatsapp.com/3398056720476987)
-on your phone.
-
-
-
-```json { title="message.waiting" }
-{
- "event": "message.waiting",
- "session": "default",
- "engine": "WEBJS",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "from": "11111111111@c.us",
- "fromMe": true,
- "to": "11111111111@c.us",
- ...
- "_data": {
- ...
- }
- }
-}
-```
-
-### message.edited
-The `message.edited` event is message edited
-
-```json { title="message.edited" }
-{
- "event": "message.edited",
- "session": "default",
- "payload": {
- "id": "false_1231243123@c.us_BBBBBBBBBBBBBBBBBBBBB[_participant]",
- ...,
- "editedMessageId": "AAAAAAAAAAAAAAAA",
- "body": "New body",
- "_data": ...,
- }
-}
-```
-
-**Fields**:
-- `message.id` - message if for **edit action**
- - In format `false_{chatId}_{revokeActionMessageId}[_{participant}]`
- - It's not the **revoked** message (but it can be the same, for instance, in **WEBJS**)
-- `editedMessageId` - the **edited message id** in format `{messageId}`, without `chatId`
-- `body` - the new body (text) of the message
-
-### message.revoked
-The `message.revoked` event is triggered when a user, whether it be you or any other participant,
-revokes a previously sent message.
-
-```json { title="message.revoked" }
-{
- "event": "message.revoked",
- "session": "default",
- "payload": {
- "after": {
- "id": "false_1231243123@c.us_BBBBBBBBBBBBBBBBBBBBB[_participant]",
- "_data": ...,
- ...,
- },
- "revokedMessageId": "AAAAAAAAAAAAAAAA",
- "before": null
- }
-}
-```
-
-**Fields**:
-- `after.id` - message if for **revoke action**
- - In format `false_{chatId}_{revokeActionMessageId}[_{participant}]`
- - It's not the **revoked** message (but it can be the same, for instance, in **WEBJS**)
-- `revokedMessageId` - the **revoked message id** in format `{messageId}`, without `chatId`
-- `before` - is `null` in most cases.
-
-### chat.archive
-{{< include file="content/docs/how-to/chats/webhooks-chat-archive.md" >}}
-
-### group.v2.join
-{{< include file="content/docs/how-to/groups/events-group.v2.join.md" >}}
-
-### group.v2.leave
-{{< include file="content/docs/how-to/groups/events-group.v2.leave.md" >}}
-
-### group.v2.participants
-{{< include file="content/docs/how-to/groups/events-group.v2.participants.md" >}}
-
-### group.v2.update
-{{< include file="content/docs/how-to/groups/events-group.v2.update.md" >}}
-
-### presence.update
-
-- `payload.id` indicates the chat - either direct chat with a contact or a group chat.
-- `payload.id.[].participant` - certain participant presence status. For a direct chat there's only one participant.
-
-```json { title="presence.update" }
-{
- "event": "presence.update",
- "session": "default",
- "engine": "NOWEB",
- "payload": {
- "id": "111111111111111111@g.us",
- "presences": [
- {
- "participant": "11111111111@c.us",
- "lastKnownPresence": "typing",
- "lastSeen": null
- }
- ]
- }
-}
-```
-
-### poll.vote
-We have a dedicated page [how to send polls and receive votes]({{< relref "/docs/how-to/polls" >}})!
-
-```json { title="poll.vote" }
-{
- "event": "poll.vote",
- "session": "default",
- "payload": {
- "vote": {
- "id": "false_1111111111@c.us_83ACBE602A05C79B234B54415E95EE8A",
- "to": "me",
- "from": "1111111@c.us",
- "fromMe": false,
- "selectedOptions": ["Awesome!"],
- "timestamp": 1692861427
- },
- "poll": {
- "id": "true_1111111111@c.us_BAE5F2EF5C69001E",
- "to": "1111111111@c.us",
- "from": "me",
- "fromMe": true
- }
- },
- "engine": "NOWEB"
-}
-```
-
-### poll.vote.failed
-We have a dedicated page [how to send polls and receive votes]({{< relref "/docs/how-to/polls" >}})!
-
-```json { title="poll.vote.failed" }
-{
- "event": "poll.vote.failed",
- "session": "default",
- "payload": {
- "vote": {
- "id": "false_11111111111@c.us_2E8C4CDA89EDE3BC0BC7F605364B8451",
- "to": "me",
- "from": "111111111@c.us",
- "fromMe": false,
- "selectedOptions": [],
- "timestamp": 1692956972
- },
- "poll": {
- "id": "true_1111111111@c.us_BAE595F4E0A2042C",
- "to": "111111111@c.us",
- "from": "me",
- "fromMe": true
- }
- },
- "engine": "NOWEB"
-}
-```
-
-### label.upsert
-
-```json { title="label.upsert" }
-{
- "event": "label.upsert",
- "session": "default",
- "payload": {
- "id": "10",
- "name": "Label Name",
- "color": 14,
- "colorHex": "#00a0f2"
- },
- "engine": "NOWEB",
- ...
-}
-
-```
-
-### label.deleted
-
-```json { title="label.deleted" }
-{
- "event": "label.deleted",
- "session": "default",
- "payload": {
- "id": "10",
- "name": "",
- "color": 14,
- "colorHex": "#00a0f2"
- },
- "engine": "NOWEB",
- ...
-}
-
-```
-
-### label.chat.added
-
-```json { title="label.chat.added" }
-{
- "event": "label.chat.added",
- "session": "default",
- "payload": {
- "labelId": "6",
- "chatId": "11111111111@c.us",
- "label": null <=== right after scanning QR it can be null.
- },
- "engine": "NOWEB",
- ...
-}
-```
-
-### label.chat.deleted
-
-```json { title="label.chat.deleted" }
-{
- "event": "label.chat.deleted",
- "session": "default",
- "payload": {
- "labelId": "6",
- "chatId": "11111111111@c.us",
- "label": null
- },
- "engine": "NOWEB",
- ...
-}
-```
-
-### call.received
-
-{{< include file="content/docs/how-to/calls/webhooks-call-received.md" >}}
-
-### call.accepted
-
-{{< include file="content/docs/how-to/calls/webhooks-call-accepted.md" >}}
-
-### call.rejected
-
-{{< include file="content/docs/how-to/calls/webhooks-call-rejected.md" >}}
-
-### engine.event
-Low-level engine event, for **debug** and **troubleshooting** purposes.
-
-```json { title="engine.event" }
-{
- "event": "engine.event",
- "session": "default",
- "engine": "NOWEB",
- "payload": {
- "event": "messages.upsert",
- "data": {"": ""}
- }
-}
-```
-
-## Deprecated Events
-
-### group.join
-{{< include file="content/docs/how-to/groups/events-group.join.md" >}}
-
-### group.leave
-{{< include file="content/docs/how-to/groups/events-group.leave.md" >}}
-
-
-### state.change
-⚠️ **DEPRECATED**, use `session.status` event instead.
-
-It's an internal engine's state, not **session** `status`.
-
-```json { title="state.change" }
-{
- "event": "state.change",
- "session": "default",
- "engine": "WEBJS",
- "payload": {
- ...
- }
-}
-```
+---
+title: "🔄 Events"
+description: "Events - how to set up and handle them using Webhooks and Websockets"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 223
+slug: events
+images: ["webhooks.png"]
+aliases:
+ - /docs/how-to/events
+ - /docs/how-to/webhooks
+ - /docs/how-to/websockets
+---
+
+In order to notify your application about events in the WhatsApp API, you can use
+[**Webhooks**](#webhooks) and [**Websockets**](#websockets).
+
+👉 See the list of all available events in the [**Events**](#events) section.
+
+🌟 You can observe **Events** in real-time using
+[**📊 Dashboard - Event Monitor**]({{< relref "dashboard#event-monitor" >}})!
+
+## Webhooks
+
+
-
-## Features
-
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/groups/features.md" >}}
-{{< include file="content/docs/how-to/groups/features-events.md" >}}
-
-## API
-- `{session}` - use the session name for Whatsapp instance that you created with `POST /api/session` endpoint
-- `{groupId}` - group id in format `123123123123@g.us`. You can get the id in a few ways:
- - By [handling incoming message webhook]({{< relref "/docs/how-to/receive-messages" >}}).
- - By getting all groups (see below).
- - By creating a new group and saving the id.
-
-{{< callout context="tip" icon="outline/hand-finger-right" >}}
-Check [**👤 Contacts - Lids**]({{< relref "/docs/how-to/contacts/#api---lids" >}}) if you see `@lid`
-in participants list for a group
-{{< /callout >}}
-
-### Create a new group
-
-```http request
-POST /api/{session}/groups
-```
-
-```json { title="Body" }
-{
- "name": "Group name",
- "participants": [
- {
- "id": "123123123123@c.us"
- }
- ]
-}
-```
-
-### Get all groups
-
-```http request
-GET /api/{session}/groups
-```
-
-
-**Response**:
-depends on [**🏭 Engine**]({{< relref "/docs/how-to/engines" >}}) you use.
-
-**Query parameters**:
-
-```http request
-GET /api/{session}/groups?limit=10&offset=0&sortBy=subject&sortOrder=desc
-```
-
-If you see timeout or the request takes too long - consider using `limit` parameter to get objects in smaller chunks
-
-- `limit=10` - limit the number of chats to return
-- `offset=0` - skip the number of chats from the start
-- `sortBy={field}` - sort by field
- - `sortBy=id` - sort by group id
- - `sortBy=subject` - sort by group subject
-- `sortOrder=desc|asc` - sort order
- - `desc` - descending order (New first, A-Z)
- - `asc` - ascending order (Old first, Z-A)
-- `exclude=participants` - you can exclude participants data from the response
-
-{{< details "I see rate-overlimit in NOWEB" >}}
- 👉 If you see `rate-overlimit` error with **NOWEB** engine - try enabling [**🏭 NOWEB Store before using the endpoint**]({{< relref "/docs/engines/NOWEB#store" >}})!
-{{< /details >}}
-
-### Get groups count
-Get the total number of groups
-
-```http request
-GET /api/{session}/groups/count
-```
-
-```json { title="Response" }
-{
- "count": 10
-}
-```
-
-### Join group
-If you have invite URL for a group (like `https://chat.whatsapp.com/invitecode`), you can
-
-```http request
-POST /api/{session}/groups/join
-```
-
-```json { title="Body" }
-{
- "code": "invitecode"
-}
-```
-
-or using full link:
-```json { title="Body" }
-{
- "code": "https://chat.whatsapp.com/invitecode"
-}
-```
-
-```json { title="Response" }
-{
- "id": "123123123@g.us"
-}
-```
-
-### Get join info for group
-If you have invite URL for a group (like `https://chat.whatsapp.com/invitecode`), you can get group info:
-
-```http request
-GET /api/{session}/groups/join-info?code=invitecode
-```
-
-or using full link (remember to encode the URL)
-
-```http request
-GET /api/{session}/groups/join-info?code=https%3A%2F%2Fchat.whatsapp.com%2Finvitecode
-```
-
-Response depends on engine you're using
-
-### Refresh groups
-If you see any inconsistency in groups list or in participants list, you can refresh the groups from the WhatsApp server:
-```http request
-POST /api/{session}/groups/refresh
-```
-
-⚠️ Do not call it frequently, it can lead to `rate-overlimit` error. Usually groups API has all up-to-date information.
-
-### Get the group
-
-```http request
-GET /api/{session}/groups/{groupId}
-```
-
-### Delete the group
-
-```http request
-DELETE /api/{session}/groups/{groupId}
-```
-
-### Leave the group
-
-```http request
-POST /api/{session}/groups/{groupId}/leave
-```
-
-### Group Picture
-You can get, set and remove group picture
-
-#### Get Group Picture
-
-```http request
-GET /api/{SESSION}/groups/{ID}/picture?refresh=false
-```
-
-- `{SESSION}` - session name
-- `{ID}` - group id. Remember to encode `@` symbol - `123123123123%40g.us`
-- `refresh=True` - force refresh the picture. By default, we cache it 24 hours. Do not frequently refresh the picture to avoid `rate-overlimit` error.
-
-```json { title="Response" }
-{
- "url": "https://example.com/picture.jpg"
-}
-```
-
-- `url` can be `null` if there's no picture for the group
-
-#### Set Group Picture
-👉 Available in [**WAHA Plus**]({{< relref "waha-plus#plus" >}}) version.
-
-```http request
-PUT /api/{SESSION}/groups/{ID}/picture
-```
-
-- `{SESSION}` - session name
-- `{ID}` - group id. Remember to encode `@` symbol - `123123123123%40g.us`
-
-{{< tabs "groups-set-picture" >}}
-{{< tab "URL" >}}
-```json { title="Body" }
-{
- "file": {
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- }
-}
-```
-
-{{< /tab >}}
-
-{{< tab "BASE64" >}}
-```json { title="Body" }
-{
- "file": {
- "data": "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"
- }
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-```json { title="Response" }
-{
- "success": true
-}
-```
-
-#### Delete Group Picture
-👉 Available in [**WAHA Plus**]({{< relref "waha-plus#plus" >}}) version.
-
-```http request
-DELETE /api/{SESSION}/groups/{ID}/picture
-```
-- `{SESSION}` - session name
-- `{ID}` - group id. Remember to encode `@` symbol - `123123123123%40g.us`
-
-```json { title="Response" }
-{
- "success": true
-}
-```
-
-### Set group subject
-
-Updates the group subject.
-
-Returns `true` if the subject was properly updated. This can return false if the user does not have the necessary
-permissions.
-
-```http request
-PUT /api/{session}/groups/{groupId}/subject
-```
-
-```json { title="Body" }
-{
- "subject": "Group name"
-}
-```
-
-### Set group description
-
-Updates the group description.
-
-Returns `true` if the subject was properly updated. This can return false if the user does not have the necessary
-permissions.
-
-```http request
-PUT /api/{session}/groups/{groupId}/description
-```
-
-```json { title="Body" }
-{
- "description": "Group description"
-}
-```
-
-### Security - update group info
-Updates the group settings to only allow admins to edit group info (title, description, photo).
-
-```http request
-PUT /api/{session}/groups/{groupId}/settings/security/info-admin-only
-```
-
-```json { title="Body" }
-{
- "adminsOnly": true
-}
-```
-
-Get the group settings to only allow admins to edit group info (title, description, photo).
-
-```http request
-GET /api/{session}/groups/{groupId}/settings/security/info-admin-only
-```
-
-```json { title="Response" }
-{
- "adminsOnly": true
-}
-```
-
-Returns `true` if the setting was properly updated. This can return false if the user does not have the necessary permissions.
-
-### Security - who can send messages
-Updates the group settings to only allow admins to send messages.
-
-```http request
-PUT /api/{session}/groups/{groupId}/settings/security/messages-admin-only
-```
-
-```json { title="Body" }
-{
- "adminsOnly": true
-}
-```
-
-Returns `true` if the setting was properly updated. This can return false if the user does not have the necessary permissions.
-
-Get the group settings to only allow admins to send messages.
-
-```http request
-GET /api/{session}/groups/{groupId}/settings/security/messages-admin-only
-```
-
-```json { title="Response" }
-{
- "adminsOnly": true
-}
-```
-
-### Participants
-
-#### Get participants
-
-```http request
-GET /api/{session}/groups/{groupId}/participants
-```
-
-#### Add participants
-
-```http request
-POST /api/{session}/groups/{groupId}/participants/add
-```
-
-```json { title="Body" }
-{
- "participants": [
- {
- "id": "123123123123@c.us"
- }
- ]
-}
-```
-
-#### Remove participants
-
-```http request
-POST /api/{session}/groups/{groupId}/participants/remove
-```
-
-```json { title="Body" }
-{
- "participants": [
- {
- "id": "123123123123@c.us"
- }
- ]
-}
-```
-
-### Admin
-
-#### Promote to admin
-
-Promote participants to admin users.
-
-```http request
-POST /api/{session}/groups/{groupId}/admin/promote
-```
-
-```json { title="Body" }
-{
- "participants": [
- {
- "id": "123123123123@c.us"
- }
- ]
-}
-```
-
-#### Demote to regular users
-
-Demote participants by to regular users.
-
-```http request
-POST /api/{session}/groups/{groupId}/admin/demote
-```
-
-```json { title="Body" }
-{
- "participants": [
- {
- "id": "123123123123@c.us"
- }
- ]
-}
-```
-
-### Invite code
-
-#### Get invite code
-
-```http request
-GET /api/{session}/groups/{groupId}/invite-code
-```
-
-Then you can put it in the url `https://chat.whatsapp.com/{inviteCode}` and send it to contacts.
-
-#### Revoke invite code
-
-Invalidates the current group invite code and generates a new one.
-
-```http request
-POST /api/{session}/groups/{groupId}/invite-code/revoke
-```
-
-## Events
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
-
-{{< include file="content/docs/how-to/groups/features-events.md" >}}
-
-### group.v2.join
-{{< include file="content/docs/how-to/groups/events-group.v2.join.md" >}}
-
-### group.v2.leave
-{{< include file="content/docs/how-to/groups/events-group.v2.leave.md" >}}
-
-### group.v2.participants
-{{< include file="content/docs/how-to/groups/events-group.v2.participants.md" >}}
-
-### group.v2.update
-{{< include file="content/docs/how-to/groups/events-group.v2.update.md" >}}
-
-### group.join
-{{< include file="content/docs/how-to/groups/events-group.join.md" >}}
-
-### group.leave
-{{< include file="content/docs/how-to/groups/events-group.leave.md" >}}
+---
+title: "👥 Groups"
+description: "Groups"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 240
+images: ["groups.jpg"]
+slug: groups
+---
+
+Manage WhatsApp groups with the API.
+
+
+
+## Features
+
+Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
+
+{{< include file="content/docs/how-to/groups/features.md" >}}
+{{< include file="content/docs/how-to/groups/features-events.md" >}}
+
+## API
+
+- `{session}` - use the session name for Whatsapp instance that you created with `POST /api/session` endpoint
+- `{groupId}` - group id in format `123123123123@g.us`. You can get the id in a few ways:
+ - By [handling incoming message webhook]({{< relref "/docs/how-to/receive-messages" >}}).
+ - By getting all groups (see below).
+ - By creating a new group and saving the id.
+
+{{< callout context="tip" icon="outline/hand-finger-right" >}}
+Check [**👤 Contacts - Lids**]({{< relref "/docs/how-to/contacts/#api---lids" >}}) if you see `@lid`
+in participants list for a group
+{{< /callout >}}
+
+### Create a new group
+
+```http request
+POST /api/{session}/groups
+```
+
+```json { title="Body" }
+{
+ "name": "Group name",
+ "participants": [
+ {
+ "id": "123123123123@c.us"
+ }
+ ]
+}
+```
+
+### Get all groups
+
+```http request
+GET /api/{session}/groups
+```
+
+**Response**:
+depends on [**🏭 Engine**]({{< relref "/docs/how-to/engines" >}}) you use.
+
+**Query parameters**:
+
+```http request
+GET /api/{session}/groups?limit=10&offset=0&sortBy=subject&sortOrder=desc
+```
+
+If you see timeout or the request takes too long - consider using `limit` parameter to get objects in smaller chunks
+
+- `limit=10` - limit the number of chats to return
+- `offset=0` - skip the number of chats from the start
+- `sortBy={field}` - sort by field
+ - `sortBy=id` - sort by group id
+ - `sortBy=subject` - sort by group subject
+- `sortOrder=desc|asc` - sort order
+ - `desc` - descending order (New first, A-Z)
+ - `asc` - ascending order (Old first, Z-A)
+- `exclude=participants` - you can exclude participants data from the response
+
+{{< details "I see rate-overlimit in NOWEB" >}}
+👉 If you see `rate-overlimit` error with **NOWEB** engine - try enabling [**🏭 NOWEB Store before using the endpoint**]({{< relref "/docs/engines/NOWEB#store" >}})!
+{{< /details >}}
+
+### Get groups count
+
+Get the total number of groups
+
+```http request
+GET /api/{session}/groups/count
+```
+
+```json { title="Response" }
+{
+ "count": 10
+}
+```
+
+### Join group
+
+If you have invite URL for a group (like `https://chat.whatsapp.com/invitecode`), you can
+
+```http request
+POST /api/{session}/groups/join
+```
+
+```json { title="Body" }
+{
+ "code": "invitecode"
+}
+```
+
+or using full link:
+
+```json { title="Body" }
+{
+ "code": "https://chat.whatsapp.com/invitecode"
+}
+```
+
+```json { title="Response" }
+{
+ "id": "123123123@g.us"
+}
+```
+
+### Get join info for group
+
+If you have invite URL for a group (like `https://chat.whatsapp.com/invitecode`), you can get group info:
+
+```http request
+GET /api/{session}/groups/join-info?code=invitecode
+```
+
+or using full link (remember to encode the URL)
+
+```http request
+GET /api/{session}/groups/join-info?code=https%3A%2F%2Fchat.whatsapp.com%2Finvitecode
+```
+
+Response depends on engine you're using
+
+### Refresh groups
+
+If you see any inconsistency in groups list or in participants list, you can refresh the groups from the WhatsApp server:
+
+```http request
+POST /api/{session}/groups/refresh
+```
+
+⚠️ Do not call it frequently, it can lead to `rate-overlimit` error. Usually groups API has all up-to-date information.
+
+### Get the group
+
+```http request
+GET /api/{session}/groups/{groupId}
+```
+
+### Delete the group
+
+```http request
+DELETE /api/{session}/groups/{groupId}
+```
+
+### Leave the group
+
+```http request
+POST /api/{session}/groups/{groupId}/leave
+```
+
+### Group Picture
+
+You can get, set and remove group picture
+
+#### Get Group Picture
+
+```http request
+GET /api/{SESSION}/groups/{ID}/picture?refresh=false
+```
+
+- `{SESSION}` - session name
+- `{ID}` - group id. Remember to encode `@` symbol - `123123123123%40g.us`
+- `refresh=True` - force refresh the picture. By default, we cache it 24 hours. Do not frequently refresh the picture to avoid `rate-overlimit` error.
+
+```json { title="Response" }
+{
+ "url": "https://example.com/picture.jpg"
+}
+```
+
+- `url` can be `null` if there's no picture for the group
+
+#### Set Group Picture
+
+👉 Available in [**WAHA Plus**]({{< relref "waha-plus#plus" >}}) version.
+
+```http request
+PUT /api/{SESSION}/groups/{ID}/picture
+```
+
+- `{SESSION}` - session name
+- `{ID}` - group id. Remember to encode `@` symbol - `123123123123%40g.us`
+
+{{< tabs "groups-set-picture" >}}
+{{< tab "URL" >}}
+
+```json { title="Body" }
+{
+ "file": {
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ }
+}
+```
+
+{{< /tab >}}
+
+{{< tab "BASE64" >}}
+
+```json { title="Body" }
+{
+ "file": {
+ "data": "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"
+ }
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+```json { title="Response" }
+{
+ "success": true
+}
+```
+
+#### Delete Group Picture
+
+👉 Available in [**WAHA Plus**]({{< relref "waha-plus#plus" >}}) version.
+
+```http request
+DELETE /api/{SESSION}/groups/{ID}/picture
+```
+
+- `{SESSION}` - session name
+- `{ID}` - group id. Remember to encode `@` symbol - `123123123123%40g.us`
+
+```json { title="Response" }
+{
+ "success": true
+}
+```
+
+### Set group subject
+
+Updates the group subject.
+
+Returns `true` if the subject was properly updated. This can return false if the user does not have the necessary
+permissions.
+
+```http request
+PUT /api/{session}/groups/{groupId}/subject
+```
+
+```json { title="Body" }
+{
+ "subject": "Group name"
+}
+```
+
+### Set group description
+
+Updates the group description.
+
+Returns `true` if the subject was properly updated. This can return false if the user does not have the necessary
+permissions.
+
+```http request
+PUT /api/{session}/groups/{groupId}/description
+```
+
+```json { title="Body" }
+{
+ "description": "Group description"
+}
+```
+
+### Security - update group info
+
+Updates the group settings to only allow admins to edit group info (title, description, photo).
+
+```http request
+PUT /api/{session}/groups/{groupId}/settings/security/info-admin-only
+```
+
+```json { title="Body" }
+{
+ "adminsOnly": true
+}
+```
+
+Get the group settings to only allow admins to edit group info (title, description, photo).
+
+```http request
+GET /api/{session}/groups/{groupId}/settings/security/info-admin-only
+```
+
+```json { title="Response" }
+{
+ "adminsOnly": true
+}
+```
+
+Returns `true` if the setting was properly updated. This can return false if the user does not have the necessary permissions.
+
+### Security - who can send messages
+
+Updates the group settings to only allow admins to send messages.
+
+```http request
+PUT /api/{session}/groups/{groupId}/settings/security/messages-admin-only
+```
+
+```json { title="Body" }
+{
+ "adminsOnly": true
+}
+```
+
+Returns `true` if the setting was properly updated. This can return false if the user does not have the necessary permissions.
+
+Get the group settings to only allow admins to send messages.
+
+```http request
+GET /api/{session}/groups/{groupId}/settings/security/messages-admin-only
+```
+
+```json { title="Response" }
+{
+ "adminsOnly": true
+}
+```
+
+### Participants
+
+#### Get participants
+
+```http request
+GET /api/{session}/groups/{groupId}/participants
+```
+
+#### Add participants
+
+```http request
+POST /api/{session}/groups/{groupId}/participants/add
+```
+
+```json { title="Body" }
+{
+ "participants": [
+ {
+ "id": "123123123123@c.us"
+ }
+ ]
+}
+```
+
+#### Remove participants
+
+```http request
+POST /api/{session}/groups/{groupId}/participants/remove
+```
+
+```json { title="Body" }
+{
+ "participants": [
+ {
+ "id": "123123123123@c.us"
+ }
+ ]
+}
+```
+
+### Admin
+
+#### Promote to admin
+
+Promote participants to admin users.
+
+```http request
+POST /api/{session}/groups/{groupId}/admin/promote
+```
+
+```json { title="Body" }
+{
+ "participants": [
+ {
+ "id": "123123123123@c.us"
+ }
+ ]
+}
+```
+
+#### Demote to regular users
+
+Demote participants by to regular users.
+
+```http request
+POST /api/{session}/groups/{groupId}/admin/demote
+```
+
+```json { title="Body" }
+{
+ "participants": [
+ {
+ "id": "123123123123@c.us"
+ }
+ ]
+}
+```
+
+### Invite code
+
+#### Get invite code
+
+```http request
+GET /api/{session}/groups/{groupId}/invite-code
+```
+
+Then you can put it in the url `https://chat.whatsapp.com/{inviteCode}` and send it to contacts.
+
+#### Revoke invite code
+
+Invalidates the current group invite code and generates a new one.
+
+```http request
+POST /api/{session}/groups/{groupId}/invite-code/revoke
+```
+
+## Events
+
+Read more about
+[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
+
+{{< include file="content/docs/how-to/groups/features-events.md" >}}
+
+### group.v2.join
+
+{{< include file="content/docs/how-to/groups/events-group.v2.join.md" >}}
+
+### group.v2.leave
+
+{{< include file="content/docs/how-to/groups/events-group.v2.leave.md" >}}
+
+### group.v2.participants
+
+{{< include file="content/docs/how-to/groups/events-group.v2.participants.md" >}}
+
+### group.v2.update
+
+{{< include file="content/docs/how-to/groups/events-group.v2.update.md" >}}
+
+### group.join
+
+{{< include file="content/docs/how-to/groups/events-group.join.md" >}}
+
+### group.leave
+
+{{< include file="content/docs/how-to/groups/events-group.leave.md" >}}
diff --git a/content/docs/how-to/install/-the-hosting.md b/content/docs/how-to/install/-the-hosting.md
index 135ac10ef..4680231d2 100644
--- a/content/docs/how-to/install/-the-hosting.md
+++ b/content/docs/how-to/install/-the-hosting.md
@@ -1,7 +1,7 @@
-
-{{< callout context="note" title="Looking for Hosting?" icon="outline/server" >}}
-We've been using [**the.hosting**](https://the.hosting/?from=686406)
-for quite a while and had a great experience.
-
-They offer a wide range of server configurations and locations - highly recommended! 👍
-{{< /callout >}}
+
+{{< callout context="note" title="Looking for Hosting?" icon="outline/server" >}}
+We've been using [**the.hosting**](https://the.hosting/?from=686406)
+for quite a while and had a great experience.
+
+They offer a wide range of server configurations and locations - highly recommended! 👍
+{{< /callout >}}
diff --git a/content/docs/how-to/install/download-image.md b/content/docs/how-to/install/download-image.md
index 40b9451d3..b1a63f8f9 100644
--- a/content/docs/how-to/install/download-image.md
+++ b/content/docs/how-to/install/download-image.md
@@ -1,56 +1,57 @@
-
-{{< tabs "download-docker-image" >}}
-
-{{< tab "WAHA Core" >}}
-Run the command below:
-
-```bash
-docker pull devlikeapro/waha
-```
-
-{{< /tab >}}
-
-{{< tab "➕ WAHA Plus" >}}
-If you got the
-[➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}})
-, use the following commands:
-
-```bash
-docker login -u devlikeapro -p {KEY}
-docker pull devlikeapro/waha-plus
-docker logout
-```
-
-👉 Go to
-[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
-to generate the command with the right version.
-{{< /tab >}}
-
-{{< tab "WAHA (ARM)" >}}
-If you're using ARM (like Apple M1/M2, Raspberry Pi etc.) - use following commands to download the image:
-```bash
-# Download the image
-docker pull devlikeapro/waha:arm
-# Rename it, so you can use devlikeapro/waha image in other place
-docker tag devlikeapro/waha:arm devlikeapro/waha
-```
-
-If you got the
-[➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}})
-, use the following commands:
-
-```bash
-docker login -u devlikeapro -p {KEY}
-docker pull devlikeapro/waha-plus:arm
-docker logout
-
-# Rename it, so you can use devlikeapro/waha image in other place
-docker tag devlikeapro/waha-plus:arm devlikeapro/waha-plus
-```
-
-👉 Go to
-[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
-to generate the command with the right version.
-{{< /tab >}}
-
-{{< /tabs >}}
+
+{{< tabs "download-docker-image" >}}
+
+{{< tab "WAHA Core" >}}
+Run the command below:
+
+```bash
+docker pull devlikeapro/waha
+```
+
+{{< /tab >}}
+
+{{< tab "➕ WAHA Plus" >}}
+If you got the
+[➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}})
+, use the following commands:
+
+```bash
+docker login -u devlikeapro -p {KEY}
+docker pull devlikeapro/waha-plus
+docker logout
+```
+
+👉 Go to
+[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
+to generate the command with the right version.
+{{< /tab >}}
+
+{{< tab "WAHA (ARM)" >}}
+If you're using ARM (like Apple M1/M2, Raspberry Pi etc.) - use following commands to download the image:
+
+```bash
+# Download the image
+docker pull devlikeapro/waha:arm
+# Rename it, so you can use devlikeapro/waha image in other place
+docker tag devlikeapro/waha:arm devlikeapro/waha
+```
+
+If you got the
+[➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}})
+, use the following commands:
+
+```bash
+docker login -u devlikeapro -p {KEY}
+docker pull devlikeapro/waha-plus:arm
+docker logout
+
+# Rename it, so you can use devlikeapro/waha image in other place
+docker tag devlikeapro/waha-plus:arm devlikeapro/waha-plus
+```
+
+👉 Go to
+[**Docker Image Configurator**](https://portal.devlike.pro/docker-image)
+to generate the command with the right version.
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/install/index.md b/content/docs/how-to/install/index.md
index 0bd9852ca..419810696 100644
--- a/content/docs/how-to/install/index.md
+++ b/content/docs/how-to/install/index.md
@@ -1,441 +1,467 @@
----
-title : "🔧 Install & Update"
-description: "How to install and update WAHA"
-lead: "How to install and update WAHA"
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 201
-slug: install
-images: ["install.jpg"]
-aliases:
- - /docs/how-to/install-update
----
-
-You probably already have run the docker run command during
-[**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}}) guide:
-```bash
-docker run -it --rm -p 3000:3000 --name waha devlikeapro/waha
-```
-
-{{< callout context="caution" icon="outline/alert-triangle" >}}
-☝️ The above command is good **for development purposes**, but **not for production**.
-{{< /callout >}}
-
-To make it **production-ready**, you need to configure a few more parameters to make it secure, reliable, and easy to manage.
-
-
-{{< callout context="note" icon="outline/info-circle" >}}
-If you wish to follow a **Step-By-Step guide** which shows you **how to send your first message** via HTTP API,
-please go to [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}}).
-{{< /callout >}}
-
-{{< callout context="tip" icon="outline/info-circle" title="WAHA Apps">}}
-
-If you want to use
-[**🧩 Apps**]({{< relref "/docs/apps/about" >}}), such as
-[**ChatWoot**]({{< relref "/docs/apps/chatwoot" >}}),
-please follow the specific installation and configuration guides provided for each app:
-
-- [**WhatsApp + ChatWoot - Installation Guide**]({{< relref "/blog/apps-chatwoot-1-install" >}})
-
-{{< /callout >}}
-
-
-## Requirements
-### System Requirements
-You can use any operating system for host system (**Linux**, **Windows** or **macOS**)
-as long as you have Docker installed, and it can run **Linux** containers.
-
-💡 We recommend using **Linux** with **Debian** or **Ubuntu** based distributions.
-
-We strongly recommend using VPS or servers with minimum **2CPU and 2GB RAM** configuration for the project
-even for a single session.
-If you want to host more sessions - please check the numbers in
-[**FAQ**]({{< relref "/docs/overview/faq#system-requirements" >}}).
-
-{{< details "Linux" >}}
-👉 We suggest using **Debian** or **Ubuntu** based distributions.
-{{< /details >}}
-
-{{< details "Windows" >}}
-👉 For **Windows** we kindly suggest using **Hyper-V** backend for
-[Docker Desktop](https://docs.docker.com/desktop/install/windows-install/)!
-
-It might not work with **WSL2** backend properly.
-{{< /details >}}
-
-{{< include file="content/docs/how-to/install/-the-hosting.md" >}}
-
-
-### Pre-requisites
-Before proceeding, make sure you have the latest version of `docker` and `docker compose` installed.
-
-We recommend using Docker version equal to or higher than the following:
-
-```bash
-$ docker --version
-Docker version 26.1.3, build b72abbb
-$ docker compose version
-Docker Compose version v2.27.0
-```
-
-{{< details "Why Docker?" >}}
-**Docker** makes it easy to ship **all-in-one solution** with the runtime and dependencies.
-You don't have to worry about language-specific libraries or chrome installation.
-
-Also, Docker makes installation and update processes so simple, just one command!
-{{< /details >}}
-
-{{< details "Why Docker Compose?" >}}
-**Docker Compose** is a tool for defining and running Docker applications.
-With Compose, you use a YAML file to configure your application's services.
-Then, with a single command, you create and start all the services from your configuration.
-{{< /details >}}
-
-## Install
-
-### Docker
-
-1. Install Docker on your VM
-```bash
-# example in ubuntu
-apt-get update
-apt-get upgrade
-curl -fsSL https://get.docker.com -o get-docker.sh
-sudo sh get-docker.sh
-apt install docker-compose-plugin
-```
-
-### Pull Image
-
-Follow the instructions below:
-{{< include file="content/docs/how-to/install/download-image.md" >}}
-
-### WAHA
-2. Download the required files
-```bash
-# Download the env file template
-wget -O .env https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/.env.example
-# Download the Docker compose template
-wget -O docker-compose.yaml https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/docker-compose.yaml
-```
-
-3. Tweak the `.env` and `docker-compose.yaml` according to your preferences.
-Refer to the available environment variables in [**⚙️ Configuration**]({{< relref "/docs/how-to/config" >}}).
-
-Some important environment variables you **MUST** change:
-- `WAHA_API_KEY=sha512:{SHA512_HEX_OF_YOUR_API_KEY_HERE}`
- - Default Api Key is `admin`
- - Read more about [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
-- `WAHA_DASHBOARD_USERNAME=admin` - [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}})
-- `WAHA_DASHBOARD_PASSWORD=admin`
-- `WHATSAPP_SWAGGER_USERNAME=admin` - you can set the same as `WAHA_DASHBOARD_USERNAME`
-- `WHATSAPP_SWAGGER_PASSWORD=admin` - you can set the same as `WAHA_DASHBOARD_PASSWORD`
-
-```bash
-# update .env file with your values
-nano .env
-# update docker-compose.yaml - like image
-# Remove "mongodb" and "minio" services if you don't need them
-# Leave "waha" service as it is
-nano docker-compose.yaml
-```
-
-{{< callout context="danger" title="Do Not Use Default API Keys or Passwords!" icon="outline/shield-check" >}}
-
-Even if you're running WAHA on a private server and think the IP is unknown - it's
-straightforward for attackers to find and exploit it to send spam or abuse your WhatsApp sessions.
-
-Always set strong, random values (see a guide below) for:
-- `WAHA_API_KEY`
-- `WAHA_DASHBOARD_PASSWORD`
-- `WHATSAPP_SWAGGER_PASSWORD` - you can the same as for `WAHA_DASHBOARD_PASSWORD`
-
-**👉 How to Generate and Hash Api-Key**
-{{< include file="content/docs/how-to/security/how-to-generate-api-key.md" >}}
-
-{{< /callout >}}
-
-
-4. Get the service up and running.
-```bash
-docker compose up -d
-```
-
-5. Your WAHA installation is complete.
-Please note that the **containers are not exposed to the internet**, and they only bind to the **localhost**.
-Set up something like Nginx or any other proxy server to proxy the requests to the container.
-
-{{< callout context="" title="How to export port from remote server?" icon="outline/info-circle" >}}
-If you're using a remote server (like VPS or Virtual Machine on your laptop) you need to allow access for your browser.
-Use one of the options available.
-
-1. Use **SSH tunneling**
-
-If you're connecting to ssh, you can forward port 3000 on your laptop like
-```bash
-ssh -L 3000:localhost:3000 user@you.address.here
-```
-
-2. **Bind port to all ips**
-
-For **temporary external access**, you can change the port binding from `127.0.0.1:3000:3000` to `3000:3000` in the `docker-compose.yaml` file.
-```yaml { title="docker-compose.yaml" }
-services:
- waha:
- image: devlikeapro/waha-plus
- ports:
- - "3000:3000"
-```
-```bash
-docker compose up -d
-```
-
-This makes your instance accessible at `http://:3000`.
-{{< /callout >}}
-
-6. Now, open [http://localhost:3000/dashboard](http://localhost:3000/dashboard) and login with the credentials you've set
-
-By default you can use:
-- Dashboard - `admin/admin`
-- Swagger - `admin/admin`
-- Api Key - `admin`
-
-### Nginx
-
-👉 Replace **** with your domain name in the following steps (use lowercase).
-
-1. Configure Nginx to serve as a frontend proxy.
-```bash
-sudo apt-get install nginx
-cd /etc/nginx/sites-enabled
-
-nano .conf
-```
-
-2. Use the following Nginx config and **replace** the `` in `server_name`.
-```nginx
-server {
- server_name ;
-
- # Point upstream to WAHA Server
- set $upstream 127.0.0.1:3000;
-
- location /.well-known {
- alias /var/www/ssl-proof/waha/.well-known;
- }
-
- location / {
- proxy_pass_header Authorization;
- proxy_pass http://$upstream;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "Upgrade";
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Forwarded-Ssl on; # Optional
-
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_http_version 1.1;
- proxy_buffering off;
-
- client_max_body_size 0;
- proxy_read_timeout 36000s;
- proxy_redirect off;
- }
- listen 80;
-}
-```
-
-3. Verify and reload your Nginx config by running the following command.
-```bash
-nginx -t
-systemctl reload nginx
-```
-
-Here are two scenarios for setting up HTTPS:
-
-### HTTPS - Let's Encrypt
-
-If you have a domain name (e.g., **yourdomain.com**) that points to your server's IP address, you can use Let's Encrypt to get free, trusted SSL certificates:
-
-1. Run Let's Encrypt to configure SSL certificate. (replace ****!)
-```bash
-apt install certbot
-apt-get install python3-certbot-nginx
-
-mkdir -p /var/www/ssl-proof/waha/.well-known
-certbot --webroot -w /var/www/ssl-proof/waha/ -d -i nginx
-```
-
-2. Your WAHA installation should be accessible from the https://yourdomain.com now.
-3. Change `WAHA_BASE_URL=https://` in the `.env` file and restart the WAHA service
-```bash
-# Change the WAHA_BASE_URL in .env
-nano .env
-# Restart the WAHA service
-docker compose up -d
-docker compose restart
-```
-
-### HTTPS - Self-Signed Certificate
-
-We recommend using **Let's Encrypt** free certificate if you have public IP and DNS name.
-
-However, if you don't have **a domain name** or
-are using a **private IP address**, you can create a self-signed certificate for IP-based access,
-expand the details below:
-
-{{< details "**HTTPS - Setup Self-Signed Certificate**" >}}
-
-1. Create a directory for your SSL certificates:
-```bash
-mkdir -p /etc/nginx/ssl
-cd /etc/nginx/ssl
-```
-
-2. Create a configuration file for the self-signed certificate:
-```bash
-cat > ip-cert.cnf << 'EOL'
-[req]
-default_bits = 2048
-prompt = no
-default_md = sha256
-distinguished_name = dn
-x509_extensions = v3_ca
-
-[dn]
-C=US
-ST=State
-L=City
-O=Organization
-OU=Department
-CN=
-
-[v3_ca]
-subjectAltName = @alt_names
-
-[alt_names]
-IP.1 =
-EOL
-```
-
-3. Generate a self-signed certificate valid for 10 years (3650 days):
-```bash
-openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ip-cert.key -out ip-cert.crt -config ip-cert.cnf
-```
-
-4. Update your Nginx configuration to use the self-signed certificate:
-```bash
-cd /etc/nginx/sites-enabled
-nano .conf
-```
-
-5. Modify your Nginx configuration to include SSL settings:
-```nginx
-server {
- listen 80;
- server_name ;
- return 301 https://$host$request_uri;
-}
-
-server {
- listen 443 ssl;
- server_name ;
-
- ssl_certificate /etc/nginx/ssl/ip-cert.crt;
- ssl_certificate_key /etc/nginx/ssl/ip-cert.key;
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_prefer_server_ciphers on;
-
- # Point upstream to WAHA Server
- set $upstream 127.0.0.1:3000;
-
- location / {
- proxy_pass_header Authorization;
- proxy_pass http://$upstream;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "Upgrade";
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Forwarded-Ssl on; # Optional
-
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_http_version 1.1;
- proxy_buffering off;
-
- client_max_body_size 0;
- proxy_read_timeout 36000s;
- proxy_redirect off;
- }
-}
-```
-
-6. Verify and reload your Nginx config:
-```bash
-nginx -t
-systemctl reload nginx
-```
-
-7. Update your WAHA configuration to use HTTPS:
-```bash
-# Change the WAHA_BASE_URL in .env to use https
-nano .env
-# Add or modify: WAHA_BASE_URL=https://
-# Restart the WAHA service
-docker compose up -d
-docker compose restart
-```
-
-8. When accessing your WAHA instance, you'll need to accept the self-signed certificate warning in your browser.
-
-{{< /details >}}
-
-## Update
-When there's a new version of WAHA, you can update it with these simple commands:
-
-[**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) image:
-```bash
-# Login if you're using WAHA Plus
-docker login -u devlikeapro -p {KEY}
-docker compose pull
-docker logout
-
-docker compose up -d
-```
-
-👉 If you specified exact version in `docker-compose.yml`, like
-```yaml
-image: devlikeapro/waha-plus:latest-2024.7.8
-```
-
-remember to change it to `latest-{YEAR}.{MONTH}.{BUILD}` to get the latest version.
-
-
-**WAHA Core** image:
-```bash
-docker compose pull
-docker compose up -d
-```
-
-## Get logs, restart, stop
-```bash
-# Stop all containers
-docker compose down
-# Start all containers, apply new configuration
-docker compose up -d
-# Restart all containers
-docker compose restart
-# Show logs in real time
-docker compose logs -f
-# Show logs - since interval
-docker compose logs --since 1h
-```
-
-## What's next?
-
-{{< include file="content/docs/overview/quick-start/links.md" >}}
+---
+title: "🔧 Install & Update"
+description: "How to install and update WAHA"
+lead: "How to install and update WAHA"
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 201
+slug: install
+images: ["install.jpg"]
+aliases:
+ - /docs/how-to/install-update
+---
+
+You probably already have run the docker run command during
+[**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}}) guide:
+
+```bash
+docker run -it --rm -p 3000:3000 --name waha devlikeapro/waha
+```
+
+{{< callout context="caution" icon="outline/alert-triangle" >}}
+☝️ The above command is good **for development purposes**, but **not for production**.
+{{< /callout >}}
+
+To make it **production-ready**, you need to configure a few more parameters to make it secure, reliable, and easy to manage.
+
+{{< callout context="note" icon="outline/info-circle" >}}
+If you wish to follow a **Step-By-Step guide** which shows you **how to send your first message** via HTTP API,
+please go to [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}}).
+{{< /callout >}}
+
+{{< callout context="tip" icon="outline/info-circle" title="WAHA Apps">}}
+
+If you want to use
+[**🧩 Apps**]({{< relref "/docs/apps/about" >}}), such as
+[**ChatWoot**]({{< relref "/docs/apps/chatwoot" >}}),
+please follow the specific installation and configuration guides provided for each app:
+
+- [**WhatsApp + ChatWoot - Installation Guide**]({{< relref "/blog/apps-chatwoot-1-install" >}})
+
+{{< /callout >}}
+
+## Requirements
+
+### System Requirements
+
+You can use any operating system for host system (**Linux**, **Windows** or **macOS**)
+as long as you have Docker installed, and it can run **Linux** containers.
+
+💡 We recommend using **Linux** with **Debian** or **Ubuntu** based distributions.
+
+We strongly recommend using VPS or servers with minimum **2CPU and 2GB RAM** configuration for the project
+even for a single session.
+If you want to host more sessions - please check the numbers in
+[**FAQ**]({{< relref "/docs/overview/faq#system-requirements" >}}).
+
+{{< details "Linux" >}}
+👉 We suggest using **Debian** or **Ubuntu** based distributions.
+{{< /details >}}
+
+{{< details "Windows" >}}
+👉 For **Windows** we kindly suggest using **Hyper-V** backend for
+[Docker Desktop](https://docs.docker.com/desktop/install/windows-install/)!
+
+It might not work with **WSL2** backend properly.
+{{< /details >}}
+
+{{< include file="content/docs/how-to/install/-the-hosting.md" >}}
+
+### Pre-requisites
+
+Before proceeding, make sure you have the latest version of `docker` and `docker compose` installed.
+
+We recommend using Docker version equal to or higher than the following:
+
+```bash
+$ docker --version
+Docker version 26.1.3, build b72abbb
+$ docker compose version
+Docker Compose version v2.27.0
+```
+
+{{< details "Why Docker?" >}}
+**Docker** makes it easy to ship **all-in-one solution** with the runtime and dependencies.
+You don't have to worry about language-specific libraries or chrome installation.
+
+Also, Docker makes installation and update processes so simple, just one command!
+{{< /details >}}
+
+{{< details "Why Docker Compose?" >}}
+**Docker Compose** is a tool for defining and running Docker applications.
+With Compose, you use a YAML file to configure your application's services.
+Then, with a single command, you create and start all the services from your configuration.
+{{< /details >}}
+
+## Install
+
+### Docker
+
+1. Install Docker on your VM
+
+```bash
+# example in ubuntu
+apt-get update
+apt-get upgrade
+curl -fsSL https://get.docker.com -o get-docker.sh
+sudo sh get-docker.sh
+apt install docker-compose-plugin
+```
+
+### Pull Image
+
+Follow the instructions below:
+{{< include file="content/docs/how-to/install/download-image.md" >}}
+
+### WAHA
+
+2. Download the required files
+
+```bash
+# Download the env file template
+wget -O .env https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/.env.example
+# Download the Docker compose template
+wget -O docker-compose.yaml https://raw.githubusercontent.com/devlikeapro/waha/refs/heads/core/docker-compose.yaml
+```
+
+3. Tweak the `.env` and `docker-compose.yaml` according to your preferences.
+ Refer to the available environment variables in [**⚙️ Configuration**]({{< relref "/docs/how-to/config" >}}).
+
+Some important environment variables you **MUST** change:
+
+- `WAHA_API_KEY=sha512:{SHA512_HEX_OF_YOUR_API_KEY_HERE}`
+ - Default Api Key is `admin`
+ - Read more about [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
+- `WAHA_DASHBOARD_USERNAME=admin` - [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}})
+- `WAHA_DASHBOARD_PASSWORD=admin`
+- `WHATSAPP_SWAGGER_USERNAME=admin` - you can set the same as `WAHA_DASHBOARD_USERNAME`
+- `WHATSAPP_SWAGGER_PASSWORD=admin` - you can set the same as `WAHA_DASHBOARD_PASSWORD`
+
+```bash
+# update .env file with your values
+nano .env
+# update docker-compose.yaml - like image
+# Remove "mongodb" and "minio" services if you don't need them
+# Leave "waha" service as it is
+nano docker-compose.yaml
+```
+
+{{< callout context="danger" title="Do Not Use Default API Keys or Passwords!" icon="outline/shield-check" >}}
+
+Even if you're running WAHA on a private server and think the IP is unknown - it's
+straightforward for attackers to find and exploit it to send spam or abuse your WhatsApp sessions.
+
+Always set strong, random values (see a guide below) for:
+
+- `WAHA_API_KEY`
+- `WAHA_DASHBOARD_PASSWORD`
+- `WHATSAPP_SWAGGER_PASSWORD` - you can the same as for `WAHA_DASHBOARD_PASSWORD`
+
+**👉 How to Generate and Hash Api-Key**
+{{< include file="content/docs/how-to/security/how-to-generate-api-key.md" >}}
+
+{{< /callout >}}
+
+4. Get the service up and running.
+
+```bash
+docker compose up -d
+```
+
+5. Your WAHA installation is complete.
+ Please note that the **containers are not exposed to the internet**, and they only bind to the **localhost**.
+ Set up something like Nginx or any other proxy server to proxy the requests to the container.
+
+{{< callout context="" title="How to export port from remote server?" icon="outline/info-circle" >}}
+If you're using a remote server (like VPS or Virtual Machine on your laptop) you need to allow access for your browser.
+Use one of the options available.
+
+1. Use **SSH tunneling**
+
+If you're connecting to ssh, you can forward port 3000 on your laptop like
+
+```bash
+ssh -L 3000:localhost:3000 user@you.address.here
+```
+
+2. **Bind port to all ips**
+
+For **temporary external access**, you can change the port binding from `127.0.0.1:3000:3000` to `3000:3000` in the `docker-compose.yaml` file.
+
+```yaml { title="docker-compose.yaml" }
+services:
+ waha:
+ image: devlikeapro/waha-plus
+ ports:
+ - "3000:3000"
+```
+
+```bash
+docker compose up -d
+```
+
+This makes your instance accessible at `http://:3000`.
+{{< /callout >}}
+
+6. Now, open [http://localhost:3000/dashboard](http://localhost:3000/dashboard) and login with the credentials you've set
+
+By default you can use:
+
+- Dashboard - `admin/admin`
+- Swagger - `admin/admin`
+- Api Key - `admin`
+
+### Nginx
+
+👉 Replace **** with your domain name in the following steps (use lowercase).
+
+1. Configure Nginx to serve as a frontend proxy.
+
+```bash
+sudo apt-get install nginx
+cd /etc/nginx/sites-enabled
+
+nano .conf
+```
+
+2. Use the following Nginx config and **replace** the `` in `server_name`.
+
+```nginx
+server {
+ server_name ;
+
+ # Point upstream to WAHA Server
+ set $upstream 127.0.0.1:3000;
+
+ location /.well-known {
+ alias /var/www/ssl-proof/waha/.well-known;
+ }
+
+ location / {
+ proxy_pass_header Authorization;
+ proxy_pass http://$upstream;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "Upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-Ssl on; # Optional
+
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ proxy_http_version 1.1;
+ proxy_buffering off;
+
+ client_max_body_size 0;
+ proxy_read_timeout 36000s;
+ proxy_redirect off;
+ }
+ listen 80;
+}
+```
+
+3. Verify and reload your Nginx config by running the following command.
+
+```bash
+nginx -t
+systemctl reload nginx
+```
+
+Here are two scenarios for setting up HTTPS:
+
+### HTTPS - Let's Encrypt
+
+If you have a domain name (e.g., **yourdomain.com**) that points to your server's IP address, you can use Let's Encrypt to get free, trusted SSL certificates:
+
+1. Run Let's Encrypt to configure SSL certificate. (replace ****!)
+
+```bash
+apt install certbot
+apt-get install python3-certbot-nginx
+
+mkdir -p /var/www/ssl-proof/waha/.well-known
+certbot --webroot -w /var/www/ssl-proof/waha/ -d -i nginx
+```
+
+2. Your WAHA installation should be accessible from the https://yourdomain.com now.
+3. Change `WAHA_BASE_URL=https://` in the `.env` file and restart the WAHA service
+
+```bash
+# Change the WAHA_BASE_URL in .env
+nano .env
+# Restart the WAHA service
+docker compose up -d
+docker compose restart
+```
+
+### HTTPS - Self-Signed Certificate
+
+We recommend using **Let's Encrypt** free certificate if you have public IP and DNS name.
+
+However, if you don't have **a domain name** or
+are using a **private IP address**, you can create a self-signed certificate for IP-based access,
+expand the details below:
+
+{{< details "**HTTPS - Setup Self-Signed Certificate**" >}}
+
+1. Create a directory for your SSL certificates:
+
+```bash
+mkdir -p /etc/nginx/ssl
+cd /etc/nginx/ssl
+```
+
+2. Create a configuration file for the self-signed certificate:
+
+```bash
+cat > ip-cert.cnf << 'EOL'
+[req]
+default_bits = 2048
+prompt = no
+default_md = sha256
+distinguished_name = dn
+x509_extensions = v3_ca
+
+[dn]
+C=US
+ST=State
+L=City
+O=Organization
+OU=Department
+CN=
+
+[v3_ca]
+subjectAltName = @alt_names
+
+[alt_names]
+IP.1 =
+EOL
+```
+
+3. Generate a self-signed certificate valid for 10 years (3650 days):
+
+```bash
+openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ip-cert.key -out ip-cert.crt -config ip-cert.cnf
+```
+
+4. Update your Nginx configuration to use the self-signed certificate:
+
+```bash
+cd /etc/nginx/sites-enabled
+nano .conf
+```
+
+5. Modify your Nginx configuration to include SSL settings:
+
+```nginx
+server {
+ listen 80;
+ server_name ;
+ return 301 https://$host$request_uri;
+}
+
+server {
+ listen 443 ssl;
+ server_name ;
+
+ ssl_certificate /etc/nginx/ssl/ip-cert.crt;
+ ssl_certificate_key /etc/nginx/ssl/ip-cert.key;
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_prefer_server_ciphers on;
+
+ # Point upstream to WAHA Server
+ set $upstream 127.0.0.1:3000;
+
+ location / {
+ proxy_pass_header Authorization;
+ proxy_pass http://$upstream;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "Upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-Ssl on; # Optional
+
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ proxy_http_version 1.1;
+ proxy_buffering off;
+
+ client_max_body_size 0;
+ proxy_read_timeout 36000s;
+ proxy_redirect off;
+ }
+}
+```
+
+6. Verify and reload your Nginx config:
+
+```bash
+nginx -t
+systemctl reload nginx
+```
+
+7. Update your WAHA configuration to use HTTPS:
+
+```bash
+# Change the WAHA_BASE_URL in .env to use https
+nano .env
+# Add or modify: WAHA_BASE_URL=https://
+# Restart the WAHA service
+docker compose up -d
+docker compose restart
+```
+
+8. When accessing your WAHA instance, you'll need to accept the self-signed certificate warning in your browser.
+
+{{< /details >}}
+
+## Update
+
+When there's a new version of WAHA, you can update it with these simple commands:
+
+[**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) image:
+
+```bash
+# Login if you're using WAHA Plus
+docker login -u devlikeapro -p {KEY}
+docker compose pull
+docker logout
+
+docker compose up -d
+```
+
+👉 If you specified exact version in `docker-compose.yml`, like
+
+```yaml
+image: devlikeapro/waha-plus:latest-2024.7.8
+```
+
+remember to change it to `latest-{YEAR}.{MONTH}.{BUILD}` to get the latest version.
+
+**WAHA Core** image:
+
+```bash
+docker compose pull
+docker compose up -d
+```
+
+## Get logs, restart, stop
+
+```bash
+# Stop all containers
+docker compose down
+# Start all containers, apply new configuration
+docker compose up -d
+# Restart all containers
+docker compose restart
+# Show logs in real time
+docker compose logs -f
+# Show logs - since interval
+docker compose logs --since 1h
+```
+
+## What's next?
+
+{{< include file="content/docs/overview/quick-start/links.md" >}}
diff --git a/content/docs/how-to/labels/features-events.md b/content/docs/how-to/labels/features-events.md
index fc39c4c6b..de27661bb 100644
--- a/content/docs/how-to/labels/features-events.md
+++ b/content/docs/how-to/labels/features-events.md
@@ -1,11 +1,11 @@
-
-{{< details "**🏷️ Labels - Events**" >}}
-
-| **Events** | WEBJS | NOWEB | GOWS |
-|----------------------|-------|-------|:-----|
-| `label.upsert` | | ✔️ | ✔️ |
-| `label.deleted` | | ✔️ | ✔️ |
-| `label.chat.added` | | ✔️ | ✔️ |
-| `label.chat.deleted` | | ✔️ | ✔️ |
-
-{{< /details >}}
+
+{{< details "**🏷️ Labels - Events**" >}}
+
+| **Events** | WEBJS | NOWEB | GOWS |
+| -------------------- | ----- | ----- | :--- |
+| `label.upsert` | | ✔️ | ✔️ |
+| `label.deleted` | | ✔️ | ✔️ |
+| `label.chat.added` | | ✔️ | ✔️ |
+| `label.chat.deleted` | | ✔️ | ✔️ |
+
+{{< /details >}}
diff --git a/content/docs/how-to/labels/features.md b/content/docs/how-to/labels/features.md
index b5f7f6eb0..f2f798f34 100644
--- a/content/docs/how-to/labels/features.md
+++ b/content/docs/how-to/labels/features.md
@@ -1,16 +1,16 @@
-
-{{< details "**🏷️ Labels - API**" >}}
-
-| **API** | WEBJS | NOWEB | GOWS |
-|--------------------------------------------------------------------------|-------|-------|:-----|
-| **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}/` | ✔️ | ✔️ | ✔️ |
-
-_If you see the feature is not available in the above list, please [create a feature request](https://github.com/devlikeapro/waha/issues/new/choose) or **leave "+1" comment** on the existing one._
-
-{{< /details >}}
+
+{{< details "**🏷️ Labels - API**" >}}
+
+| **API** | WEBJS | NOWEB | GOWS |
+| ------------------------------------------------------------------------ | ----- | ----- | :--- |
+| **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}/` | ✔️ | ✔️ | ✔️ |
+
+_If you see the feature is not available in the above list, please [create a feature request](https://github.com/devlikeapro/waha/issues/new/choose) or **leave "+1" comment** on the existing one._
+
+{{< /details >}}
diff --git a/content/docs/how-to/labels/index.md b/content/docs/how-to/labels/index.md
index 1f17450bb..7d4051af2 100644
--- a/content/docs/how-to/labels/index.md
+++ b/content/docs/how-to/labels/index.md
@@ -1,263 +1,270 @@
----
-title: "🏷️ Labels"
-description: "Labels (available in WhatsApp Business)"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 292
-images: [ "whatsapp-labels.png" ]
-slug: labels
----
-
-You can work with [WhatsApp Labels](https://faq.whatsapp.com/3398508707096369/?cms_platform=android)
-available in **WhatsApp Business** using the API!
-
-
-
-## Features
-
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/polls/features.md" >}}
-
-{{< include file="content/docs/how-to/polls/features-events.md" >}}
-
-## API
-### Send poll
-
-Use the endpoint to send a poll!
-
-```http request
-POST /api/sendPoll
-```
-
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "123123123@c.us",
- "poll": {
- "name": "How are you?",
- "options": [
- "Awesome!",
- "Good!",
- "Not bad!"
- ],
- "multipleAnswers": false
- }
-}
-```
-
-```json { title="Response" }
-{
- "id": "true_321321321@c.us_83ACBAAAAAAAAAAAAAAAAAAAA",
- "other-fields-here": "value"
-}
-```
-
-{{< callout context="tip" icon="outline/hand-finger-right" >}}
-Save the `id` field from the response in your database so that you can identify the poll for which you receive
-a vote (see webhook events below).
-{{< /callout >}}
-
-## Events
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
-
-### poll.vote
-
-With this event, you receive new votes for the poll sent.
-
-#### Vote from a user in direct messages.
-
-```json { title="poll.vote" }
-{
- "event": "poll.vote",
- "session": "default",
- "payload": {
- "vote": {
- "id": "false_1111111111@c.us_83ACBE602A05C79B234B54415E95EE8A",
- "to": "me",
- "from": "1111111@c.us",
- "fromMe": false,
- "selectedOptions": [
- "Awesome!"
- ],
- "timestamp": 1692861427
- },
- "poll": {
- "id": "true_1111111111@c.us_BAE5F2EF5C69001E",
- "to": "1111111111@c.us",
- "from": "me",
- "fromMe": true
- }
- },
- "engine": "NOWEB"
-}
-```
-
-#### Do I receive votes only for my polls?
-
-No, you receive all votes. Keep in mind that you'll get all votes with this event, even from other polls. To identify
-that it's your poll, look at the `poll.fromMe` field.
-
-#### How to handle multiple-answer votes
-
-For `multipleAnswers: true`, you receive the `selectedOptions` with all the selected values at a certain moment. So if a
-user has chosen 3 options from the poll, you will receive **3** `poll.vote` events:
-
-1. `selectedOptions: ["First"]`
-2. `selectedOptions: ["First", "Second"]`
-3. `selectedOptions: ["First", "Second", "Third"]`
-
-#### Timestamp
-
-If a user clicks on the poll multiple times, you will receive multiple `poll.vote` events. This is true for
-both `multipleAnswers: false` (when a user changes their mind about answers) and `multipleAnswers: true` (when a user
-selects two or more options) events.
-
-There is a little chance that you may receive votes in the wrong order (due to the nature of HTTP and Webhooks),
-like `1-3-2` instead of `1-2-3`. To determine the right order, look at the `timestamp` field. The event with a
-higher `timestamp` value is more recent.
-
-👉 It's important to save the `timestamp` for each vote in your database and compare them as numbers, without converting to
-internal datetime. Right now, the `timestamp` shows the timestamp in seconds, but it may be changed to milliseconds in
-the future.
-
-#### Vote from a user in a group
-
-```json { title="poll.vote" }
-{
- "event": "poll.vote",
- "session": "default",
- "payload": {
- "vote": {
- "id": "false_3333333333333@g.us_1C18A7EAADD2A8D0324755D241C4238A",
- "to": "3333333333333@g.us",
- "from": "1111111111@c.us",
- "fromMe": false,
- "selectedOptions": [
- "Awesome!"
- ],
- "timestamp": 1692861427
- },
- "poll": {
- "id": "true_3333333333333@g.us_BAE5304BA1ECF704",
- "to": "33333333333333@g.us",
- "from": "222222222@c.us",
- "fromMe": true
- }
- },
- "engine": "NOWEB"
-}
-```
-
-### poll.vote.failed
-
-There may be cases when WAHA fails to decrypt a vote from the user. In such cases, you will receive
-a `poll.vote.failed` event on your webhook.
-
-The payload for `poll.vote.failed` is the same as for `poll.vote`, but with an empty list in `selectedOptions`.
-
-```json { title="poll.vote.failed" }
-{
- "event": "poll.vote.failed",
- "session": "default",
- "payload": {
- "vote": {
- "id": "false_11111111111@c.us_2E8C4CDA89EDE3BC0BC7F605364B8451",
- "to": "me",
- "from": "111111111@c.us",
- "fromMe": false,
- "selectedOptions": [],
- "timestamp": 1692956972
- },
- "poll": {
- "id": "true_1111111111@c.us_BAE595F4E0A2042C",
- "to": "111111111@c.us",
- "from": "me",
- "fromMe": true
- }
- },
- "engine": "NOWEB"
-}
-```
-
-#### How should I handle poll.vote.failed events?
-
-When you send a poll, save the poll configuration (question and options) in your database with the `id` field from the
-response you received from `POST /api/sendPoll`.
-
-Later, when you receive a `poll.vote.failed` event, find the `id` for the poll in the database and repeat the same
-question to the user, apologizing for the inconvenience.
-For example, you can say:
-
-> Sorry, we don't understand your choice 😞
->
-> Please click one more time on the message below 👇
-
-After the user clicks on the poll again, you will receive a `poll.vote` event with their choice.
-
-
-
-#### How to test poll.vote.failed events?
-
-To receive `poll.vote.failed` events, follow these steps:
-
-1. Start a session and authorize it with a QR code.
-2. Send a poll to a chat.
-3. Stop the session (logout is not required).
-4. Start the session again.
-5. Vote on the poll.
-6. You will receive a `poll.vote.failed` event.
-
-#### Why does the poll.vote.failed event occur and when will it be fixed?
-
-The issue occurs because WAHA does not have a proper storage system, but polls require proper storage in order to
-decrypt votes later.
-
-There will be two fixes for this:
-
-1. In the short term, a [local file storage](https://github.com/devlikeapro/waha/issues/188) will be used
- to save poll keys.
-2. In the long term, work is being done
- on [remote storages](https://github.com/devlikeapro/waha/issues/41).
-
-Even after these fixes are implemented, it's better to handle `poll.vote.failed` events anyway, so your application is
-prepared for such cases!
+---
+title: "📶 Polls"
+description: "How to send polls and receive votes"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 226
+slug: polls
+images: ["poll-example.jpg"]
+---
+
+[**📶 Polls**]({{< relref "/docs/how-to/polls" >}})
+in WhatsApp is a good alternative for buttons and other interactive messages.
+
+You can ask a question and provide a few options for the user to choose from.
+The user can select only one option or multiple options, depending on the poll configuration.
+
+
+
+## Features
+
+Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
+
+{{< include file="content/docs/how-to/polls/features.md" >}}
+
+{{< include file="content/docs/how-to/polls/features-events.md" >}}
+
+## API
+
+### Send poll
+
+Use the endpoint to send a poll!
+
+```http request
+POST /api/sendPoll
+```
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "123123123@c.us",
+ "poll": {
+ "name": "How are you?",
+ "options": ["Awesome!", "Good!", "Not bad!"],
+ "multipleAnswers": false
+ }
+}
+```
+
+```json { title="Response" }
+{
+ "id": "true_321321321@c.us_83ACBAAAAAAAAAAAAAAAAAAAA",
+ "other-fields-here": "value"
+}
+```
+
+{{< callout context="tip" icon="outline/hand-finger-right" >}}
+Save the `id` field from the response in your database so that you can identify the poll for which you receive
+a vote (see webhook events below).
+{{< /callout >}}
+
+## Events
+
+Read more about
+[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
+
+### poll.vote
+
+With this event, you receive new votes for the poll sent.
+
+#### Vote from a user in direct messages.
+
+```json { title="poll.vote" }
+{
+ "event": "poll.vote",
+ "session": "default",
+ "payload": {
+ "vote": {
+ "id": "false_1111111111@c.us_83ACBE602A05C79B234B54415E95EE8A",
+ "to": "me",
+ "from": "1111111@c.us",
+ "fromMe": false,
+ "selectedOptions": ["Awesome!"],
+ "timestamp": 1692861427
+ },
+ "poll": {
+ "id": "true_1111111111@c.us_BAE5F2EF5C69001E",
+ "to": "1111111111@c.us",
+ "from": "me",
+ "fromMe": true
+ }
+ },
+ "engine": "NOWEB"
+}
+```
+
+#### Do I receive votes only for my polls?
+
+No, you receive all votes. Keep in mind that you'll get all votes with this event, even from other polls. To identify
+that it's your poll, look at the `poll.fromMe` field.
+
+#### How to handle multiple-answer votes
+
+For `multipleAnswers: true`, you receive the `selectedOptions` with all the selected values at a certain moment. So if a
+user has chosen 3 options from the poll, you will receive **3** `poll.vote` events:
+
+1. `selectedOptions: ["First"]`
+2. `selectedOptions: ["First", "Second"]`
+3. `selectedOptions: ["First", "Second", "Third"]`
+
+#### Timestamp
+
+If a user clicks on the poll multiple times, you will receive multiple `poll.vote` events. This is true for
+both `multipleAnswers: false` (when a user changes their mind about answers) and `multipleAnswers: true` (when a user
+selects two or more options) events.
+
+There is a little chance that you may receive votes in the wrong order (due to the nature of HTTP and Webhooks),
+like `1-3-2` instead of `1-2-3`. To determine the right order, look at the `timestamp` field. The event with a
+higher `timestamp` value is more recent.
+
+👉 It's important to save the `timestamp` for each vote in your database and compare them as numbers, without converting to
+internal datetime. Right now, the `timestamp` shows the timestamp in seconds, but it may be changed to milliseconds in
+the future.
+
+#### Vote from a user in a group
+
+```json { title="poll.vote" }
+{
+ "event": "poll.vote",
+ "session": "default",
+ "payload": {
+ "vote": {
+ "id": "false_3333333333333@g.us_1C18A7EAADD2A8D0324755D241C4238A",
+ "to": "3333333333333@g.us",
+ "from": "1111111111@c.us",
+ "fromMe": false,
+ "selectedOptions": ["Awesome!"],
+ "timestamp": 1692861427
+ },
+ "poll": {
+ "id": "true_3333333333333@g.us_BAE5304BA1ECF704",
+ "to": "33333333333333@g.us",
+ "from": "222222222@c.us",
+ "fromMe": true
+ }
+ },
+ "engine": "NOWEB"
+}
+```
+
+### poll.vote.failed
+
+There may be cases when WAHA fails to decrypt a vote from the user. In such cases, you will receive
+a `poll.vote.failed` event on your webhook.
+
+The payload for `poll.vote.failed` is the same as for `poll.vote`, but with an empty list in `selectedOptions`.
+
+```json { title="poll.vote.failed" }
+{
+ "event": "poll.vote.failed",
+ "session": "default",
+ "payload": {
+ "vote": {
+ "id": "false_11111111111@c.us_2E8C4CDA89EDE3BC0BC7F605364B8451",
+ "to": "me",
+ "from": "111111111@c.us",
+ "fromMe": false,
+ "selectedOptions": [],
+ "timestamp": 1692956972
+ },
+ "poll": {
+ "id": "true_1111111111@c.us_BAE595F4E0A2042C",
+ "to": "111111111@c.us",
+ "from": "me",
+ "fromMe": true
+ }
+ },
+ "engine": "NOWEB"
+}
+```
+
+#### How should I handle poll.vote.failed events?
+
+When you send a poll, save the poll configuration (question and options) in your database with the `id` field from the
+response you received from `POST /api/sendPoll`.
+
+Later, when you receive a `poll.vote.failed` event, find the `id` for the poll in the database and repeat the same
+question to the user, apologizing for the inconvenience.
+For example, you can say:
+
+> Sorry, we don't understand your choice 😞
+>
+> Please click one more time on the message below 👇
+
+After the user clicks on the poll again, you will receive a `poll.vote` event with their choice.
+
+
+
+#### How to test poll.vote.failed events?
+
+To receive `poll.vote.failed` events, follow these steps:
+
+1. Start a session and authorize it with a QR code.
+2. Send a poll to a chat.
+3. Stop the session (logout is not required).
+4. Start the session again.
+5. Vote on the poll.
+6. You will receive a `poll.vote.failed` event.
+
+#### Why does the poll.vote.failed event occur and when will it be fixed?
+
+The issue occurs because WAHA does not have a proper storage system, but polls require proper storage in order to
+decrypt votes later.
+
+There will be two fixes for this:
+
+1. In the short term, a [local file storage](https://github.com/devlikeapro/waha/issues/188) will be used
+ to save poll keys.
+2. In the long term, work is being done
+ on [remote storages](https://github.com/devlikeapro/waha/issues/41).
+
+Even after these fixes are implemented, it's better to handle `poll.vote.failed` events anyway, so your application is
+prepared for such cases!
diff --git a/content/docs/how-to/presence/features-events.md b/content/docs/how-to/presence/features-events.md
index abf649ae0..7d2ee55b0 100644
--- a/content/docs/how-to/presence/features-events.md
+++ b/content/docs/how-to/presence/features-events.md
@@ -1,9 +1,8 @@
-
-{{< details "**✅ Presence - Events**" >}}
-
-| **Events** | WEBJS | NOWEB | GOWS |
-|-------------------|:-----:|:-----:|:-----|
-| `presence.update` | ✔️ | ✔️ | ✔️ |
-
-
-{{< /details >}}
+
+{{< details "**✅ Presence - Events**" >}}
+
+| **Events** | WEBJS | NOWEB | GOWS |
+| ----------------- | :---: | :---: | :--- |
+| `presence.update` | ✔️ | ✔️ | ✔️ |
+
+{{< /details >}}
diff --git a/content/docs/how-to/presence/features.md b/content/docs/how-to/presence/features.md
index 862173c33..61d788974 100644
--- a/content/docs/how-to/presence/features.md
+++ b/content/docs/how-to/presence/features.md
@@ -1,13 +1,13 @@
-
-{{< details "**✅ Presence - API**" >}}
-
-| **API** | WEBJS | NOWEB | GOWS |
-|---------------------------------------------------|:-----:|:-----:|:-----|
-| `POST /api/{session}/presence` | ✔️ | ✔️ | ✔️ |
-| `GET /api/{session}/presence/{chatId}` | ✔️ | ✔️ | ✔️ |
-| `POST /api/{session}/presence/{chatId}/subscribe` | ✔️ | ✔️ | ✔️ |
-| `GET /api/{session}/presence` | | ✔️ | ✔️ |
-
-_If you see the feature is not available in the above list, please [create a feature request](https://github.com/devlikeapro/waha/issues/new/choose) or **leave "+1" comment** on the existing one._
-
-{{< /details >}}
+
+{{< details "**✅ Presence - API**" >}}
+
+| **API** | WEBJS | NOWEB | GOWS |
+| ------------------------------------------------- | :---: | :---: | :--- |
+| `POST /api/{session}/presence` | ✔️ | ✔️ | ✔️ |
+| `GET /api/{session}/presence/{chatId}` | ✔️ | ✔️ | ✔️ |
+| `POST /api/{session}/presence/{chatId}/subscribe` | ✔️ | ✔️ | ✔️ |
+| `GET /api/{session}/presence` | | ✔️ | ✔️ |
+
+_If you see the feature is not available in the above list, please [create a feature request](https://github.com/devlikeapro/waha/issues/new/choose) or **leave "+1" comment** on the existing one._
+
+{{< /details >}}
diff --git a/content/docs/how-to/presence/index.md b/content/docs/how-to/presence/index.md
index 49a899d29..24d0e5184 100644
--- a/content/docs/how-to/presence/index.md
+++ b/content/docs/how-to/presence/index.md
@@ -1,198 +1,203 @@
----
-title: "✅ Presence"
-description: "Presence - online, offline, typing status"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 291
-images: ["typing.jpg"]
-slug: presence
----
-
-You can get presence information (online, offline with last seen, typing status) for a contact if they share their
-presence information.
-
-
-
-
-## FAQ
-👉 **I don't get notifications on my phone when WAHA session is connected**
-- You need to send `offline` after all presence you send (WhatsApp doesn't send notifications to the device if a web client is active).
-- For [**🏭 NOWEB Engine**]({{< relref "/docs/engines/NOWEB" >}}) also mark sure to send `markOnline: false`
-when you create a new session.
-
-## Features
-
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/presence/features.md" >}}
-
-{{< include file="content/docs/how-to/presence/features-events.md" >}}
-
-## API
-
-### Set presence
-You can set your global or chat-related presence with endpoint
-
-```http request
-POST /api/{session}/presence
-```
-
-```json { title="Body" }
-{
- "chatId": "111111111@c.us",
- "presence": "typing"
-}
-```
-
-Possible presence statuses that you can set or get for chats:
-- `online` - send the status with no `chatId`
-- `offline` - send the status with no `chatId`
-- `typing` - `chatId` required
-- `recording` - `chatId` required
-- `paused` - resets the chat presence after you were `typing`. `chatId` required.
-
-**Start typing** to a chat (you can use `POST /startTyping` instead)
-
-```json { title="Body" }
-{
- "chatId": "111111111@c.us",
- "presence": "typing"
-}
-```
-
-**Clear "typing" state** (you can use `POST /stopTyping` instead)
-
-```json { title="Body" }
-{
- "chatId": "111111111@c.us",
- "presence": "paused"
-}
-```
-
-**Set global "online"**, all contacts will see it
-
-```json { title="Body" }
-{
- "presence": "online"
-}
-```
-
-💡 In the multi-device version of WhatsApp - if a desktop client is active, WhatsApp doesn't send push notifications
-to the device.
-If you would like to receive said notifications - you need to mark a session's presence as `offline`.
-
-```json { title="Body" }
-{
- "presence": "offline"
-}
-```
-
-### Get chat presence
-
-```http request
-GET /api/{session}/presence/{chatId}
-```
-
-Get presence information for a single chat. For a group, you'll get participants' statuses.
-
-```json {title="Response"}
-{
- "id": "2132132130@c.us",
- "presences": [
- {
- "participant": "2132132130@c.us",
- "lastKnownPresence": "online",
- "lastSeen": null
- }
- ]
-}
-```
-
-### Subscribe to presence
-
-You can subscribe to presence information by calling
-```http request
-POST /api/{session}/presence/{chatId}/subscribe
-```
-
-(no body required).
-
-You can get later presence information for the chat with above `GET` endpoints or by listening to `presence.update`
-webhook.
-
-### Get all chats presence
-
-You can get all presence information available for a session by calling
-
-```http request
-GET /api/{session}/presence
-```
-
-It returns both groups' and personal chats' presence information.
-
-Here's few notes about fields:
-- `chatId` - either contact id (`213213213@c.us`) or group chat id (`1111111111111@g.us`).
-- `lastSeen` - contains Unix timestamps indicating when a participant was last online
-- `lastKnownPresence` - contains the last known presence status, which can be
- `offline`, `online`, `typing`, `recording`, or `paused`
-
-```json {title="Response"}
-[
- {
- "id": "2132132130@c.us",
- "presences": [
- {
- "participant": "2132132130@c.us",
- "lastKnownPresence": "offline",
- "lastSeen": 1686719326
- }
- ]
- },
- {
- "id": "11111111111111111111111@g.us",
- "presences": [
- {
- "participant": "11111111111111111111111@g.us",
- "lastKnownPresence": "online",
- "lastSeen": null
- },
- {
- "participant": "2132132130@c.us",
- "lastKnownPresence": "offline",
- "lastSeen": 1686719326
- }
- ]
- }
-]
-```
-
-
-## Events
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
-
-### presence.update
-
-You can subscribe to `presence.update` webhook event to get the most recent presence information.
-
-```json { title="presence.update" }
-{
- "event": "presence.update",
- "session": "default",
- "payload": {
- "id": "111111111111111111@g.us",
- "presences": [
- {
- "participant": "11111111111@c.us",
- "lastKnownPresence": "typing",
- "lastSeen": null
- }
- ]
- },
- "engine": "NOWEB"
-}
-```
+---
+title: "✅ Presence"
+description: "Presence - online, offline, typing status"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 291
+images: ["typing.jpg"]
+slug: presence
+---
+
+You can get presence information (online, offline with last seen, typing status) for a contact if they share their
+presence information.
+
+
-
-👉 If proxy doesn't help but the project works on YOUR local laptop - check [Tunneling](#tunneling).
-
-### Symptoms
-1. You start a new session in WhatsApp.
-2. Scan the QR code.
-3. Experience a long loading time.
-4. Face login failures or instant logout.
-5. Encounter a new QR code or enter a FAILED state immediately.
-
-### Solutions
-**There are two ways to solve this issue**:
-1. Use a proxy (read this page and [**article about WAHA + Geonode**]({{< relref "/blog/waha-geonode" >}})).
-2. Running WAHA on local network and [**expose WAHA with Ngrok**]({{< relref "/blog/waha-ngrok" >}}).
-
-
-
- 
-
-
-
-## Configuration
-There are two ways to set up proxies:
-1. Global Setting (for all sessions per container)
-2. Per Session Configuration (you can define a proxy for each session when you start it)
-
-### Global Proxy Configuration
-To use a proxy, you can set the following environment variables:
-
-- `WHATSAPP_PROXY_SERVER=localhost:3128`: Set the proxy server in the format `host:port`, without HTTP or HTTPS.
-- `WHATSAPP_PROXY_SERVER_USERNAME=username` and `WHATSAPP_PROXY_SERVER_PASSWORD=password`: Configure credentials for the proxy.
-- `WHATSAPP_PROXY_SERVER_LIST=host1.example.com:3138,host2.example.com:3138`: Specify a comma-separated list of addresses to use, utilizing a round-robin algorithm for server selection.
-- `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-`: Define a session name prefix to choose the appropriate proxy from the list.
-
-Read more about it on [**Configuration page** ->]({{< relref "/docs/how-to/config#proxy" >}}).
-
-### Session Proxy Configuration
-You can configure proxy for a session by setting `config.proxy` fields when you `POST /api/sessions/`:
-- `server` - proxy server address, without `http://` or `https://` prefixes
-- `username` and `password` - set this if the proxy requires authentication
-
-
-**No authentication**
-```json
-{
- "name": "default",
- "config": {
- "proxy": {
- "server": "localhost:3128"
- }
- }
-}
-```
-
-**Proxy with authentication**
-```json
-{
- "name": "default",
- "config": {
- "proxy": {
- "server": "localhost:3128",
- "username": "username",
- "password": "P@ssw0rd"
- }
- }
-}
-```
-
-Read more about it on [**Sessions page** ->]({{< relref "/docs/how-to/sessions#configure-proxy" >}}).
-
-
-## Recommended Proxies
-
-### Proxy6
-👉 Proxy6
-
-Apply the promo code to get a **5% Discount** on your purchase.
-
-```yaml
-9W9oVxx3UX
-```
-
-### Geonode
-👉 Geonode
-
-It might reconnect the session due to its internal **geonode** issues - {{< issue 751 >}}
-
-
-
-
-## Tunneling
-If you can't use a proxy (or it doesn't help), you can try tunneling the connection to your local machine.
-
-You can run WAHA on local network then, you can buy something like RaspberryPi or a small server (lenovo m93 or similar) and host it there.
-
-So the setup would look like:
-1. You have an app (with your logic and database) running on **VPS**
-2. You have **WAHA** running on **your local network** on some dedicated PC (mongodb or file MUST be placed on this server as well)
-3. You have [ngrok](https://ngrok.com/) (or any similar reverse proxy) running on **local network** and sharing 3000 port on dedicated name (paid ngrok required for that)
-4. Your App communicated with WAHA API using the external ngrok name and WAHA send webhooks back to the server
-
-There's nothing we can do about network detection from Meta side :(
-
-
+---
+title: "🌐 Proxy"
+description: "Avoid issues with scanning QR codes in WhatsApp."
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 226
+slug: proxy
+images: ["proxy.png"]
+---
+
+## Overview
+
+If you're experiencing issues scanning QR codes in WhatsApp, especially with **Indian 🇮🇳 phone numbers**,
+using a proxy located close to the phone number's location may help resolve the problem.
+
+
+
+👉 If proxy doesn't help but the project works on YOUR local laptop - check [Tunneling](#tunneling).
+
+### Symptoms
+
+1. You start a new session in WhatsApp.
+2. Scan the QR code.
+3. Experience a long loading time.
+4. Face login failures or instant logout.
+5. Encounter a new QR code or enter a FAILED state immediately.
+
+### Solutions
+
+**There are two ways to solve this issue**:
+
+1. Use a proxy (read this page and [**article about WAHA + Geonode**]({{< relref "/blog/waha-geonode" >}})).
+2. Running WAHA on local network and [**expose WAHA with Ngrok**]({{< relref "/blog/waha-ngrok" >}}).
+
+
+
+
+
+
+
+## Configuration
+
+There are two ways to set up proxies:
+
+1. Global Setting (for all sessions per container)
+2. Per Session Configuration (you can define a proxy for each session when you start it)
+
+### Global Proxy Configuration
+
+To use a proxy, you can set the following environment variables:
+
+- `WHATSAPP_PROXY_SERVER=localhost:3128`: Set the proxy server in the format `host:port`, without HTTP or HTTPS.
+- `WHATSAPP_PROXY_SERVER_USERNAME=username` and `WHATSAPP_PROXY_SERVER_PASSWORD=password`: Configure credentials for the proxy.
+- `WHATSAPP_PROXY_SERVER_LIST=host1.example.com:3138,host2.example.com:3138`: Specify a comma-separated list of addresses to use, utilizing a round-robin algorithm for server selection.
+- `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-`: Define a session name prefix to choose the appropriate proxy from the list.
+
+Read more about it on [**Configuration page** ->]({{< relref "/docs/how-to/config#proxy" >}}).
+
+### Session Proxy Configuration
+
+You can configure proxy for a session by setting `config.proxy` fields when you `POST /api/sessions/`:
+
+- `server` - proxy server address, without `http://` or `https://` prefixes
+- `username` and `password` - set this if the proxy requires authentication
+
+**No authentication**
+
+```json
+{
+ "name": "default",
+ "config": {
+ "proxy": {
+ "server": "localhost:3128"
+ }
+ }
+}
+```
+
+**Proxy with authentication**
+
+```json
+{
+ "name": "default",
+ "config": {
+ "proxy": {
+ "server": "localhost:3128",
+ "username": "username",
+ "password": "P@ssw0rd"
+ }
+ }
+}
+```
+
+Read more about it on [**Sessions page** ->]({{< relref "/docs/how-to/sessions#configure-proxy" >}}).
+
+## Recommended Proxies
+
+### Proxy6
+
+👉 Proxy6
+
+Apply the promo code to get a **5% Discount** on your purchase.
+
+```yaml
+9W9oVxx3UX
+```
+
+### Geonode
+
+👉 Geonode
+
+It might reconnect the session due to its internal **geonode** issues - {{< issue 751 >}}
+
+## Tunneling
+
+If you can't use a proxy (or it doesn't help), you can try tunneling the connection to your local machine.
+
+You can run WAHA on local network then, you can buy something like RaspberryPi or a small server (lenovo m93 or similar) and host it there.
+
+So the setup would look like:
+
+1. You have an app (with your logic and database) running on **VPS**
+2. You have **WAHA** running on **your local network** on some dedicated PC (mongodb or file MUST be placed on this server as well)
+3. You have [ngrok](https://ngrok.com/) (or any similar reverse proxy) running on **local network** and sharing 3000 port on dedicated name (paid ngrok required for that)
+4. Your App communicated with WAHA API using the external ngrok name and WAHA send webhooks back to the server
+
+There's nothing we can do about network detection from Meta side :(
diff --git a/content/docs/how-to/receive-messages/features-events.md b/content/docs/how-to/receive-messages/features-events.md
index d2b982a30..b4693a13e 100644
--- a/content/docs/how-to/receive-messages/features-events.md
+++ b/content/docs/how-to/receive-messages/features-events.md
@@ -1,14 +1,14 @@
-
-{{< details "**📤 Messages - Events**" >}}
-
-| **Events** | WEBJS | NOWEB | GOWS |
-|--------------------|:-----:|:-----:|:----:|
-| `message` | ✔️ | ✔️ | ✔️ |
-| `message.reaction` | ✔️ | ✔️ | ✔️ |
-| `message.any` | ✔️ | ✔️ | ✔️ |
-| `message.ack` | ✔️ | ✔️ | ✔️ |
-| `message.waiting` | ✔️ | | |
-| `message.edited` | ✔️ | ✔️ | ✔️ |
-| `message.revoked` | ✔️ | ✔️ | ✔️ |
-
-{{< /details >}}
+
+{{< details "**📤 Messages - Events**" >}}
+
+| **Events** | WEBJS | NOWEB | GOWS |
+| ------------------ | :---: | :---: | :--: |
+| `message` | ✔️ | ✔️ | ✔️ |
+| `message.reaction` | ✔️ | ✔️ | ✔️ |
+| `message.any` | ✔️ | ✔️ | ✔️ |
+| `message.ack` | ✔️ | ✔️ | ✔️ |
+| `message.waiting` | ✔️ | | |
+| `message.edited` | ✔️ | ✔️ | ✔️ |
+| `message.revoked` | ✔️ | ✔️ | ✔️ |
+
+{{< /details >}}
diff --git a/content/docs/how-to/receive-messages/index.md b/content/docs/how-to/receive-messages/index.md
index a2aec6719..1891ebf53 100644
--- a/content/docs/how-to/receive-messages/index.md
+++ b/content/docs/how-to/receive-messages/index.md
@@ -1,341 +1,357 @@
----
-title : "📥 Receive messages"
-description: "Describe how to receive messages from WhatsApp."
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 221
-images: ["messages.jpg"]
-slug: receive-messages
----
-We assume that you've already run the Docker container and authenticated the session with a QR code.
-
-If you haven't yet - please follow the steps from [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}}).
-
-You can use [**🔄 Events via Webhooks or Websockets**]({{< relref "/docs/how-to/events" >}}) to receive messages from WhatsApp to your application.
-
-Start a new session with configured `message` event in webhooks - call `POST /api/sessions/` with the payload:
-```json
-{
- "name": "default",
- "config": {
- "webhooks": [
- {
- "url": "https://webhook.site/11111111-1111-1111-1111-11111111",
- "events": [
- "message"
- ]
- }
- ]
- }
-}
-```
-
-After that, WAHA sends events (see below) about new messages to an endpoint you provided.
-
-{{< callout context="note" title="Observe Events" icon="outline/info-circle" >}}
-To observe events and payload you can:
-- Open [**📊 Dashboard / Event Monitor**]({{< relref "/docs/how-to/dashboard#event-monitor" >}}) and see the events in real-time
-- Open [https://webhook.site](https://webhook.site), paste UUID from it to `url` field in webhook for a session
-{{< /callout >}}
-
-## Features
-
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/receive-messages/features-events.md" >}}
-
-## Fields
-### chatId, from, to, participant
-You may notice various identifiers in the `from`, `to`, and `participant` fields. Here's what they mean:
-- `123123123@c.us` **Phone numbers** accounts - international phone number without + at the start and add `@c.us` at the end.
- For phone number `12132132131` the `chatId` is `12132132131@c.us`
-- `123123123@s.whatsapp.net` can also appear in **internal data for NOWEB**. Just convert it to `@c.us` to work with that properly. Kindly don't use it in `chatId` when sending messages
-- `12312312123133@g.us` - **Groups** uses random number with `@g.us` at the end.
-- `123123123@lid` - **is a hidden user ID**, each user has a regular ID along with a hidden one. WhatsApp added that type of ID along with communities functionality.
-- `123123123@newsletter` - for [**📰 WhatsApp Channels**]({{< relref "/docs/how-to/channels" >}}).
-
-### replyTo
-If you get a message as a reply to another message, you'll see `replyTo` field with the message ID that was replied to.
-
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "from": "11111111111@c.us",
- "body": "Yes!",
- "replyTo": "false_22222222@c.us_AAAAAAAAAAAAAAAAAAA"
- }
-}
-
-```
-
-
-
-## Events
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
-
-Here's examples of message-related events:
-
-### message
-
-Incoming message (text/audio/files)
-
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "from": "11111111111@c.us",
- "fromMe": true,
- "to": "11111111111@c.us",
- "body": "Hi there!",
- "hasMedia": false,
- "ack": 1,
- "vCards": [],
- "_data": {
- ...
- }
- }
-}
-```
-
-Fields:
-- `hasMedia: true | false` - indicates if the message has media attached
-- `media.url: http://localhost:8000/...` - the URL to download the media
-- `_data` - internal **engine** data, can be different for each engine
-
-It's possible to have `hasMedia: true`, but `media: null` - this means that WAHA didn't download media due to configuration.
-
-### message.any
-
-Fired on all message creations, including your own. The payload is the same as for [message](#message) event.
-
-```json { title="message.any" }
-{
- "event": "message.any",
- "session": "default",
- "payload": {}
-}
-```
-
-### message.reaction
-This event is triggered when a message is reacted to by a user (or when **you** react to a message).
-- `payload.reaction.text` - emoji that was used to react to the message. It'll be an empty string if the reaction was removed.
-- `payload.reaction.messageId` - id of the message that was reacted to.
-
-```json { title="message.reaction" }
-{
- "event": "message.reaction",
- "session": "default",
- "me": {
- "id": "79222222222@c.us",
- "pushName": "WAHA"
- },
- "payload": {
- "id": "false_79111111@c.us_11111111111111111111111111111111",
- "from": "79111111@c.us",
- "fromMe": false,
- "participant": "79111111@c.us",
- "to": "79111111@c.us",
- "timestamp": 1710481111.853,
- "reaction": {
- "text": "🙏",
- "messageId": "true_79111111@c.us_11111111111111111111111111111111"
- }
- },
- "engine": "WEBJS",
- "environment": {
- "version": "2024.3.3",
- "engine": "WEBJS",
- "tier": "PLUS",
- "browser": "/usr/bin/google-chrome-stable"
- }
-}
-```
-
-### message.ack
-This event is triggered when the server or recipient gets the message, reads it, or plays it.
-
-```json { title="message.ack" }
-{
- "event": "message.ack",
- "session": "default",
- "payload": {}
-}
-```
-
-### message.waiting
-Happens when you see
-[Waiting for this message. This may take a while.](https://faq.whatsapp.com/3398056720476987)
-on your phone.
-
-
-
-```json { title="message.waiting" }
-{
- "event": "message.waiting",
- "session": "default",
- "engine": "WEBJS",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "from": "11111111111@c.us",
- "fromMe": true,
- "to": "11111111111@c.us",
- ...
- "_data": {
- ...
- }
- }
-}
-```
-
-### message.revoked
-
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events#messagerevoked" >}}).
-
-```json { title="message.revoked" }
-{
- "event": "message.revoked",
- "session": "default",
- "payload": {
- "before": {
- "id": "some-id-here",
- "timestamp": "some-timestamp-here",
- "body": "Hi there!"
- },
- "after": {
- "id": "some-id-here",
- "timestamp": "some-timestamp-here",
- "body": ""
- }
- }
-}
-```
-
-
-## Media Files
-
-When people send you media - images, voice messages, and documents - WAHA saves them in the file storage.
-In your application, you must download these files and use them as needed. You can find the URL in the `media.url` field.
-
-For example, you can get the webhook like this with `media` value (we've skipped other fields):
-
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "body": "Check this out (caption for the media)!",
- "from": "11111111111@c.us",
- "hasMedia": true,
- "media": {
- "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg",
- "mimetype": "image/jpeg",
- "filename": null,
- "error": null // if there was an error during file download
- }
- }
-}
-```
-
-Fields:
-- `hasMedia: true | false` - indicates if the message has media attached
-- `media.url: http://localhost:8000/...` - the URL to download the media
-
-Note: If you see `hasMedia: true` but no `media.url`, this indicates that WAHA detected media but didn't download it due to your configuration settings.
-
-Then you can use the link to download the file `http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg`.
-
-For documents (file attachments) there's also `filename` field with the original file name.
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "payload": {
- "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "timestamp": 1667561485,
- "from": "11111111111@c.us",
- "media": {
- "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.pdf",
- "filename": "some-file.pdf",
- "mimetype": "application/pdf",
- "error": null // if there was an error during file download
- }
- }
-}
-```
-
-To configure the `media.url` you can use environment variables:
-- `WAHA_BASE_URL=https://waha.example.com` (only affects `media.url`)
-
-Or define
-- `WHATSAPP_API_SCHEMA=https`,
-- `WHATSAPP_API_HOSTNAME=waha.example.com`
-- `WHATSAPP_API_PORT=3000`
-
-By default, WAHA download all files that the account receive.
-If you want to limit files lifetime, specify file types for download or change directory for files -
-read more about [**⚙️ Configuration**]({{< relref "config" >}}).
-
-## API
-See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
-
-### Get messages
-To read messages from the history, use the API:
-
-```http request
-GET /api/messages
-```
-
-{{< callout context="caution" icon="outline/alert-triangle" >}}
-We recommend using
-[**🔄 Events via Webhooks or Websockets**]({{< relref "docs/how-to/events" >}})
-instead of constantly calling it to prevent performance issues.
-{{< /callout >}}
-
-Accept the same parameters as
-[**💬 Chats** - **Get messages from chat**]({{< relref "/docs/how-to/chats#get-messages" >}}) endpoint:
-
-```bash
-curl -X 'GET' \
- 'http://localhost:3000/api/messages?chatId=11111111111%40c.us&limit=1000&session=default' \
- -H 'accept: application/json'
-```
-
-### Get message by id
-You also can get message by id using
-[**💬 Chats** - **Get message by id from chat**]({{< relref "/docs/how-to/chats#get-message-by-id" >}}) endpoint.
-
-```http request
-GET /api/{session}/chats/{chatId}/messages/{messageId}?downloadMedia=true
-```
-
-{{< callout context="note" icon="outline/alert-triangle" >}}
-We recommend using
-[**🔄 Events via Webhooks or Websockets**]({{< relref "docs/how-to/events" >}})
-instead to prevent performance issues.
-
-However, for single message requests, you can retrieve the message by its ID to obtain the latest `ack`, for example.
-{{< /callout >}}
-
-## Examples
-Here are a few examples of how to receive messages in different languages:
-1. [Python guide ->]({{< relref "/docs/integrations/waha+python" >}})
-
-**Do you use another language?**
-
-Please create a short guide how to handle webhook and send message after you finish your setup!
-You can create a pull request with your favorite language in the
-[GitHub, in examples folder ->](https://github.com/devlikeapro/waha/tree/core/examples).
+---
+title: "📥 Receive messages"
+description: "Describe how to receive messages from WhatsApp."
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 221
+images: ["messages.jpg"]
+slug: receive-messages
+---
+
+We assume that you've already run the Docker container and authenticated the session with a QR code.
+
+If you haven't yet - please follow the steps from [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}}).
+
+You can use [**🔄 Events via Webhooks or Websockets**]({{< relref "/docs/how-to/events" >}}) to receive messages from WhatsApp to your application.
+
+Start a new session with configured `message` event in webhooks - call `POST /api/sessions/` with the payload:
+
+```json
+{
+ "name": "default",
+ "config": {
+ "webhooks": [
+ {
+ "url": "https://webhook.site/11111111-1111-1111-1111-11111111",
+ "events": ["message"]
+ }
+ ]
+ }
+}
+```
+
+After that, WAHA sends events (see below) about new messages to an endpoint you provided.
+
+{{< callout context="note" title="Observe Events" icon="outline/info-circle" >}}
+To observe events and payload you can:
+
+- Open [**📊 Dashboard / Event Monitor**]({{< relref "/docs/how-to/dashboard#event-monitor" >}}) and see the events in real-time
+- Open [https://webhook.site](https://webhook.site), paste UUID from it to `url` field in webhook for a session
+ {{< /callout >}}
+
+## Features
+
+Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
+
+{{< include file="content/docs/how-to/receive-messages/features-events.md" >}}
+
+## Fields
+
+### chatId, from, to, participant
+
+You may notice various identifiers in the `from`, `to`, and `participant` fields. Here's what they mean:
+
+- `123123123@c.us` **Phone numbers** accounts - international phone number without + at the start and add `@c.us` at the end.
+ For phone number `12132132131` the `chatId` is `12132132131@c.us`
+- `123123123@s.whatsapp.net` can also appear in **internal data for NOWEB**. Just convert it to `@c.us` to work with that properly. Kindly don't use it in `chatId` when sending messages
+- `12312312123133@g.us` - **Groups** uses random number with `@g.us` at the end.
+- `123123123@lid` - **is a hidden user ID**, each user has a regular ID along with a hidden one. WhatsApp added that type of ID along with communities functionality.
+- `123123123@newsletter` - for [**📰 WhatsApp Channels**]({{< relref "/docs/how-to/channels" >}}).
+
+### replyTo
+
+If you get a message as a reply to another message, you'll see `replyTo` field with the message ID that was replied to.
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "payload": {
+ "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "timestamp": 1667561485,
+ "from": "11111111111@c.us",
+ "body": "Yes!",
+ "replyTo": "false_22222222@c.us_AAAAAAAAAAAAAAAAAAA"
+ }
+}
+```
+
+## Events
+
+Read more about
+[**🔄 Events**]({{< relref "/docs/how-to/events" >}}).
+
+Here's examples of message-related events:
+
+### message
+
+Incoming message (text/audio/files)
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "payload": {
+ "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "timestamp": 1667561485,
+ "from": "11111111111@c.us",
+ "fromMe": true,
+ "to": "11111111111@c.us",
+ "body": "Hi there!",
+ "hasMedia": false,
+ "ack": 1,
+ "vCards": [],
+ "_data": {
+ ...
+ }
+ }
+}
+```
+
+Fields:
+
+- `hasMedia: true | false` - indicates if the message has media attached
+- `media.url: http://localhost:8000/...` - the URL to download the media
+- `_data` - internal **engine** data, can be different for each engine
+
+It's possible to have `hasMedia: true`, but `media: null` - this means that WAHA didn't download media due to configuration.
+
+### message.any
+
+Fired on all message creations, including your own. The payload is the same as for [message](#message) event.
+
+```json { title="message.any" }
+{
+ "event": "message.any",
+ "session": "default",
+ "payload": {}
+}
+```
+
+### message.reaction
+
+This event is triggered when a message is reacted to by a user (or when **you** react to a message).
+
+- `payload.reaction.text` - emoji that was used to react to the message. It'll be an empty string if the reaction was removed.
+- `payload.reaction.messageId` - id of the message that was reacted to.
+
+```json { title="message.reaction" }
+{
+ "event": "message.reaction",
+ "session": "default",
+ "me": {
+ "id": "79222222222@c.us",
+ "pushName": "WAHA"
+ },
+ "payload": {
+ "id": "false_79111111@c.us_11111111111111111111111111111111",
+ "from": "79111111@c.us",
+ "fromMe": false,
+ "participant": "79111111@c.us",
+ "to": "79111111@c.us",
+ "timestamp": 1710481111.853,
+ "reaction": {
+ "text": "🙏",
+ "messageId": "true_79111111@c.us_11111111111111111111111111111111"
+ }
+ },
+ "engine": "WEBJS",
+ "environment": {
+ "version": "2024.3.3",
+ "engine": "WEBJS",
+ "tier": "PLUS",
+ "browser": "/usr/bin/google-chrome-stable"
+ }
+}
+```
+
+### message.ack
+
+This event is triggered when the server or recipient gets the message, reads it, or plays it.
+
+```json { title="message.ack" }
+{
+ "event": "message.ack",
+ "session": "default",
+ "payload": {}
+}
+```
+
+### message.waiting
+
+Happens when you see
+[Waiting for this message. This may take a while.](https://faq.whatsapp.com/3398056720476987)
+on your phone.
+
+
+
+```json { title="message.waiting" }
+{
+ "event": "message.waiting",
+ "session": "default",
+ "engine": "WEBJS",
+ "payload": {
+ "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "timestamp": 1667561485,
+ "from": "11111111111@c.us",
+ "fromMe": true,
+ "to": "11111111111@c.us",
+ ...
+ "_data": {
+ ...
+ }
+ }
+}
+```
+
+### message.revoked
+
+Read more about
+[**🔄 Events**]({{< relref "/docs/how-to/events#messagerevoked" >}}).
+
+```json { title="message.revoked" }
+{
+ "event": "message.revoked",
+ "session": "default",
+ "payload": {
+ "before": {
+ "id": "some-id-here",
+ "timestamp": "some-timestamp-here",
+ "body": "Hi there!"
+ },
+ "after": {
+ "id": "some-id-here",
+ "timestamp": "some-timestamp-here",
+ "body": ""
+ }
+ }
+}
+```
+
+## Media Files
+
+When people send you media - images, voice messages, and documents - WAHA saves them in the file storage.
+In your application, you must download these files and use them as needed. You can find the URL in the `media.url` field.
+
+For example, you can get the webhook like this with `media` value (we've skipped other fields):
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "payload": {
+ "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "timestamp": 1667561485,
+ "body": "Check this out (caption for the media)!",
+ "from": "11111111111@c.us",
+ "hasMedia": true,
+ "media": {
+ "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg",
+ "mimetype": "image/jpeg",
+ "filename": null,
+ "error": null // if there was an error during file download
+ }
+ }
+}
+```
+
+Fields:
+
+- `hasMedia: true | false` - indicates if the message has media attached
+- `media.url: http://localhost:8000/...` - the URL to download the media
+
+Note: If you see `hasMedia: true` but no `media.url`, this indicates that WAHA detected media but didn't download it due to your configuration settings.
+
+Then you can use the link to download the file `http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg`.
+
+For documents (file attachments) there's also `filename` field with the original file name.
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "payload": {
+ "id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "timestamp": 1667561485,
+ "from": "11111111111@c.us",
+ "media": {
+ "url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.pdf",
+ "filename": "some-file.pdf",
+ "mimetype": "application/pdf",
+ "error": null // if there was an error during file download
+ }
+ }
+}
+```
+
+To configure the `media.url` you can use environment variables:
+
+- `WAHA_BASE_URL=https://waha.example.com` (only affects `media.url`)
+
+Or define
+
+- `WHATSAPP_API_SCHEMA=https`,
+- `WHATSAPP_API_HOSTNAME=waha.example.com`
+- `WHATSAPP_API_PORT=3000`
+
+By default, WAHA download all files that the account receive.
+If you want to limit files lifetime, specify file types for download or change directory for files -
+read more about [**⚙️ Configuration**]({{< relref "config" >}}).
+
+## API
+
+See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
+
+### Get messages
+
+To read messages from the history, use the API:
+
+```http request
+GET /api/messages
+```
+
+{{< callout context="caution" icon="outline/alert-triangle" >}}
+We recommend using
+[**🔄 Events via Webhooks or Websockets**]({{< relref "docs/how-to/events" >}})
+instead of constantly calling it to prevent performance issues.
+{{< /callout >}}
+
+Accept the same parameters as
+[**💬 Chats** - **Get messages from chat**]({{< relref "/docs/how-to/chats#get-messages" >}}) endpoint:
+
+```bash
+curl -X 'GET' \
+ 'http://localhost:3000/api/messages?chatId=11111111111%40c.us&limit=1000&session=default' \
+ -H 'accept: application/json'
+```
+
+### Get message by id
+
+You also can get message by id using
+[**💬 Chats** - **Get message by id from chat**]({{< relref "/docs/how-to/chats#get-message-by-id" >}}) endpoint.
+
+```http request
+GET /api/{session}/chats/{chatId}/messages/{messageId}?downloadMedia=true
+```
+
+{{< callout context="note" icon="outline/alert-triangle" >}}
+We recommend using
+[**🔄 Events via Webhooks or Websockets**]({{< relref "docs/how-to/events" >}})
+instead to prevent performance issues.
+
+However, for single message requests, you can retrieve the message by its ID to obtain the latest `ack`, for example.
+{{< /callout >}}
+
+## Examples
+
+Here are a few examples of how to receive messages in different languages:
+
+1. [Python guide ->]({{< relref "/docs/integrations/waha+python" >}})
+
+**Do you use another language?**
+
+Please create a short guide how to handle webhook and send message after you finish your setup!
+You can create a pull request with your favorite language in the
+[GitHub, in examples folder ->](https://github.com/devlikeapro/waha/tree/core/examples).
diff --git a/content/docs/how-to/security/how-to-generate-api-key.md b/content/docs/how-to/security/how-to-generate-api-key.md
index e82400a3b..dcc938f0c 100644
--- a/content/docs/how-to/security/how-to-generate-api-key.md
+++ b/content/docs/how-to/security/how-to-generate-api-key.md
@@ -1,15 +1,17 @@
-1. Generate **Api Key** using uuid4 and remove `-` from it (or find a tool online)
-```bash
-uuidgen | tr -d '-'
-> 00000000000000000000000000000000
-```
-
-2. **Hash** it using **sha512** (or find a tool online)
-```bash
-echo -n "00000000000000000000000000000000" | shasum -a 512
-> 98b6d128682e280b74b324ca82a6bae6e8a3f7174e0605bfd52eb9948fad8984854ec08f7652f32055c4a9f12b69add4850481d9503a7f2225501671d6124648 -
-```
-
-- `WAHA_API_KEY=sha512:98b6...24648` - SHA512 hash in hex format.
-- `X-Api-Key: 0000...0000` - **Api Key** that you need to send in `X-Api-Key` header.
- - **Keep it in secret**, do not add it to `.env`
+1. Generate **Api Key** using uuid4 and remove `-` from it (or find a tool online)
+
+```bash
+uuidgen | tr -d '-'
+> 00000000000000000000000000000000
+```
+
+2. **Hash** it using **sha512** (or find a tool online)
+
+```bash
+echo -n "00000000000000000000000000000000" | shasum -a 512
+> 98b6d128682e280b74b324ca82a6bae6e8a3f7174e0605bfd52eb9948fad8984854ec08f7652f32055c4a9f12b69add4850481d9503a7f2225501671d6124648 -
+```
+
+- `WAHA_API_KEY=sha512:98b6...24648` - SHA512 hash in hex format.
+- `X-Api-Key: 0000...0000` - **Api Key** that you need to send in `X-Api-Key` header.
+ - **Keep it in secret**, do not add it to `.env`
diff --git a/content/docs/how-to/security/index.md b/content/docs/how-to/security/index.md
index 5574895d5..cd355f5a5 100644
--- a/content/docs/how-to/security/index.md
+++ b/content/docs/how-to/security/index.md
@@ -1,140 +1,146 @@
----
-title : "🔒 Security"
-description: "Security"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 700
-images: ["swagger-basic-auth.png"]
-slug: security
----
-
-{{< callout context="caution" title="Do not expose WhatsApp API on public networks!" icon="outline/shield-check" >}}
-We do not recommend exposing the API on any public networks!
-
-Always protect the API with [**Api Key**](#api-security) and deny access by using firewalls.
-
-{{< /callout >}}
-
-## API security
-
-You can protect the API by requiring `X-Api-Key` header in HTTP request.
-
-You can use `WAHA_API_KEY` environment variable. It accepts two formats:
-
-- `WAHA_API_KEY=sha512:{SHA512_HEX_HASH}`: require `X-Api-Key: {PLAIN_KEY}` header in all requests to the API. This is the **recommended** format as it stores only the hash of your key in the environment variables, making it more secure if your environment variables are exposed.
-- `WAHA_API_KEY={PLAIN_KEY}`: require `X-Api-Key: {PLAIN_KEY}` header in all requests to the API. This format stores your key in plain text in the environment variables, which is less secure.
-
-### Generate and Hash Api-Key
-{{< include file="content/docs/how-to/security/how-to-generate-api-key.md" >}}
-
-### Set Api-Key Hash
-Set
-`WAHA_API_KEY=sha512:{SHA512_HEX_HASH}` in docker (or in `docker-compose.yaml` or `.env`):
-
-```bash
-docker run -it -e WAHA_API_KEY=sha512:98b6d128682e280b74b324ca82a6bae6e8a3f7174e0605bfd52eb9948fad8984854ec08f7652f32055c4a9f12b69add4850481d9503a7f2225501671d6124648 devlikeapro/waha-plus
-```
-
-Test API works as expected
-```bash
-# No Key
-curl http://localhost:3000/api/sessions
-> {"message":"Unauthorized","statusCode":401}
-
-# Wrong Key
-curl -H 'X-Api-Key: othersecret' http://localhost:3000/api/sessions
-> {"message":"Unauthorized","statusCode":401}
-
-# Right Key
-curl -H 'X-Api-Key: 00000000000000000000000000000000' http://localhost:3000/api/sessions
-> []
-```
-
-### Use Api-Key in Dashboard
-
-
-
-### Use Api-Key in Swagger
-
-After you set Api Key - to authorize on swagger, use the **Authorize** button at the top:
-
-
-### Use X-Api-Key in HTTP request
-
-To authorize requests - set `X-Api-Key` header to `yoursecretkey` for all requests that go to WAHA.
-
-{{< include file="content/docs/how-to/security/set-x-api-key-http-header-code.md" >}}
-
-
-### Exclude endpoints
-If you need to exclude some endpoints (like `GET /health` or `GET /ping`) from the API Key requirement - you can
-set `WAHA_API_KEY_EXCLUDE_PATH` environment variable with a comma-separated list of endpoints (no `/` at the beginning).
-
-```bash
-docker run -it \
- -e WAHA_API_KEY_EXCLUDE_PATH="health,ping" \
- -e WAHA_API_KEY=yoursecretkey \
- devlikeapro/waha-plus
-```
-
-
-
-## Swagger Security
-If you want to hide the project Swagger panel under the password - run the following command to hide under `admin/admin`
-login and password.
-
-```bash
-docker run -it -e WHATSAPP_SWAGGER_USERNAME=admin -e WHATSAPP_SWAGGER_PASSWORD=admin devlikeapro/waha-plus
-```
-
-Open http://localhost:3000/ and enter `admin / admin` in the inputs:
-
-
-
-{{< callout context="note" icon="outline/info-circle" >}}
-Protecting Swagger under the password does not protect your API from other request! Use both techniques to protect your API and Swagger!
-{{< /callout >}}
-
-Environment variables:
-- `WHATSAPP_SWAGGER_ENABLED=true`: Toggle to enable or disable the Swagger.
-- `WHATSAPP_SWAGGER_USERNAME=admin`
-- `WHATSAPP_SWAGGER_PASSWORD=admin`
- Swagger panel with `admin / admin` credentials. This does not affect API access.
-
-{{< callout context="tip" icon="outline/info-circle" >}}
-You can also set [**Swagger White Label**]({{< relref "/docs/how-to/swagger#white-label" >}})
-options instead of hiding the Swagger panel.
-{{< /callout >}}
-
-
-## Dashboard Security
-Read more about [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}})
-
-When running WAHA you can set the following environment variables to configure the dashboard:
-- `WAHA_DASHBOARD_ENABLED=true` - enable or disable the dashboard, by default `true`. Set to `false` to disable the dashboard.
-- `WAHA_DASHBOARD_USERNAME=waha` - username used to log in, by default `admin` or `waha`
-- `WAHA_DASHBOARD_PASSWORD=waha` - password used to log in, by default `admin` or `waha`.
-
-
-## Webhook security
-To make sure that you get a webhook from your WAHA instance - you can use **HMAC authentication**.
-
-Read more about
-[**🔄 Events**]({{< relref "/docs/how-to/events#hmac-authentication" >}}).
-
-## HTTPS
-After you set up the security options - you should set up HTTPS to protect the data in transit and prevent [Man-in-the-middle attacks](https://en.wikipedia.org/wiki/Man-in-the-middle_attack).
-
-That's fine to run it on the **local network** without HTTPS, but for **the production** environment, HTTPS is a must-have.
-
-{{< include file="content/docs/how-to/security/use-nginx-for-https.md" >}}
-
-WAHA supports HTTPS out of the box if you don't want to use a reverse proxy like Nginx (**using Nginx is recommended**)
-
-You can set up the following environment variables to enable HTTPS:
-- `WAHA_HTTPS_ENABLED=true`: Set this variable to `true` to enable HTTPS. By default, it's `false`.
-- `WAHA_HTTPS_PATH_KEY=/path/to/key.pem`: The path to the key file for HTTPS. By default `./.secrets/privkey.pem`
-- `WAHA_HTTPS_PATH_CERT=/path/to/cert.pem`: The path to the certificate file for HTTPS. By default `./.secrets/cert.pem`
-- `WAHA_HTTPS_PATH_CA=/path/to/ca.pem`: The path to the CA file for HTTPS. By default `./.secrets/chain.pem`
+---
+title: "🔒 Security"
+description: "Security"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 700
+images: ["swagger-basic-auth.png"]
+slug: security
+---
+
+{{< callout context="caution" title="Do not expose WhatsApp API on public networks!" icon="outline/shield-check" >}}
+We do not recommend exposing the API on any public networks!
+
+Always protect the API with [**Api Key**](#api-security) and deny access by using firewalls.
+
+{{< /callout >}}
+
+## API security
+
+You can protect the API by requiring `X-Api-Key` header in HTTP request.
+
+You can use `WAHA_API_KEY` environment variable. It accepts two formats:
+
+- `WAHA_API_KEY=sha512:{SHA512_HEX_HASH}`: require `X-Api-Key: {PLAIN_KEY}` header in all requests to the API. This is the **recommended** format as it stores only the hash of your key in the environment variables, making it more secure if your environment variables are exposed.
+- `WAHA_API_KEY={PLAIN_KEY}`: require `X-Api-Key: {PLAIN_KEY}` header in all requests to the API. This format stores your key in plain text in the environment variables, which is less secure.
+
+### Generate and Hash Api-Key
+
+{{< include file="content/docs/how-to/security/how-to-generate-api-key.md" >}}
+
+### Set Api-Key Hash
+
+Set
+`WAHA_API_KEY=sha512:{SHA512_HEX_HASH}` in docker (or in `docker-compose.yaml` or `.env`):
+
+```bash
+docker run -it -e WAHA_API_KEY=sha512:98b6d128682e280b74b324ca82a6bae6e8a3f7174e0605bfd52eb9948fad8984854ec08f7652f32055c4a9f12b69add4850481d9503a7f2225501671d6124648 devlikeapro/waha-plus
+```
+
+Test API works as expected
+
+```bash
+# No Key
+curl http://localhost:3000/api/sessions
+> {"message":"Unauthorized","statusCode":401}
+
+# Wrong Key
+curl -H 'X-Api-Key: othersecret' http://localhost:3000/api/sessions
+> {"message":"Unauthorized","statusCode":401}
+
+# Right Key
+curl -H 'X-Api-Key: 00000000000000000000000000000000' http://localhost:3000/api/sessions
+> []
+```
+
+### Use Api-Key in Dashboard
+
+
+
+### Use Api-Key in Swagger
+
+After you set Api Key - to authorize on swagger, use the **Authorize** button at the top:
+
+
+### Use X-Api-Key in HTTP request
+
+To authorize requests - set `X-Api-Key` header to `yoursecretkey` for all requests that go to WAHA.
+
+{{< include file="content/docs/how-to/security/set-x-api-key-http-header-code.md" >}}
+
+### Exclude endpoints
+
+If you need to exclude some endpoints (like `GET /health` or `GET /ping`) from the API Key requirement - you can
+set `WAHA_API_KEY_EXCLUDE_PATH` environment variable with a comma-separated list of endpoints (no `/` at the beginning).
+
+```bash
+docker run -it \
+ -e WAHA_API_KEY_EXCLUDE_PATH="health,ping" \
+ -e WAHA_API_KEY=yoursecretkey \
+ devlikeapro/waha-plus
+```
+
+## Swagger Security
+
+If you want to hide the project Swagger panel under the password - run the following command to hide under `admin/admin`
+login and password.
+
+```bash
+docker run -it -e WHATSAPP_SWAGGER_USERNAME=admin -e WHATSAPP_SWAGGER_PASSWORD=admin devlikeapro/waha-plus
+```
+
+Open http://localhost:3000/ and enter `admin / admin` in the inputs:
+
+
+
+{{< callout context="note" icon="outline/info-circle" >}}
+Protecting Swagger under the password does not protect your API from other request! Use both techniques to protect your API and Swagger!
+{{< /callout >}}
+
+Environment variables:
+
+- `WHATSAPP_SWAGGER_ENABLED=true`: Toggle to enable or disable the Swagger.
+- `WHATSAPP_SWAGGER_USERNAME=admin`
+- `WHATSAPP_SWAGGER_PASSWORD=admin`
+ Swagger panel with `admin / admin` credentials. This does not affect API access.
+
+{{< callout context="tip" icon="outline/info-circle" >}}
+You can also set [**Swagger White Label**]({{< relref "/docs/how-to/swagger#white-label" >}})
+options instead of hiding the Swagger panel.
+{{< /callout >}}
+
+## Dashboard Security
+
+Read more about [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}})
+
+When running WAHA you can set the following environment variables to configure the dashboard:
+
+- `WAHA_DASHBOARD_ENABLED=true` - enable or disable the dashboard, by default `true`. Set to `false` to disable the dashboard.
+- `WAHA_DASHBOARD_USERNAME=waha` - username used to log in, by default `admin` or `waha`
+- `WAHA_DASHBOARD_PASSWORD=waha` - password used to log in, by default `admin` or `waha`.
+
+## Webhook security
+
+To make sure that you get a webhook from your WAHA instance - you can use **HMAC authentication**.
+
+Read more about
+[**🔄 Events**]({{< relref "/docs/how-to/events#hmac-authentication" >}}).
+
+## HTTPS
+
+After you set up the security options - you should set up HTTPS to protect the data in transit and prevent [Man-in-the-middle attacks](https://en.wikipedia.org/wiki/Man-in-the-middle_attack).
+
+That's fine to run it on the **local network** without HTTPS, but for **the production** environment, HTTPS is a must-have.
+
+{{< include file="content/docs/how-to/security/use-nginx-for-https.md" >}}
+
+WAHA supports HTTPS out of the box if you don't want to use a reverse proxy like Nginx (**using Nginx is recommended**)
+
+You can set up the following environment variables to enable HTTPS:
+
+- `WAHA_HTTPS_ENABLED=true`: Set this variable to `true` to enable HTTPS. By default, it's `false`.
+- `WAHA_HTTPS_PATH_KEY=/path/to/key.pem`: The path to the key file for HTTPS. By default `./.secrets/privkey.pem`
+- `WAHA_HTTPS_PATH_CERT=/path/to/cert.pem`: The path to the certificate file for HTTPS. By default `./.secrets/cert.pem`
+- `WAHA_HTTPS_PATH_CA=/path/to/ca.pem`: The path to the CA file for HTTPS. By default `./.secrets/chain.pem`
diff --git a/content/docs/how-to/security/set-x-api-key-http-header-code.md b/content/docs/how-to/security/set-x-api-key-http-header-code.md
index 1ddd6a3cd..dbdfafb88 100644
--- a/content/docs/how-to/security/set-x-api-key-http-header-code.md
+++ b/content/docs/how-to/security/set-x-api-key-http-header-code.md
@@ -1,62 +1,71 @@
-
-
-{{< tabs "set-x-api-key-http-header" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'GET' \
- 'http://localhost:3000/api/sessions' \
- -H 'accept: application/json' \
- -H 'X-Api-Key: yoursecretkey'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-headers = {
- 'Content-type': 'application/json',
- 'X-Api-Key': 'yoursecretkey',
-}
-response = requests.get("http://localhost:3000/api/sessions", headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sessions";
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.get(url, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
-
-```
-{{< /tab >}}
-
-{{< /tabs >}}
+
+
+{{< tabs "set-x-api-key-http-header" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'GET' \
+ 'http://localhost:3000/api/sessions' \
+ -H 'accept: application/json' \
+ -H 'X-Api-Key: yoursecretkey'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+headers = {
+ 'Content-type': 'application/json',
+ 'X-Api-Key': 'yoursecretkey',
+}
+response = requests.get("http://localhost:3000/api/sessions", headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sessions";
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .get(url, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/security/use-nginx-for-https.md b/content/docs/how-to/security/use-nginx-for-https.md
index cd20aee1c..334cd3cbe 100644
--- a/content/docs/how-to/security/use-nginx-for-https.md
+++ b/content/docs/how-to/security/use-nginx-for-https.md
@@ -1,8 +1,8 @@
-
-{{< callout context="tip" title="Use Nginx to handle HTTPS" icon="outline/shield-check" >}}
-
-We **recommend** handling HTTPS termination with **a reverse proxy** like Nginx.
-
-Follow
-[**🔧 Install & Update - Nginx**]({{< relref "/docs/how-to/install#nginx" >}}) to set up **Nginx with Let's Encrypt**.
-{{< /callout >}}
+
+{{< callout context="tip" title="Use Nginx to handle HTTPS" icon="outline/shield-check" >}}
+
+We **recommend** handling HTTPS termination with **a reverse proxy** like Nginx.
+
+Follow
+[**🔧 Install & Update - Nginx**]({{< relref "/docs/how-to/install#nginx" >}}) to set up **Nginx with Let's Encrypt**.
+{{< /callout >}}
diff --git a/content/docs/how-to/send-messages/api-deleteMessage-code.md b/content/docs/how-to/send-messages/api-deleteMessage-code.md
index 2693ec0e6..0560f983e 100644
--- a/content/docs/how-to/send-messages/api-deleteMessage-code.md
+++ b/content/docs/how-to/send-messages/api-deleteMessage-code.md
@@ -1,62 +1,71 @@
-
-
-{{< tabs "delete-message-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'DELETE' \
- 'http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA' \
- -H 'accept: application/json' \
- -H 'X-Api-Key: yoursecretkey'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA"
-headers = {
- "X-Api-Key": "yoursecretkey"
-}
-
-response = requests.delete(url, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA";
-const headers = {
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.delete(url, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
-
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "delete-message-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'DELETE' \
+ 'http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA' \
+ -H 'accept: application/json' \
+ -H 'X-Api-Key: yoursecretkey'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA"
+headers = {
+ "X-Api-Key": "yoursecretkey"
+}
+
+response = requests.delete(url, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA";
+const headers = {
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .delete(url, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-editMessage-code.md b/content/docs/how-to/send-messages/api-editMessage-code.md
index 904582999..20092f75b 100644
--- a/content/docs/how-to/send-messages/api-editMessage-code.md
+++ b/content/docs/how-to/send-messages/api-editMessage-code.md
@@ -1,83 +1,92 @@
-
-
-{{< tabs "edit-message-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'PUT' \
- 'http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "text": "Hello, world! (edited)",
- "linkPreview": true
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "text": "Hello, world! (edited)",
- "linkPreview": True
-}
-
-response = requests.put(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA";
-const data = {
- text: "Hello, world! (edited)",
- linkPreview: true
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.put(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "Hello, world! (edited)",
- "linkPreview" => true
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "edit-message-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'PUT' \
+ 'http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "text": "Hello, world! (edited)",
+ "linkPreview": true
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "text": "Hello, world! (edited)",
+ "linkPreview": True
+}
+
+response = requests.put(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/default/chats/12132132130%40c.us/messages/true_12132132130%40c.us_AAAAAAAAAAAAAAAAAAAA";
+const data = {
+ text: "Hello, world! (edited)",
+ linkPreview: true
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .put(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "Hello, world! (edited)",
+ "linkPreview" => true
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-forwardMessage-code.md b/content/docs/how-to/send-messages/api-forwardMessage-code.md
index a9ef47fdc..d2351e2bb 100644
--- a/content/docs/how-to/send-messages/api-forwardMessage-code.md
+++ b/content/docs/how-to/send-messages/api-forwardMessage-code.md
@@ -1,87 +1,96 @@
-
-
-{{< tabs "forward-message-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/forwardMessage' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA"
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/forwardMessage"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA"
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/forwardMessage";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- messageId: "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA"
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "messageId" => "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA"
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "forward-message-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/forwardMessage' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA"
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/forwardMessage"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA"
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/forwardMessage";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ messageId: "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA"
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "messageId" => "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA"
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-reaction-code.md b/content/docs/how-to/send-messages/api-reaction-code.md
index dac6b00c1..a99a4ca45 100644
--- a/content/docs/how-to/send-messages/api-reaction-code.md
+++ b/content/docs/how-to/send-messages/api-reaction-code.md
@@ -1,87 +1,96 @@
-
-
-{{< tabs "reaction-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'PUT' \
- 'http://localhost:3000/api/reaction' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
- "reaction": "👍"
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/reaction"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
- "reaction": "👍"
-}
-
-response = requests.put(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/reaction";
-const data = {
- session: "default",
- messageId: "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
- reaction: "👍"
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.put(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "messageId" => "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
- "reaction" => "👍"
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "reaction-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'PUT' \
+ 'http://localhost:3000/api/reaction' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
+ "reaction": "👍"
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/reaction"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
+ "reaction": "👍"
+}
+
+response = requests.put(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/reaction";
+const data = {
+ session: "default",
+ messageId: "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
+ reaction: "👍"
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .put(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "messageId" => "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
+ "reaction" => "👍"
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendButtons-code.md b/content/docs/how-to/send-messages/api-sendButtons-code.md
index f2b7c89c4..ecc33190d 100644
--- a/content/docs/how-to/send-messages/api-sendButtons-code.md
+++ b/content/docs/how-to/send-messages/api-sendButtons-code.md
@@ -1,199 +1,208 @@
-
-
-{{< tabs "send-buttons-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendButtons' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "header": "How are you?",
- "headerImage": {
- "mimetype": "image/jpeg",
- "filename": "filename.jpg",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- },
- "body": "Tell us how are you please 🙏",
- "footer": "If you have any questions, please send it in the chat",
- "buttons": [
- {
- "type": "reply",
- "text": "I am good!"
- },
- {
- "type": "call",
- "text": "Call us",
- "phoneNumber": "+1234567890"
- },
- {
- "type": "copy",
- "text": "Copy code",
- "copyCode": "4321"
- },
- {
- "type": "url",
- "text": "How did you do that?",
- "url": "https://waha.devlike.pro"
- }
- ]
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendButtons"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "header": "How are you?",
- "headerImage": {
- "mimetype": "image/jpeg",
- "filename": "filename.jpg",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- },
- "body": "Tell us how are you please 🙏",
- "footer": "If you have any questions, please send it in the chat",
- "buttons": [
- {
- "type": "reply",
- "text": "I am good!"
- },
- {
- "type": "call",
- "text": "Call us",
- "phoneNumber": "+1234567890"
- },
- {
- "type": "copy",
- "text": "Copy code",
- "copyCode": "4321"
- },
- {
- "type": "url",
- "text": "How did you do that?",
- "url": "https://waha.devlike.pro"
- }
- ]
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendButtons";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- header: "How are you?",
- headerImage: {
- mimetype: "image/jpeg",
- filename: "filename.jpg",
- url: "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- },
- body: "Tell us how are you please 🙏",
- footer: "If you have any questions, please send it in the chat",
- buttons: [
- {
- type: "reply",
- text: "I am good!"
- },
- {
- type: "call",
- text: "Call us",
- phoneNumber: "+1234567890"
- },
- {
- type: "copy",
- text: "Copy code",
- copyCode: "4321"
- },
- {
- type: "url",
- text: "How did you do that?",
- url: "https://waha.devlike.pro"
- }
- ]
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "header" => "How are you?",
- "headerImage" => [
- "mimetype" => "image/jpeg",
- "filename" => "filename.jpg",
- "url" => "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- ],
- "body" => "Tell us how are you please 🙏",
- "footer" => "If you have any questions, please send it in the chat",
- "buttons" => [
- [
- "type" => "reply",
- "text" => "I am good!"
- ],
- [
- "type" => "call",
- "text" => "Call us",
- "phoneNumber" => "+1234567890"
- ],
- [
- "type" => "copy",
- "text" => "Copy code",
- "copyCode" => "4321"
- ],
- [
- "type" => "url",
- "text" => "How did you do that?",
- "url" => "https://waha.devlike.pro"
- ]
- ]
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-buttons-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendButtons' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "header": "How are you?",
+ "headerImage": {
+ "mimetype": "image/jpeg",
+ "filename": "filename.jpg",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ },
+ "body": "Tell us how are you please 🙏",
+ "footer": "If you have any questions, please send it in the chat",
+ "buttons": [
+ {
+ "type": "reply",
+ "text": "I am good!"
+ },
+ {
+ "type": "call",
+ "text": "Call us",
+ "phoneNumber": "+1234567890"
+ },
+ {
+ "type": "copy",
+ "text": "Copy code",
+ "copyCode": "4321"
+ },
+ {
+ "type": "url",
+ "text": "How did you do that?",
+ "url": "https://waha.devlike.pro"
+ }
+ ]
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendButtons"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "header": "How are you?",
+ "headerImage": {
+ "mimetype": "image/jpeg",
+ "filename": "filename.jpg",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ },
+ "body": "Tell us how are you please 🙏",
+ "footer": "If you have any questions, please send it in the chat",
+ "buttons": [
+ {
+ "type": "reply",
+ "text": "I am good!"
+ },
+ {
+ "type": "call",
+ "text": "Call us",
+ "phoneNumber": "+1234567890"
+ },
+ {
+ "type": "copy",
+ "text": "Copy code",
+ "copyCode": "4321"
+ },
+ {
+ "type": "url",
+ "text": "How did you do that?",
+ "url": "https://waha.devlike.pro"
+ }
+ ]
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendButtons";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ header: "How are you?",
+ headerImage: {
+ mimetype: "image/jpeg",
+ filename: "filename.jpg",
+ url: "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ },
+ body: "Tell us how are you please 🙏",
+ footer: "If you have any questions, please send it in the chat",
+ buttons: [
+ {
+ type: "reply",
+ text: "I am good!"
+ },
+ {
+ type: "call",
+ text: "Call us",
+ phoneNumber: "+1234567890"
+ },
+ {
+ type: "copy",
+ text: "Copy code",
+ copyCode: "4321"
+ },
+ {
+ type: "url",
+ text: "How did you do that?",
+ url: "https://waha.devlike.pro"
+ }
+ ]
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "header" => "How are you?",
+ "headerImage" => [
+ "mimetype" => "image/jpeg",
+ "filename" => "filename.jpg",
+ "url" => "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ ],
+ "body" => "Tell us how are you please 🙏",
+ "footer" => "If you have any questions, please send it in the chat",
+ "buttons" => [
+ [
+ "type" => "reply",
+ "text" => "I am good!"
+ ],
+ [
+ "type" => "call",
+ "text" => "Call us",
+ "phoneNumber" => "+1234567890"
+ ],
+ [
+ "type" => "copy",
+ "text" => "Copy code",
+ "copyCode" => "4321"
+ ],
+ [
+ "type" => "url",
+ "text" => "How did you do that?",
+ "url" => "https://waha.devlike.pro"
+ ]
+ ]
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendButtonsReply-code.md b/content/docs/how-to/send-messages/api-sendButtonsReply-code.md
index 2b141e189..9bee73e53 100644
--- a/content/docs/how-to/send-messages/api-sendButtonsReply-code.md
+++ b/content/docs/how-to/send-messages/api-sendButtonsReply-code.md
@@ -1,95 +1,104 @@
-
-
-{{< tabs "send-buttons-reply-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/send/buttons/reply' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "replyTo": "false_12132132130@c.us_AAAAAAAAAAAAAAAAA",
- "selectedDisplayText": "No",
- "selectedButtonID": "button:id"
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/send/buttons/reply"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "replyTo": "false_12132132130@c.us_AAAAAAAAAAAAAAAAA",
- "selectedDisplayText": "No",
- "selectedButtonID": "button:id"
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/send/buttons/reply";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- replyTo: "false_12132132130@c.us_AAAAAAAAAAAAAAAAA",
- selectedDisplayText: "No",
- selectedButtonID: "button:id"
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "replyTo" => "false_12132132130@c.us_AAAAAAAAAAAAAAAAA",
- "selectedDisplayText" => "No",
- "selectedButtonID" => "button:id"
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-buttons-reply-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/send/buttons/reply' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "replyTo": "false_12132132130@c.us_AAAAAAAAAAAAAAAAA",
+ "selectedDisplayText": "No",
+ "selectedButtonID": "button:id"
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/send/buttons/reply"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "replyTo": "false_12132132130@c.us_AAAAAAAAAAAAAAAAA",
+ "selectedDisplayText": "No",
+ "selectedButtonID": "button:id"
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/send/buttons/reply";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ replyTo: "false_12132132130@c.us_AAAAAAAAAAAAAAAAA",
+ selectedDisplayText: "No",
+ selectedButtonID: "button:id"
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "replyTo" => "false_12132132130@c.us_AAAAAAAAAAAAAAAAA",
+ "selectedDisplayText" => "No",
+ "selectedButtonID" => "button:id"
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendContactVcard-code.md b/content/docs/how-to/send-messages/api-sendContactVcard-code.md
index 7f3bb1b06..5f5a6b4d9 100644
--- a/content/docs/how-to/send-messages/api-sendContactVcard-code.md
+++ b/content/docs/how-to/send-messages/api-sendContactVcard-code.md
@@ -1,115 +1,124 @@
-
-
-{{< tabs "send-contact-vcard-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendContactVcard' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "contacts": [
- {
- "fullName": "John Doe",
- "organization": "Company Name",
- "phoneNumber": "+91 11111 11111",
- "whatsappId": "911111111111"
- }
- ]
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendContactVcard"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "contacts": [
- {
- "fullName": "John Doe",
- "organization": "Company Name",
- "phoneNumber": "+91 11111 11111",
- "whatsappId": "911111111111"
- }
- ]
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendContactVcard";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- contacts: [
- {
- fullName: "John Doe",
- organization: "Company Name",
- phoneNumber: "+91 11111 11111",
- whatsappId: "911111111111"
- }
- ]
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "contacts" => [
- [
- "fullName" => "John Doe",
- "organization" => "Company Name",
- "phoneNumber" => "+91 11111 11111",
- "whatsappId" => "911111111111"
- ]
- ]
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-contact-vcard-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendContactVcard' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "contacts": [
+ {
+ "fullName": "John Doe",
+ "organization": "Company Name",
+ "phoneNumber": "+91 11111 11111",
+ "whatsappId": "911111111111"
+ }
+ ]
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendContactVcard"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "contacts": [
+ {
+ "fullName": "John Doe",
+ "organization": "Company Name",
+ "phoneNumber": "+91 11111 11111",
+ "whatsappId": "911111111111"
+ }
+ ]
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendContactVcard";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ contacts: [
+ {
+ fullName: "John Doe",
+ organization: "Company Name",
+ phoneNumber: "+91 11111 11111",
+ whatsappId: "911111111111"
+ }
+ ]
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "contacts" => [
+ [
+ "fullName" => "John Doe",
+ "organization" => "Company Name",
+ "phoneNumber" => "+91 11111 11111",
+ "whatsappId" => "911111111111"
+ ]
+ ]
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendEvent-code.md b/content/docs/how-to/send-messages/api-sendEvent-code.md
index 9ff511c63..d50f80636 100644
--- a/content/docs/how-to/send-messages/api-sendEvent-code.md
+++ b/content/docs/how-to/send-messages/api-sendEvent-code.md
@@ -1,107 +1,116 @@
-
-
-{{< tabs "send-event-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/default/events' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "chatId": "12132132130@c.us",
- "event": {
- "title": "Team Meeting",
- "description": "Monthly team sync-up",
- "location": "Conference Room A",
- "startTime": "2023-12-15T10:00:00Z",
- "endTime": "2023-12-15T11:00:00Z"
- }
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/default/events"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "chatId": "12132132130@c.us",
- "event": {
- "title": "Team Meeting",
- "description": "Monthly team sync-up",
- "location": "Conference Room A",
- "startTime": "2023-12-15T10:00:00Z",
- "endTime": "2023-12-15T11:00:00Z"
- }
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/default/events";
-const data = {
- chatId: "12132132130@c.us",
- event: {
- title: "Team Meeting",
- description: "Monthly team sync-up",
- location: "Conference Room A",
- startTime: "2023-12-15T10:00:00Z",
- endTime: "2023-12-15T11:00:00Z"
- }
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "12132132130@c.us",
- "event" => [
- "title" => "Team Meeting",
- "description" => "Monthly team sync-up",
- "location" => "Conference Room A",
- "startTime" => "2023-12-15T10:00:00Z",
- "endTime" => "2023-12-15T11:00:00Z"
- ]
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-event-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/default/events' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "chatId": "12132132130@c.us",
+ "event": {
+ "title": "Team Meeting",
+ "description": "Monthly team sync-up",
+ "location": "Conference Room A",
+ "startTime": "2023-12-15T10:00:00Z",
+ "endTime": "2023-12-15T11:00:00Z"
+ }
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/default/events"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "chatId": "12132132130@c.us",
+ "event": {
+ "title": "Team Meeting",
+ "description": "Monthly team sync-up",
+ "location": "Conference Room A",
+ "startTime": "2023-12-15T10:00:00Z",
+ "endTime": "2023-12-15T11:00:00Z"
+ }
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/default/events";
+const data = {
+ chatId: "12132132130@c.us",
+ event: {
+ title: "Team Meeting",
+ description: "Monthly team sync-up",
+ location: "Conference Room A",
+ startTime: "2023-12-15T10:00:00Z",
+ endTime: "2023-12-15T11:00:00Z"
+ }
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "12132132130@c.us",
+ "event" => [
+ "title" => "Team Meeting",
+ "description" => "Monthly team sync-up",
+ "location" => "Conference Room A",
+ "startTime" => "2023-12-15T10:00:00Z",
+ "endTime" => "2023-12-15T11:00:00Z"
+ ]
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendFile-code.md b/content/docs/how-to/send-messages/api-sendFile-code.md
index 3190f5e9b..84e20c7cd 100644
--- a/content/docs/how-to/send-messages/api-sendFile-code.md
+++ b/content/docs/how-to/send-messages/api-sendFile-code.md
@@ -1,107 +1,116 @@
-
-
-{{< tabs "send-file-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendFile' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "caption": "Check this out!",
- "file": {
- "mimetype": "application/pdf",
- "filename": "document.pdf",
- "url": "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/document.pdf"
- }
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendFile"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "caption": "Check this out!",
- "file": {
- "mimetype": "application/pdf",
- "filename": "document.pdf",
- "url": "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/document.pdf"
- }
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendFile";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- caption: "Check this out!",
- file: {
- mimetype: "application/pdf",
- filename: "document.pdf",
- url: "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/document.pdf"
- }
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "caption" => "Check this out!",
- "file" => [
- "mimetype" => "application/pdf",
- "filename" => "document.pdf",
- "url" => "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/document.pdf"
- ]
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-file-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendFile' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "caption": "Check this out!",
+ "file": {
+ "mimetype": "application/pdf",
+ "filename": "document.pdf",
+ "url": "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/document.pdf"
+ }
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendFile"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "caption": "Check this out!",
+ "file": {
+ "mimetype": "application/pdf",
+ "filename": "document.pdf",
+ "url": "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/document.pdf"
+ }
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendFile";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ caption: "Check this out!",
+ file: {
+ mimetype: "application/pdf",
+ filename: "document.pdf",
+ url: "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/document.pdf"
+ }
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "caption" => "Check this out!",
+ "file" => [
+ "mimetype" => "application/pdf",
+ "filename" => "document.pdf",
+ "url" => "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/document.pdf"
+ ]
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendImage-code.md b/content/docs/how-to/send-messages/api-sendImage-code.md
index c70ce1b6b..3ada1f71a 100644
--- a/content/docs/how-to/send-messages/api-sendImage-code.md
+++ b/content/docs/how-to/send-messages/api-sendImage-code.md
@@ -1,107 +1,116 @@
-
-
-{{< tabs "send-image-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendImage' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "file": {
- "mimetype": "image/jpeg",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
- "filename": "filename.jpeg"
- },
- "caption": "Check out this image!"
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendImage"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "file": {
- "mimetype": "image/jpeg",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
- "filename": "filename.jpeg"
- },
- "caption": "Check out this image!"
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendImage";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- file: {
- mimetype: "image/jpeg",
- url: "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
- filename: "filename.jpeg"
- },
- caption: "Check out this image!"
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "file" => [
- "mimetype" => "image/jpeg",
- "url" => "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
- "filename" => "filename.jpeg"
- ],
- "caption" => "Check out this image!"
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
+
+
+{{< tabs "send-image-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendImage' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "file": {
+ "mimetype": "image/jpeg",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
+ "filename": "filename.jpeg"
+ },
+ "caption": "Check out this image!"
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendImage"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "file": {
+ "mimetype": "image/jpeg",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
+ "filename": "filename.jpeg"
+ },
+ "caption": "Check out this image!"
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendImage";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ file: {
+ mimetype: "image/jpeg",
+ url: "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
+ filename: "filename.jpeg"
+ },
+ caption: "Check out this image!"
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "file" => [
+ "mimetype" => "image/jpeg",
+ "url" => "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
+ "filename" => "filename.jpeg"
+ ],
+ "caption" => "Check out this image!"
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendLinkCustomPreview-code.md b/content/docs/how-to/send-messages/api-sendLinkCustomPreview-code.md
index 8b8cc3493..1afb6a92c 100644
--- a/content/docs/how-to/send-messages/api-sendLinkCustomPreview-code.md
+++ b/content/docs/how-to/send-messages/api-sendLinkCustomPreview-code.md
@@ -1,123 +1,132 @@
-
-
-{{< tabs "send-link-custom-preview-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/send/link-custom-preview' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "text": "Check this out! https://github.com/",
- "linkPreviewHighQuality": true,
- "preview": {
- "url": "https://github.com/",
- "title": "Your Title",
- "description": "Check this out, this is a custom link preview!",
- "image": {
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- }
- }
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/send/link-custom-preview"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "text": "Check this out! https://github.com/",
- "linkPreviewHighQuality": True,
- "preview": {
- "url": "https://github.com/",
- "title": "Your Title",
- "description": "Check this out, this is a custom link preview!",
- "image": {
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- }
- }
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/send/link-custom-preview";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- text: "Check this out! https://github.com/",
- linkPreviewHighQuality: true,
- preview: {
- url: "https://github.com/",
- title: "Your Title",
- description: "Check this out, this is a custom link preview!",
- image: {
- url: "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- }
- }
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "text" => "Check this out! https://github.com/",
- "linkPreviewHighQuality" => true,
- "preview" => [
- "url" => "https://github.com/",
- "title" => "Your Title",
- "description" => "Check this out, this is a custom link preview!",
- "image" => [
- "url" => "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
- ]
- ]
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-link-custom-preview-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/send/link-custom-preview' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "text": "Check this out! https://github.com/",
+ "linkPreviewHighQuality": true,
+ "preview": {
+ "url": "https://github.com/",
+ "title": "Your Title",
+ "description": "Check this out, this is a custom link preview!",
+ "image": {
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ }
+ }
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/send/link-custom-preview"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "text": "Check this out! https://github.com/",
+ "linkPreviewHighQuality": True,
+ "preview": {
+ "url": "https://github.com/",
+ "title": "Your Title",
+ "description": "Check this out, this is a custom link preview!",
+ "image": {
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ }
+ }
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/send/link-custom-preview";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ text: "Check this out! https://github.com/",
+ linkPreviewHighQuality: true,
+ preview: {
+ url: "https://github.com/",
+ title: "Your Title",
+ description: "Check this out, this is a custom link preview!",
+ image: {
+ url: "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ }
+ }
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "text" => "Check this out! https://github.com/",
+ "linkPreviewHighQuality" => true,
+ "preview" => [
+ "url" => "https://github.com/",
+ "title" => "Your Title",
+ "description" => "Check this out, this is a custom link preview!",
+ "image" => [
+ "url" => "https://github.com/devlikeapro/waha/raw/core/examples/waha.jpg"
+ ]
+ ]
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendLocation-code.md b/content/docs/how-to/send-messages/api-sendLocation-code.md
index 45dd69bc4..38b0f23cb 100644
--- a/content/docs/how-to/send-messages/api-sendLocation-code.md
+++ b/content/docs/how-to/send-messages/api-sendLocation-code.md
@@ -1,95 +1,104 @@
-
-
-{{< tabs "send-location-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendLocation' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "latitude": 38.8937255,
- "longitude": -77.0969763,
- "title": "Our office"
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendLocation"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "latitude": 38.8937255,
- "longitude": -77.0969763,
- "title": "Our office"
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendLocation";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- latitude: 38.8937255,
- longitude: -77.0969763,
- title: "Our office"
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "latitude" => 38.8937255,
- "longitude" => -77.0969763,
- "title" => "Our office"
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-location-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendLocation' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "latitude": 38.8937255,
+ "longitude": -77.0969763,
+ "title": "Our office"
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendLocation"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "latitude": 38.8937255,
+ "longitude": -77.0969763,
+ "title": "Our office"
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendLocation";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ latitude: 38.8937255,
+ longitude: -77.0969763,
+ title: "Our office"
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "latitude" => 38.8937255,
+ "longitude" => -77.0969763,
+ "title" => "Our office"
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendPoll-code.md b/content/docs/how-to/send-messages/api-sendPoll-code.md
index 362ed98ed..83e17ee21 100644
--- a/content/docs/how-to/send-messages/api-sendPoll-code.md
+++ b/content/docs/how-to/send-messages/api-sendPoll-code.md
@@ -1,119 +1,124 @@
-
-
-{{< tabs "send-poll-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendPoll' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "poll": {
- "name": "How are you?",
- "options": [
- "Awesome!",
- "Good!",
- "Not bad!"
- ],
- "multipleAnswers": false
- }
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendPoll"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "poll": {
- "name": "How are you?",
- "options": [
- "Awesome!",
- "Good!",
- "Not bad!"
- ],
- "multipleAnswers": False
- }
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendPoll";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- poll: {
- name: "How are you?",
- options: [
- "Awesome!",
- "Good!",
- "Not bad!"
- ],
- multipleAnswers: false
- }
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "poll" => [
- "name" => "How are you?",
- "options" => [
- "Awesome!",
- "Good!",
- "Not bad!"
- ],
- "multipleAnswers" => false
- ]
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-poll-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendPoll' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "poll": {
+ "name": "How are you?",
+ "options": [
+ "Awesome!",
+ "Good!",
+ "Not bad!"
+ ],
+ "multipleAnswers": false
+ }
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendPoll"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "poll": {
+ "name": "How are you?",
+ "options": [
+ "Awesome!",
+ "Good!",
+ "Not bad!"
+ ],
+ "multipleAnswers": False
+ }
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendPoll";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ poll: {
+ name: "How are you?",
+ options: ["Awesome!", "Good!", "Not bad!"],
+ multipleAnswers: false
+ }
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "poll" => [
+ "name" => "How are you?",
+ "options" => [
+ "Awesome!",
+ "Good!",
+ "Not bad!"
+ ],
+ "multipleAnswers" => false
+ ]
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendSeen-code.md b/content/docs/how-to/send-messages/api-sendSeen-code.md
index a6446d841..80bb9ad0d 100644
--- a/content/docs/how-to/send-messages/api-sendSeen-code.md
+++ b/content/docs/how-to/send-messages/api-sendSeen-code.md
@@ -1,83 +1,92 @@
-
-
-{{< tabs "send-seen-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendSeen' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us"
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendSeen"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us"
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendSeen";
-const data = {
- session: "default",
- chatId: "12132132130@c.us"
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us"
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-seen-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendSeen' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us"
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendSeen"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us"
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendSeen";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us"
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us"
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendText-code.md b/content/docs/how-to/send-messages/api-sendText-code.md
index 2d3776d88..2dd2c4617 100644
--- a/content/docs/how-to/send-messages/api-sendText-code.md
+++ b/content/docs/how-to/send-messages/api-sendText-code.md
@@ -1,87 +1,96 @@
-
-
-{{< tabs "send-text-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendText' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "text": "Hi there!"
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendText"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "text": "Hi there!"
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendText";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- text: "Hi there!"
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "text" => "Hi there!"
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
+
+
+{{< tabs "send-text-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendText' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "text": "Hi there!"
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendText"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "text": "Hi there!"
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendText";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ text: "Hi there!"
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "text" => "Hi there!"
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendVideo-code.md b/content/docs/how-to/send-messages/api-sendVideo-code.md
index 5c5672947..8c8db3fb6 100644
--- a/content/docs/how-to/send-messages/api-sendVideo-code.md
+++ b/content/docs/how-to/send-messages/api-sendVideo-code.md
@@ -1,115 +1,124 @@
-
-
-{{< tabs "send-video-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendVideo' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "caption": "Watch this video!",
- "asNote": false,
- "file": {
- "mimetype": "video/mp4",
- "filename": "video.mp4",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
- },
- "convert": false
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendVideo"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "caption": "Watch this video!",
- "asNote": False,
- "file": {
- "mimetype": "video/mp4",
- "filename": "video.mp4",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
- },
- "convert": False
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendVideo";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- caption: "Watch this video!",
- asNote: false,
- file: {
- mimetype: "video/mp4",
- filename: "video.mp4",
- url: "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
- },
- convert: false
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "caption" => "Watch this video!",
- "asNote" => false,
- "file" => [
- "mimetype" => "video/mp4",
- "filename" => "video.mp4",
- "url" => "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
- ],
- "convert" => false
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-video-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendVideo' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "caption": "Watch this video!",
+ "asNote": false,
+ "file": {
+ "mimetype": "video/mp4",
+ "filename": "video.mp4",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
+ },
+ "convert": false
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendVideo"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "caption": "Watch this video!",
+ "asNote": False,
+ "file": {
+ "mimetype": "video/mp4",
+ "filename": "video.mp4",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
+ },
+ "convert": False
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendVideo";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ caption: "Watch this video!",
+ asNote: false,
+ file: {
+ mimetype: "video/mp4",
+ filename: "video.mp4",
+ url: "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
+ },
+ convert: false
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "caption" => "Watch this video!",
+ "asNote" => false,
+ "file" => [
+ "mimetype" => "video/mp4",
+ "filename" => "video.mp4",
+ "url" => "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
+ ],
+ "convert" => false
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-sendVoice-code.md b/content/docs/how-to/send-messages/api-sendVoice-code.md
index 3a7208dd8..e5db832df 100644
--- a/content/docs/how-to/send-messages/api-sendVoice-code.md
+++ b/content/docs/how-to/send-messages/api-sendVoice-code.md
@@ -1,103 +1,112 @@
-
-
-{{< tabs "send-voice-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendVoice' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "chatId": "12132132130@c.us",
- "file": {
- "mimetype": "audio/ogg; codecs=opus",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
- },
- "convert": false
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendVoice"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "chatId": "12132132130@c.us",
- "file": {
- "mimetype": "audio/ogg; codecs=opus",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
- },
- "convert": False
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/sendVoice";
-const data = {
- session: "default",
- chatId: "12132132130@c.us",
- file: {
- mimetype: "audio/ogg; codecs=opus",
- url: "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
- },
- convert: false
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.post(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "chatId" => "12132132130@c.us",
- "file" => [
- "mimetype" => "audio/ogg; codecs=opus",
- "url" => "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
- ],
- "convert" => false
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "send-voice-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendVoice' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "file": {
+ "mimetype": "audio/ogg; codecs=opus",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
+ },
+ "convert": false
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendVoice"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "file": {
+ "mimetype": "audio/ogg; codecs=opus",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
+ },
+ "convert": False
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/sendVoice";
+const data = {
+ session: "default",
+ chatId: "12132132130@c.us",
+ file: {
+ mimetype: "audio/ogg; codecs=opus",
+ url: "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
+ },
+ convert: false
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .post(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "chatId" => "12132132130@c.us",
+ "file" => [
+ "mimetype" => "audio/ogg; codecs=opus",
+ "url" => "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
+ ],
+ "convert" => false
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/api-star-code.md b/content/docs/how-to/send-messages/api-star-code.md
index 3857994c7..155b982ea 100644
--- a/content/docs/how-to/send-messages/api-star-code.md
+++ b/content/docs/how-to/send-messages/api-star-code.md
@@ -1,91 +1,100 @@
-
-
-{{< tabs "star-api" "language" >}}
-
-{{< tab "cURL" >}}
-```sh
-curl -X 'PUT' \
- 'http://localhost:3000/api/star' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -H 'X-Api-Key: yoursecretkey' \
- -d '{
- "session": "default",
- "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
- "chatId": "12132132130@c.us",
- "star": true
-}'
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/star"
-headers = {
- "Content-Type": "application/json",
- "X-Api-Key": "yoursecretkey"
-}
-data = {
- "session": "default",
- "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
- "chatId": "12132132130@c.us",
- "star": True
-}
-
-response = requests.put(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```javascript
-const axios = require('axios');
-
-const url = "http://localhost:3000/api/star";
-const data = {
- session: "default",
- messageId: "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
- chatId: "12132132130@c.us",
- star: true
-};
-const headers = {
- 'Content-Type': 'application/json',
- 'X-Api-Key': 'yoursecretkey'
-};
-
-axios.put(url, data, { headers })
- .then(response => console.log(response.data))
- .catch(error => console.error(error));
-```
-{{< /tab >}}
-
-{{< tab "PHP" >}}
-```php
- "default",
- "messageId" => "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
- "chatId" => "12132132130@c.us",
- "star" => true
-];
-
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-Api-Key: yoursecretkey'
-]);
-$response = curl_exec($ch);
-curl_close($ch);
-
-echo $response;
-?>
-```
-{{< /tab >}}
-
-{{< /tabs >}}
\ No newline at end of file
+
+
+{{< tabs "star-api" "language" >}}
+
+{{< tab "cURL" >}}
+
+```sh
+curl -X 'PUT' \
+ 'http://localhost:3000/api/star' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'X-Api-Key: yoursecretkey' \
+ -d '{
+ "session": "default",
+ "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
+ "chatId": "12132132130@c.us",
+ "star": true
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/star"
+headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+}
+data = {
+ "session": "default",
+ "messageId": "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
+ "chatId": "12132132130@c.us",
+ "star": True
+}
+
+response = requests.put(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```javascript
+const axios = require("axios");
+
+const url = "http://localhost:3000/api/star";
+const data = {
+ session: "default",
+ messageId: "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
+ chatId: "12132132130@c.us",
+ star: true
+};
+const headers = {
+ "Content-Type": "application/json",
+ "X-Api-Key": "yoursecretkey"
+};
+
+axios
+ .put(url, data, { headers })
+ .then((response) => console.log(response.data))
+ .catch((error) => console.error(error));
+```
+
+{{< /tab >}}
+
+{{< tab "PHP" >}}
+
+```php
+ "default",
+ "messageId" => "false_12132132130@c.us_AAAAAAAAAAAAAAAAAAAA",
+ "chatId" => "12132132130@c.us",
+ "star" => true
+];
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
+curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
+curl_setopt($ch, CURLOPT_HTTPHEADER, [
+ 'Content-Type: application/json',
+ 'X-Api-Key: yoursecretkey'
+]);
+$response = curl_exec($ch);
+curl_close($ch);
+
+echo $response;
+?>
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/content/docs/how-to/send-messages/features.md b/content/docs/how-to/send-messages/features.md
index 59e34038c..927ecc57c 100644
--- a/content/docs/how-to/send-messages/features.md
+++ b/content/docs/how-to/send-messages/features.md
@@ -1,34 +1,34 @@
-
-{{< details "**📤 Messages - API**" >}}
-
-| **API** | WEBJS | NOWEB | GOWS |
-|-------------------------------------------------------------|:------------------------------------------------------------:|:-----:|:----:|
-| `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/send/link-custom-preview` | | ➕ | ➕ ️ |
-| `POST /api/forwardMessage` | ✔️ [#588](https://github.com/devlikeapro/waha/issues/588) | ✔️ | |
-| `POST /api/sendLocation` | ✔️ | ✔️ | |
-| `POST /api/startTyping` | ✔️ | ✔️ | ✔️ |
-| `POST /api/stopTyping` | ✔️ | ✔️ | ✔️ |
-| `POST /api/{session}/presence` | ✔️ | ✔️ | ✔️ |
-| `POST /api/reaction` | ✔️ | ✔️ | ✔️ |
-| `POST /api/star` | ✔️ | ✔️ | |
-| `POST /api/sendContactVcard` | | ✔️ | ✔️ |
-| `GET /api/messages` | ✔️ | ✔️¹ | |
-| `GET /api/checkNumberStatus` | ✔️ | ✔️ | ✔️ |
-| `POST /api/send/buttons/reply` | ➕ | | |
-| `POST /api/sendButtons` | | | |
-| `POST /api/{session}/media/convert/voice` | ➕ | ➕ | ➕ |
-| `POST /api/{session}/media/convert/video` | ➕ | ➕ | ➕ |
-
-1. **NOWEB** - you need to [**Enable Store**]({{< relref "/docs/engines/noweb#store" >}}) to get **chats, contacts and messages**
-
-_If you see the feature is not available in the above list, please [create a feature request](https://github.com/devlikeapro/waha/issues/new/choose) or **leave "+1" comment** on the existing one._
-
-{{< /details >}}
+
+{{< details "**📤 Messages - API**" >}}
+
+| **API** | WEBJS | NOWEB | GOWS |
+| ----------------------------------------------------------- | :----------------------------------------------------------: | :---: | :--: |
+| `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/send/link-custom-preview` | | ➕ | ➕ ️ |
+| `POST /api/forwardMessage` | ✔️ [#588](https://github.com/devlikeapro/waha/issues/588) | ✔️ | |
+| `POST /api/sendLocation` | ✔️ | ✔️ | |
+| `POST /api/startTyping` | ✔️ | ✔️ | ✔️ |
+| `POST /api/stopTyping` | ✔️ | ✔️ | ✔️ |
+| `POST /api/{session}/presence` | ✔️ | ✔️ | ✔️ |
+| `POST /api/reaction` | ✔️ | ✔️ | ✔️ |
+| `POST /api/star` | ✔️ | ✔️ | |
+| `POST /api/sendContactVcard` | | ✔️ | ✔️ |
+| `GET /api/messages` | ✔️ | ✔️¹ | |
+| `GET /api/checkNumberStatus` | ✔️ | ✔️ | ✔️ |
+| `POST /api/send/buttons/reply` | ➕ | | |
+| `POST /api/sendButtons` | | | |
+| `POST /api/{session}/media/convert/voice` | ➕ | ➕ | ➕ |
+| `POST /api/{session}/media/convert/video` | ➕ | ➕ | ➕ |
+
+1. **NOWEB** - you need to [**Enable Store**]({{< relref "/docs/engines/noweb#store" >}}) to get **chats, contacts and messages**
+
+_If you see the feature is not available in the above list, please [create a feature request](https://github.com/devlikeapro/waha/issues/new/choose) or **leave "+1" comment** on the existing one._
+
+{{< /details >}}
diff --git a/content/docs/how-to/send-messages/index.md b/content/docs/how-to/send-messages/index.md
index b4f15f616..242b8e667 100644
--- a/content/docs/how-to/send-messages/index.md
+++ b/content/docs/how-to/send-messages/index.md
@@ -1,958 +1,991 @@
----
-title: "📤 Send messages"
-description: "Describe how to send messages."
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 220
-images: ["messages.jpg"]
-slug: send-messages
----
-
-We assume that you've already run the Docker container and authenticated the session with a QR code.
-
-If you haven't yet - please follow the steps from [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}}).
-
-
-
-## Features
-
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/send-messages/features.md" >}}
-
-## Fields
-
-There are common fields that you can find in almost all requests:
-
-```json
-{
- "session": "default",
- "chatId": "12132132130@c.us",
- "file": "..."
-}
-```
-
-### session
-
-`session` - a session name from which account you're sending the message. We use `default` in the examples.
-
-- Core version supports only `default` session.
-- Plus allows you to run multiple sessions inside one container to save your memory and
- CPU resources!
-
-Read more about [multiple sessions →]({{< relref "/docs/how-to/sessions" >}})
-
-### chatId
-
-`chatId` - this is a phone number or Group identifier where you're sending the message.
-
-- `123123123@c.us` **Phone numbers** accounts - international phone number without + at the start and add `@c.us` at
- the end.
- For phone number `12132132131` the `chatId` is `12132132131@c.us`
-- `123123123@s.whatsapp.net` can also appear in **internal data for NOWEB**, just convert it to `@c.us` to work
- with that properly. Kindly don't use it in `chatId` when sending messages
-- `12312312123133@g.us` - **Groups** uses random number with `@g.us` at the end.
-- `123123123@lid` - **is a hidden user ID**, each user has a regular ID along with a hidden one. WhatsApp added that
- type of ID along with communities functionality.
-- `123123123@newsletter` - for [**📰 WhatsApp Channels**]({{< relref "/docs/how-to/channels" >}}).
-
-👉 To get the actual `chatId` for 🇧🇷 **Brazilian phone number** - use `chatId` field from
-[Check phone number exists]({{< relref "/docs/how-to/contacts#check-phone-number-exists" >}})
-response.
-
-Read more
-about [error sending text to half of Brazilian numbers (every number registered before 2012) ->](https://github.com/devlikeapro/waha/issues/238)
-
-### file
-
-When sending media (images, voice, files) you can either use:
-
-- `file.data` field [with base64 encoded file](https://base64.guru/converter/encode/file)
-- `file.url` field with public available URL for that file
-
-See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
-
-### reply_to
-
-You can add the `reply_to` field in order to reply to a specific message.
-
-```json
-{
- "chatId": "11111111111@c.us",
- ...
- "reply_to": "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA"
-}
-```
-
-`reply_to` is available in all messages
-
-## Send Seen
-
-If you get a new message via [**🔄 Events**]({{< relref "docs/how-to/events#message" >}})
-and want to reply to that message, you need to first send that you've seen the message
-(double green tick) - read [**⚠️ How to Avoid Blocking**]({{< relref "docs/overview/how-to-avoid-blocking" >}})
-
-{{< callout context="note" title="Read all unread messages in the chat" >}}
-Check
-[**💬 Chats - Read messages**]({{< relref "/docs/how-to/chats#read-messages" >}}) API
-to read messages without providing message id.
-{{< /callout >}}
-
-```http request
-POST /api/sendSeen
-```
-
-Send seen (read a message) for **all unread** messages **older than 7 days** (30 max for DM, 100 max for groups)
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@c.us"
-}
-```
-
-In **NOWEB** and **GOWS**
-[**🏭 Engines**]({{< relref "/docs/how-to/engines" >}})
-you can control what messages to read by using `messagesIds` (or deprecated `messageId`) field:
-
-Send seen for **direct message**:
-
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@c.us",
- "messageIds": [
- "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA"
- ]
-}
-```
-
-Send seen for **Group Message** you need to provide `participant` field:
-
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@g.us",
- "messageIds": [
- "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA_33333333333@c.us"
- ],
- "participant": "33333333333@c.us"
-}
-```
-
-Here's how you can call it from various languages:
-{{< include file="content/docs/how-to/send-messages/api-sendSeen-code.md" >}}
-
-## Send Text
-Use the API to send text messages to the chat.
-
-```http request
-POST /api/sendText
-```
-
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "12132132130@c.us",
- "text": "Hi there!"
-}
-```
-
-Here's how you can call it from various languages:
-{{< include file="content/docs/how-to/send-messages/api-sendText-code.md" >}}
-
-Here's some additional options:
-- `reply_to: false_1111@c.us_AAA` - to reply on a message
-- `mentions` - to mention a contact in a group
-- `linkPreview: false` - to disable preview generation for links in the message
-
-### Link preview
-
-```http request
-POST /api/sendText
-```
-
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "12132132130@c.us",
- "text": "Hi there!",
- "linkPreview": true,
- "linkPreviewHighQuality": true
-}
-```
-
-If the text has a link - it generates a preview for that link. You adjust the behaviour by setting
-- `linkPreview: true` - to enable link preview
-- `linkPreviewHighQuality: true` - to enable high-quality link preview (requires additional upload to WA servers)
-
-{{< details-html "🖼️ **Link Preview** Screenshot" >}}
-{{< imgo src="whatsapp-link-preview.jpg" alt="WhatsApp Link Preview" >}}
-{{< /details-html >}}
-
-{{< callout context="tip" title="Custom Link Preview" icon="outline/info-circle" >}}
-If link preview generation process fails or site protects it with captcha - you can generate your own preview and
-[**Send Custom Link Preview**](#send-link-custom-preview)
-{{< /callout >}}
-
-
-### Reply on message
-
-To reply on a message - add `reply_to` field:
-
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@c.us",
- "reply_to": "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA",
- "text": "Reply text"
-}
-```
-
-### Mention contact
-
-If you send a message in a group and want to mention a participant in the message -
-use `mentions` field for that in `POST /api/sendText` request.
-
-Please note that you MUST mention a number in the text as well in the format `@2132132130` and
-also mention it in `mentions` in format `2132132130@c.us`
-
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "12132132130@c.us",
- "text": "Hi there! @2132132130",
- "mentions": [
- "2132132130@c.us"
- ]
-}
-```
-
-## Send Image
-Use API to send images to the chat.
-
-```http request
-POST /api/sendImage
-```
-
-You can send images in two ways:
-
-1. Provide a **URL** for the image.
-2. Encode the whole file content into **BASE64** and send it in the request body.
-
-{{< tabs "send-image-body" >}}
-{{< tab "URL" >}}
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@c.us",
- "file": {
- "mimetype": "image/jpeg",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
- "filename": "filename.jpeg"
- },
- "caption": "string"
-}
-```
-{{< /tab >}}
-
-{{< tab "BASE64" >}}
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@c.us",
- "file": {
- "mimetype": "image/jpeg",
- "filename": "filename.jpeg",
- "data": "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"
- },
- "caption": "string"
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-Here's how you can call it from various languages:
-{{< include file="content/docs/how-to/send-messages/api-sendImage-code.md" >}}
-
-## Send Voice
-Use API to send voice messages to the chat.
-
-```http request
-POST /api/sendVoice
-```
-
-You can send voice messages in two ways:
-
-1. Provide a **URL** for the voice.
-2. Encode the whole file content into **BASE64** and send it in the request body.
-
-
-{{< tabs "send-voice-body" >}}
-{{< tab "URL" >}}
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@c.us",
- "file": {
- "mimetype": "audio/ogg; codecs=opus",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
- },
- "convert": false
-}
-```
-{{< /tab >}}
-
-{{< tab "BASE64" >}}
-```json { title="Body" }
-{
- "chatId": "11111111111@c.us",
- "file": {
- "mimetype": "audio/ogg; codecs=opus",
- "filename": "voice-message.mp3",
- "data": "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"
- },
- "session": "default",
- "convert": false
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-**Fields**:
-- `file` - provide **one of** the fields:
- - `url` - URL to the file
- - `data` - Base 64 encoded binary content of the file
-- `convert: false` - convert the file to the right format. **Default:** `false`
- - Set `convert: true` if you don't have the right format, check the format note below.
-
-{{< include file="content/docs/how-to/send-messages/media-voice-format.md" >}}
-
-Here's how you can call it from various languages:
-{{< include file="content/docs/how-to/send-messages/api-sendVoice-code.md" >}}
-
-### Media - Convert Voice
-{{< include file="content/docs/how-to/send-messages/media-voice-convert.md" >}}
-
-
-## Send Video
-```http request
-POST /api/sendVideo
-```
-Use API to send a video to a chat.
-
-You can send video messages in two ways:
-
-1. Provide a **URL** for the file and the API will download and send it in the request body.
-2. Provide the file as a **BASE64** string in the request body.
-
-{{< tabs "send-video-body" >}}
-{{< tab "URL" >}}
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@c.us",
- "caption": "Watch this video!",
- "asNote": false,
- // aka video note, rounded video
- "file": {
- "mimetype": "video/mp4",
- "filename": "video.mp4",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
- },
- "convert": false
-}
-```
-{{< /tab >}}
-
-{{< tab "BASE64" >}}
-```json { title="Body" }
-{
- "chatId": "11111111111@c.us",
- "caption": "Watch this video!",
- "asNote": false,
- // aka video note, rounded video
- "file": {
- "mimetype": "video/mp4",
- "filename": "video.mp4",
- "data": "AAAAGGZ0eXBtcDQyAAAAAGlzb21tcDQyAAAHEW1vb3YAAABsbXZoZAAAAADgAUTa4AFE2gAAdTAAAHe6AAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAANzdHJhawAAAFx0a2hkAAAAA+ABRNrgAUTaAAAAAQAAAAAAAHVOAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAUAAAAC0AAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAB1TgAAA+kAAQAAAAAC621kaWEAAAAgbWRoZAAAAADgAUTa4AFE2gAAdTAAAHVOVcQAAAAAAF9oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAASVNPIE1lZGlhIGZpbGUgcHJvZHVjZWQgYnkgR29vZ2xlIEluYy4gQ3JlYXRlZCBvbjogMDIvMDIvMjAyMy4AAAACZG1pbmYAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAIkc3RibAAAAJhzdHNkAAAAAAAAAAEAAACIYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAUAAtAASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAADJhdmNDAWQAH//hABtnZAAfrNEAUAW7AWoCAgKAAAH0gAB1MAeMGIkBAARo648sAAAAGHN0dHMAAAAAAAAAAQAAAB4AAAPpAAAAKHN0c2MAAAAAAAAAAgAAAAEAAAAOAAAAAQAAAAMAAAACAAAAAQAAABxzdGNvAAAAAAAAAAMAAAcxAAAq7wAAS24AAACMc3RzegAAAAAAAAAAAAAAHgAAA0kAAAAyAAAAJQAAACYAAAAmAAAAKQAAACUAAAAlAAAAJQAAACkAAAAlAAAAJQAAACUAAAApAAAAJAAAACQAAAAkAAAAJwAAACQAAAAkAAAAJQAAACYAAAAlAAAAJQAAACUAAAAmAAAAJQAAACUAAAAlAAAAKgAAABRzdHNzAAAAAAAAAAEAAAABAAAAiGN0dHMAAAAAAAAADwAAAAEAAAPpAAAAAQAAD6QAAAADAAAAAAAAAAEAAA+kAAAAAwAAAAAAAAABAAAPpAAAAAMAAAAAAAAAAQAAD6QAAAADAAAAAAAAAAEAAA+kAAAAAwAAAAAAAAABAAAPpAAAAAMAAAAAAAAAAQAAE40AAAAEAAAAAAAAABR2bWhkAAAAAQAAAAAAAAAAAAACuHRyYWsAAABcdGtoZAAAAAPgAUTa4AFE2gAAAAIAAAAAAAB3ugAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAlRtZGlhAAAAIG1kaGQAAAAA4AFE2uABRNoAAKxEAACwABXHAAAAAABfaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAElTTyBNZWRpYSBmaWxlIHByb2R1Y2VkIGJ5IEdvb2dsZSBJbmMuIENyZWF0ZWQgb246IDAyLzAyLzIwMjMuAAAAAc1taW5mAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAABkXN0YmwAAABpc3RzZAAAAAAAAAABAAAAWW1wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAACsRAAAAAAANWVzZHMAAAAAAycAAgAEH0AVAAAAAAAAAAAAAAAFEBIQAAAAAAAAAAAAAAAAAAAGAQIAAAAYc3R0cwAAAAAAAAABAAAALAAABAAAAAAoc3RzYwAAAAAAAAACAAAAAQAAABUAAAABAAAAAwAAAAIAAAABAAAAHHN0Y28AAAAAAAAAAwAADHYAACz0AABLvQAAAMRzdHN6AAAAAAAAAAAAAAAsAAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAAQc21oZAAAAAAAAAAAAAAAcnVkdGEAAABqbWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAA9aWxzdAAAABlnc3N0AAAAEWRhdGEAAAABAAAAADAAAAAcZ3N0ZAAAABRkYXRhAAAAAQAAAAAxMDY4AABHe21kYXQAAANFJbhABd/+9Y2vmWVRi0/fwl7Vp8FFIlFodBXWJ7AAAAMAAAMAAAMAAAMCb3w7b+xvu484N6S/wPJaC8sMAAADApIAAAxYAAEIAAAaIAAD7AAAqQAAIeAABmgAAcgAAHOAACMgAAnwAAPEAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAAzkv4VetcGPbngLXvkqeR7JxISR12BgR++cnsBM31J1hURZirB4HGwWvpFdPC289mAkjXLCSyIdvFR3dv6aHr0B82L8J9Xog23WabSqb8cO+rmTPXAgY7aaIpgPquTfAAAJQGERBcipJr4m65wx3o3poM4QuaQq1SlHkzKL3Tov43kRfCoIa5GVUZ6CE6rriYcm72C827hp2mDdqNx6fHB1jsnRsQxit03/N5XMsHAWWiLnLJlru6Fjs4nF8PgsKqHV100N02/K4Lui85ShIhYz0cYsI7cmrr9AQCKLf3rbXvAOQEK9iZ3ELwGrUemoiVtzbbFzFplif1tWr4bGWSBRmylGBomUYqlh1w2hY5WSz2e+e7EcHvZ3AoMWZIUkvohRPbA016vF3x1mlXVR5P1rFnPwA9O12c73pWqAnTtHi4IAABARcfYC/FQsIkx5nfpXAi1MP7Uyt1kxrRbxQyilN42vcIBU33ywVC0b3cmIpGpnrZ4Z8LXriYPNJkqXUN5+h61ktEcZ1ymfgp77JtlJItHJN+fuhrxPY8HucNaFPQrChl1Ud+EN4SuQWg4TvEUl5O7cM275b8BOxJtWfRMVkuL/A93UIq3SWPbsd9Dd06g+obkwgq9up6u9YZkWczBlwDmK5gitbPbKN4o1ZI7AAAOLsX06bPLKB01V+iAw3xjzslG/7US1WFR/CRaZZ5EIoPL0xOxVV/wmQeGC5YwF7JNsJLtWzbrAJl/y1td4SJ5Tw1iu0O1RsxzaEkmLjU/lPicm/sSMjMcK1Tw4SwcuwXwlCRbCcqWoNDNOJZK3+YBqxBc8XHcOrAAAJCIWAAAvoK4AAQw+gAAefAAAB/vwAAQwIAADMiAAA+XoAAZvgAAOJsAAK8cAAKXMAAKNgAANGgAAVBAAACTAAAFAAADAC5AAAIMAAAaMVdIAAAALiHiTIXf/eEAAAMAAAMAAAMAAAMCGogH7ip1N+0CWY7DPZHZwAAAAwAAAwAEHaAAAAAhAakHyLf/AAADAAADAAADAAADABkThmAAAAMAAAMAAxaIAAAAIgGpC8jX/wAAAwAAAwAAAwAAAwAVSr7ewAAAAwAAAwAHXcAAAAAiAakPyNf/AAADAAADAAADAAADABVKvt7AAAADAAADAAddwAAAACUh5IohV//8hAAAAwAAAwAAAwAAAwAEcKP8u5AAAAMAAAMAAQdwAAAAIQGpl8i3/wAAAwAAAwAAAwAAAwAZE4ZgAAADAAADAAMWiAAAACEBqZvIt/8AAAMAAAMAAAMAAAMAGROGYAAAAwAAAwADFogAAAAhAamfyLf/AAADAAADAAADAAADABkThmAAAAMAAAMAAxaIAAAAJSHmyiE3//pYAAADAAADAAADAAADAAi4gzWuQAAAAwAAAwADMiAAAAAhAaonyJf/AAADAAADAAADAAADAByn5+AAAAMAAAMABN2QAAAAIQGqK8iX/wAAAwAAAwAAAwAAAwAcp+fgAAADAAADAATdkAAAACEBqi/Il/8AAAMAAAMAAAMAAAMAHKfn4AAAAwAAAwAE3ZAAAAAlIekKIRf/+lgAAAMAAAMAAAMAAAMACLPP13NAAAADAAADAAO6YCEABQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAciEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAgAaq3yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAgAaq7yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAgAaq/yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAjIetKI9/zIAAAAwAAAwAAAwAAAwAVW8H+swAAAwAAAwAAEvcAAAAgAatHyV8AAAMAAAMAAAMAAAMAKY8KAAADAAADAAAIOyAAAAAgAatLyV8AAAMAAAMAAAMAAAMAKY8KAAADAAADAAAIOyAAAAAhAatPyJf/AAADAAADAAADAAADAByn5+AAAAMAAAMABN2QAAAAIiHtiiNf5EAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMCgiAAAAAhAavXyLf/AAADAAADAAADAAADAAADAAADAAADAAADAO6YAAAAIQGr28i3/wAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwDumAAAACEBq9/It/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMA7pgAAAAiIe/aIt+HAAADAAADAAADAAADAAADAAADAAADAAADAAmagAAAACEBrGfIl/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMBF3AAAAAhAaxryJf/AAADAAADAAADAAADAAADAAADAAADAAADARdwIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfSEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkAAAAhAaxvyJf/AAADAAADAAADAAADAAADAAADAAADAAADARdwAAAAIQGsc8iX/wAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwEXcAAAAAEKIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI="
- },
- "session": "default",
- "convert": false
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-**Fields**:
-- `file` - provide **one of** the fields:
- - `url` - URL to the file
- - `data` - Base 64 encoded binary content of the file
-- `convert: false` - convert the file to the right format. **Default:** `false`
- - Set `convert: true` if you don't have the right format, check the format note below.
-
-{{< include file="content/docs/how-to/send-messages/media-video-format.md" >}}
-
-Here's how you can call it from various languages:
-{{< include file="content/docs/how-to/send-messages/api-sendVideo-code.md" >}}
-
-### Media - Convert Video
-
-{{< include file="content/docs/how-to/send-messages/media-video-convert.md" >}}
-
-
-## Send File
-
-Use API to send a file (as a document/attachment) to a chat.
-
-```http request
-POST /api/sendFile
-```
-
-You can send files in two ways:
-
-1. Provide a **URL** for the file.
-2. Encode the whole file content into **BASE64** and send it in the request body.
-
-{{< tabs "send-file-body" >}}
-{{< tab "URL" >}}
-```json { title="Body" }
-{
- "session": "default",
- "caption": "Check this out!",
- "chatId": "11111111111@c.us",
- "file": {
- "mimetype": "image/jpeg",
- "filename": "filename.jpeg",
- "url": "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/video.mp4"
- }
-}
-```
-{{< /tab >}}
-
-{{< tab "BASE64" >}}
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "11111111111@c.us",
- "file": {
- "mimetype": "image/jpeg",
- "filename": "filename.jpeg",
- "data": "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"
- },
- "caption": "string"
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-Here's how you can call it from various languages:
-{{< include file="content/docs/how-to/send-messages/api-sendFile-code.md" >}}
-
-## Send Poll
-
-We have a dedicated page about [**📶 Polls**]({{< relref "/docs/how-to/polls" >}})!
-
-
-
-```http request
-POST /api/sendPoll
-```
-
-The request body is pretty simple:
-
-```json { title="Body" }
-{
- "session": "default",
- "chatId": "123123123@c.us",
- "poll": {
- "name": "How are you?",
- "options": [
- "Awesome!",
- "Good!",
- "Not bad!"
- ],
- "multipleAnswers": false
- }
-}
-```
-
-Here's how you can call it from various languages:
-{{< include file="content/docs/how-to/send-messages/api-sendPoll-code.md" >}}
-
-
-## Send Event
-You can send Event Message using API
-
-```http request
-POST /api/{SESSION}/events
-```
-
-{{< callout context="note" icon="outline/info-circle" >}}
-👉 Read more about how to send [**📅 Event Message**]({{< relref "/docs/how-to/event-message" >}}) and receive responses.
-{{< /callout >}}
-
-Here's how you can call it from various languages:
-{{< include file="content/docs/how-to/send-messages/api-sendEvent-code.md" >}}
-
-
-
+
+## Features
+
+Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
+
+{{< include file="content/docs/how-to/send-messages/features.md" >}}
+
+## Fields
+
+There are common fields that you can find in almost all requests:
+
+```json
+{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "file": "..."
+}
+```
+
+### session
+
+`session` - a session name from which account you're sending the message. We use `default` in the examples.
+
+- Core version supports only `default` session.
+- Plus allows you to run multiple sessions inside one container to save your memory and
+ CPU resources!
+
+Read more about [multiple sessions →]({{< relref "/docs/how-to/sessions" >}})
+
+### chatId
+
+`chatId` - this is a phone number or Group identifier where you're sending the message.
+
+- `123123123@c.us` **Phone numbers** accounts - international phone number without + at the start and add `@c.us` at
+ the end.
+ For phone number `12132132131` the `chatId` is `12132132131@c.us`
+- `123123123@s.whatsapp.net` can also appear in **internal data for NOWEB**, just convert it to `@c.us` to work
+ with that properly. Kindly don't use it in `chatId` when sending messages
+- `12312312123133@g.us` - **Groups** uses random number with `@g.us` at the end.
+- `123123123@lid` - **is a hidden user ID**, each user has a regular ID along with a hidden one. WhatsApp added that
+ type of ID along with communities functionality.
+- `123123123@newsletter` - for [**📰 WhatsApp Channels**]({{< relref "/docs/how-to/channels" >}}).
+
+👉 To get the actual `chatId` for 🇧🇷 **Brazilian phone number** - use `chatId` field from
+[Check phone number exists]({{< relref "/docs/how-to/contacts#check-phone-number-exists" >}})
+response.
+
+Read more
+about [error sending text to half of Brazilian numbers (every number registered before 2012) ->](https://github.com/devlikeapro/waha/issues/238)
+
+### file
+
+When sending media (images, voice, files) you can either use:
+
+- `file.data` field [with base64 encoded file](https://base64.guru/converter/encode/file)
+- `file.url` field with public available URL for that file
+
+See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
+
+### reply_to
+
+You can add the `reply_to` field in order to reply to a specific message.
+
+```json
+{
+ "chatId": "11111111111@c.us",
+ ...
+ "reply_to": "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA"
+}
+```
+
+`reply_to` is available in all messages
+
+## Send Seen
+
+If you get a new message via [**🔄 Events**]({{< relref "docs/how-to/events#message" >}})
+and want to reply to that message, you need to first send that you've seen the message
+(double green tick) - read [**⚠️ How to Avoid Blocking**]({{< relref "docs/overview/how-to-avoid-blocking" >}})
+
+{{< callout context="note" title="Read all unread messages in the chat" >}}
+Check
+[**💬 Chats - Read messages**]({{< relref "/docs/how-to/chats#read-messages" >}}) API
+to read messages without providing message id.
+{{< /callout >}}
+
+```http request
+POST /api/sendSeen
+```
+
+Send seen (read a message) for **all unread** messages **older than 7 days** (30 max for DM, 100 max for groups)
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@c.us"
+}
+```
+
+In **NOWEB** and **GOWS**
+[**🏭 Engines**]({{< relref "/docs/how-to/engines" >}})
+you can control what messages to read by using `messagesIds` (or deprecated `messageId`) field:
+
+Send seen for **direct message**:
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@c.us",
+ "messageIds": ["false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA"]
+}
+```
+
+Send seen for **Group Message** you need to provide `participant` field:
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@g.us",
+ "messageIds": ["false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA_33333333333@c.us"],
+ "participant": "33333333333@c.us"
+}
+```
+
+Here's how you can call it from various languages:
+{{< include file="content/docs/how-to/send-messages/api-sendSeen-code.md" >}}
+
+## Send Text
+
+Use the API to send text messages to the chat.
+
+```http request
+POST /api/sendText
+```
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "text": "Hi there!"
+}
+```
+
+Here's how you can call it from various languages:
+{{< include file="content/docs/how-to/send-messages/api-sendText-code.md" >}}
+
+Here's some additional options:
+
+- `reply_to: false_1111@c.us_AAA` - to reply on a message
+- `mentions` - to mention a contact in a group
+- `linkPreview: false` - to disable preview generation for links in the message
+
+### Link preview
+
+```http request
+POST /api/sendText
+```
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "text": "Hi there!",
+ "linkPreview": true,
+ "linkPreviewHighQuality": true
+}
+```
+
+If the text has a link - it generates a preview for that link. You adjust the behaviour by setting
+
+- `linkPreview: true` - to enable link preview
+- `linkPreviewHighQuality: true` - to enable high-quality link preview (requires additional upload to WA servers)
+
+{{< details-html "🖼️ **Link Preview** Screenshot" >}}
+{{< imgo src="whatsapp-link-preview.jpg" alt="WhatsApp Link Preview" >}}
+{{< /details-html >}}
+
+{{< callout context="tip" title="Custom Link Preview" icon="outline/info-circle" >}}
+If link preview generation process fails or site protects it with captcha - you can generate your own preview and
+[**Send Custom Link Preview**](#send-link-custom-preview)
+{{< /callout >}}
+
+### Reply on message
+
+To reply on a message - add `reply_to` field:
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@c.us",
+ "reply_to": "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA",
+ "text": "Reply text"
+}
+```
+
+### Mention contact
+
+If you send a message in a group and want to mention a participant in the message -
+use `mentions` field for that in `POST /api/sendText` request.
+
+Please note that you MUST mention a number in the text as well in the format `@2132132130` and
+also mention it in `mentions` in format `2132132130@c.us`
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "12132132130@c.us",
+ "text": "Hi there! @2132132130",
+ "mentions": ["2132132130@c.us"]
+}
+```
+
+## Send Image
+
+Use API to send images to the chat.
+
+```http request
+POST /api/sendImage
+```
+
+You can send images in two ways:
+
+1. Provide a **URL** for the image.
+2. Encode the whole file content into **BASE64** and send it in the request body.
+
+{{< tabs "send-image-body" >}}
+{{< tab "URL" >}}
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@c.us",
+ "file": {
+ "mimetype": "image/jpeg",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
+ "filename": "filename.jpeg"
+ },
+ "caption": "string"
+}
+```
+
+{{< /tab >}}
+
+{{< tab "BASE64" >}}
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@c.us",
+ "file": {
+ "mimetype": "image/jpeg",
+ "filename": "filename.jpeg",
+ "data": "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"
+ },
+ "caption": "string"
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+Here's how you can call it from various languages:
+{{< include file="content/docs/how-to/send-messages/api-sendImage-code.md" >}}
+
+## Send Voice
+
+Use API to send voice messages to the chat.
+
+```http request
+POST /api/sendVoice
+```
+
+You can send voice messages in two ways:
+
+1. Provide a **URL** for the voice.
+2. Encode the whole file content into **BASE64** and send it in the request body.
+
+{{< tabs "send-voice-body" >}}
+{{< tab "URL" >}}
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@c.us",
+ "file": {
+ "mimetype": "audio/ogg; codecs=opus",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
+ },
+ "convert": false
+}
+```
+
+{{< /tab >}}
+
+{{< tab "BASE64" >}}
+
+```json { title="Body" }
+{
+ "chatId": "11111111111@c.us",
+ "file": {
+ "mimetype": "audio/ogg; codecs=opus",
+ "filename": "voice-message.mp3",
+ "data": "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"
+ },
+ "session": "default",
+ "convert": false
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+**Fields**:
+
+- `file` - provide **one of** the fields:
+ - `url` - URL to the file
+ - `data` - Base 64 encoded binary content of the file
+- `convert: false` - convert the file to the right format. **Default:** `false`
+ - Set `convert: true` if you don't have the right format, check the format note below.
+
+{{< include file="content/docs/how-to/send-messages/media-voice-format.md" >}}
+
+Here's how you can call it from various languages:
+{{< include file="content/docs/how-to/send-messages/api-sendVoice-code.md" >}}
+
+### Media - Convert Voice
+
+{{< include file="content/docs/how-to/send-messages/media-voice-convert.md" >}}
+
+## Send Video
+
+```http request
+POST /api/sendVideo
+```
+
+Use API to send a video to a chat.
+
+You can send video messages in two ways:
+
+1. Provide a **URL** for the file and the API will download and send it in the request body.
+2. Provide the file as a **BASE64** string in the request body.
+
+{{< tabs "send-video-body" >}}
+{{< tab "URL" >}}
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@c.us",
+ "caption": "Watch this video!",
+ "asNote": false,
+ // aka video note, rounded video
+ "file": {
+ "mimetype": "video/mp4",
+ "filename": "video.mp4",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
+ },
+ "convert": false
+}
+```
+
+{{< /tab >}}
+
+{{< tab "BASE64" >}}
+
+```json { title="Body" }
+{
+ "chatId": "11111111111@c.us",
+ "caption": "Watch this video!",
+ "asNote": false,
+ // aka video note, rounded video
+ "file": {
+ "mimetype": "video/mp4",
+ "filename": "video.mp4",
+ "data": "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAciEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAgAaq3yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAgAaq7yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAgAaq/yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAjIetKI9/zIAAAAwAAAwAAAwAAAwAVW8H+swAAAwAAAwAAEvcAAAAgAatHyV8AAAMAAAMAAAMAAAMAKY8KAAADAAADAAAIOyAAAAAgAatLyV8AAAMAAAMAAAMAAAMAKY8KAAADAAADAAAIOyAAAAAhAatPyJf/AAADAAADAAADAAADAByn5+AAAAMAAAMABN2QAAAAIiHtiiNf5EAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMCgiAAAAAhAavXyLf/AAADAAADAAADAAADAAADAAADAAADAAADAO6YAAAAIQGr28i3/wAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwDumAAAACEBq9/It/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMA7pgAAAAiIe/aIt+HAAADAAADAAADAAADAAADAAADAAADAAADAAmagAAAACEBrGfIl/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMBF3AAAAAhAaxryJf/AAADAAADAAADAAADAAADAAADAAADAAADARdwIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfSEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkAAAAhAaxvyJf/AAADAAADAAADAAADAAADAAADAAADAAADARdwAAAAIQGsc8iX/wAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwEXcAAAAAEKIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI="
+ },
+ "session": "default",
+ "convert": false
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+**Fields**:
+
+- `file` - provide **one of** the fields:
+ - `url` - URL to the file
+ - `data` - Base 64 encoded binary content of the file
+- `convert: false` - convert the file to the right format. **Default:** `false`
+ - Set `convert: true` if you don't have the right format, check the format note below.
+
+{{< include file="content/docs/how-to/send-messages/media-video-format.md" >}}
+
+Here's how you can call it from various languages:
+{{< include file="content/docs/how-to/send-messages/api-sendVideo-code.md" >}}
+
+### Media - Convert Video
+
+{{< include file="content/docs/how-to/send-messages/media-video-convert.md" >}}
+
+## Send File
+
+Use API to send a file (as a document/attachment) to a chat.
+
+```http request
+POST /api/sendFile
+```
+
+You can send files in two ways:
+
+1. Provide a **URL** for the file.
+2. Encode the whole file content into **BASE64** and send it in the request body.
+
+{{< tabs "send-file-body" >}}
+{{< tab "URL" >}}
+
+```json { title="Body" }
+{
+ "session": "default",
+ "caption": "Check this out!",
+ "chatId": "11111111111@c.us",
+ "file": {
+ "mimetype": "image/jpeg",
+ "filename": "filename.jpeg",
+ "url": "https://raw.githubusercontent.com/devlikeapro/waha/core/examples/video.mp4"
+ }
+}
+```
+
+{{< /tab >}}
+
+{{< tab "BASE64" >}}
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "11111111111@c.us",
+ "file": {
+ "mimetype": "image/jpeg",
+ "filename": "filename.jpeg",
+ "data": "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"
+ },
+ "caption": "string"
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+Here's how you can call it from various languages:
+{{< include file="content/docs/how-to/send-messages/api-sendFile-code.md" >}}
+
+## Send Poll
+
+We have a dedicated page about [**📶 Polls**]({{< relref "/docs/how-to/polls" >}})!
+
+
+
+```http request
+POST /api/sendPoll
+```
+
+The request body is pretty simple:
+
+```json { title="Body" }
+{
+ "session": "default",
+ "chatId": "123123123@c.us",
+ "poll": {
+ "name": "How are you?",
+ "options": ["Awesome!", "Good!", "Not bad!"],
+ "multipleAnswers": false
+ }
+}
+```
+
+Here's how you can call it from various languages:
+{{< include file="content/docs/how-to/send-messages/api-sendPoll-code.md" >}}
+
+## Send Event
+
+You can send Event Message using API
+
+```http request
+POST /api/{SESSION}/events
+```
+
+{{< callout context="note" icon="outline/info-circle" >}}
+👉 Read more about how to send [**📅 Event Message**]({{< relref "/docs/how-to/event-message" >}}) and receive responses.
+{{< /callout >}}
+
+Here's how you can call it from various languages:
+{{< include file="content/docs/how-to/send-messages/api-sendEvent-code.md" >}}
+
+
-
-
-## Features
-Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
-
-{{< include file="content/docs/how-to/status/features.md" >}}
-
-## API
-
-{{< callout context="note" icon="outline/info-circle" title="About contacts field" >}}
-When you send status you can provide optional `contacts` field - list of contacts to send status to.
-
-- [**WEBJS**]({{< relref "/docs/how-to/engines#webjs" >}}) engine **doesn't suppport** `contacts` field. You can send status to all contacts (or configure white/black list in the app before).
-- [**NOWEB**]({{< relref "/docs/how-to/engines#noweb" >}}) engine **supports** `contacts` field, you must [**🏭 Enable NOWEB Store before using these endpoints**]({{< relref "/docs/engines/NOWEB#store" >}})
-- [**GOWS**]({{< relref "/docs/how-to/engines#gows" >}}) engine **supports** `contacts` field.
-
-You can fetch your contacts using [**👤 Contacts API**]({{< relref "/docs/how-to/contacts#get-all-contacts" >}}).
-
-```json { title="Body" }
-{
- "text": "Have a look! https://waha.devlike.pro/",
- "contacts": ["123123@c.us", "3333@c.us"],
- "backgroundColor": "#38b42f",
- "font": 1
-}
-```
-
-{{< /callout >}}
-
-
-### Send Text Status
-Send status to **all** your contacts:
-```http request
-POST /api/{session}/status/text
-```
-
-```json { title="Body" }
-{
- "text": "Have a look! https://waha.devlike.pro/",
- "backgroundColor": "#38b42f",
- "font": 1
-}
-```
-- `text` - text to send as status.
-- `font` - font type, experiment with values here to get different fonts.
-- `backgroundColor` - background color of the status.
-- `contacts` - array of contacts to send status to.
-
-Send status to specific contacts:
-```json { title="Body" }
-{
- "text": "Have a look! https://waha.devlike.pro/",
- "backgroundColor": "#38b42f",
- "font": 1,
- "contacts": [
- "55xxxxxxxxxxx@c.us",
- "55xxxxxxxxxxx@c.us"
- ]
-}
-```
-
-### Send Image Status
-```http request
-POST /api/{session}/status/image
-```
-
-{{< tabs "send-image-status-body" >}}
-{{< tab "URL" >}}
-```json { title="Body" }
-{
- "file": {
- "mimetype": "image/jpeg",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg"
- },
- "caption": "string"
-}
-```
-{{< /tab >}}
-
-{{< tab "BASE64" >}}
-
-```json { title="Body" }
-{
- "file": {
- "mimetype": "image/jpeg",
- "data": "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"
- },
- "caption": "string"
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-### Send Video Status
-```http request
-POST /api/{session}/status/video
-```
-
-{{< tabs "send-video-status-body" >}}
-{{< tab "URL" >}}
-```json { title="Body" }
-{
- "file": {
- "mimetype": "video/mp4",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
- },
- "backgroundColor": "#38b42f"
-}
-```
-{{< /tab >}}
-
-{{< tab "BASE64" >}}
-```json { title="Body" }
-{
- "file": {
- "mimetype": "video/mp4",
- "filename": "video.mp4",
- "data": "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAciEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAgAaq3yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAgAaq7yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAgAaq/yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAjIetKI9/zIAAAAwAAAwAAAwAAAwAVW8H+swAAAwAAAwAAEvcAAAAgAatHyV8AAAMAAAMAAAMAAAMAKY8KAAADAAADAAAIOyAAAAAgAatLyV8AAAMAAAMAAAMAAAMAKY8KAAADAAADAAAIOyAAAAAhAatPyJf/AAADAAADAAADAAADAByn5+AAAAMAAAMABN2QAAAAIiHtiiNf5EAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMCgiAAAAAhAavXyLf/AAADAAADAAADAAADAAADAAADAAADAAADAO6YAAAAIQGr28i3/wAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwDumAAAACEBq9/It/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMA7pgAAAAiIe/aIt+HAAADAAADAAADAAADAAADAAADAAADAAADAAmagAAAACEBrGfIl/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMBF3AAAAAhAaxryJf/AAADAAADAAADAAADAAADAAADAAADAAADARdwIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfSEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkAAAAhAaxvyJf/AAADAAADAAADAAADAAADAAADAAADAAADARdwAAAAIQGsc8iX/wAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwEXcAAAAAEKIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI="
- },
- "backgroundColor": "#38b42f"
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-**Fields**:
-- `file` - provide **one of** the fields:
- - `url` - URL to the file
- - `data` - Base 64 encoded binary content of the file
-- `convert: false` - convert the file to the right format. **Default:** `false`
- - Set `convert: true` if you don't have the right format, check the format note below.
-
-{{< include file="content/docs/how-to/send-messages/media-video-format.md" >}}
-
-#### Media - Convert Video
-
-{{< include file="content/docs/how-to/send-messages/media-video-convert.md" >}}
-
-### Send Voice Status
-
-```http request
-POST /api/{session}/status/voice
-```
-
-{{< tabs "send-voice-status-body" >}}
-{{< tab "URL" >}}
-```json { title="Body" }
-{
- "file": {
- "mimetype": "audio/ogg; codecs=opus",
- "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
- },
- "backgroundColor": "#38b42f",
- "convert": false
-}
-```
-{{< /tab >}}
-
-{{< tab "BASE64" >}}
-```json { title="Body" }
-{
- "file": {
- "mimetype": "audio/ogg; codecs=opus",
- "data": "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"
- },
- "backgroundColor": "#38b42f"
-}
-```
-{{< /tab >}}
-{{< /tabs >}}
-
-**Fields**:
-- `file` - provide **one of** the fields:
- - `url` - URL to the file
- - `data` - Base 64 encoded binary content of the file
-- `convert: false` - convert the file to the right format. **Default:** `false`
- - Set `convert: true` if you don't have the right format, check the format note below.
-
-{{< include file="content/docs/how-to/send-messages/media-voice-format.md" >}}
-
-#### Media - Convert Voice
-{{< include file="content/docs/how-to/send-messages/media-voice-convert.md" >}}
-
-### Delete Status
-Here's how you can delete status message you previously sent.
-
-```http request
-POST /api/{session}/status/delete
-```
-
-When you send status - you'll get the response like below, save `key.id` (it's message id).
-```json { title="Response" }
-{
- "key": {
- "remoteJid": "status@broadcast",
- "fromMe": true,
- "id": "AAAAAAAAAAAAAAAAAAAAAA" // <===== key.id
- },
- "message": {
- ...
- }
-}
-```
-
-```json { title="Body" }
-{
- "id": "AAAAAAAAAAAAAAAAAAAAAA"
-}
-```
-
-It removes status from all contacts in the list.
-
-### Get New Status Message ID
-Generates new message ID for status message.
-You can use it in
-[Send Status to 10K contacts](#send-status-to-10k-contacts-manually)
-flow for manually sending status messages to big amount of contacts.
-
-```http request
-GET /api/{session}/status/new-message-id
-```
-
-```json { title="Response" }
-{
- "id": "AAAAAAAAAAAAAAAAAAAAAA"
-}
-```
-
-After that you can set it when you send status messages:
-```json { title="Body" }
-
-{
- "id": "AAAAAAAAAAAAAAAAAAAAAA",
- "text": "Have a look! https://waha.devlike.pro/",
- "contacts": ["first-chunk-of-contacts-here"],
- ...
-}
-```
-
-## How-to
-### Get status messages
-
-You can use regular
-[`GET /api/{session}/chats/{chatId}/messages`]({{< relref "/docs/how-to/chats#get-messages-from-chat" >}})
-to fetch status messages. Set `chatId` to `status@broadcast` for that
-
-```http request
-GET /api/default/chats/status%40broadcast/messages?downloadMedia=true&limit=100
-```
-
-### Receive status messages
-
-If you wish to receive status messages in real-time - you can subscribe to the following
-[**🔄 Events**]({{< relref "/docs/how-to/events" >}})
-:
-
-- [`message`]({{< relref "/docs/how-to/receive-messages#message" >}}) event for a message (send by someone else)
-- [`message.any`]({{< relref "/docs/how-to/receive-messages#messageany" >}}) event for a message (including your messages)
-
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "payload": {
- "id": "false_status@broadcast_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA_123123@c.us",
- "timestamp": 1667561485,
- "body": "Check this out!",
- "hasMedia": true,
- "media": {
- "url": "http://localhost:3000/api/files/false_status@broadcast_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA_123123@c.us.jpg",
- "mimetype": "image/jpeg",
- "filename": null
- }
- }
-}
-```
-
-
-### Send Status to 10K Contacts Manually
-
-If you have a large contact list (e.g., **10,000 contacts or more**), different engines handle status messages differently.
-
-{{< callout context="note" icon="outline/info-circle" title="How Engines Send Status to Many Contacts" >}}
-
-- **WEBJS**: Handles the process internally, following the official WhatsApp Web behavior. It automatically chunks the contact list.
-- **NOWEB**: Splits the contact list into chunks of **5,000 contacts** and sends status messages sequentially.
- - When sending **image, voice, or video** status messages, **NOWEB re-uploads** the media for each chunk.
-- **GOWS**: Also splits the contact list into chunks of **5,000 contacts**, sending them sequentially.
- - For **image, voice, or video** status messages, **GOWS reuses** the uploaded media for each chunk (no re-uploads).
-
-Both **NOWEB** and **GOWS** use the same `message.id` for each chunk, allowing you to track "views" for status messages just like regular messages.
-
-{{< /callout >}}
-
-You might encounter errors when sending status messages to 10K contacts.
-
-If that happens, or if you'd like more control over the process, you can use the following manual flow to send the status message to your contacts in smaller chunks.
-
-
-#### 1. Generate a New Message ID
-
-First, generate a new message ID. You’ll use this ID for all status messages in this batch.
-
-```http request
-GET /api/{SESSION}/status/new-message-id
-```
-
-```json { title="Response" }
-{
- "id": "AAAAAAAAAAAAAAAAAAAAAA"
-}
-```
-
-
-#### 2. Get Your Own ID
-
-To view your own status message on your device, retrieve your user ID:
-
-```http request
-GET /api/{SESSION}/me
-```
-
-```json { title="Response" }
-{
- "id": "11111111111@c.us",
- ...
-}
-```
-
-
-#### 3. Get Your Contacts List
-
-You can either use your existing contact list from a CRM or database, or fetch all contacts from WhatsApp:
-
-```http request
-GET /api/contacts/all?session={NAME}
-```
-
-```json {title="Response"}
-[
- {
- "id": "88888888888@c.us",
- ...
- },
- {
- "id": "99999999999@c.us",
- ...
- }
-]
-```
-
-
-#### 4. Send the Status Message to Contacts
-
-Once you have your **Message ID**, **your own ID**, and the **contacts list**, you can start sending status messages in chunks.
-
-We recommend using smaller chunks (**256–512 contacts**) to make retries and error handling easier.
-
-If you set `contacts: null`, the system uses the default chunk size of **5,000 contacts**, which works well for most cases.
-
-{{< callout context="caution" icon="outline/alert-triangle" >}}
-- Always use the same **Message ID** for all chunks. This allows you to track views consistently across all recipients.
-- Include **your own ID** in the **first chunk**, so you can immediately view the status and receive the `message.ack` event.
- {{< /callout >}}
-
-```http request
-POST /api/{session}/status/text
-```
-
-```json { title="Body" }
-{
- "id": "AAAAAAAAA",
- "contacts": ["11111111111@c.us", "88888888888@c.us", "..."],
- "text": "Check this out!"
-}
-```
-
-Continue sending the status message to the next chunk until you’ve sent it to all contacts.
-
-If you encounter any errors, you can retry sending the message to the same chunk.
-
+---
+title: "🟢 Status"
+description: "Status (aka Stories)"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 232
+slug: status
+images: ["status.png"]
+---
+
+You can send statuses (aka stories) using HTTP API!
+
+
+
+## Features
+
+Here's the list of features that are available by [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}):
+
+{{< include file="content/docs/how-to/status/features.md" >}}
+
+## API
+
+{{< callout context="note" icon="outline/info-circle" title="About contacts field" >}}
+When you send status you can provide optional `contacts` field - list of contacts to send status to.
+
+- [**WEBJS**]({{< relref "/docs/how-to/engines#webjs" >}}) engine **doesn't suppport** `contacts` field. You can send status to all contacts (or configure white/black list in the app before).
+- [**NOWEB**]({{< relref "/docs/how-to/engines#noweb" >}}) engine **supports** `contacts` field, you must [**🏭 Enable NOWEB Store before using these endpoints**]({{< relref "/docs/engines/NOWEB#store" >}})
+- [**GOWS**]({{< relref "/docs/how-to/engines#gows" >}}) engine **supports** `contacts` field.
+
+You can fetch your contacts using [**👤 Contacts API**]({{< relref "/docs/how-to/contacts#get-all-contacts" >}}).
+
+```json { title="Body" }
+{
+ "text": "Have a look! https://waha.devlike.pro/",
+ "contacts": ["123123@c.us", "3333@c.us"],
+ "backgroundColor": "#38b42f",
+ "font": 1
+}
+```
+
+{{< /callout >}}
+
+### Send Text Status
+
+Send status to **all** your contacts:
+
+```http request
+POST /api/{session}/status/text
+```
+
+```json { title="Body" }
+{
+ "text": "Have a look! https://waha.devlike.pro/",
+ "backgroundColor": "#38b42f",
+ "font": 1
+}
+```
+
+- `text` - text to send as status.
+- `font` - font type, experiment with values here to get different fonts.
+- `backgroundColor` - background color of the status.
+- `contacts` - array of contacts to send status to.
+
+Send status to specific contacts:
+
+```json { title="Body" }
+{
+ "text": "Have a look! https://waha.devlike.pro/",
+ "backgroundColor": "#38b42f",
+ "font": 1,
+ "contacts": ["55xxxxxxxxxxx@c.us", "55xxxxxxxxxxx@c.us"]
+}
+```
+
+### Send Image Status
+
+```http request
+POST /api/{session}/status/image
+```
+
+{{< tabs "send-image-status-body" >}}
+{{< tab "URL" >}}
+
+```json { title="Body" }
+{
+ "file": {
+ "mimetype": "image/jpeg",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg"
+ },
+ "caption": "string"
+}
+```
+
+{{< /tab >}}
+
+{{< tab "BASE64" >}}
+
+```json { title="Body" }
+{
+ "file": {
+ "mimetype": "image/jpeg",
+ "data": "/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMABgQFBgUEBgYFBgcHBggKEAoKCQkKFA4PDBAXFBgYFxQWFhodJR8aGyMcFhYgLCAjJicpKikZHy0wLSgwJSgpKP/bAEMBBwcHCggKEwoKEygaFhooKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKP/AABEIADAAyAMBIgACEQEDEQH/xAAbAAABBQEBAAAAAAAAAAAAAAAAAwQFBgcCAf/EADwQAAEDBAECAwQGBwkBAAAAAAECAwQABQYRIRIxB0FRExQiYRUlcXOBkQgnMjNCdbEWJENSdJKhssHh/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AMg8UfEO755kUqVMlPJtocUIkILIbab3x8PYqI5JPO/lqqVuk90boFN0bpPdTrOLXR7DJGUobZ+iGJYhLWXR1h0gEDp76+Ic0ENujdJ7o3QKbo3Se6N0Etjh+v7f98mtT3WUY4fr+3/fJrU90Cm6N1INWOc7jj18Qlv6PZfEdaisdXWda+H05HNcSLNcY9njXV6KtFukrLbL5I6VqG9gc7/hPl5UDLdG6kLtZJ1qgWyZMS2li4tF6OUrCiUjXceXcVF7oFN0bpPdG6BTdG6T3RugU3Ruk90boFN0bpPdG6BTde7pLdG6C04Rl1wxe7sPx33DDKwJEYqJQ4jz48iB2NFVbdFBi26N0nuvCdgj1GqDX7PguKY/h1ryLxMuN0bVd0lyBa7WhPtlND/EWpXAB2DrjgjueBZr+jGW/wBGq7qw2Vc3rYu/NKUm5NpQ60vpRtJKeFDWjv5/Ko7x8t0y+454e5HZ4z8q0LsbUQrYbK0tOo7pVrseSPtSfSvHLLc7N+ipc0XaBIhOSb62+yiQgoUtspQArR50SD39KCFRh2IYjYbVO8SJ13Xc7qwJUe02kNpW0wf2VurXwCeeB6efOvL9hOKi1WLLLBdLk9hky4JgT0yEoEuAvudkDpV8PPb07740zxhyq8xoOO5HjmO2G8Y7PtrPTLkWpMpbLg3ttau6QPIHz6h5VlmXZhmN88PnY8/HbfbcZXLbUp2JbPdULe0ekA70o6Sd6B4FBB+LOHnBM3m2ZDrj8NKUPxX1626yobB44JB6gdelPPEPDYWH45ihekyV5DdYnv0uMrp9nHaV+7AGt9R89n+E1q2LY+14xYdgdwlLQZWOy/o28KWoAqhoHtEqO/klKftWr0rFvFfKzmef3e8pJ92dd9nFT5JYR8KBry2Bv7SaCHxw/X9v++TWqbrJ8cP1/b/vk1qm6DRref1GXb+cN/0RURdLMY3h5Y7x9Iznfe5LrXujjm2Gukq+JCfInXP2mpS3H9RV2/nDf/VFGQH9SuKf6+R/VygcZ5HfmYx4dxojS3pD0AobbQNqUo9GgBUBltkteNssW1ya7LyXQXLaYKSxFB7IJ1tS+3AP/m9GXl9uxPHsCenW1x/3i3Kacmtr05EaISFFseatlJ9dJNZxlWNKxK7Q5zbxuNllOJlRZwPX7wnqCiFHzXrv69/XQSM+z4riYjxcwk3WTeXWkvOQ7aEARUq5AWpXdWvIf/TH5bYIMK12y949MdmWW5BYaL6Ql1pxPdtYHG+D+R+03vxUv97t99FwtVmsVwsk9lt6NOdt4fUv4RsKWPP035EVTrjdciv8Ozw8gt8K12F2ehLbkaH7uOtXCiN9/hUTvWt0HKJXhnHbQ1IlZNKf6R1usNIShKtc6BAJG6a5xjjOPy4DlvmGba7jHTKiPKT0qKD5KHqNj86t2a3e/YrlDthw6ww4ENgISw6IHt3ZO0glXUQd8kj145pDxqXPVGw5V4HTcjbyZI6QnTm0dXA4HPkKDjKccwbD7yIt8u93lKW0lxMSGykuoBH7S16CdHyA54qCzjHINrttsvePTXJtiuSFFlbqdONrT3Qrt6H8iKmvHKBMXnftm4clTbkRhKVoZUQogHYBA5pLNWl2Lwoxyx3BJaub7709TCuFtNnqA6h5b6h/z6UC+RYdiuNuwXb5kj8aPJioeTGba9rJWo9yABpKO2iRyd1GWrG7FKYvF+kXSU1iMBxLbb/sv7xJWQNISkjg7Ou3mPmQ58bgn6fsqtDq+h443+KqVtDSr34KXCBbkKem225pmPMoG1ltSeFADv3P+00DeLYsYyqFP/sXJurN1hMmQYNySnb7Y7lCk+fbj5j13VDCtjYrRPBWM7CyCZf5ra2bXbYTyn33ElKdkD4dnueCdfKs4UvqUVa6eo716b8qDvdFJ7ooMW3Rurt4seHF5wDI5caZEeVay4oxJoQS263v4fi7BQHBB538tGqJ1UFzw/xKy7DobkTHL5IhxHFFRZ6UOICj3ISsEJP2U1vWeZPe7fKg3e+TZsSU+JLzby+oKcAAB7caAGgNDjtVW6qOqgtuI+IOVYe2tvHL5LhMrV1KZSQtsn16FAjfz1XmXeIGU5g2hvJL5LnMoV1pZUQlsK9ehICd8nnXnVT6qOqgnrFlV7sEK5Q7Nc5EONcW/ZS22lAB1OiNH8FKHHrUNukuqjqoJbHD9fQPvk1qnVWUY2fr6B98mtS3QP0XW4otq7Yia4m2OOB5cUAdKnBrSvXfA/Kh263F63sW56a4u3R1FbMYgdLajvZHnzs/nTHdG6B9LulwnR4sedNckR4iPZxm1gaZRx8I19g7+ldM3i6M2hdobnu/RCle09zUApCVb3tOxtPPPHz9aj90boJyw5bkmOslixXuRFjEkiOoJcbST30lQOvwpvesgvV/WF3+6yZ+t9KHCAhG+/SkaAqL3RugszOfZmxbU29nJJaYqU9CT0pLqU+gc11fjvdREy7XK4oit3Oe/MRFT7Nj2xBLaOON9z2HJphujdBq3iZ4gXmNl7pxHJvq5UZkaYKHmgvR6tbBAPbeqzKbMl3CW7Luct6bMe/ePPK6lK9B8h8hTRAShOkAJHoK63QP7jdbjdXW3btNcmOtNhptTgAKUDska8hs1zbLncLRORNs05+DMQOkOtHun/KodiPkaZbo3QTt/wAvyXI2UsX68vSoySFewSlLbaiOxUEgb/GobqpPdG6BTqoqyYFh9xy28x48aO6IQWDIklJCG0b5581EcACig//Z"
+ },
+ "caption": "string"
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+### Send Video Status
+
+```http request
+POST /api/{session}/status/video
+```
+
+{{< tabs "send-video-status-body" >}}
+{{< tab "URL" >}}
+
+```json { title="Body" }
+{
+ "file": {
+ "mimetype": "video/mp4",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
+ },
+ "backgroundColor": "#38b42f"
+}
+```
+
+{{< /tab >}}
+
+{{< tab "BASE64" >}}
+
+```json { title="Body" }
+{
+ "file": {
+ "mimetype": "video/mp4",
+ "filename": "video.mp4",
+ "data": "AAAAGGZ0eXBtcDQyAAAAAGlzb21tcDQyAAAHEW1vb3YAAABsbXZoZAAAAADgAUTa4AFE2gAAdTAAAHe6AAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAANzdHJhawAAAFx0a2hkAAAAA+ABRNrgAUTaAAAAAQAAAAAAAHVOAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAUAAAAC0AAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAB1TgAAA+kAAQAAAAAC621kaWEAAAAgbWRoZAAAAADgAUTa4AFE2gAAdTAAAHVOVcQAAAAAAF9oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAASVNPIE1lZGlhIGZpbGUgcHJvZHVjZWQgYnkgR29vZ2xlIEluYy4gQ3JlYXRlZCBvbjogMDIvMDIvMjAyMy4AAAACZG1pbmYAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAIkc3RibAAAAJhzdHNkAAAAAAAAAAEAAACIYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAUAAtAASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAADJhdmNDAWQAH//hABtnZAAfrNEAUAW7AWoCAgKAAAH0gAB1MAeMGIkBAARo648sAAAAGHN0dHMAAAAAAAAAAQAAAB4AAAPpAAAAKHN0c2MAAAAAAAAAAgAAAAEAAAAOAAAAAQAAAAMAAAACAAAAAQAAABxzdGNvAAAAAAAAAAMAAAcxAAAq7wAAS24AAACMc3RzegAAAAAAAAAAAAAAHgAAA0kAAAAyAAAAJQAAACYAAAAmAAAAKQAAACUAAAAlAAAAJQAAACkAAAAlAAAAJQAAACUAAAApAAAAJAAAACQAAAAkAAAAJwAAACQAAAAkAAAAJQAAACYAAAAlAAAAJQAAACUAAAAmAAAAJQAAACUAAAAlAAAAKgAAABRzdHNzAAAAAAAAAAEAAAABAAAAiGN0dHMAAAAAAAAADwAAAAEAAAPpAAAAAQAAD6QAAAADAAAAAAAAAAEAAA+kAAAAAwAAAAAAAAABAAAPpAAAAAMAAAAAAAAAAQAAD6QAAAADAAAAAAAAAAEAAA+kAAAAAwAAAAAAAAABAAAPpAAAAAMAAAAAAAAAAQAAE40AAAAEAAAAAAAAABR2bWhkAAAAAQAAAAAAAAAAAAACuHRyYWsAAABcdGtoZAAAAAPgAUTa4AFE2gAAAAIAAAAAAAB3ugAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAlRtZGlhAAAAIG1kaGQAAAAA4AFE2uABRNoAAKxEAACwABXHAAAAAABfaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAElTTyBNZWRpYSBmaWxlIHByb2R1Y2VkIGJ5IEdvb2dsZSBJbmMuIENyZWF0ZWQgb246IDAyLzAyLzIwMjMuAAAAAc1taW5mAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAABkXN0YmwAAABpc3RzZAAAAAAAAAABAAAAWW1wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAACsRAAAAAAANWVzZHMAAAAAAycAAgAEH0AVAAAAAAAAAAAAAAAFEBIQAAAAAAAAAAAAAAAAAAAGAQIAAAAYc3R0cwAAAAAAAAABAAAALAAABAAAAAAoc3RzYwAAAAAAAAACAAAAAQAAABUAAAABAAAAAwAAAAIAAAABAAAAHHN0Y28AAAAAAAAAAwAADHYAACz0AABLvQAAAMRzdHN6AAAAAAAAAAAAAAAsAAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAF0AAABcwAAAXQAAAFzAAABdAAAAXMAAAAQc21oZAAAAAAAAAAAAAAAcnVkdGEAAABqbWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAA9aWxzdAAAABlnc3N0AAAAEWRhdGEAAAABAAAAADAAAAAcZ3N0ZAAAABRkYXRhAAAAAQAAAAAxMDY4AABHe21kYXQAAANFJbhABd/+9Y2vmWVRi0/fwl7Vp8FFIlFodBXWJ7AAAAMAAAMAAAMAAAMCb3w7b+xvu484N6S/wPJaC8sMAAADApIAAAxYAAEIAAAaIAAD7AAAqQAAIeAABmgAAcgAAHOAACMgAAnwAAPEAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAAzkv4VetcGPbngLXvkqeR7JxISR12BgR++cnsBM31J1hURZirB4HGwWvpFdPC289mAkjXLCSyIdvFR3dv6aHr0B82L8J9Xog23WabSqb8cO+rmTPXAgY7aaIpgPquTfAAAJQGERBcipJr4m65wx3o3poM4QuaQq1SlHkzKL3Tov43kRfCoIa5GVUZ6CE6rriYcm72C827hp2mDdqNx6fHB1jsnRsQxit03/N5XMsHAWWiLnLJlru6Fjs4nF8PgsKqHV100N02/K4Lui85ShIhYz0cYsI7cmrr9AQCKLf3rbXvAOQEK9iZ3ELwGrUemoiVtzbbFzFplif1tWr4bGWSBRmylGBomUYqlh1w2hY5WSz2e+e7EcHvZ3AoMWZIUkvohRPbA016vF3x1mlXVR5P1rFnPwA9O12c73pWqAnTtHi4IAABARcfYC/FQsIkx5nfpXAi1MP7Uyt1kxrRbxQyilN42vcIBU33ywVC0b3cmIpGpnrZ4Z8LXriYPNJkqXUN5+h61ktEcZ1ymfgp77JtlJItHJN+fuhrxPY8HucNaFPQrChl1Ud+EN4SuQWg4TvEUl5O7cM275b8BOxJtWfRMVkuL/A93UIq3SWPbsd9Dd06g+obkwgq9up6u9YZkWczBlwDmK5gitbPbKN4o1ZI7AAAOLsX06bPLKB01V+iAw3xjzslG/7US1WFR/CRaZZ5EIoPL0xOxVV/wmQeGC5YwF7JNsJLtWzbrAJl/y1td4SJ5Tw1iu0O1RsxzaEkmLjU/lPicm/sSMjMcK1Tw4SwcuwXwlCRbCcqWoNDNOJZK3+YBqxBc8XHcOrAAAJCIWAAAvoK4AAQw+gAAefAAAB/vwAAQwIAADMiAAA+XoAAZvgAAOJsAAK8cAAKXMAAKNgAANGgAAVBAAACTAAAFAAADAC5AAAIMAAAaMVdIAAAALiHiTIXf/eEAAAMAAAMAAAMAAAMCGogH7ip1N+0CWY7DPZHZwAAAAwAAAwAEHaAAAAAhAakHyLf/AAADAAADAAADAAADABkThmAAAAMAAAMAAxaIAAAAIgGpC8jX/wAAAwAAAwAAAwAAAwAVSr7ewAAAAwAAAwAHXcAAAAAiAakPyNf/AAADAAADAAADAAADABVKvt7AAAADAAADAAddwAAAACUh5IohV//8hAAAAwAAAwAAAwAAAwAEcKP8u5AAAAMAAAMAAQdwAAAAIQGpl8i3/wAAAwAAAwAAAwAAAwAZE4ZgAAADAAADAAMWiAAAACEBqZvIt/8AAAMAAAMAAAMAAAMAGROGYAAAAwAAAwADFogAAAAhAamfyLf/AAADAAADAAADAAADABkThmAAAAMAAAMAAxaIAAAAJSHmyiE3//pYAAADAAADAAADAAADAAi4gzWuQAAAAwAAAwADMiAAAAAhAaonyJf/AAADAAADAAADAAADAByn5+AAAAMAAAMABN2QAAAAIQGqK8iX/wAAAwAAAwAAAwAAAwAcp+fgAAADAAADAATdkAAAACEBqi/Il/8AAAMAAAMAAAMAAAMAHKfn4AAAAwAAAwAE3ZAAAAAlIekKIRf/+lgAAAMAAAMAAAMAAAMACLPP13NAAAADAAADAAO6YCEABQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAciEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAgAaq3yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAgAaq7yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAgAaq/yd8AAAMAAAMAAAMAAAMAHrvIgAAAAwAAAwAFtJAAAAAjIetKI9/zIAAAAwAAAwAAAwAAAwAVW8H+swAAAwAAAwAAEvcAAAAgAatHyV8AAAMAAAMAAAMAAAMAKY8KAAADAAADAAAIOyAAAAAgAatLyV8AAAMAAAMAAAMAAAMAKY8KAAADAAADAAAIOyAAAAAhAatPyJf/AAADAAADAAADAAADAByn5+AAAAMAAAMABN2QAAAAIiHtiiNf5EAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMCgiAAAAAhAavXyLf/AAADAAADAAADAAADAAADAAADAAADAAADAO6YAAAAIQGr28i3/wAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwDumAAAACEBq9/It/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMA7pgAAAAiIe/aIt+HAAADAAADAAADAAADAAADAAADAAADAAADAAmagAAAACEBrGfIl/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMBF3AAAAAhAaxryJf/AAADAAADAAADAAADAAADAAADAAADAAADARdwIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4hEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfSEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcyEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwhEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3p4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHohEAUAoBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfiEQBQCgG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkAAAAhAaxvyJf/AAADAAADAAADAAADAAADAAADAAADAAADARdwAAAAIQGsc8iX/wAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwEXcAAAAAEKIRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6IRAFAKAb/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI="
+ },
+ "backgroundColor": "#38b42f"
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+**Fields**:
+
+- `file` - provide **one of** the fields:
+ - `url` - URL to the file
+ - `data` - Base 64 encoded binary content of the file
+- `convert: false` - convert the file to the right format. **Default:** `false`
+ - Set `convert: true` if you don't have the right format, check the format note below.
+
+{{< include file="content/docs/how-to/send-messages/media-video-format.md" >}}
+
+#### Media - Convert Video
+
+{{< include file="content/docs/how-to/send-messages/media-video-convert.md" >}}
+
+### Send Voice Status
+
+```http request
+POST /api/{session}/status/voice
+```
+
+{{< tabs "send-voice-status-body" >}}
+{{< tab "URL" >}}
+
+```json { title="Body" }
+{
+ "file": {
+ "mimetype": "audio/ogg; codecs=opus",
+ "url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus"
+ },
+ "backgroundColor": "#38b42f",
+ "convert": false
+}
+```
+
+{{< /tab >}}
+
+{{< tab "BASE64" >}}
+
+```json { title="Body" }
+{
+ "file": {
+ "mimetype": "audio/ogg; codecs=opus",
+ "data": "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"
+ },
+ "backgroundColor": "#38b42f"
+}
+```
+
+{{< /tab >}}
+{{< /tabs >}}
+
+**Fields**:
+
+- `file` - provide **one of** the fields:
+ - `url` - URL to the file
+ - `data` - Base 64 encoded binary content of the file
+- `convert: false` - convert the file to the right format. **Default:** `false`
+ - Set `convert: true` if you don't have the right format, check the format note below.
+
+{{< include file="content/docs/how-to/send-messages/media-voice-format.md" >}}
+
+#### Media - Convert Voice
+
+{{< include file="content/docs/how-to/send-messages/media-voice-convert.md" >}}
+
+### Delete Status
+
+Here's how you can delete status message you previously sent.
+
+```http request
+POST /api/{session}/status/delete
+```
+
+When you send status - you'll get the response like below, save `key.id` (it's message id).
+
+```json { title="Response" }
+{
+ "key": {
+ "remoteJid": "status@broadcast",
+ "fromMe": true,
+ "id": "AAAAAAAAAAAAAAAAAAAAAA" // <===== key.id
+ },
+ "message": {
+ ...
+ }
+}
+```
+
+```json { title="Body" }
+{
+ "id": "AAAAAAAAAAAAAAAAAAAAAA"
+}
+```
+
+It removes status from all contacts in the list.
+
+### Get New Status Message ID
+
+Generates new message ID for status message.
+You can use it in
+[Send Status to 10K contacts](#send-status-to-10k-contacts-manually)
+flow for manually sending status messages to big amount of contacts.
+
+```http request
+GET /api/{session}/status/new-message-id
+```
+
+```json { title="Response" }
+{
+ "id": "AAAAAAAAAAAAAAAAAAAAAA"
+}
+```
+
+After that you can set it when you send status messages:
+
+```json { title="Body" }
+
+{
+ "id": "AAAAAAAAAAAAAAAAAAAAAA",
+ "text": "Have a look! https://waha.devlike.pro/",
+ "contacts": ["first-chunk-of-contacts-here"],
+ ...
+}
+```
+
+## How-to
+
+### Get status messages
+
+You can use regular
+[`GET /api/{session}/chats/{chatId}/messages`]({{< relref "/docs/how-to/chats#get-messages-from-chat" >}})
+to fetch status messages. Set `chatId` to `status@broadcast` for that
+
+```http request
+GET /api/default/chats/status%40broadcast/messages?downloadMedia=true&limit=100
+```
+
+### Receive status messages
+
+If you wish to receive status messages in real-time - you can subscribe to the following
+[**🔄 Events**]({{< relref "/docs/how-to/events" >}})
+:
+
+- [`message`]({{< relref "/docs/how-to/receive-messages#message" >}}) event for a message (send by someone else)
+- [`message.any`]({{< relref "/docs/how-to/receive-messages#messageany" >}}) event for a message (including your messages)
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "payload": {
+ "id": "false_status@broadcast_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA_123123@c.us",
+ "timestamp": 1667561485,
+ "body": "Check this out!",
+ "hasMedia": true,
+ "media": {
+ "url": "http://localhost:3000/api/files/false_status@broadcast_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA_123123@c.us.jpg",
+ "mimetype": "image/jpeg",
+ "filename": null
+ }
+ }
+}
+```
+
+### Send Status to 10K Contacts Manually
+
+If you have a large contact list (e.g., **10,000 contacts or more**), different engines handle status messages differently.
+
+{{< callout context="note" icon="outline/info-circle" title="How Engines Send Status to Many Contacts" >}}
+
+- **WEBJS**: Handles the process internally, following the official WhatsApp Web behavior. It automatically chunks the contact list.
+- **NOWEB**: Splits the contact list into chunks of **5,000 contacts** and sends status messages sequentially.
+ - When sending **image, voice, or video** status messages, **NOWEB re-uploads** the media for each chunk.
+- **GOWS**: Also splits the contact list into chunks of **5,000 contacts**, sending them sequentially.
+ - For **image, voice, or video** status messages, **GOWS reuses** the uploaded media for each chunk (no re-uploads).
+
+Both **NOWEB** and **GOWS** use the same `message.id` for each chunk, allowing you to track "views" for status messages just like regular messages.
+
+{{< /callout >}}
+
+You might encounter errors when sending status messages to 10K contacts.
+
+If that happens, or if you'd like more control over the process, you can use the following manual flow to send the status message to your contacts in smaller chunks.
+
+#### 1. Generate a New Message ID
+
+First, generate a new message ID. You’ll use this ID for all status messages in this batch.
+
+```http request
+GET /api/{SESSION}/status/new-message-id
+```
+
+```json { title="Response" }
+{
+ "id": "AAAAAAAAAAAAAAAAAAAAAA"
+}
+```
+
+#### 2. Get Your Own ID
+
+To view your own status message on your device, retrieve your user ID:
+
+```http request
+GET /api/{SESSION}/me
+```
+
+```json { title="Response" }
+{
+ "id": "11111111111@c.us",
+ ...
+}
+```
+
+#### 3. Get Your Contacts List
+
+You can either use your existing contact list from a CRM or database, or fetch all contacts from WhatsApp:
+
+```http request
+GET /api/contacts/all?session={NAME}
+```
+
+```json {title="Response"}
+[
+ {
+ "id": "88888888888@c.us",
+ ...
+ },
+ {
+ "id": "99999999999@c.us",
+ ...
+ }
+]
+```
+
+#### 4. Send the Status Message to Contacts
+
+Once you have your **Message ID**, **your own ID**, and the **contacts list**, you can start sending status messages in chunks.
+
+We recommend using smaller chunks (**256–512 contacts**) to make retries and error handling easier.
+
+If you set `contacts: null`, the system uses the default chunk size of **5,000 contacts**, which works well for most cases.
+
+{{< callout context="caution" icon="outline/alert-triangle" >}}
+
+- Always use the same **Message ID** for all chunks. This allows you to track views consistently across all recipients.
+- Include **your own ID** in the **first chunk**, so you can immediately view the status and receive the `message.ack` event.
+ {{< /callout >}}
+
+```http request
+POST /api/{session}/status/text
+```
+
+```json { title="Body" }
+{
+ "id": "AAAAAAAAA",
+ "contacts": ["11111111111@c.us", "88888888888@c.us", "..."],
+ "text": "Check this out!"
+}
+```
+
+Continue sending the status message to the next chunk until you’ve sent it to all contacts.
+
+If you encounter any errors, you can retry sending the message to the same chunk.
diff --git a/content/docs/how-to/storages/docker-compose.md b/content/docs/how-to/storages/docker-compose.md
index 249482855..2c3aeb0e0 100644
--- a/content/docs/how-to/storages/docker-compose.md
+++ b/content/docs/how-to/storages/docker-compose.md
@@ -1,10 +1,9 @@
-[//]: # ()
-{{< callout context="tip" icon="outline/info-circle" >}}
-You can find complete
-
-docker-compose.yaml
-
-with all storages and other configurations and use it as the starting point for your project.
-{{< /callout >}}
-
-
+[//]: #
+
+{{< callout context="tip" icon="outline/info-circle" >}}
+You can find complete
+
+docker-compose.yaml
+
+with all storages and other configurations and use it as the starting point for your project.
+{{< /callout >}}
diff --git a/content/docs/how-to/storages/features.md b/content/docs/how-to/storages/features.md
index 3cddf1043..b0b83297d 100644
--- a/content/docs/how-to/storages/features.md
+++ b/content/docs/how-to/storages/features.md
@@ -1,14 +1,14 @@
-| Storage | WEBJS | NOWEB | GOWS |
-|-----------------------------------|:-----:|:-----:|:----:|
-| **Local** - **🖥️ Session** | ✔️ | ✔️ | ✔️ |
-| **Local** - **🖼️ Media** | ✔️ | ✔️ | ✔️ |
-| **PostgresSQL** - **🖥️ Session** | ➕ | ➕ | ➕ |
-| **PostgresSQL** - **🖼️ Media** | ➕ | ➕ | ➕ |
-| **S3** - **🖼️ Media** | ➕ | ➕ | ➕ |
-| ~~MongoDB - 🖥️ Session~~ | ➕ | ➕ | ❌ |
-
-- **PostgreSQL**, **S3** and **MongoDB** storages are available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
-- **MongoDB is deprecated** and no new features will be added to it.
-- Any **S3 Compatible** storage can be used, such as AWS S3, MinIO, DigitalOcean Spaces, etc. For in-house solutions, you can use [**MinIO**](https://min.io/).
-
----
+| Storage | WEBJS | NOWEB | GOWS |
+| -------------------------------- | :---: | :---: | :--: |
+| **Local** - **🖥️ Session** | ✔️ | ✔️ | ✔️ |
+| **Local** - **🖼️ Media** | ✔️ | ✔️ | ✔️ |
+| **PostgresSQL** - **🖥️ Session** | ➕ | ➕ | ➕ |
+| **PostgresSQL** - **🖼️ Media** | ➕ | ➕ | ➕ |
+| **S3** - **🖼️ Media** | ➕ | ➕ | ➕ |
+| ~~MongoDB - 🖥️ Session~~ | ➕ | ➕ | ❌ |
+
+- **PostgreSQL**, **S3** and **MongoDB** storages are available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
+- **MongoDB is deprecated** and no new features will be added to it.
+- Any **S3 Compatible** storage can be used, such as AWS S3, MinIO, DigitalOcean Spaces, etc. For in-house solutions, you can use [**MinIO**](https://min.io/).
+
+---
diff --git a/content/docs/how-to/storages/index.md b/content/docs/how-to/storages/index.md
index 18c57286b..7c7d5f948 100644
--- a/content/docs/how-to/storages/index.md
+++ b/content/docs/how-to/storages/index.md
@@ -1,387 +1,415 @@
----
-title: "🗄️ Storages"
-description: "Storages - where to save authentication and media files"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 700
-images: ["waha-storages.drawio.png"]
-slug: storages
----
-
-WAHA uses several **Storage** types. Below you can find a list of these storage options and how to configure them.
-
-1. [**🖥️ Session Storage**](#sessions) - store **the session data** (such as authentication information, configuration, and other data that is required to keep the session alive and connected to WhatsApp)
-2. [**🖼️ Media Storage**](#media) - store **the media files** (such as images, videos, and other files that are received from the WhatsApp instance)
-
-{{< imgo src="/images/waha/storages/waha-storages.drawio.png" >}}
-
-{{< include file="content/docs/how-to/storages/features.md" >}}
-
-{{< include file="content/docs/how-to/storages/docker-compose.md" >}}
-
-## Sessions Storage
-**🖥️ Session Storage** is used to store **session data**,
-such as authentication information, configuration,
-and other data that is required to keep the session alive and connected to WhatsApp.
-
-If you want to save your session and avoid scanning the QR code every time you launch WAHA,
-you **MUST** connect the session storage to the container.
-
-For the session storage, you can use the following options:
-1. [**Local**](#sessions---local) - the default option, stores the session data in the local storage using files.
-2. [**PostgreSQL**](#sessions---postgresql) - stores the session data in the PostgreSQL database.
-3. [**MongoDB**](#sessions---mongodb) - stores the session data in the MongoDB database.
-
-{{< include file="content/docs/how-to/storages/docker-compose.md" >}}
-
-### Sessions - Local
-By default, the WAHA uses the **local storage (files)** to store the session data.
-
-{{< callout context="note" icon="outline/info-circle" >}}
-It's a **well-tested solution** even for **production** with multiple sessions
-{{< /callout >}}
-
-#### Quick Start
-To use local storage with session persistence, you need to mount a volume to the `/app/.sessions` directory. Here are the common ways to do this:
-
-1. **Using Docker Run** (recommended for development):
-```bash
-docker run -v `pwd`/.sessions:/app/.sessions -p 3000:3000 devlikeapro/waha-plus
-```
-
-2. **Using Docker Compose** (recommended for production):
-```yaml
-services:
- waha:
- image: devlikeapro/waha-plus
- volumes:
- - ./.sessions:/app/.sessions
- ports:
- - "127.0.0.1:3000:3000"
-```
-
-3. **Using Custom Directory** (if you need a specific location):
-```bash
-docker run -v /custom/path/to/sessions:/app/.sessions -p 3000:3000 devlikeapro/waha-plus
-```
-
-#### Configuration Options
-- `WAHA_LOCAL_STORE_BASE_DIR=/app/.sessions` - Override the base directory for local storage
- - Useful for handling Azure "dot" restrictions {{< issue 597 >}}
- - Default: `/app/.sessions`
-
-#### Directory Structure
-The session data is organized in the following structure:
-```sh
-sessions/
-├── webjs/ # Engine-specific directory
-│ ├── default/ # Session directory
-│ │ └── ... # Session files
-│ └── another-session/ # Another session
-│ └── ... # Session files
-│
-└── noweb/ # Another engine
- └── default/
- └── ...
-```
-
-#### Health Check
-[**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) provides [health check endpoints]({{< relref "/docs/how-to/observability" >}}).
-
-### Sessions - PostgreSQL
-If you want to use the PostgreSQL to store the session data, you need to set `WHATSAPP_SESSIONS_POSTGRESQL_URL` environment variable
-
-**Using Docker Run**
-```sh
-docker run \
- -e WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable \
- -p 3000:3000 \
- devlikeapro/waha-plus
-```
-
-**Using Docker Compose**
-```yaml { title="docker-compose.yaml" }
-services:
- waha:
- image: devlikeapro/waha-plus
- ports:
- - "127.0.0.1:3000:3000"
- environment:
- - WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
- depends_on:
- - postgres
-
- postgres:
- image: postgres:17
- environment:
- - POSTGRES_USER=postgres
- - POSTGRES_PASSWORD=postgres
- - POSTGRES_DB=postgres
- volumes:
- - postgres_data:/var/lib/postgresql/data
- command:
- - postgres
- - "-c"
- - "max_connections=3000"
-
-volumes:
- postgres_data:
-```
-
-{{< details "❓ I want to run >100 sessions on PostgreSQL | pg sorry, too many clients already" >}}
-If you see the error:
-> pg sorry, too many clients already
-
-Make sure to increase the `max_connections` in the `postgresql.conf` file or start it with the flag:
-```bash
-postgres -c max_connections=3000
-```
-{{< /details >}}
-
-{{< callout title="WAHA uses Multiple Databases schema" context="note" icon="outline/database" >}}
-👉 Read how WAHA uses databases in the [**Database Schema**](#database-schema) section.
-{{< /callout >}}
-
-### Sessions - MongoDB
-{{< callout context="danger" title="Deprecated" icon="outline/alert-square-rounded" >}}
-**MongoDB** storage is **deprecated** and no new features will be added to it.
-
-👉 Use [**PostgresSQL**](#sessions---postgresql)
-instead for new installations.
-{{< /callout >}}
-
-If you want to use the MongoDB to store the session data, you need to:
-1. Start the MongoDB server (using docker or any other way). You can either start your own MongoDB server or use the one of cloud providers, like [MongoDB Atlas](https://www.mongodb.com/atlas/database).
-2. Set `WHATSAPP_SESSIONS_MONGO_URL=mongodb://user:password@host:port/` environment variable to connect to the MongoDB server.
-
-**We recommend using your own MongoDB server as close as possible to the WAHA server** for the best performance and security reasons.
-
-{{< callout title="WAHA uses Multiple Databases schema" context="note" icon="outline/database" >}}
-👉 Read how WAHA uses databases in the [**Database Schema**](#database-schema) section.
-{{< /callout >}}
-
-First, you need to start MongoDB server:
-```bash
-docker run -d -p 27017:27017 --name mongodb -v mongo-data:/data/db mongo
-```
-
-Then, you need to run the WAHA with the `WHATSAPP_SESSIONS_MONGO_URL` environment variable (please note using `--network host` option as well)
-```bash
-docker run -e WHATSAPP_SESSIONS_MONGO_URL=mongodb://localhost:27017/ --network host devlikeapro/waha-plus
-```
-
-That's all you need to do to use MongoDB storage.
-All session authentication data will be automatically stored in the MongoDB database.
-
-For managing and troubleshooting MongoDB, we recommend using [MongoDB Compass](https://www.mongodb.com/products/tools/compass).
-
-
-
-#### Health Check
-[**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) provides [health check endpoints]({{< relref "/docs/how-to/observability" >}}).
-
-## Media Storage
-When your WhatsApp instance receives **media files**, it stores them in the **🖼️ Media Storage**.
-
-You can use the following options to store the media files:
-1. [**Local**](#media---local) - stores the media files in the local storage using files.
-2. [**PostgreSQL**](#media---postgresql) - stores the media files in the PostgreSQL database.
-3. [**S3**](#media---s3) - stores the media files in the S3 storage.
-
-### Media - Local
-By default, WAHA stores media files in local storage with a **180-second lifetime**.
-
-To persist media files:
-
-```bash
-docker run -v /path/to/on/host/.media:/app/.media \
- -e WHATSAPP_FILES_FOLDER=/app/.media \
- -e WHATSAPP_FILES_LIFETIME=0 \
- -p 3000:3000 \
- devlikeapro/waha-plus
-```
-
-```yaml
-services:
- waha:
- image: devlikeapro/waha-plus
- volumes:
- - ./.media:/app/.media
- environment:
- - WHATSAPP_FILES_FOLDER=/app/.media
- - WHATSAPP_FILES_LIFETIME=0
- ports:
- - "127.0.0.1:3000:3000"
-```
-
-### Media - PostgreSQL
-You can store media files in PostgreSQL.
-
-It'll create additional `media` table in **each database for session**.
-
-{{< callout title="WAHA uses Multiple Databases schema" context="note" icon="outline/database" >}}
-👉 Read how WAHA uses databases in the [**Database Schema**](#database-schema) section.
-{{< /callout >}}
-
-```bash
-docker run \
- -e WAHA_MEDIA_STORAGE=POSTGRESQL \
- -e WAHA_MEDIA_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable \
- -p 3000:3000 \
- devlikeapro/waha-plus
-```
-
-```yaml
-services:
- waha:
- image: devlikeapro/waha-plus
- environment:
- - WAHA_MEDIA_STORAGE=POSTGRESQL
- - WAHA_MEDIA_POSTGRESQL_URL=postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
- ports:
- - "127.0.0.1:3000:3000"
- depends_on:
- - postgres
-
- postgres:
- image: postgres:17
- environment:
- - POSTGRES_USER=postgres
- - POSTGRES_PASSWORD=postgres
- - POSTGRES_DB=postgres
- volumes:
- - postgres_data:/var/lib/postgresql/data
-
-volumes:
- postgres_data:
-```
-
-### Media - S3
-To store media files in S3-compatible storage:
-
-```bash
-docker run \
- -e WAHA_MEDIA_STORAGE=S3 \
- -e WAHA_S3_REGION=eu-west-1 \
- -e WAHA_S3_BUCKET=waha \
- -e WAHA_S3_ACCESS_KEY_ID=minioadmin \
- -e WAHA_S3_SECRET_ACCESS_KEY=minioadmin \
- -e WAHA_S3_ENDPOINT=http://127.0.0.1:9000 \
- -e WAHA_S3_FORCE_PATH_STYLE=True \
- -e WAHA_S3_PROXY_FILES=False \
- -p 3000:3000 \
- devlikeapro/waha-plus
-```
-
-```yaml
-services:
- waha:
- image: devlikeapro/waha-plus
- environment:
- - WAHA_MEDIA_STORAGE=S3
- - WAHA_S3_REGION=eu-west-1
- - WAHA_S3_BUCKET=waha
- - WAHA_S3_ACCESS_KEY_ID=minioadmin
- - WAHA_S3_SECRET_ACCESS_KEY=minioadmin
- - WAHA_S3_ENDPOINT=http://minio:9000
- - WAHA_S3_FORCE_PATH_STYLE=True
- - WAHA_S3_PROXY_FILES=False
- ports:
- - "127.0.0.1:3000:3000"
- depends_on:
- - minio
-
- minio:
- image: minio/minio
- environment:
- - MINIO_ROOT_USER=minioadmin
- - MINIO_ROOT_PASSWORD=minioadmin
- command: server /data --console-address ":9001"
- volumes:
- - minio_data:/data
- ports:
- - "9000:9000"
- - "9001:9001"
-
-volumes:
- minio_data:
-```
-
-**S3 metadata** for each file:
-- `X-Amz-Meta-Waha-Session=default` - session name
-- `X-Amz-Meta-Waha-Message-Id=true_111...` - message ID
-- `X-Amz-Meta-Waha-Media-File-Name=media.jpg` - media file name
-
-## FAQ
-### Database Schema
-{{< callout context="caution" icon="outline/database" >}}
-When using **PostgreSQL** or **MongoDB** storage,
-WAHA creates **multiple databases** using the credentials provided in the connection URL:
-
-1. `waha_{engine}` - A **single database** with
- - session configuration
- - common parameters that persist until you remove a session
-2. `waha_{engine}_{sessionname}` - A **separate database** for **each session** that contains:
- - Credentials
- - Messages
- - Contacts
- - Other session-specific data
-{{< /callout >}}
-
-{{< callout context="note" title="Database Schemas" icon="outline/database" >}}
- 
-{{< /callout >}}
-
-This approach provides **several benefits**:
-1. Easy monitoring of storage usage per session
-2. Better stability when running multiple sessions
-3. Isolation between sessions - if one session's database has issues, it won't affect other sessions
-4. Clear separation of concerns between session configuration and session data
-
-{{< callout context="danger" title="User Permissions" icon="outline/user" >}}
-Make sure that the user that connects to the database has **create/drop** permissions on the databases.
-{{< /callout >}}
-
-### Multiple Workers - Single Database Server
-{{< callout context="warning" icon="outline/alert-triangle" >}}
-When running **multiple WAHA workers** with **the same database**, you **MUST** set a unique `WAHA_WORKER_ID` for each worker to prevent conflicts and ensure proper operation.
-{{< /callout >}}
-
-Example configuration for multiple workers:
-
-```yaml
-services:
- waha-worker-1:
- image: devlikeapro/waha-plus
- environment:
- - WAHA_WORKER_ID=worker-1
- - WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
- ports:
- - "127.0.0.1:3000:3000"
- depends_on:
- - postgres
-
- waha-worker-2:
- image: devlikeapro/waha-plus
- environment:
- - WAHA_WORKER_ID=worker-2
- - WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
- ports:
- - "127.0.0.1:3001:3000"
- depends_on:
- - postgres
-
- postgres:
- image: postgres:17
- environment:
- - POSTGRES_USER=postgres
- - POSTGRES_PASSWORD=postgres
- - POSTGRES_DB=postgres
- volumes:
- - postgres_data:/var/lib/postgresql/data
-
-volumes:
- postgres_data:
-```
+---
+title: "🗄️ Storages"
+description: "Storages - where to save authentication and media files"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 700
+images: ["waha-storages.drawio.png"]
+slug: storages
+---
+
+WAHA uses several **Storage** types. Below you can find a list of these storage options and how to configure them.
+
+1. [**🖥️ Session Storage**](#sessions) - store **the session data** (such as authentication information, configuration, and other data that is required to keep the session alive and connected to WhatsApp)
+2. [**🖼️ Media Storage**](#media) - store **the media files** (such as images, videos, and other files that are received from the WhatsApp instance)
+
+{{< imgo src="/images/waha/storages/waha-storages.drawio.png" >}}
+
+{{< include file="content/docs/how-to/storages/features.md" >}}
+
+{{< include file="content/docs/how-to/storages/docker-compose.md" >}}
+
+## Sessions Storage
+
+**🖥️ Session Storage** is used to store **session data**,
+such as authentication information, configuration,
+and other data that is required to keep the session alive and connected to WhatsApp.
+
+If you want to save your session and avoid scanning the QR code every time you launch WAHA,
+you **MUST** connect the session storage to the container.
+
+For the session storage, you can use the following options:
+
+1. [**Local**](#sessions---local) - the default option, stores the session data in the local storage using files.
+2. [**PostgreSQL**](#sessions---postgresql) - stores the session data in the PostgreSQL database.
+3. [**MongoDB**](#sessions---mongodb) - stores the session data in the MongoDB database.
+
+{{< include file="content/docs/how-to/storages/docker-compose.md" >}}
+
+### Sessions - Local
+
+By default, the WAHA uses the **local storage (files)** to store the session data.
+
+{{< callout context="note" icon="outline/info-circle" >}}
+It's a **well-tested solution** even for **production** with multiple sessions
+{{< /callout >}}
+
+#### Quick Start
+
+To use local storage with session persistence, you need to mount a volume to the `/app/.sessions` directory. Here are the common ways to do this:
+
+1. **Using Docker Run** (recommended for development):
+
+```bash
+docker run -v `pwd`/.sessions:/app/.sessions -p 3000:3000 devlikeapro/waha-plus
+```
+
+2. **Using Docker Compose** (recommended for production):
+
+```yaml
+services:
+ waha:
+ image: devlikeapro/waha-plus
+ volumes:
+ - ./.sessions:/app/.sessions
+ ports:
+ - "127.0.0.1:3000:3000"
+```
+
+3. **Using Custom Directory** (if you need a specific location):
+
+```bash
+docker run -v /custom/path/to/sessions:/app/.sessions -p 3000:3000 devlikeapro/waha-plus
+```
+
+#### Configuration Options
+
+- `WAHA_LOCAL_STORE_BASE_DIR=/app/.sessions` - Override the base directory for local storage
+ - Useful for handling Azure "dot" restrictions {{< issue 597 >}}
+ - Default: `/app/.sessions`
+
+#### Directory Structure
+
+The session data is organized in the following structure:
+
+```sh
+sessions/
+├── webjs/ # Engine-specific directory
+│ ├── default/ # Session directory
+│ │ └── ... # Session files
+│ └── another-session/ # Another session
+│ └── ... # Session files
+│
+└── noweb/ # Another engine
+ └── default/
+ └── ...
+```
+
+#### Health Check
+
+[**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) provides [health check endpoints]({{< relref "/docs/how-to/observability" >}}).
+
+### Sessions - PostgreSQL
+
+If you want to use the PostgreSQL to store the session data, you need to set `WHATSAPP_SESSIONS_POSTGRESQL_URL` environment variable
+
+**Using Docker Run**
+
+```sh
+docker run \
+ -e WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable \
+ -p 3000:3000 \
+ devlikeapro/waha-plus
+```
+
+**Using Docker Compose**
+
+```yaml { title="docker-compose.yaml" }
+services:
+ waha:
+ image: devlikeapro/waha-plus
+ ports:
+ - "127.0.0.1:3000:3000"
+ environment:
+ - WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
+ depends_on:
+ - postgres
+
+ postgres:
+ image: postgres:17
+ environment:
+ - POSTGRES_USER=postgres
+ - POSTGRES_PASSWORD=postgres
+ - POSTGRES_DB=postgres
+ volumes:
+ - postgres_data:/var/lib/postgresql/data
+ command:
+ - postgres
+ - "-c"
+ - "max_connections=3000"
+
+volumes:
+ postgres_data:
+```
+
+{{< details "❓ I want to run >100 sessions on PostgreSQL | pg sorry, too many clients already" >}}
+If you see the error:
+
+> pg sorry, too many clients already
+
+Make sure to increase the `max_connections` in the `postgresql.conf` file or start it with the flag:
+
+```bash
+postgres -c max_connections=3000
+```
+
+{{< /details >}}
+
+{{< callout title="WAHA uses Multiple Databases schema" context="note" icon="outline/database" >}}
+👉 Read how WAHA uses databases in the [**Database Schema**](#database-schema) section.
+{{< /callout >}}
+
+### Sessions - MongoDB
+
+{{< callout context="danger" title="Deprecated" icon="outline/alert-square-rounded" >}}
+**MongoDB** storage is **deprecated** and no new features will be added to it.
+
+👉 Use [**PostgresSQL**](#sessions---postgresql)
+instead for new installations.
+{{< /callout >}}
+
+If you want to use the MongoDB to store the session data, you need to:
+
+1. Start the MongoDB server (using docker or any other way). You can either start your own MongoDB server or use the one of cloud providers, like [MongoDB Atlas](https://www.mongodb.com/atlas/database).
+2. Set `WHATSAPP_SESSIONS_MONGO_URL=mongodb://user:password@host:port/` environment variable to connect to the MongoDB server.
+
+**We recommend using your own MongoDB server as close as possible to the WAHA server** for the best performance and security reasons.
+
+{{< callout title="WAHA uses Multiple Databases schema" context="note" icon="outline/database" >}}
+👉 Read how WAHA uses databases in the [**Database Schema**](#database-schema) section.
+{{< /callout >}}
+
+First, you need to start MongoDB server:
+
+```bash
+docker run -d -p 27017:27017 --name mongodb -v mongo-data:/data/db mongo
+```
+
+Then, you need to run the WAHA with the `WHATSAPP_SESSIONS_MONGO_URL` environment variable (please note using `--network host` option as well)
+
+```bash
+docker run -e WHATSAPP_SESSIONS_MONGO_URL=mongodb://localhost:27017/ --network host devlikeapro/waha-plus
+```
+
+That's all you need to do to use MongoDB storage.
+All session authentication data will be automatically stored in the MongoDB database.
+
+For managing and troubleshooting MongoDB, we recommend using [MongoDB Compass](https://www.mongodb.com/products/tools/compass).
+
+
+
+#### Health Check
+
+[**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}}) provides [health check endpoints]({{< relref "/docs/how-to/observability" >}}).
+
+## Media Storage
+
+When your WhatsApp instance receives **media files**, it stores them in the **🖼️ Media Storage**.
+
+You can use the following options to store the media files:
+
+1. [**Local**](#media---local) - stores the media files in the local storage using files.
+2. [**PostgreSQL**](#media---postgresql) - stores the media files in the PostgreSQL database.
+3. [**S3**](#media---s3) - stores the media files in the S3 storage.
+
+### Media - Local
+
+By default, WAHA stores media files in local storage with a **180-second lifetime**.
+
+To persist media files:
+
+```bash
+docker run -v /path/to/on/host/.media:/app/.media \
+ -e WHATSAPP_FILES_FOLDER=/app/.media \
+ -e WHATSAPP_FILES_LIFETIME=0 \
+ -p 3000:3000 \
+ devlikeapro/waha-plus
+```
+
+```yaml
+services:
+ waha:
+ image: devlikeapro/waha-plus
+ volumes:
+ - ./.media:/app/.media
+ environment:
+ - WHATSAPP_FILES_FOLDER=/app/.media
+ - WHATSAPP_FILES_LIFETIME=0
+ ports:
+ - "127.0.0.1:3000:3000"
+```
+
+### Media - PostgreSQL
+
+You can store media files in PostgreSQL.
+
+It'll create additional `media` table in **each database for session**.
+
+{{< callout title="WAHA uses Multiple Databases schema" context="note" icon="outline/database" >}}
+👉 Read how WAHA uses databases in the [**Database Schema**](#database-schema) section.
+{{< /callout >}}
+
+```bash
+docker run \
+ -e WAHA_MEDIA_STORAGE=POSTGRESQL \
+ -e WAHA_MEDIA_POSTGRESQL_URL=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable \
+ -p 3000:3000 \
+ devlikeapro/waha-plus
+```
+
+```yaml
+services:
+ waha:
+ image: devlikeapro/waha-plus
+ environment:
+ - WAHA_MEDIA_STORAGE=POSTGRESQL
+ - WAHA_MEDIA_POSTGRESQL_URL=postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
+ ports:
+ - "127.0.0.1:3000:3000"
+ depends_on:
+ - postgres
+
+ postgres:
+ image: postgres:17
+ environment:
+ - POSTGRES_USER=postgres
+ - POSTGRES_PASSWORD=postgres
+ - POSTGRES_DB=postgres
+ volumes:
+ - postgres_data:/var/lib/postgresql/data
+
+volumes:
+ postgres_data:
+```
+
+### Media - S3
+
+To store media files in S3-compatible storage:
+
+```bash
+docker run \
+ -e WAHA_MEDIA_STORAGE=S3 \
+ -e WAHA_S3_REGION=eu-west-1 \
+ -e WAHA_S3_BUCKET=waha \
+ -e WAHA_S3_ACCESS_KEY_ID=minioadmin \
+ -e WAHA_S3_SECRET_ACCESS_KEY=minioadmin \
+ -e WAHA_S3_ENDPOINT=http://127.0.0.1:9000 \
+ -e WAHA_S3_FORCE_PATH_STYLE=True \
+ -e WAHA_S3_PROXY_FILES=False \
+ -p 3000:3000 \
+ devlikeapro/waha-plus
+```
+
+```yaml
+services:
+ waha:
+ image: devlikeapro/waha-plus
+ environment:
+ - WAHA_MEDIA_STORAGE=S3
+ - WAHA_S3_REGION=eu-west-1
+ - WAHA_S3_BUCKET=waha
+ - WAHA_S3_ACCESS_KEY_ID=minioadmin
+ - WAHA_S3_SECRET_ACCESS_KEY=minioadmin
+ - WAHA_S3_ENDPOINT=http://minio:9000
+ - WAHA_S3_FORCE_PATH_STYLE=True
+ - WAHA_S3_PROXY_FILES=False
+ ports:
+ - "127.0.0.1:3000:3000"
+ depends_on:
+ - minio
+
+ minio:
+ image: minio/minio
+ environment:
+ - MINIO_ROOT_USER=minioadmin
+ - MINIO_ROOT_PASSWORD=minioadmin
+ command: server /data --console-address ":9001"
+ volumes:
+ - minio_data:/data
+ ports:
+ - "9000:9000"
+ - "9001:9001"
+
+volumes:
+ minio_data:
+```
+
+**S3 metadata** for each file:
+
+- `X-Amz-Meta-Waha-Session=default` - session name
+- `X-Amz-Meta-Waha-Message-Id=true_111...` - message ID
+- `X-Amz-Meta-Waha-Media-File-Name=media.jpg` - media file name
+
+## FAQ
+
+### Database Schema
+
+{{< callout context="caution" icon="outline/database" >}}
+When using **PostgreSQL** or **MongoDB** storage,
+WAHA creates **multiple databases** using the credentials provided in the connection URL:
+
+1. `waha_{engine}` - A **single database** with
+ - session configuration
+ - common parameters that persist until you remove a session
+2. `waha_{engine}_{sessionname}` - A **separate database** for **each session** that contains: - Credentials - Messages - Contacts - Other session-specific data
+ {{< /callout >}}
+
+{{< callout context="note" title="Database Schemas" icon="outline/database" >}}
+ 
+{{< /callout >}}
+
+This approach provides **several benefits**:
+
+1. Easy monitoring of storage usage per session
+2. Better stability when running multiple sessions
+3. Isolation between sessions - if one session's database has issues, it won't affect other sessions
+4. Clear separation of concerns between session configuration and session data
+
+{{< callout context="danger" title="User Permissions" icon="outline/user" >}}
+Make sure that the user that connects to the database has **create/drop** permissions on the databases.
+{{< /callout >}}
+
+### Multiple Workers - Single Database Server
+
+{{< callout context="warning" icon="outline/alert-triangle" >}}
+When running **multiple WAHA workers** with **the same database**, you **MUST** set a unique `WAHA_WORKER_ID` for each worker to prevent conflicts and ensure proper operation.
+{{< /callout >}}
+
+Example configuration for multiple workers:
+
+```yaml
+services:
+ waha-worker-1:
+ image: devlikeapro/waha-plus
+ environment:
+ - WAHA_WORKER_ID=worker-1
+ - WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
+ ports:
+ - "127.0.0.1:3000:3000"
+ depends_on:
+ - postgres
+
+ waha-worker-2:
+ image: devlikeapro/waha-plus
+ environment:
+ - WAHA_WORKER_ID=worker-2
+ - WHATSAPP_SESSIONS_POSTGRESQL_URL=postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
+ ports:
+ - "127.0.0.1:3001:3000"
+ depends_on:
+ - postgres
+
+ postgres:
+ image: postgres:17
+ environment:
+ - POSTGRES_USER=postgres
+ - POSTGRES_PASSWORD=postgres
+ - POSTGRES_DB=postgres
+ volumes:
+ - postgres_data:/var/lib/postgresql/data
+
+volumes:
+ postgres_data:
+```
diff --git a/content/docs/how-to/swagger/index.md b/content/docs/how-to/swagger/index.md
index 2d58299f8..2f3831870 100644
--- a/content/docs/how-to/swagger/index.md
+++ b/content/docs/how-to/swagger/index.md
@@ -1,65 +1,69 @@
----
-title: "📚 Swagger (OpenAPI)"
-description: "Swagger (OpenAPI) documentation"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 203
-images: ['swagger.png']
-slug: swagger
----
-
-## Overview
-The project provides HTTP API (REST), which is documented with OpenAPI specification and Swagger UI.
-
-
-
-You can see all available endpoints, request/response examples, and even execute them directly from the Swagger UI.
-
-Find the latest versions:
-- [Swagger documentation ->](/swagger)
-- [Postman ->](https://www.postman.com/devlikeapro/workspace/waha/collection/35390377-42210829-5a92-45c5-a001-6a453c5d764a?action=share&creator=35390377)
-- [OpenAPI specification ->](/swagger/openapi.json)
-
-You can find Swagger documentation on the following url after you
-[install and started]( {{< relref "/docs/how-to/install" >}}) it:
-- Swagger: [http://localhost:3000](http://localhost:3000).
-- OpenAPI: [http://localhost:3000/-json](http://localhost:3000/-json).
-
-## Configuration
-- `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.
-- `WHATSAPP_SWAGGER_ENABLED=false` - disables Swagger documentation. Enabled by default. Available in **WAHA Plus** only.
-- `WHATSAPP_SWAGGER_USERNAME=admin` and `WHATSAPP_SWAGGER_PASSWORD=admin` - these variables can be used to protect the Swagger panel
- with `admin / admin` credentials. This does not affect API access. Available in **WAHA Plus** only.
-
-Read more about security settings for Swagger and API on [**Security page** ->]({{< relref "/docs/how-to/security" >}}).
-
-### White label
-You can show your own brand in the Swagger documentation.
-
-
-
-
-
-👉 Swagger White Label is available in [**WAHA Plus**]({{< relref "waha-plus#plus" >}}) version only.
-
-Use the following environment variables to customize the Swagger documentation:
-- `WHATSAPP_SWAGGER_TITLE` - the title of the Swagger documentation and some other places.
-- `WHATSAPP_SWAGGER_DESCRIPTION` - Markdown formatted description of your API.
-- `WHATSAPP_SWAGGER_EXTERNAL_DOC_URL` - URL to the external documentation.
-- `WHATSAPP_SWAGGER_VIDEO_EXAMPLE_URL` - link to the video example `https://github.com/devlikeapro/waha/raw/core/examples/video.mp4`
-- `WHATSAPP_SWAGGER_OPUS_EXAMPLE_URL` - link to the opus example `https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus`
-- `WHATSAPP_SWAGGER_JPG_EXAMPLE_URL` - link to the jpg example `https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg`
-
-**Example** (consider using [docker-compose](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml#L15-L38) or other methods to store these settings):
-```bash
-docker run -it -p 3000:3000 -e WHATSAPP_SWAGGER_TITLE="AwesomeCRM" -e 'WHATSAPP_SWAGGER_DESCRIPTION=
FantasticFindz - Discover unique treasures from around the world at unbelievable prices! Read more about us!
' -e "WHATSAPP_SWAGGER_EXTERNAL_DOC_URL=https://google.com" devlikeapro/waha-plus
-```
-
-
-
+---
+title: "📚 Swagger (OpenAPI)"
+description: "Swagger (OpenAPI) documentation"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 203
+images: ["swagger.png"]
+slug: swagger
+---
+
+## Overview
+
+The project provides HTTP API (REST), which is documented with OpenAPI specification and Swagger UI.
+
+
+
+You can see all available endpoints, request/response examples, and even execute them directly from the Swagger UI.
+
+Find the latest versions:
+
+- [Swagger documentation ->](/swagger)
+- [Postman ->](https://www.postman.com/devlikeapro/workspace/waha/collection/35390377-42210829-5a92-45c5-a001-6a453c5d764a?action=share&creator=35390377)
+- [OpenAPI specification ->](/swagger/openapi.json)
+
+You can find Swagger documentation on the following url after you
+[install and started]( {{< relref "/docs/how-to/install" >}}) it:
+
+- Swagger: [http://localhost:3000](http://localhost:3000).
+- OpenAPI: [http://localhost:3000/-json](http://localhost:3000/-json).
+
+## Configuration
+
+- `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.
+- `WHATSAPP_SWAGGER_ENABLED=false` - disables Swagger documentation. Enabled by default. Available in **WAHA Plus** only.
+- `WHATSAPP_SWAGGER_USERNAME=admin` and `WHATSAPP_SWAGGER_PASSWORD=admin` - these variables can be used to protect the Swagger panel
+ with `admin / admin` credentials. This does not affect API access. Available in **WAHA Plus** only.
+
+Read more about security settings for Swagger and API on [**Security page** ->]({{< relref "/docs/how-to/security" >}}).
+
+### White label
+
+You can show your own brand in the Swagger documentation.
+
+
+
+
+
+👉 Swagger White Label is available in [**WAHA Plus**]({{< relref "waha-plus#plus" >}}) version only.
+
+Use the following environment variables to customize the Swagger documentation:
+
+- `WHATSAPP_SWAGGER_TITLE` - the title of the Swagger documentation and some other places.
+- `WHATSAPP_SWAGGER_DESCRIPTION` - Markdown formatted description of your API.
+- `WHATSAPP_SWAGGER_EXTERNAL_DOC_URL` - URL to the external documentation.
+- `WHATSAPP_SWAGGER_VIDEO_EXAMPLE_URL` - link to the video example `https://github.com/devlikeapro/waha/raw/core/examples/video.mp4`
+- `WHATSAPP_SWAGGER_OPUS_EXAMPLE_URL` - link to the opus example `https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.opus`
+- `WHATSAPP_SWAGGER_JPG_EXAMPLE_URL` - link to the jpg example `https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg`
+
+**Example** (consider using [docker-compose](https://github.com/devlikeapro/waha/blob/core/docker-compose.yaml#L15-L38) or other methods to store these settings):
+
+```bash
+docker run -it -p 3000:3000 -e WHATSAPP_SWAGGER_TITLE="AwesomeCRM" -e 'WHATSAPP_SWAGGER_DESCRIPTION=
FantasticFindz - Discover unique treasures from around the world at unbelievable prices! Read more about us!
' -e "WHATSAPP_SWAGGER_EXTERNAL_DOC_URL=https://google.com" devlikeapro/waha-plus
+```
diff --git a/content/docs/how-to/waha-plus/index.md b/content/docs/how-to/waha-plus/index.md
index df4c93719..31943ac36 100644
--- a/content/docs/how-to/waha-plus/index.md
+++ b/content/docs/how-to/waha-plus/index.md
@@ -1,81 +1,86 @@
----
-title : "➕ WAHA Plus"
-description: "WAHA Plus - advanced version with more features!"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 900
-images: [ "patron-portal.png"]
-slug: waha-plus
-aliases:
- - /docs/how-to/plus-version
----
-
-## Overview
-
-**WAHA** is distributed in two versions:
-
-1. Core the basic version that meet almost 80% people’s needs. 100% free and open source.
-2. Plus the version with advanced messages, security, and reliability features.
-
-👉👉 Compare versions on
-[**🎁 Support Us**](/support-us)
-page
-
-## Tiers
-You support the project and get WAHA Plus by donating to the project on one of the platforms.
-
-👉👉 See tiers and available platforms on
-[**🎁 Support Us**](/support-us)
-
-
-## Patron Portal
-
-
-
-
-
-
-After subscribing on Patreon or Boosty, you will get access to the [WAHA Patron Portal ->](https://portal.devlike.pro/)
-where you will get the password to download the Plus image and manage your perks!
-
-Read more about Patron Portal in
-**Patreon -> **
-or
-**Boosty ->**
-posts.
-
-### Install Plus
-After you get the password, get your login to Docker Hub in [Patron Portal ->](https://portal.devlike.pro/)
-and run the commands:
-```bash
-docker login -u devlikeapro -p {KEY}
-docker pull devlikeapro/waha-plus
-docker logout
-```
-
-Then in all commands use **Plus** image `devlikeapro/waha-plus` instead of Core `devlikeapro/waha`.
-
-### Invite Team
-If you support the project with [**WAHA PRO**](/support-us#tier-pro) tier - invite **up to 5 members** to your team
-to help you with developing the project!
-
-The members inherit **PRO** tier and will have their own docker key and GitHub access to the project.
-
-
-
-
-#### Invite Member
-1. **Login** to [**Patron Portal**](https://portal.devlike.pro)
-2. **Create Team** at the bottom the page
-3. **Invite a new member** by sending invitation to their email
-
-#### Join Team
-1. Get **email with invitation**
-2. **Login** to [**Patron Portal**](https://portal.devlike.pro)
-3. **Join** the team
-
-
-
-_If **The Member** doesn't see **PRO** tier - kindly refresh the page after waiting 10-30 seconds (sync tiers takes a bit of time)_
+---
+title: "➕ WAHA Plus"
+description: "WAHA Plus - advanced version with more features!"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 900
+images: ["patron-portal.png"]
+slug: waha-plus
+aliases:
+ - /docs/how-to/plus-version
+---
+
+## Overview
+
+**WAHA** is distributed in two versions:
+
+1. Core the basic version that meet almost 80% people’s needs. 100% free and open source.
+2. Plus the version with advanced messages, security, and reliability features.
+
+👉👉 Compare versions on
+[**🎁 Support Us**](/support-us)
+page
+
+## Tiers
+
+You support the project and get WAHA Plus by donating to the project on one of the platforms.
+
+👉👉 See tiers and available platforms on
+[**🎁 Support Us**](/support-us)
+
+## Patron Portal
+
+
+
+
+
+
+
+After subscribing on Patreon or Boosty, you will get access to the [WAHA Patron Portal ->](https://portal.devlike.pro/)
+where you will get the password to download the Plus image and manage your perks!
+
+Read more about Patron Portal in
+**Patreon -> **
+or
+**Boosty ->**
+posts.
+
+### Install Plus
+
+After you get the password, get your login to Docker Hub in [Patron Portal ->](https://portal.devlike.pro/)
+and run the commands:
+
+```bash
+docker login -u devlikeapro -p {KEY}
+docker pull devlikeapro/waha-plus
+docker logout
+```
+
+Then in all commands use **Plus** image `devlikeapro/waha-plus` instead of Core `devlikeapro/waha`.
+
+### Invite Team
+
+If you support the project with [**WAHA PRO**](/support-us#tier-pro) tier - invite **up to 5 members** to your team
+to help you with developing the project!
+
+The members inherit **PRO** tier and will have their own docker key and GitHub access to the project.
+
+
+
+#### Invite Member
+
+1. **Login** to [**Patron Portal**](https://portal.devlike.pro)
+2. **Create Team** at the bottom the page
+3. **Invite a new member** by sending invitation to their email
+
+#### Join Team
+
+1. Get **email with invitation**
+2. **Login** to [**Patron Portal**](https://portal.devlike.pro)
+3. **Join** the team
+
+
+
+_If **The Member** doesn't see **PRO** tier - kindly refresh the page after waiting 10-30 seconds (sync tiers takes a bit of time)_
diff --git a/content/docs/integrations/_index.md b/content/docs/integrations/_index.md
index 7cf3d0ca0..88a23169f 100644
--- a/content/docs/integrations/_index.md
+++ b/content/docs/integrations/_index.md
@@ -1,15 +1,14 @@
----
-title: "🔌 Integrations"
-description: "Integrations with WAHA"
-lead: "Integrations with WAHA"
-date: 2020-10-06T08:49:15+00:00
-lastmod: 2020-10-06T08:49:15+00:00
-draft: false
-weight: 900
-slug: integrations
-sidebar:
- collapsed: true
----
-
-Different ways to integrate WAHA with other services.
-
+---
+title: "🔌 Integrations"
+description: "Integrations with WAHA"
+lead: "Integrations with WAHA"
+date: 2020-10-06T08:49:15+00:00
+lastmod: 2020-10-06T08:49:15+00:00
+draft: false
+weight: 900
+slug: integrations
+sidebar:
+ collapsed: true
+---
+
+Different ways to integrate WAHA with other services.
diff --git a/content/docs/integrations/about/index.md b/content/docs/integrations/about/index.md
index 535bc8766..0cdc9a19b 100644
--- a/content/docs/integrations/about/index.md
+++ b/content/docs/integrations/about/index.md
@@ -1,19 +1,19 @@
----
-title: "Integrations"
-description: "Understanding WAHA Integrations"
-lead: "Understanding WAHA Integrations"
-date: 2024-07-13T12:00:00+00:00
-lastmod: 2024-07-13T12:00:00+00:00
-draft: false
-weight: 901
-images: []
-toc: true
-slug: about
----
-
-[**🔌 Integrations**]({{< relref "/docs/integrations/about" >}})
-are **external ecosystem tools** that connect WAHA with other services.
-
-They include both WAHA Team-supported and community-created solutions.
-
-{{< include file="content/docs/apps/about/apps-vs-integrations.md" >}}
+---
+title: "Integrations"
+description: "Understanding WAHA Integrations"
+lead: "Understanding WAHA Integrations"
+date: 2024-07-13T12:00:00+00:00
+lastmod: 2024-07-13T12:00:00+00:00
+draft: false
+weight: 901
+images: []
+toc: true
+slug: about
+---
+
+[**🔌 Integrations**]({{< relref "/docs/integrations/about" >}})
+are **external ecosystem tools** that connect WAHA with other services.
+
+They include both WAHA Team-supported and community-created solutions.
+
+{{< include file="content/docs/apps/about/apps-vs-integrations.md" >}}
diff --git a/content/docs/integrations/chatwoot/index.md b/content/docs/integrations/chatwoot/index.md
index 1241ee76c..55b385699 100644
--- a/content/docs/integrations/chatwoot/index.md
+++ b/content/docs/integrations/chatwoot/index.md
@@ -1,36 +1,36 @@
----
-title: "ChatWoot"
-description: "WAHA ChatWoot Integration"
-lead: "WAHA ChatWoot Integration"
-date: 2024-09-05T08:49:31+00:00
-lastmod: 2024-09-06T08:49:31+00:00
-draft: false
-menu:
-docs:
-parent: "help"
-weight: 903
-images: ["waha-chatwoot.png"]
-toc: true
----
-
-
-
-
-
-{{< callout context="tip" icon="outline/hand-finger-right" title="Use built-in ChatWoot App instead!" >}}
-Consider using new
-[**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
-
-It's a new, a built-in connection from **WAHA/WhatsApp** to **ChatWoot**!
-{{< /callout >}}
-
-To set up **WhatsApp ChatWoot** integration you'll need few things:
-1. **WAHA** - installed self-hosted WhatsApp API - [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
-2. [**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}}) - to create workflows
-3. **ChatWoot** - either [self-hosted](https://www.chatwoot.com/docs/self-hosted) or [cloud](https://app.chatwoot.com/) version
- 1. To use **ChatWoot Cloud** you need to make sure your **n8n** webhook is accessible from the internet
-4. **PostgreSQL** - to store ChatWoot data (and WAHA-ChatWoot relations)
-
-👉 Check out [**WhatsApp + ChatWoot Templates**](https://waha-n8n-templates.devlike.pro/chatwoot/)
-to start from the scratch and create your first **ChatWoot** integration!
-
+---
+title: "ChatWoot"
+description: "WAHA ChatWoot Integration"
+lead: "WAHA ChatWoot Integration"
+date: 2024-09-05T08:49:31+00:00
+lastmod: 2024-09-06T08:49:31+00:00
+draft: false
+menu:
+docs:
+parent: "help"
+weight: 903
+images: ["waha-chatwoot.png"]
+toc: true
+---
+
+
+
+
+
+{{< callout context="tip" icon="outline/hand-finger-right" title="Use built-in ChatWoot App instead!" >}}
+Consider using new
+[**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}})!
+
+It's a new, a built-in connection from **WAHA/WhatsApp** to **ChatWoot**!
+{{< /callout >}}
+
+To set up **WhatsApp ChatWoot** integration you'll need few things:
+
+1. **WAHA** - installed self-hosted WhatsApp API - [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
+2. [**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}}) - to create workflows
+3. **ChatWoot** - either [self-hosted](https://www.chatwoot.com/docs/self-hosted) or [cloud](https://app.chatwoot.com/) version
+ 1. To use **ChatWoot Cloud** you need to make sure your **n8n** webhook is accessible from the internet
+4. **PostgreSQL** - to store ChatWoot data (and WAHA-ChatWoot relations)
+
+👉 Check out [**WhatsApp + ChatWoot Templates**](https://waha-n8n-templates.devlike.pro/chatwoot/)
+to start from the scratch and create your first **ChatWoot** integration!
diff --git a/content/docs/integrations/live-helper-chat/index.md b/content/docs/integrations/live-helper-chat/index.md
index af73fd6c5..43f8f40b2 100644
--- a/content/docs/integrations/live-helper-chat/index.md
+++ b/content/docs/integrations/live-helper-chat/index.md
@@ -1,38 +1,36 @@
----
-title: "Live Helper Chat"
-description: "WhatsApp API + Live Helper Chat integration."
-lead: "WhatsApp API + Live Helper Chat integration."
-date: 2020-10-06T08:49:31+00:00
-lastmod: 2020-10-06T08:49:31+00:00
-draft: false
-menu:
-docs:
-parent: "help"
-weight: 909
-toc: true
-images: ['logo.png']
----
-
-
-
-
- 
-
-
-
-Open source
-Live Helper Chat ->
-system with mobile app, Bot, AI, Voice & Video & ScreenShare.
-
-
-
-
-
-
-
-
-👉 Please checkout
-
-WhatsApp WAHA integration on Live Helper Chat ->
-
-documentation for more details how to integrate WhatsApp with Live Helper Chat.
+---
+title: "Live Helper Chat"
+description: "WhatsApp API + Live Helper Chat integration."
+lead: "WhatsApp API + Live Helper Chat integration."
+date: 2020-10-06T08:49:31+00:00
+lastmod: 2020-10-06T08:49:31+00:00
+draft: false
+menu:
+docs:
+parent: "help"
+weight: 909
+toc: true
+images: ["logo.png"]
+---
+
+
+
+
+
+
+
+Open source
+Live Helper Chat ->
+system with mobile app, Bot, AI, Voice & Video & ScreenShare.
+
+
+
+
+
+
+
+👉 Please checkout
+
+WhatsApp WAHA integration on Live Helper Chat ->
+
+documentation for more details how to integrate WhatsApp with Live Helper Chat.
diff --git a/content/docs/integrations/n8n/index.md b/content/docs/integrations/n8n/index.md
index 1dc2ee4b7..40cf44624 100644
--- a/content/docs/integrations/n8n/index.md
+++ b/content/docs/integrations/n8n/index.md
@@ -1,96 +1,105 @@
----
-title: "n8n"
-description: "Start developing your WhatsApp automation with using n8n and WAHA in pair!"
-lead: "Start developing your WhatsApp automation with using n8n and WAHA in pair!"
-date: 2024-09-05T08:49:31+00:00
-lastmod: 2024-09-06T08:49:31+00:00
-draft: false
-menu:
-docs:
-parent: "help"
-weight: 902
-toc: true
-images: ['WAHA+n8n.png']
----
-
-
-
-
-
-## Overview
-
-{{< imgo src="/images/n8n/waha-n8n.png" >}}
-
-👉 You can follow
-[**WAHA + n8n: No Code Low Code WhatsApp Automation Step-By-Step Guide**]({{< relref "/blog/waha-n8n" >}})
-to start **WAHA** and **n8n** from the scratch and start your first "echo" workflow!
-
-Alternatively, check the installation guides for **n8n** and **WAHA**:
-
-**WAHA**:
- - [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
- - [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}})
-
-**n8n**:
- - [**Installation guide**](https://docs.n8n.io/hosting/installation/docker/#starting-n8n)
-
-## Install WAHA n8n node
-Go to your **n8n** => **Settings** => **Community nodes** and install:
-
-```sh
-@devlikeapro/n8n-nodes-waha
-```
-
-If you need help with that, check the
-[**Install community nodes**](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
-
-## WAHA API Credentials
-
-Before using the node you need to add **WAHA API** credentials.
-
-Go to your n8n installation and create a new **WAHA API** credential:
-{{< imgo src="/images/n8n/waha-n8n-credentials.png" >}}
-
-If it doesn't allow you to **Save** it (no save button) - just put **any string** in `Api Key` field, know issue :(
-
-## WAHA Actions
-**@devlikeapro/n8n-nodes-waha** provides **WAHA Actions** with all available API calls that you can find
-in the [WAHA API documentation](https://waha.devlike.pro/docs/how-to/) or [Swagger](https://waha.devlike.pro/swagger/).
-
-{{< imgo src="/images/n8n/waha-n8n-actions.png" >}}
-
-## WAHA Trigger
-**@devlikeapro/n8n-nodes-waha** provides **WAHA Trigger** node,
-which make it possible to trigger the workflow when the specific event happens in WAHA.
-
-{{< imgo src="/images/n8n/waha-n8n-WAHATrigger.png" >}}
-
-💡 **Remember to configure your WAHA Session** with proper **Webhook** with **WAHA trigger** -> **Webhook URL** and
-the events you want to listen!
-
-{{< imgo src="/images/n8n/waha-n8n-WAHATrigger-url.png" >}}
-
-{{< imgo src="/images/n8n/waha-n8n-dashboard-session.png" >}}
-
-## Workflow Examples
-👉 Check out
-[**https://waha-n8n-workflows.devlike.pro**](http://waha-n8n-templates.devlike.pro/)
-for workflow templates!
-
-{{< imgo src="/images/n8n/waha-n8n.png" >}}
-
-## Troubleshooting
-If you're experiencing any issues or have a feature request, please check the below resources:
-**WAHA**:
-- [**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}})
-- [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
-- [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}})
-
-**n8n**:
-- [**Installation guide**](https://docs.n8n.io/hosting/installation/docker/#starting-n8n)
-- [**Install community nodes**](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
-- [**Create credentials**](https://docs.n8n.io/credentials/add-edit-credentials/)
-
-If that doesn't help - kindly open an issue in the
-[**devlikeapro/n8n-nodes-waha**](https://github.com/devlikeapro/n8n-nodes-waha/)
-GitHub repository, we're happy to help you out!
+---
+title: "n8n"
+description: "Start developing your WhatsApp automation with using n8n and WAHA in pair!"
+lead: "Start developing your WhatsApp automation with using n8n and WAHA in pair!"
+date: 2024-09-05T08:49:31+00:00
+lastmod: 2024-09-06T08:49:31+00:00
+draft: false
+menu:
+docs:
+parent: "help"
+weight: 902
+toc: true
+images: ["WAHA+n8n.png"]
+---
+
+
+
+
+
+## Overview
+
+{{< imgo src="/images/n8n/waha-n8n.png" >}}
+
+👉 You can follow
+[**WAHA + n8n: No Code Low Code WhatsApp Automation Step-By-Step Guide**]({{< relref "/blog/waha-n8n" >}})
+to start **WAHA** and **n8n** from the scratch and start your first "echo" workflow!
+
+Alternatively, check the installation guides for **n8n** and **WAHA**:
+
+**WAHA**:
+
+- [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
+- [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}})
+
+**n8n**:
+
+- [**Installation guide**](https://docs.n8n.io/hosting/installation/docker/#starting-n8n)
+
+## Install WAHA n8n node
+
+Go to your **n8n** => **Settings** => **Community nodes** and install:
+
+```sh
+@devlikeapro/n8n-nodes-waha
+```
+
+If you need help with that, check the
+[**Install community nodes**](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
+
+## WAHA API Credentials
+
+Before using the node you need to add **WAHA API** credentials.
+
+Go to your n8n installation and create a new **WAHA API** credential:
+{{< imgo src="/images/n8n/waha-n8n-credentials.png" >}}
+
+If it doesn't allow you to **Save** it (no save button) - just put **any string** in `Api Key` field, know issue :(
+
+## WAHA Actions
+
+**@devlikeapro/n8n-nodes-waha** provides **WAHA Actions** with all available API calls that you can find
+in the [WAHA API documentation](https://waha.devlike.pro/docs/how-to/) or [Swagger](https://waha.devlike.pro/swagger/).
+
+{{< imgo src="/images/n8n/waha-n8n-actions.png" >}}
+
+## WAHA Trigger
+
+**@devlikeapro/n8n-nodes-waha** provides **WAHA Trigger** node,
+which make it possible to trigger the workflow when the specific event happens in WAHA.
+
+{{< imgo src="/images/n8n/waha-n8n-WAHATrigger.png" >}}
+
+💡 **Remember to configure your WAHA Session** with proper **Webhook** with **WAHA trigger** -> **Webhook URL** and
+the events you want to listen!
+
+{{< imgo src="/images/n8n/waha-n8n-WAHATrigger-url.png" >}}
+
+{{< imgo src="/images/n8n/waha-n8n-dashboard-session.png" >}}
+
+## Workflow Examples
+
+👉 Check out
+[**https://waha-n8n-workflows.devlike.pro**](http://waha-n8n-templates.devlike.pro/)
+for workflow templates!
+
+{{< imgo src="/images/n8n/waha-n8n.png" >}}
+
+## Troubleshooting
+
+If you're experiencing any issues or have a feature request, please check the below resources:
+**WAHA**:
+
+- [**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}})
+- [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
+- [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}})
+
+**n8n**:
+
+- [**Installation guide**](https://docs.n8n.io/hosting/installation/docker/#starting-n8n)
+- [**Install community nodes**](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
+- [**Create credentials**](https://docs.n8n.io/credentials/add-edit-credentials/)
+
+If that doesn't help - kindly open an issue in the
+[**devlikeapro/n8n-nodes-waha**](https://github.com/devlikeapro/n8n-nodes-waha/)
+GitHub repository, we're happy to help you out!
diff --git a/content/docs/integrations/typebot/index.md b/content/docs/integrations/typebot/index.md
index 6ec4bfbc9..31cca702e 100644
--- a/content/docs/integrations/typebot/index.md
+++ b/content/docs/integrations/typebot/index.md
@@ -1,29 +1,29 @@
----
-title: "Typebot"
-description: "WAHA Typebot Integration"
-lead: "WAHA Typebot Integration"
-date: 2024-09-05T08:49:31+00:00
-lastmod: 2024-09-06T08:49:31+00:00
-draft: false
-menu:
-docs:
-parent: "help"
-weight: 902
-images: ["waha+typebot.png"]
-toc: true
----
-
-
-
-
-
-To set up **WhatsApp Typebot** integration you'll need few things:
-1. **WAHA** - installed self-hosted WhatsApp API - [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
-2. [**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}}) - to create workflows
-3. **Typebot** - either [self-hosted](https://docs.typebot.io/self-hosting/get-started) or [cloud](https://app.typebot.io/) version
- 1. To use **Typebot Cloud** you need to make sure your **n8n** webhook is accessible from the internet
-4. **PostgreSQL** - to store Typebot data (and WAHA-Typebot relations)
-
-👉 Check out [**WAHA + Typebot Template**](https://waha-n8n-templates.devlike.pro/whatsapp-typebot/)
-to start from the scratch and create your first **Typebot** integration!
-
+---
+title: "Typebot"
+description: "WAHA Typebot Integration"
+lead: "WAHA Typebot Integration"
+date: 2024-09-05T08:49:31+00:00
+lastmod: 2024-09-06T08:49:31+00:00
+draft: false
+menu:
+docs:
+parent: "help"
+weight: 902
+images: ["waha+typebot.png"]
+toc: true
+---
+
+
+
+
+
+To set up **WhatsApp Typebot** integration you'll need few things:
+
+1. **WAHA** - installed self-hosted WhatsApp API - [**⚡ Quick Start**]({{< relref "/docs/overview/quick-start" >}})
+2. [**🔌 n8n Integration**]({{< relref "/docs/integrations/n8n" >}}) - to create workflows
+3. **Typebot** - either [self-hosted](https://docs.typebot.io/self-hosting/get-started) or [cloud](https://app.typebot.io/) version
+ 1. To use **Typebot Cloud** you need to make sure your **n8n** webhook is accessible from the internet
+4. **PostgreSQL** - to store Typebot data (and WAHA-Typebot relations)
+
+👉 Check out [**WAHA + Typebot Template**](https://waha-n8n-templates.devlike.pro/whatsapp-typebot/)
+to start from the scratch and create your first **Typebot** integration!
diff --git a/content/docs/integrations/uptime-kuma/index.md b/content/docs/integrations/uptime-kuma/index.md
index 4972192c6..cd5bd833f 100644
--- a/content/docs/integrations/uptime-kuma/index.md
+++ b/content/docs/integrations/uptime-kuma/index.md
@@ -1,50 +1,52 @@
----
-title: "Uptime Kuma"
-description: "Send notifications from Uptime Kuma to your WhatsApp!"
-lead: "Send notifications from Uptime Kuma to your WhatsApp!"
-date: 2024-09-05T08:49:31+00:00
-lastmod: 2024-09-06T08:49:31+00:00
-draft: false
-menu:
-docs:
-parent: "help"
-weight: 980
-images: ["uptime-kuma.jpg"]
-toc: true
----
-
-
-
-If you're using **self-hosted**
-[**Uptime Kuma**](https://github.com/louislam/uptime-kuma)
-you can use **self-hosted**
-[**WAHA**](/)
-to send notifications from Kuma to your WhatsApp!
-
-## Overview
-Here's what you'll get:
-
-
-
-## Setup
-Go to **Kuma** -> **Settings** -> **Notifications** and find **WhatsApp (WAHA)** notification type.
-
-{{< callout context="note" icon="outline/info-circle" >}}
-If you don't find it there - kindly update **Uptime Kuma** to the latest version or
-try setting up it from
-[Uptime Kuma](https://github.com/louislam/uptime-kuma)
-
-**WhatsApp (WAHA)** provider has been added in [this commit](https://github.com/louislam/uptime-kuma/commit/6f8f8f955f1d47016b43db62bf8757bb5b108abf).
-{{< /callout >}}
-
-
+
+If you're using **self-hosted**
+[**Uptime Kuma**](https://github.com/louislam/uptime-kuma)
+you can use **self-hosted**
+[**WAHA**](/)
+to send notifications from Kuma to your WhatsApp!
+
+## Overview
+
+Here's what you'll get:
+
+
+
+## Setup
+
+Go to **Kuma** -> **Settings** -> **Notifications** and find **WhatsApp (WAHA)** notification type.
+
+{{< callout context="note" icon="outline/info-circle" >}}
+If you don't find it there - kindly update **Uptime Kuma** to the latest version or
+try setting up it from
+[Uptime Kuma](https://github.com/louislam/uptime-kuma)
+
+**WhatsApp (WAHA)** provider has been added in [this commit](https://github.com/louislam/uptime-kuma/commit/6f8f8f955f1d47016b43db62bf8757bb5b108abf).
+{{< /callout >}}
+
+
-
-We've created a few examples on how to interact with WAHA WhatsApp API with Kotlin (ktor).
-
-You can find the examples in
-[examples folder on GitHub with detailed instructions in README.md ->](https://github.com/devlikeapro/waha-kotlin)
-
-## Installation
-
-We assume that you have installed software:
-
-1. Kotlin + JVM
-2. Docker
-
-### Download and start image
-
-First of all, you must run WhatsApp API locally (which under the hood it
-runs real WhatsApp Web instance and expose HTTP API for interaction).
-
-Here are the steps from
-[Quick Start](https://waha.devlike.pro/docs/overview/quick-start/):
-
-Download and start WhatsApp API docker container
-
-```bash
-# Download the image
-docker pull devlikeapro/waha
-# Run the docker container
-docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha
-
-# It prints logs and the last line must be
-# WhatsApp API is running on: http://[::1]:3000
-```
-
-#### Download image - ARM
-
-If you're using ARM (like Apple Silicon, Apple M1, etc.) - use following
-commands to download the image
-
- For Core version the command is
-
-```bash
-# Download the image
-docker pull devlikeapro/waha:arm
-# Rename it, so you can use devlikeapro/waha image in other place
-docker tag devlikeapro/waha:arm devlikeapro/waha
-# Run the docker container
-docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha
-
-# It prints logs and the last line must be
-# WhatsApp API is running on: http://[::1]:3000
-```
-
-### Start session and scan QR
-
-2. Open Swagger API in the browser http://localhost:3000/
-3. Start session and scan QR code in swagger
- 1. Find `POST /api/session` request press **Try it out** and
- **Execute** it with `default` session name
- 2. Find `GET /api/screenshot` and execute it - it must show QR code
- 3. Scan QR code on your mobile WhatsApp application (that installed on your
- phone)
- 4. Execute `GET /api/screenshot` once again - it must show the screenshot
- from WhatsApp Web.
-4. Send test text message - find `POST /api/sendText` and execute it with
- payload (change `12132132130` in the `chatId` to phone number that is
- registered in WhatsApp).
-
-```json
-{
- "chatId": "12132132130@c.us",
- "text": "Hi there!",
- "session": "default"
-}
-```
-
-If you see **Hi there!** message then you're ready to run bots!
-
-## WhatsApp Echo Bot
-
-The WhatsApp Echo Bot is a sample ktor webhook server application that echoes
-back to you whatever you send it. It can serve as a basic reference for how to
-set up webhooks and reply to incoming messages.
-
-```bash
-# Clone the git repository with example
-git clone https://github.com/devlikeapro/waha-kotlin.git
-
-# Build and run the app
-./gradlew build
-./gradlew run
-```
-
-Open http://127.0.0.1:5000/bot - if you see **WhatsApp Echo Bot is ready!** then
-the bot is ready to receive message!
-
-Send message to the WhatsApp (that you used to scan QR code) and it'll echo text
-back to you!
-
-
-## Using Built-in HTTP API
-{{< include file="/layouts/code/language/kotlin/install-dependencies.md" >}}
-{{< include file="/layouts/code/language/kotlin/send-message.md" >}}
-{{< include file="/layouts/code/language/kotlin/receive-message.md" >}}
+---
+title: "WAHA + Kotlin"
+description: "WhatsApp API + Kotlin examples."
+lead: "WhatsApp API + Kotlin examples."
+date: 2020-10-06T08:49:31+00:00
+lastmod: 2020-10-06T08:49:31+00:00
+draft: false
+images: ["kotlin-whatsapp.png"]
+menu:
+docs:
+parent: "help"
+weight: 990
+toc: true
+slug: kotlin
+---
+
+
+
+
+
+We've created a few examples on how to interact with WAHA WhatsApp API with Kotlin (ktor).
+
+You can find the examples in
+[examples folder on GitHub with detailed instructions in README.md ->](https://github.com/devlikeapro/waha-kotlin)
+
+## Installation
+
+We assume that you have installed software:
+
+1. Kotlin + JVM
+2. Docker
+
+### Download and start image
+
+First of all, you must run WhatsApp API locally (which under the hood it
+runs real WhatsApp Web instance and expose HTTP API for interaction).
+
+Here are the steps from
+[Quick Start](https://waha.devlike.pro/docs/overview/quick-start/):
+
+Download and start WhatsApp API docker container
+
+```bash
+# Download the image
+docker pull devlikeapro/waha
+# Run the docker container
+docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha
+
+# It prints logs and the last line must be
+# WhatsApp API is running on: http://[::1]:3000
+```
+
+#### Download image - ARM
+
+If you're using ARM (like Apple Silicon, Apple M1, etc.) - use following
+commands to download the image
+
+For Core version the command is
+
+```bash
+# Download the image
+docker pull devlikeapro/waha:arm
+# Rename it, so you can use devlikeapro/waha image in other place
+docker tag devlikeapro/waha:arm devlikeapro/waha
+# Run the docker container
+docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha
+
+# It prints logs and the last line must be
+# WhatsApp API is running on: http://[::1]:3000
+```
+
+### Start session and scan QR
+
+2. Open Swagger API in the browser http://localhost:3000/
+3. Start session and scan QR code in swagger
+ 1. Find `POST /api/session` request press **Try it out** and
+ **Execute** it with `default` session name
+ 2. Find `GET /api/screenshot` and execute it - it must show QR code
+ 3. Scan QR code on your mobile WhatsApp application (that installed on your
+ phone)
+ 4. Execute `GET /api/screenshot` once again - it must show the screenshot
+ from WhatsApp Web.
+4. Send test text message - find `POST /api/sendText` and execute it with
+ payload (change `12132132130` in the `chatId` to phone number that is
+ registered in WhatsApp).
+
+```json
+{
+ "chatId": "12132132130@c.us",
+ "text": "Hi there!",
+ "session": "default"
+}
+```
+
+If you see **Hi there!** message then you're ready to run bots!
+
+## WhatsApp Echo Bot
+
+The WhatsApp Echo Bot is a sample ktor webhook server application that echoes
+back to you whatever you send it. It can serve as a basic reference for how to
+set up webhooks and reply to incoming messages.
+
+```bash
+# Clone the git repository with example
+git clone https://github.com/devlikeapro/waha-kotlin.git
+
+# Build and run the app
+./gradlew build
+./gradlew run
+```
+
+Open http://127.0.0.1:5000/bot - if you see **WhatsApp Echo Bot is ready!** then
+the bot is ready to receive message!
+
+Send message to the WhatsApp (that you used to scan QR code) and it'll echo text
+back to you!
+
+## Using Built-in HTTP API
+
+{{< include file="/layouts/code/language/kotlin/install-dependencies.md" >}}
+{{< include file="/layouts/code/language/kotlin/send-message.md" >}}
+{{< include file="/layouts/code/language/kotlin/receive-message.md" >}}
diff --git a/content/docs/integrations/waha+php/index.md b/content/docs/integrations/waha+php/index.md
index eac46fe87..f48ff3056 100644
--- a/content/docs/integrations/waha+php/index.md
+++ b/content/docs/integrations/waha+php/index.md
@@ -1,24 +1,23 @@
----
-title: "WAHA + PHP"
-description: "WhatsApp API + PHP examples."
-lead: "WhatsApp API + PHP examples."
-date: 2020-10-06T08:49:31+00:00
-lastmod: 2020-10-06T08:49:31+00:00
-draft: false
-images: []
-menu:
-docs:
-parent: "help"
-weight: 990
-toc: true
-slug: PHP
----
-
-
-
-We've created a few examples on how to interact with WAHA WhatsApp API with Python.
-
-You can find the examples in [examples folder on GitHub with detailed instructions in README.md ->](https://github.com/devlikeapro/waha/tree/core/examples/python)
-
-## Installation
-
-We assume that you have installed software:
-
-1. Python 3
-2. Docker
-
-### Download and start image
-
-First of all, you must run WhatsApp API locally (which under the hood it
-runs real WhatsApp Web instance and expose HTTP API for interaction).
-
-Here are the steps from
-[Quick Start](https://waha.devlike.pro/docs/overview/quick-start/):
-
-Download and start WhatsApp API docker container
-
-```bash
-# Download the image
-docker pull devlikeapro/waha
-# Run the docker container
-docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha
-
-# It prints logs and the last line must be
-# WhatsApp API is running on: http://[::1]:3000
-```
-
-#### Download image - ARM
-
-If you're using ARM (like Apple Silicon, Apple M1, etc.) - use following
-commands to download the image
-
- For Core version the command is
-
-```bash
-# Download the image
-docker pull devlikeapro/waha:arm
-# Rename it, so you can use devlikeapro/waha image in other place
-docker tag devlikeapro/waha:arm devlikeapro/waha
-# Run the docker container
-docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha
-
-# It prints logs and the last line must be
-# WhatsApp API is running on: http://[::1]:3000
-```
-
-### Start session and scan QR
-
-2. Open Swagger API in the browser http://localhost:3000/
-3. Start session and scan QR code in swagger
- 1. Find `POST /api/sessions` request press **Try it out** and
- **Execute** it with `default` session name
- 2. Find `GET /api/screenshot` and execute it - it must show QR code
- 3. Scan QR code on your mobile WhatsApp application (that installed on your
- phone)
- 4. Execute `GET /api/screenshot` once again - it must show the screenshot
- from WhatsApp Web.
-4. Send test text message - find `POST /api/sendText` and execute it with
- payload (change `12132132130` in the `chatId` to phone number that is
- registered in WhatsApp).
-
-```json
-{
- "chatId": "12132132130@c.us",
- "text": "Hi there!",
- "session": "default"
-}
-```
-
-If you see **Hi there!** message then you're ready to run bots!
-
-## WhatsApp Echo Bot
-
-The WhatsApp Echo Bot is a sample flask webhook server application that echoes
-back to you whatever you send it. It can serve as a basic reference for how to
-set up webhooks and reply to incoming messages.
-
-```bash
-# Clone the git repository with example
-git clone https://github.com/devlikeapro/waha.git
-# Open python example folder
-cd waha/examples/python
-# Install requirements
-python -mpip install -r requirements.txt
-# Run the bot
-FLASK_APP=whatsapp_echo_bot.py flask run
-```
-
-Open http://127.0.0.1:5000/bot - if you see **WhatsApp Echo Bot is ready!** then
-the bot is ready to receive message!
-
-Send message to the WhatsApp (that you used to scan QR code) and it'll echo text
-back to you!
-
-## WhatsApp Download Files Bot
-
-The WhatsApp Download Image Bot downloads all files people send to your WhatsApp
-and log the path for the file.
-
-**The bot works only with WAHA Plus version** available with donations. Visit
-[read more about difference between Core and Plus versions](https://waha.devlike.pro/docs/how-to/waha-plus/).
-
-Download **WAHA Plus** version:
-
-```bash
-# Download the image
-docker pull devlikeapro/waha-plus
-# Run the docker container
-docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha-plus
-```
-
-Run the WhatsApp Download Files bot:
-
-```bash
-# Clone the git repository with example
-git clone https://github.com/devlikeapro/waha.git
-# Open python example folder
-cd waha/examples/python
-# Install requirements
-python -mpip install -r requirements.txt
-# Run the bot
-FLASK_APP=whatsapp_download_files_bot.py flask run
-```
-
-Open http://127.0.0.1:5000/bot - if you see **WhatsApp Download Files Bot!**
-then the bot is ready to receive message with files!
-
-## Using Built-in HTTP API
-{{< include file="/layouts/code/language/python/install-dependencies.md" >}}
-{{< include file="/layouts/code/language/python/send-message.md" >}}
-{{< include file="/layouts/code/language/python/receive-message.md" >}}
+---
+title: "WAHA + Python"
+description: "WhatsApp API + Python examples."
+lead: "WhatsApp API + Python examples."
+date: 2020-10-06T08:49:31+00:00
+lastmod: 2020-10-06T08:49:31+00:00
+draft: false
+images: ["python-whatsapp.png"]
+menu:
+docs:
+parent: "help"
+weight: 990
+toc: true
+slug: python
+---
+
+
+
+
+
+We've created a few examples on how to interact with WAHA WhatsApp API with Python.
+
+You can find the examples in [examples folder on GitHub with detailed instructions in README.md ->](https://github.com/devlikeapro/waha/tree/core/examples/python)
+
+## Installation
+
+We assume that you have installed software:
+
+1. Python 3
+2. Docker
+
+### Download and start image
+
+First of all, you must run WhatsApp API locally (which under the hood it
+runs real WhatsApp Web instance and expose HTTP API for interaction).
+
+Here are the steps from
+[Quick Start](https://waha.devlike.pro/docs/overview/quick-start/):
+
+Download and start WhatsApp API docker container
+
+```bash
+# Download the image
+docker pull devlikeapro/waha
+# Run the docker container
+docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha
+
+# It prints logs and the last line must be
+# WhatsApp API is running on: http://[::1]:3000
+```
+
+#### Download image - ARM
+
+If you're using ARM (like Apple Silicon, Apple M1, etc.) - use following
+commands to download the image
+
+For Core version the command is
+
+```bash
+# Download the image
+docker pull devlikeapro/waha:arm
+# Rename it, so you can use devlikeapro/waha image in other place
+docker tag devlikeapro/waha:arm devlikeapro/waha
+# Run the docker container
+docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha
+
+# It prints logs and the last line must be
+# WhatsApp API is running on: http://[::1]:3000
+```
+
+### Start session and scan QR
+
+2. Open Swagger API in the browser http://localhost:3000/
+3. Start session and scan QR code in swagger
+ 1. Find `POST /api/sessions` request press **Try it out** and
+ **Execute** it with `default` session name
+ 2. Find `GET /api/screenshot` and execute it - it must show QR code
+ 3. Scan QR code on your mobile WhatsApp application (that installed on your
+ phone)
+ 4. Execute `GET /api/screenshot` once again - it must show the screenshot
+ from WhatsApp Web.
+4. Send test text message - find `POST /api/sendText` and execute it with
+ payload (change `12132132130` in the `chatId` to phone number that is
+ registered in WhatsApp).
+
+```json
+{
+ "chatId": "12132132130@c.us",
+ "text": "Hi there!",
+ "session": "default"
+}
+```
+
+If you see **Hi there!** message then you're ready to run bots!
+
+## WhatsApp Echo Bot
+
+The WhatsApp Echo Bot is a sample flask webhook server application that echoes
+back to you whatever you send it. It can serve as a basic reference for how to
+set up webhooks and reply to incoming messages.
+
+```bash
+# Clone the git repository with example
+git clone https://github.com/devlikeapro/waha.git
+# Open python example folder
+cd waha/examples/python
+# Install requirements
+python -mpip install -r requirements.txt
+# Run the bot
+FLASK_APP=whatsapp_echo_bot.py flask run
+```
+
+Open http://127.0.0.1:5000/bot - if you see **WhatsApp Echo Bot is ready!** then
+the bot is ready to receive message!
+
+Send message to the WhatsApp (that you used to scan QR code) and it'll echo text
+back to you!
+
+## WhatsApp Download Files Bot
+
+The WhatsApp Download Image Bot downloads all files people send to your WhatsApp
+and log the path for the file.
+
+**The bot works only with WAHA Plus version** available with donations. Visit
+[read more about difference between Core and Plus versions](https://waha.devlike.pro/docs/how-to/waha-plus/).
+
+Download **WAHA Plus** version:
+
+```bash
+# Download the image
+docker pull devlikeapro/waha-plus
+# Run the docker container
+docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name waha devlikeapro/waha-plus
+```
+
+Run the WhatsApp Download Files bot:
+
+```bash
+# Clone the git repository with example
+git clone https://github.com/devlikeapro/waha.git
+# Open python example folder
+cd waha/examples/python
+# Install requirements
+python -mpip install -r requirements.txt
+# Run the bot
+FLASK_APP=whatsapp_download_files_bot.py flask run
+```
+
+Open http://127.0.0.1:5000/bot - if you see **WhatsApp Download Files Bot!**
+then the bot is ready to receive message with files!
+
+## Using Built-in HTTP API
+
+{{< include file="/layouts/code/language/python/install-dependencies.md" >}}
+{{< include file="/layouts/code/language/python/send-message.md" >}}
+{{< include file="/layouts/code/language/python/receive-message.md" >}}
diff --git a/content/docs/overview/_index.md b/content/docs/overview/_index.md
index c9dbe086a..fef0f1f2e 100644
--- a/content/docs/overview/_index.md
+++ b/content/docs/overview/_index.md
@@ -1,16 +1,16 @@
----
-title : "📄 Overview"
-description: "WAHA - WhatsApp API"
-lead: ""
-date: 2020-10-06T08:48:45+00:00
-lastmod: 2020-10-06T08:48:45+00:00
-draft: false
-weight: 100
-slug: overview
-sidebar:
- collapsed: true
----
-
-Overview of the **WAHA** - WhatsApp API.
-
-What is it, how to use it, and what you can do with it.
+---
+title: "📄 Overview"
+description: "WAHA - WhatsApp API"
+lead: ""
+date: 2020-10-06T08:48:45+00:00
+lastmod: 2020-10-06T08:48:45+00:00
+draft: false
+weight: 100
+slug: overview
+sidebar:
+ collapsed: true
+---
+
+Overview of the **WAHA** - WhatsApp API.
+
+What is it, how to use it, and what you can do with it.
diff --git a/content/docs/overview/changelog.md b/content/docs/overview/changelog.md
index 6355187d0..571e3b1b1 100644
--- a/content/docs/overview/changelog.md
+++ b/content/docs/overview/changelog.md
@@ -1,1157 +1,1283 @@
----
-title: "🆕 Changelog"
-description: "WAHA's changelog"
-lead: "You can find here the list of changes made to WAHA."
-date: 2020-10-06T08:49:31+00:00
-lastmod: 2020-10-06T08:49:31+00:00
-draft: false
-
-menu:
- docs:
- parent: "help"
-weight: 199
-toc: true
----
-
-
-## Get Notified
-If you wish to get **Monthly Summary** about WAHA changes, subscribe to our channels.
-
-{{< callout context="tip" title="You can subscribe on free tier!" icon="outline/rss" >}}
-- [**Patreon ->**](https://patreon.com/wa_http_api)
-- [**Boosty ->**](https://boosty.to/wa-http-api)
-{{< /callout >}}
-
-If you wish to get **Real-Time Email** about new changes,
-you can **Watch Releases** in [**🐙 WAHA GitHub**](https://github.com/devlikeapro/waha)
-
-{{< details "💡 GitHub - How To Subscribe" >}}
-
-Go to [https://github.com/devlikeapro/waha](https://github.com/devlikeapro/waha), click **Watch - Custom**:
-{{< imgo src="/images/github/github-watch.png" full="false" >}}
-
-Select **Releases**, click **Apply**:
-{{< imgo src="/images/github/github-watch-releases.png" full="false" >}}
-
-You will get notifications about new releases in associated email!
-
-{{< /details >}}
-## Releases
-Latest Version:
-
-
-
-
-{{< callout context="note" icon="outline/info-circle" >}}
-Check the [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) page to learn how to update WAHA.
-{{< /callout >}}
-
-### 2025.8
-
-🛠️ **Fixes**
-
-- `2025.8.1` - **WEBJS** - fix create group - {{< issue 1145 >}}
-- `2025.8.1` - **NOWEB** - fix channel list - {{< issue 1177 >}}
-- `2025.8.1` - limited characters in the session name - {{< issue 1163 >}}
-
-### 2025.7
-**🆕 NEW**
-
-- `2025.7.11` - Add languages (i18n) on [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}})
-- `2025.7.8` - Add [**👤 Update Contact API**]({{< relref "/docs/how-to/contacts#update-contact" >}}) - {{< issue 1124 >}}
- - **WEBJS**, **GOWS**, **NOWEB**
-- `2025.7.5` - Add [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}}) - {{< issue 441 >}}
-- `2025.7.2` - **WEBJS** - Add `GET /api/server/debug/browser/trace` API to [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}}) - {{< issue 1092 >}}
-- `2025.7.2` - **WEBJS** - `--a-waha-session` and `--a-waha-timestamp` to chrome/chromium args - {{< issue 1092 >}}
-
-**🧩 Apps**:
-- `2025.7.11` - **ChatWoot** - fix @lid issue - find first by chat id
-- `2025.7.11` - **ChatWoot** - add **Udru** language
-- `2025.7.8` - **ChatWoot** - send `png` as image, not as attachment
-- `2025.7.5` - Add [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}}) - {{< issue 441 >}}
-
-🛠️ **Fixes**
-- `2025.7.11` - **WEBJS** - Fix "You provided 'null' where a stream was expected" - {{< issue 1178 >}}
-- `2025.7.10` - **GOWS** - speed up sending a message to groups - {{< issue 1100 >}}
-- `2025.7.10` - **NOWEB** - do not freeze server in a lot of sessions case (use regular `sqlite3`)
-- `2025.7.9` - **WEBJS** - add `WAHA_RUN_XVFB=False` parameter - {{< issue 1151 >}}
-- `2025.7.9` - adjust `UV_THREADPOOL_SIZE` values (`cpu*2` or min is `4`)
-- `2025.7.7` - **WEBJS** - add browser cache - {{< issue 1131 >}}, {{< issue 1140 >}}
-- `2025.7.6` - **WEBJS** - fix **send seen** and **send read messages** - {{< issue 1117 >}}
-- `2025.7.5` - **WEBJS** - ignore old reactions on connection - {{< issue 494 >}}
-- `2025.7.5` - **WEBJS** - increase rendering processes to 2
-- `2025.7.4` - **NOWEB** - handle [**👤 Lids**]({{< relref "/docs/how-to/contacts/#api---lids" >}}) on first message
- - {{< issue 1073 >}}, {{< issue 1097 >}}
-- `2025.7.4` - **NOWEB** - fix some connection issues
- - {{< issue 531 >}}, {{< issue 1098 >}}
-- `2025.7.4` - **WEBJS** - increase `protocolTimeout` to 300s - {{< issue 1103 >}}
-- `2025.7.4` - **WEBJS** - fix some `STARTING => FAILED` sessions - {{< issue 1071 >}}
-- `2025.7.4` - **GOWS** - Fix [**🟢 Status**]({{< relref "/docs/how-to/status" >}}) to 10K contacts - {{< issue 1058 >}}
-- `2025.7.3` - **GOWS** - fix generating preview links youtu.be
-- `2025.7.3` - **GOWS** - fix fetching media for some messages
-- `2025.7.3` - **GOWS** - reconnect on session start if any network error happens
-- `2025.7.3` - **GOWS** - fix stuck in `STARTING`
- - {{< issue 1043 >}}, {{< issue 1068 >}}, {{< issue 1094 >}}
-- `2025.7.3` - **WEBJS** - disable GPU
-- `2025.7.2` - **WEBJS** - limit renderer process to **1** - {{< issue 1092 >}}
-- `2025.7.2` - remove healthcheck and `ping-check.sh` script - {{< issue 1085 >}}
-- `2025.7.1` - move `HEALTHCHECK` from Dockerfile to docker-compose - {{< issue 1090 >}}
-
-**⚙️ Updates**
-- `2025.7.9` - **NOWEB** - up proto to `v1025126393`
-- `2025.7.4` - **NOWEB** - up engine to `2025-07-04`
-- `2025.7.3` - **GOWS** - up engine and proto to `v1024307498`
-
-### 2025.6
-**🆕 NEW**
-- `2025.6.5` - [**🔒 Security**]({{< relref "/docs/how-to/security" >}}) now available in **WAHA Core** - {{< issue 1069 >}}
-- `2025.6.5` - Support hash in Api Key variable `WAHA_API_KEY=sha512:{HASH}` in [**🔒 API Key Security**]({{< relref "/docs/how-to/security" >}}) - {{< issue 1069 >}}
-- `2025.6.3` - Add `message.edited` to [**🔄 Events**]({{< relref "/docs/how-to/events#messageedited" >}}) - {{< issue 916 >}}, {{< issue 1041 >}}
- - **WEBJS**, **GOWS**, **NOWEB**
- - ⚠️ **NOWEB** - removed an edited **protocol message** from `message` and `message.any`, now listen `message.edited` instead
-- `2025.6.3` - **GOWS** Add `message.revoked` to [**🔄 Events**]({{< relref "/docs/how-to/events#messagerevoked" >}}) - {{< issue 917 >}}
-- `2025.6.3` - Add `revokedMessageId` field to `message.revoked` to [**🔄 Events**]({{< relref "/docs/how-to/events#messagerevoked" >}})
-- `2025.6.2` - Add `convert: true` flag (`false` by default) to `/api/sendVoice` and `/api/sendVideo` - {{< issue 724 >}}
-- `2025.6.2` - Add API to convert voice and video files before sending it - {{< issue 724 >}}
- - [**POST /api/{session}/media/convert/voice**]({{< relref "/docs/how-to/send-messages#media---convert-voice" >}})
- - [**POST /api/{session}/media/convert/video**]({{< relref "/docs/how-to/send-messages#media---convert-video" >}})
- - No more `ffmpeg` required, just use `convert: true` or convert API!
-
-🛠️ **Fixes**
-- `2025.6.7` - fix `curl: command not found` in healthcheck - {{< issue 1085 >}}
- - `:noweb` and `:gows` docker images
-- `2025.6.6` - **NOWEB** - show poll on the sender device - {{< issue 988 >}}
-- `2025.6.6` - **WEBJS** - return message response - {{< issue 1083 >}}
-- `2025.6.6` - **WEBJS** - fix pin message - {{< issue 1081 >}}, {{< issue 1082 >}}
-- `2025.6.6` - **WEBJS** - fix zombie processes - {{< issue 1078 >}}
-- `2025.6.6` - Return `501 Not Implemented` if engine does not support API - {{< issue 1047 >}}
-- `2025.6.4` - **NOWEB** - fix *continuous loop of state synchronization* - {{< issue 1054 >}}
-- `2025.6.3` - Add `timeout` for `AsyncLock` to prevent long queues
- - **NOWEB** - has a lot of it
- - **WEBJS**, **GOWS** - some API for session management
-- `2025.6.3` - **WEBJS** - add `Xvfb` to container {{< issue 1032 >}}
-- `2025.6.2` - **WEBJS** - fix disconnection issues {{< issue 1032 >}}
-- `2025.6.1` - **GOWS** - fix memory leak {{< issue 919 >}}
-- `2025.6.1` - **WEBJS** - fix [**👥 Groups**]({{< relref "/docs/how-to/groups" >}}) management issues
- - {{< issue 1023 >}}, {{< issue 1024 >}}, {{< issue 1025 >}}, {{< issue 1026 >}}, {{< issue 1027 >}}
-
-**⚙️ Updates**
-- `2025.6.2` - **WEBJS** - update chrome, puppeter
-- `2025.6.1` - **GOWS** - up engine to **2025.06.09** version
-- `2025.6.1` - **WEBJS** - up engine to **2025.06.09** version
-
-### 2025.5
-**🆕 NEW**
-- `2025.5.5` - **WEBJS** - [**✅ Presence**]({{}}) API and Events - {{< issue 636 >}}
-- `2025.5.5` - **GOWS** - [**📶 Polls**]({{< relref "docs/how-to/polls" >}}) support - {{< issue 899 >}}
-- `2025.5.5` - Filter chats by `ids` in [**💬 Chats - Get Chats Overview**]({{< relref "/docs/how-to/chats#get-chats-overview" >}}) API - {{< issue 791 >}}
-- `2025.5.4` - Add [**👤 Contacts - Lids API**]({{< relref "/docs/how-to/contacts/#api---lids" >}}) to map `@lid` to `@c.us` - {{< issue 957 >}}
- - **WEBJS**, **NOWEB**, **GOWS**
-- `2025.5.4` - **GOWS** - [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) support - {{< issue 922 >}}
-- `2025.5.4` - **GOWS** - add `POST /api/sendContactVcard` support - {{< issue 902 >}}
-
-🛠️ **Fixes**
-- `2025.5.6` - Fix fetch media from S3/PostgreSQL - {{< issue 1007 >}}
-- `2025.5.5` - Subscribe [**✅ Presence**]({{}}) on each request
- - **WEBJS**, **NOWEB**, **GOWS**
-- `2025.5.5` - **WEBJS** - hide "Fresh Look" modal form {{< issue 987 >}}
-- `2025.5.5` - **WEBJS** - add `tini` to docker to handle zombie processes {{< issue 990 >}}
-- `2025.5.5` - **Local Storage** - fix empty session name issues when calling logout or delete
-- `2025.5.5` - fix pairing Business Accounts connected to official Meta API - {{< issue 864 >}}
- - **NOWEB**, **GOWS**
-- `2025.5.4` - **PostgreSQL** - use `5432` port by default if not provided {{< issue 975 >}}
-- `2025.5.4` - **NOWEB** - fix "async-lock timed out in queue" error on session actions {{< issue 831 >}}
-- `2025.5.3` - **NOWEB** - fix `poll.vote` event - {{< issue 960 >}}
-- `2025.5.2` - **GOWS** - fix pairing Business Accounts connected to official Meta API - {{< issue 864 >}}
-- `2025.5.2` - **NOWEB** - fix pairing via code {{< issue 961 >}}
-- `2025.5.2` - **GOWS** and **NOWEB** - fix "undefined senderKeyDistributionMessage" error
-- `2025.5.2` - protect **PostgreSQL** media with an API key
-- `2025.5.2` - minor security update
-- `2025.5.1` - **NOWEB** - fix syncing for accounts with many messages/contacts - {{< issue 952 >}}
- - [**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}}): **Local**, **PostgreSQL**, **MongoDB**
-- `2025.5.1` - **NOWEB** - no duplicate `message.ack` for a single message - {{< issue 948 >}}
-- `2025.5.1` - **WEBJS** - fix potential connection leak to storages - {{< issue 952 >}}
-- `2025.5.1` - **WEBJS** - fix adding/removing participant to group - {{< issue 944 >}}
-- `2025.5.1` - **WEBJS** - fix sorting groups in `/chats` and `/chats/overview` - {{< issue 915 >}}
-
-**⚙️ Updates**
-- `2025.5.5` - update nestjs - fixes `DeprecationWarning: The 'util.isObject' API is deprecated`
-
-### 2025.4
-`2025.4.2`
-
-**🆕 NEW**
-- Add [**💬 Chats - Read messages**]({{< relref "/docs/how-to/chats#read-messages" >}}) API to mark unread messages as read {{< issue 783>}}
- - **WEBJS**, **NOWEB**, **GOWS**
-- Add `filter.ack` to [**💬 Chats - Get messages**]({{< relref "/docs/how-to/chats#get-messages" >}}) API
- - **WEBJS**, **NOWEB**, **GOWS**
-- **WEBJS** - add `message.ack` events for [**👥 Groups**]({{< relref "/docs/how-to/groups" >}}) and [**🟢 Status**]({{< relref "/docs/how-to/status" >}}) messages
- - {{< issue 495 >}}, {{< issue 900 >}}
-- **WEBJS** - add `message._data.receipts` in [**💬 Chats** - **Get message by id**]({{< relref "/docs/how-to/chats#get-message-by-id" >}}) [**👥 Groups**]({{< relref "/docs/how-to/groups" >}}) and [**🟢 Status**]({{< relref "/docs/how-to/status" >}})
- - It shows all receipts (ack status) for the message
- - {{< issue 495 >}}, {{< issue 900 >}}
-- Read multiple messages by using `messageIds` in [**POST /api/sendSeen**]({{< relref "/docs/how-to/send-messages#send-seen" >}}) API
- - **NOWEB**, **GOWS**
-
-🛠️ **Fixes**
-- **NOWEB** - update message status on `/api/sendSeen` - {{< issue 635 >}}
-- **NOWEB** - fix "Cannot read properties of undefined (reading 'protocolMessage')" - {{< issue 932 >}}
-- **WEBJS** - restart browser on **ProtocolError** and **Promise was collected**
- - {{< issue 244 >}}, {{< issue 714 >}}, {{< issue 685 >}}, {{< issue 936 >}}
-- **NOWEB** - Fix `ack` for new messages (it was `UNKNOWN`, now it's `DEVICE`)
-- **GOWS** - send `DEVICE` `message.ack` for all groups participants
-- Fix **sending** messages to **anonymous groups** (one with `@lid` participants)
- - **NOWEB**
- - **GOWS**
-- Fix **receiving** messages to **groups** and **status** (some messages were missed)
- - **NOWEB**
- - **GOWS**
-
-**⚙️ Updates**
-
-- **NOWEB** - update engine to the latest version
-- **GOWS** - update engine to the latest version
-- **WEBJS** - update
- - **puppeter** (all images)
- - **chrome** (`devlikeapro/waha-plus:chrome`and `devlikeapro/waha:chrome` images)
-
----
-
-`2025.4.1`
-- Fix Send Reaction to [**📢 Channels**]({{< relref "/docs/how-to/channels#send-reaction-to-the-channel" >}}) - {{< issue 889 >}}
- - **GOWS**, **NOWEB**
-- [**📤 Send Link Custom Preview**]({{< relref "/docs/how-to/send-messages#send-link-custom-preview" >}}) - {{< issue 880 >}}, {{< issue 596 >}}
- - **GOWS**, **NOWEB**
-- **GOWS** - fix Send Reaction to other participants messages {{< issue 894 >}}
-
----
-
-### 2025.3
-`2025.3.3`
-- **GOWS** - fix timeout on chat overview - {{< issue 881 >}}, {{< issue 878 >}}
-- **NOWEB** - cache presence data for 1 minute
-
-`2025.3.2`
-- Add [**📤 Button Reply**]({{< relref "/docs/how-to/send-messages#send-buttons-reply" >}}) API - {{< issue 848 >}}
- - **WEBJS**
-- Add features for [**🔄 Global Webhooks**]({{< relref "/docs/how-to/events#global-webhooks" >}}) - {{< issue 855 >}}
- - **GOWS**, **NOWEB**, **WEBJS**
- - Set HMAC using `WHATSAPP_HOOK_HMAC_KEY` environment variable
- - Set retries using `WHATSAPP_HOOK_RETRIES_*` environment variables
- - Set custom headers using `WHATSAPP_HOOK_CUSTOM_HEADERS` environment variables
-- **GOWS** - Fix Get Contact `The "original" argument must be of type function` - {{< issue 866 >}}
-- **NOWEB** - fix out of memory when session stuck in `STARTING` statuses
- - {{< issue 821 >}}, {{< issue 860 >}}, {{< issue 869 >}}
-- **NOWEB** - mark session as `FAILED` if QR code is not scanned in the interval.
-- **NOWEB** - presences optimizations - store presence for 1 hour and fetch new if not accessed
-- Handle sending [**🟢 Status**]({{< relref "/docs/how-to/status" >}}) to 50K contacts - {{< issue 858 >}}
- - **GOWS**, **NOWEB**
-- Add [**🟢 Status - Get New Status Message ID**]({{< relref "/docs/how-to/status" >}}) - {{< issue 858 >}}
- - **GOWS**, **NOWEB**
- - You can use it in [**Send Status to 10K contacts**]({{< relref "/docs/how-to/status#send-status-to-10k-contacts-manually" >}}) flow
-- Add searches by Name and Phone Number to [**📊Dashboard**]({{< relref "/docs/how-to/dashboard#chat-ui" >}})
-- **GOWS** - extract `replyTo` - {{< issue 876 >}}
-
-
-`2025.3.1`
-- **GOWS** multiple improvements
- - Enable Link Previews - {{< issue 763 >}}
- - Delete Status Message - {{< issue 754 >}}
- - Delete Message - {{< issue 796 >}}
- - Edit Message - {{< issue 797 >}}
- - Reply To Message - {{< issue 799 >}}
- - Add `filename` on `/api/sendFile` - {{< issue 853 >}}
-- `linkPreviewHighQuality: true` for [**📤 Send messages - Link Preview**]({{< relref "/docs/how-to/send-messages#link-preview" >}})
- - **GOWS**, **NOWEB**
-- Add `event.timestamp` to [**🔄 Events**]({{< relref "/docs/how-to/events" >}}) - {{< issue 755 >}}
-- **NOWEB** - Filter [**📞 Calls**]({{< relref "/docs/how-to/calls" >}}) from `message` event - {{< issue 840 >}}
-- Support **disappearing messages** in [**📤 Send messages**]({{< relref "/docs/how-to/send-messages" >}}) - {{< issue 736 >}}
- - **GOWS**, **NOWEB**, **WEBJS**
- - Might require repairing (logout/scan qr) for old chats
-- Add `source: api|app` in [**🔄 Events** - message.any]({{< relref "/docs/how-to/events#messageany" >}}) - {{< issue 787 >}}
-- Add [**👥 Groups Count API**]({{< relref "/docs/how-to/groups#get-groups-count" >}}) - {{< issue 752 >}}
- - **GOWS**, **NOWEB**, **WEBJS**
-
-### 2025.2
-`2025.2.8`
-- **WEBJS** - fix empty channels {{< issue 832 >}}
-- Edit message `linkPreview` {{< issue 833 >}}
-
-`2025.2.7`
-- Add [**👥 Group Picture API**]({{< relref "/docs/how-to/groups#group-picture" >}}) - {{< issue 802 >}}
- - **WEBJS**, **NOWEB**, **GOWS**
- - Picture Update available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
-- **GOWS** - Add [**👥 Group API**]({{< relref "/docs/how-to/groups" >}}) - {{< issue 825 >}}
-- **NOWEB** - Add [**👥 Group Settings API**]({{< relref "/docs/how-to/groups" >}}) - {{< issue 695 >}}, {{< issue 808 >}}
-- Add `exclude=participants` to [**👥 Get All Groups API**]({{< relref "/docs/how-to/groups#get-all-groups" >}}) - {{< issue 242 >}}
- - **WEBJS**, **NOWEB**, **GOWS**
-- **NOWEB** - fix `TypeError: group.participants is not iterable` - {{< issue 810 >}}
-- **NOWEB** - disable auto-restart every 30 mins, restart will happen only on socket error - {{< issue 756 >}}
-
-`2025.2.6`
-- **NOWEB** + **PostgreSQL** - fix `\u0000 - unsupported Unicode escape sequence` - {{< issue 820 >}}
-
-`2025.2.5`
-- **NOWEB** - fix `body: null` or empty `body` in some cases - {{< issue 813 >}}
-- **NOWEB** - add `message.revoked` event
-
-`2025.2.4`
-- Add [**👥 group.v2 events**]({{< relref "/docs/how-to/groups#events" >}})
- - `group.v2.join` - when you join a group
- - `group.v2.leave` - when you leave a group
- - `group.v2.participants` - when someone joins, leaves, get promoted or demoted in a group
- - `group.v2.update` - when group information are updated
- - **WEBJS**, **NOWEB**, **GOWS** engines
- - {{< issue 583 >}}, {{< issue 527 >}}, {{< issue 404 >}}
-- **NOWEB** - catch and log unhandled errors {{< issue 809 >}}
-
-`2025.2.3`
-- Add [**🆔 Profile API**]({{< relref "/docs/how-to/profile" >}} ) to get and update profile information {{< issue 529 >}}
- - **WEBJS**, **NOWEB**, **GOWS** engines
-- Fix `hasMedia` behaviour - now when you request messages with `downloadMedia=False`, `hasMedia: true` if message has media
- - **WEBJS**, **NOWEB**, **GOWS** engines
-
-`2025.2.2`
-- [**📢 Search Public Channels**]({{< relref "/docs/how-to/channels#search-channels-by-view" >}}) API - {{< issue 440 >}}
- - Available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
-- [**📢 Get Messages (Preview) From Public Channels**]({{< relref "/docs/how-to/channels##get-messages-from-channel-preview" >}}) API
- - Available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
-- **PostgreSQL** - fix `sorry, too many clients already` in some cases
- - **WEBJS**, **NOWEB**, **GOWS** engines
-- **S3** - fix `headers[headerName].trim is not a function` error {{< issue 790 >}}
-
-`2025.2.1`
-- **GOWS** - [**👤 Contacts**]({{< relref "/docs/how-to/contacts" >}}) API
-- **GOWS** - [**💬 Chats - Get Chats Overview**]({{< relref "/docs/how-to/chats#get-chats-overview" >}}) API
-- **GOWS** - [**💬 Chats - Get Messages**]({{< relref "/docs/how-to/chats#get-messages" >}}) API
-- **NOWEB** - fix group message error {{< issue 765 >}}, {{< issue 766 >}}
-- **GOWS** - fix group message error {{< issue 765 >}}, {{< issue 766 >}}
-
-### 2025.1
-[**Release Notes**]({{< relref "/blog/waha-2025-1" >}})
-
-`2025.1.6`
-- **WEBJS** - fix send image/video to [**📢 Channels**]({{< relref "/docs/how-to/channels" >}}) - {{< issue 733 >}}
-
-`2025.1.5`
-- **GOWS** - add [**📢 Channels**]({{< relref "/docs/how-to/channels" >}}) API
-- **GOWS** - add [**🟢 Status (aka Stories) API**]({{< relref "/docs/how-to/status" >}}) API
-- **GOWS** - add [**Check Contact exists**]({{< relref "/docs/how-to/contacts" >}}) API
-
-`2025.1.4`
-- [**🖥️ Session Storage - PostgresSQL**]({{< relref "/docs/how-to/storages#sessions---postgresql" >}}) - add support for storing sessions in PostgreSQL
- - Available in all [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}})!
-- [**🖼️ Media Storage - PostgresSQL**]({{< relref "/docs/how-to/storages#media---postgresql" >}}) - add support for storing media files in PostgreSQL
- - Available in all [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}})!
-- [**🗄️ Local Storage**]({{< relref "/docs/how-to/storages" >}}) available in **WAHA Core** now - {{< issue 741 >}}
- - Both **🖥️ Session** and **🖼️ Media** storages
-- **S3**, **PostgreSQL** - add `chat-id` metadata {{< issue 717 >}}
-- **WEBJS** - remove unnecessary flags for chrome/chromium process to increase stability
- - {{< issue 685 >}}, {{< issue 714 >}}
-
-`2025.1.3`
-- **GOWS** - add [**🏭 GOWS Engine**]({{< relref "/docs/how-to/engines#gows" >}}) beta version (does not support many features yet)
-- Lazy QR code png generation (300+ sessions performance issue)
-- Shutdown HTTP server gracefully
-
-`2025.1.2`
-- **NOWEB** - fix corrupted sessions {{< issue 731 >}}
-- Use atomic write for files (**NOWEB** + media files)
-
-`2025.1.1`
-- **NOWEB** - do not save empty creds into file when session stops {{< issue 727 >}}
-- **NOWEB** + **MongoDB** - add descending order for messages
-- Some timeout fixes
-
-### 2024.12
-
-[**Release Notes**]({{< relref "/blog/waha-2024-12" >}})
-
-`2024.12.6`
-- Add [**💬 Get chats overview API**]({{< relref "/docs/how-to/chats#get-chats-overview" >}})
- - **WEBJS**, **NOWEB**
- - {{< issue 566 >}}
- - {{< issue 573 >}}
- - {{< issue 701 >}}
-- Add [**📊 Chat UI to Dashboard**]({{< relref "/docs/how-to/dashboard#chat-ui" >}}) -
-as an example for [**💬 Get chats overview API**]({{< relref "/docs/how-to/chats#get-chats-overview" >}})
-- Add [**💬 Get chat picture API**]({{< relref "/docs/how-to/chats#get-chat-picture" >}})
-- Add `refresh` flag to **Get chat picture** and **Get contact picture** API
-- Cache profile picture for 24 hours
-- **WEBJS** - fix "Could not get the quoted message" error when replying to a message - {{< issue 576 >}}
-- **NOWEB** - Fix `not-authorized` on get profile picture {{< issue 381 >}}
-
-`2024.12.5`
-- **NOWEB** - attempt #3 to fix missing messages {{< issue 671 >}}
-
-`2024.12.4`
-- Add [**👥 Join Group API**]({{< relref "/docs/how-to/groups#join-group" >}}) - {{< issue 688 >}}
-
-`2024.12.3`
-- **NOWEB** - use **NOWEB** engine by default in [devlikeapro/waha-plus:noweb]({{< relref "/docs/how-to/engines#docker-images" >}}) - {{< issue 414 >}}
-- **NOWEB** - fix `rate-overlimit` error on groups API {{< issue 462 >}}
-- Add pagination to [**👥 Get Groups API**]({{< relref "/docs/how-to/groups#get-all-groups" >}})
-- Add [**👥 Refresh Groups API**]({{< relref "/docs/how-to/groups#refresh-groups" >}})
-
-`2024.12.2`
-- **NOWEB** - attempt #2 to fix missing messages {{< issue 671 >}}
-
-`2024.12.1`
-- **WEBJS** - fix get channel info by id {{< issue 682 >}}
-- **WEBJS** - fix channel messages {{< issue 683 >}}
-
-### 2024.11
-`2024.11.11`
-- **NOWEB** - fix 403 on media message {{< issue 667 >}}
-- **WEBJS** - fix channels list and message {{< issue 664 >}}
-
-`2024.11.10`
-- **WEBJS** - fix empty groups and participants {{< issue 670 >}} {{< issue 674 >}}
-
-`2024.11.9`
-- **NOWEB** - attempt to fix missing messages {{< issue 671 >}}
-
-`2024.11.8`
-- **WEBJS** - Fix QR code (set `WAHA_WEBJS_CACHE_TYPE=none` by default) - {{< issue 659 >}}
-
-`2024.11.7`
-- **WEBJS** - Add `WAHA_WEBJS_CACHE_TYPE=none` - ability to disable cache for `WEBJS` engine {{< issue 653 >}}, {{< issue 654 >}}
- - [**⚙️ Configuration - WEBJS**]({{< relref "/docs/how-to/config#webjs" >}})
-
-`2024.11.6`
-- Fix **WAHA Core** version {{< issue 645 >}}
-
-`2024.11.5`
-- Add [**📊 Dashboard - Event Monitor**]({{< relref "dashboard#event-monitor" >}}) - observe your events in real-time!
-- All [**🔄 Webhooks**]({{< relref "events#webhooks" >}}) features in **WAHA Core** version now: Retries, HMAC, Custom Headers!
-- [**🔄 Websockets**]({{< relref "events#websockets" >}}) supports all events now {{< issue 535 >}}
-- [**💬 Chats** - **Pin, Unpin message**]({{< relref "/docs/how-to/chats#pin-message" >}}) {{< issue 613>}}
- - **WEBJS**, **NOWEB**
-- **NOWEB** - fix `me.pushName` after authentication {{< issue 409 >}}
-- Add `engine.event` for debug and troubleshooting
-
-`2024.11.4`
-- **NOWEB** - fix many contacts send status issues {{< issue 390 >}}, {{< issue 413 >}}
-- **NOWEB** - `contacts` list for [**🟢 Status (aka Stories) API**]({{< relref "docs/how-to/status" >}}) is not required anymore
-- **WEBJS** - fix **HTTP ERROR 429** {{}}
-
-`2024.11.3`
-- add `linkPreview` flag in `POST /api/sendText` to disable generating preview for links {{< issue 596 >}}, {{< issue 598 >}}
-- Fix "Sqlite: attempt to write to read only database" error {{< issue 628 >}}
-- Fix `POST /api/sendVideo` - "TargetCloseError: Protocol error" {{< issue 629 >}}
-
-`2024.11.2`
-- **WEBJS** - fix cases when it stops receiving events (message, message.ack, etc)
-
-`2024.11.1`
-- Create, Update and Delete [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) - {{< issue 607 >}}
- - **WEBJS**, **NOWEB**
-- **WEBJS** - Add [**🟢 Status (aka Stories) API**]({{< relref "docs/how-to/status" >}})
- - **NOWEB** related issues: {{< issue 390 >}}, {{< issue 413 >}}. You can **WEBJS** for now to handle such cases for now.
-- **NOWEB** + **MongoDB** - fix double message issue - {{< issue 623 >}}
-
-
-### 2024.10
-`2024.10.13`
-- **NOWEB** - fix waves issue on voice message {{< issue 621 >}}
-- Fix `GET /api/messages` limit {{< issue 620 >}}
-
-`2024.10.12`
-- **WEBJS** - fix `FAILED` session (remove `--single-process`)
-
-`2024.10.11`
-- **WEBJS** + **MongoDB** - Fix `SingletonLock: File exists` error on launch
-
-`2024.10.10`
-- **WEBJS** - Update puppeter and Chrome version
-- **WEBJS** - Set window size to 1280x720
-- **WEBJS** - Fix `SingletonLock: File exists` error on launch
-
-`2024.10.9`
-- Add pagination and filters to [**💬 Chats** - **Get messages from chat**]({{< relref "/docs/how-to/chats#get-messages" >}})
- - **WEBJS** can return messages by a single chat
- - **NOWEB** can return messages by a chat or `chatId=all`
- - {{< issue 140 >}}, {{< issue 449 >}}, {{< issue 458 >}}
-- Add [**💬 Chats** - **Get message by id**]({{< relref "/docs/how-to/chats#get-message-by-id" >}})
- - `GET /api/{session}/chats/{chatId}/messages/{messageId}`
- - {{< issue 159 >}}, {{< issue 484 >}}
-- Add [**💬 Chats** - Pagination]({{< relref "/docs/how-to/chats#pagination" >}})
- - {{< issue 371 >}}
-- Add [**👤 Contacts** - Pagination]({{< relref "/docs/how-to/contacts#pagination" >}})
- - {{< issue 371 >}}
-- Add [**💬 Chats** - Unread Chat]({{< relref "/docs/how-to/chats#unread-chat" >}})
- - `POST /api/{session}/chats/{chatId}/unread`
- - **WEBJS**, **NOWEB**
- - {{< issue 498 >}}
-- **NOWEB** - Fix `/archive` and `/unarchive` chats - [**💬 Chats** - Archive Chat]({{< relref "/docs/how-to/chats#archive-chat" >}})
- - {{< issue 445 >}}
-- Remove the device from **Connected Devices** on [**🖥️ Session Logout**]({{< relref "/docs/how-to/sessions#logout-session" >}})
- - **WEBJS**, **NOWEB**
- - {{< issue 148 >}}, {{< issue 327 >}}, {{< issue 194 >}}, {{< issue 211 >}}
-
-`2024.10.8`
-- Add `WAHA_LOCAL_STORE_BASE_DIR` to allow overriding the base directory for local storage [#597](https://github.com/devlikeapro/waha/issues/597)
-
-`2024.10.7`
-- **WAHA Core** - fix webhooks issue [#595](https://github.com/devlikeapro/waha/issues/595)
-
-`2024.10.6`
-- **WEBJS** + **MongoDB** - reduce CPU usage
-
-`2024.10.5`
-- Add **Send Buttons** API `POST /api/sendButtons` - [$544](https://github.com/devlikeapro/waha/issues/544)
- - [**📤 Send messages** - Send Buttons]({{}})
- - **NOWEB**
-- Add **forward message** API `POST /api/forwardMessage` - [#158](https://github.com/devlikeapro/waha/issues/158)
- - [**📤 Send messages** - Forward Message]({{}})
- - **WEBJS**, **NOWEB**
-- Fix sessions stuck in `STARTING` on container restart - [#586](https://github.com/devlikeapro/waha/issues/586)
-- Add `WAHA_AUTO_START_DELAY_SECONDS=0` environment variable so you can control the delay between sessions
- - [**⚙️ Configuration** - Sessions]({{}})
-- Track session status and do not restart it - [#491](https://github.com/devlikeapro/waha/issues/491)
-- Add workers environment variables: `WAHA_WORKER_ID`, `WAHA_WORKER_RESTART_SESSIONS`
-- Add request id in webhooks headers and logs [#580](https://github.com/devlikeapro/waha/issues/580)
- - [**🔄 Webhooks** - Headers]({{< relref "events#headers" >}})
-- Add `policy` for webhook retries [#587](https://github.com/devlikeapro/waha/issues/587)
- - [**🔄 Webhooks** - Headers]({{< relref "events#retries" >}})
-
-`2024.10.4`
-- **NOWEB** - send video note via `POST /api/sendVideo` via `asNote: true`
-- **NOWEB** - handle "sent by advertisement" message properly [#567](https://github.com/devlikeapro/waha/issues/567)
-- **NOWEB** + **MongoDB** - save auth data when stopping session (and container)
-
-`2024.10.3`
-- **WEBJS** + **MongoDB** - handle removing temp folder with retries
-- **WEBJS** - add more logs for state changes to help debugging
-
-`2024.10.2`
-- 📢 **WEBJS** + **MongoDB** setup - handle disconnection properly (it stop saving auth data if connection to mongodb lost)
-
-`2024.10.1` - [**Release Notes**]({{< relref "/blog/waha-2024-10" >}})
-- Receive **media** now available in **WAHA Core** version!
- - [**📥 Receive messages** - Files]({{}})
-- Add `PORT` environment variable for Heroku deployment - [#555](https://github.com/devlikeapro/waha/issues/555)
-- Add `WAHA_BASE_URL` environment variable to set the base URL for the server for `media.url` links
-- **WEBJS** - Add `message.waiting` event for encrypted but not yet decrypted messages [#554](https://github.com/devlikeapro/waha/issues/554)
- - [**🔄 Webhooks** - message.waiting]({{< relref "events#messagewaiting" >}})
- - [https://faq.whatsapp.com/3398056720476987](https://faq.whatsapp.com/3398056720476987)
-- **WEBJS** - handle connectivity issues better, restart client if required [#552](https://github.com/devlikeapro/waha/issues/552)
-- Use `axios` as default library for sending webhooks - solve bad webhooks performance issues for many sessions installation.
-- Handle webhooks retries properly in **WAHA Plus** version (using `axios`)
-
-### 2024.9
-
-`2024.9.6`
-- **NOWEB** - set session presence (`online|offline`) at the start - [#412](https://github.com/devlikeapro/waha/issues/412)
- - Affects notifications on your phone (if it's `online` - you won't get in-app notifications on your device)
-- **WEBJS**, **NOWEB** - fix auto restart logic bug
-- **WEBJS** - support pairing via code `POST /api/{session}/auth/request-code`
- - Read more [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions#get-pairing-code" >}})
-- Retrieve engine info only on detailed `GET /api/sessions/{name}`
-- Check session's status before performing the request in most endpoints
-- **Dashboard** - add login via **QR** and **Code** auth flows
-- **Dashboard, API** - Add `me` for `STOPPED` sessions (account phone number, push name)
-- **Dashboard** - Hide duplicated sessions flag for multiple servers setup (match by `session.name+me.id`)
-
-`2024.9.5`
-- **NOWEB** - fix memory leak and performance problems [#533](https://github.com/devlikeapro/waha/issues/533)
-- **WEBJS** - reduce memory usage for chrome/chromium for ~40MB per session
-- Adjust error message for WAHA Core when session `STOPPED` [#538](https://github.com/devlikeapro/waha/issues/538)
-- Removed `VENOM` engine completely
-- Add special `/api/server/debug/heapsnapshot` to get heap dump for Node.js by `WAHA_DEBUG_MODE=True`
-
-`2024.9.4`
-- Fix empty config sessions operations (`Session not found`)
-
-`2024.9.3`
-- **NOWEB** - fix restarting issue when websocket is not connected yet (WebSocket was closed before the connection was established)
-
-`2024.9.2`
-- **NOWEB** - fix error on incoming messages - [#521](https://github.com/devlikeapro/waha/issues/521)
-
-`2024.9.1` - [**Release Notes**]({{< relref "/blog/waha-2024-9" >}})
-- Add support for **S3** to store media file - [#353](https://github.com/devlikeapro/waha/issues/353)
- - Read more [**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}})
-- Add more granular API for [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}})
- - Dedicated `create, update, delete, start, stop, logout, restart` actions!
- - The old API is working the same way as before for backward compatibility, but marked as **Deprecated**
- - Related issues: [#435](https://github.com/devlikeapro/waha/issues/435), [#480](https://github.com/devlikeapro/waha/issues/480)
-- Add ability to add your [**Metadata**]({{< relref "/docs/how-to/sessions#metadata" >}}) to a session [#443](https://github.com/devlikeapro/waha/issues/443).
- - `metadata` field available in:
- - [List Sessions]({{< relref "/docs/how-to/sessions#list-sessions" >}}) and [Get Session]({{< relref "/docs/how-to/sessions#get-session" >}}) responses
- - [**🔄 Webhooks**]({{< relref "events#metadata" >}}) events
- - [**📊 Dashboard**]({{< relref "dashboard" >}}) for view, and search sessions by metadata
-- Add **Bulk Operations** (start, restart, etc.) for [**📊 Dashboard**]({{< relref "dashboard" >}}) - [#438](https://github.com/devlikeapro/waha/issues/438)
-- Add environment variables on [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}}) - [#319](https://github.com/devlikeapro/waha/issues/319)
-- Add [**🔄 Webhooks - Custom Headers**]({{< relref "/docs/how-to/events#custom-headers" >}}) on [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}})
-- Add `GET /api/server/version` and `/api/server/environment` endpoints
- - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
-- Validate API request on `/api/sessions/*` endpoints - [#470](https://github.com/devlikeapro/waha/issues/470)
- - 📢 **Requires attention** - make sure you're sending the right requests
-- Add `POST /api/sendSeen` documentation and correct swagger spec [#485](https://github.com/devlikeapro/waha/issues/485)
-- Add `GET /api/server/status` endpoint to **get server uptime** - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
-- Add `POST /api/server/stop` endpoint to **restart** server - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
-- Add `WHATSAPP_API_SCHEMA=http` environment variable so you can get the right `media.url` link
-- Add `media.error` to messages with media and error - [#510](https://github.com/devlikeapro/waha/issues/510)
-- Add `reply_to` field for text and media (image, files, etc) messages - [#503](https://github.com/devlikeapro/waha/issues/503)
- - [**📤 Send messages** - reply_to]({{}})
-- Add `replyTo` field for receiving message - [#506](https://github.com/devlikeapro/waha/issues/506)
- - [**📥 Receive messages** - replyTo]({{}})
-- Update **NOWEB** engine to the latest upstream changes
-
-### 2024.8
-`2024.8.5`
-- **NOWEB** - ⚠️ urgent fix [#511](https://github.com/devlikeapro/waha/issues/511)
-
-`2024.8.4`
-- **WEBJS** - fix get `GET /api/{session}/chats?limit=1` "Cannot read properties of undefined (reading 'getChats')" -
-[#486](https://github.com/devlikeapro/waha/issues/486)
-- **NOWEB** - fix sticker download - [#504](https://github.com/devlikeapro/waha/issues/504)
-
-`2024.8.3`
-- fix restart container with **NOWEB** engine [#483](https://github.com/devlikeapro/waha/issues/483)
-- fix " this.logger.info is not a function" in swagger plus [#496](https://github.com/devlikeapro/waha/issues/496)
-
-`2024.8.2`
-- fix flaky **WEBJS** engine issues (`Failed to add page binding with name ...`)
-- **WEBJS** + **MongoDB** - switch to native `zip` and `unzip` binaries [#465](https://github.com/devlikeapro/waha/issues/465)
- - If you're not using official docker image install `zip` and `unzip` AND set `WAHA_ZIPPER=ZIPUNZIP` env variable.
-- Add `WAHA_HTTP_LOG_LEVEL=info` variable to control `request completed` log level - [#466](https://github.com/devlikeapro/waha/issues/466) - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
-
-`2024.8.1` - [**Release Notes**]({{< relref "/blog/waha-2024-8" >}})
-- Add [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) support [#318](https://github.com/devlikeapro/waha/issues/318)
-- Add [**📞 Calls**]({{< relref "docs/how-to/calls" >}}) events [#307](https://github.com/devlikeapro/waha/issues/307)
-- Add [**chat.archive**]({{< relref "docs/how-to/events#chatarchive" >}}) event [#434](https://github.com/devlikeapro/waha/issues/434)
-- Add [**Archive and Unarchive chat endpoints**]({{< relref "docs/how-to/chats" >}}) [#434](https://github.com/devlikeapro/waha/issues/434)
-- Add "sessions.name" index for MongoDB storage [#447](https://github.com/devlikeapro/waha/issues/447)
-- Add `WHATSAPP_API_KEY_EXCLUDE_PATH` to exclude URI from key auth [#451](https://github.com/devlikeapro/waha/issues/451) - [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
-- Add `GET /ping` endpoint to just touch the service (no checks like in `GET /health` is done during that) - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
-
-----
-
-### 2024.7
-
-- `2024.7.7` - **WEBJS** + **MongoDB** fix - `unexpected end of file` [#457](https://github.com/devlikeapro/waha/issues/457)
-- `2024.7.6` - **WEBJS** restart fix [#444](https://github.com/devlikeapro/waha/issues/444)
-- `2024.7.5` - [**📰 WhatsApp Channels**]({{< relref "/docs/how-to/channels" >}})
-- `2024.7.4` - **NOWEB** fix profile picture [#422](https://github.com/devlikeapro/waha/issues/422)
-- `2024.7.3` - added JSON logging format - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}}).
-- `2024.7.2` - **WEBJS** create group fix [#416](https://github.com/devlikeapro/waha/issues/416)
-- `2024.7.1` - **WEBJS** urgent update [#399](https://github.com/devlikeapro/waha/issues/399)
-
-----
-
-### 2024.6
-#### 📢 Breaking changes
-
-----
-
-Docker image has been renamed to `devlikeapro/waha` and `devlikeapro/waha-plus`!
-- Read more about [WAHA Docker images]({{< relref "/docs/how-to/engines#docker-images" >}})
-- Build: `2024.6.2`
-
-----
-
-***🎉 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`
-
-- Read more about [WAHA Docker images]({{< relref "/docs/how-to/engines#versions" >}})
-- Build: `2024.6.1`
-
-----
-
-Added `limit` and `offset` parameters to `GET /api/{session}/chats` endpoint.
-
-- Read more about [Get all chats]({{< relref "/docs/how-to/chats#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**]({{< relref "/blog/waha-https" >}})
-
-- Read more about [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
-- Build: `2024.6.5`
-- Issue: [#42](https://github.com/devlikeapro/waha/issues/42)
-- Issue: [#369](https://github.com/devlikeapro/waha/issues/369)
-
-----
-
-Add [Websockets](({{< relref "/docs/how-to/events#websockets" >}})) support!
-
-- Read more about [Websockets]({{< relref "/docs/how-to/events#websockets" >}})
-- Build: `2024.6.7`
-
-----
-
-**🎉 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]({{< relref "/docs/engines/noweb#store" >}}) before using these endpoints.
-
-- Build: `2024.6.3`
-- Engine: **NOWEB**
-- [Read more about NOWEB Store]({{< relref "/docs/engines/noweb#store" >}})
-- Issue [#169](https://github.com/devlikeapro/waha/issues/169)
-- Issue [#206](https://github.com/devlikeapro/waha/issues/206)
-- Issue [#217](https://github.com/devlikeapro/waha/issues/217)
-- Issue [#322](https://github.com/devlikeapro/waha/issues/322)
-- Issue [#339](https://github.com/devlikeapro/waha/issues/339)
-
-----
-
-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](https://github.com/devlikeapro/waha/issues/356)
-
-----
-
-Delete status endpoint - [`POST /api/{session}/status/delete`]({{}})
-
-- Build: `2024.6.7`
-- Engine: **NOWEB**
-- Issue: [#386](https://github.com/devlikeapro/waha/issues/386)
-
-----
-
-**🎉 New - DASHBOARD**
-
-----
-
-Starting `2024.6.3` [Dashboard]({{< relref "/docs/how-to/dashboard" >}}) is available in **WAHA Core** version!
-
-- Read more about [WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}})
-- Build: `2024.6.3`
-
-----
-
-Starting `2024.6.3` [Dashboard]({{< relref "/docs/how-to/dashboard" >}}) allows connecting to **multiple WAHA instances**!
-
-- Read more about [WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}})
-- Build: `2024.6.3`
-
-----
-
-**🐛 Fixes - NOWEB**
-
-
-Sender presence keeps on typing after sending message.
-- Issue: [#379](https://github.com/devlikeapro/waha/issues/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.
-- Read more about it on [Configuration]({{< relref "/docs/how-to/config" >}})
-- Issue: [#351](https://github.com/devlikeapro/waha/issues/351)
-- Build: `2024.5.13`
-
-----
-
-[Swagger White Label]({{< relref "/docs/how-to/swagger#white-label" >}}) - show your own brand in the Swagger documentation!
-- Read more about [Swagger White Label]({{< relref "/docs/how-to/swagger#white-label" >}})
-- Issue: [#305](https://github.com/devlikeapro/waha/issues/305)
-- Build: `2024.5.4`
-
-----
-
-**🐛 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).
-- Issue: [#315](https://github.com/devlikeapro/waha/issues/315)
-- Read more about [start a session](https://waha.devlike.pro/docs/how-to/sessions/#start)
-- Build: `2024.5.3`
-- Engine: **ALL**
-
-----
-
-**🐛 Fixes - WEBJS**
-
-Handling rare errors in MongoDB process for saving and restoring session data.
-- Build: `2024.5.12`
-- Engine: **WEBJS**
-- Commit: [9c398f2](https://github.com/devlikeapro/waha-plus/commit/9c398f26f937bf0de2c43ebb1e032c7a766ca8f7)
-
-----
-
-Fix send video issue `POST /api/sendVideo` in **WEBJS**.
-- Issue: [#321](https://github.com/devlikeapro/waha/issues/321)
-- Issue: [#328](https://github.com/devlikeapro/waha/issues/328)
-- Build: `2024.5.9`
-- Engine: **WEBJS**
-
-----
-
-Use local cache for **WEBJS** engine (versions file).
-- Issue: [#316](https://github.com/devlikeapro/waha/issues/316)
-- Build: `2024.5.4`
-- Engine: **WEBJS**
-
-----
-
-**🐛 Fixes - NOWEB**
-
-Fix `message.ack` event for viewing status (`status@broadcast`) messages.
-
-- Issue: [#329](https://github.com/devlikeapro/waha/issues/329)
-- Build: `2024.5.14`
-
-----
-
-Auto restart **NOWEB** connection every 30 minutes.
-
-- Issue: [#336](https://github.com/devlikeapro/waha/issues/336)
-- Build: `2024.5.14`
-
-----
-
-Set heap memory limit to 16GB for **NOWEB** engine.
-
-- Issue: [#347](https://github.com/devlikeapro/waha/issues/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](https://github.com/devlikeapro/waha/issues/345)
-- Build: `2024.5.10`
-
-----
-
-Important **NOWEB** Engine Update!
-WhatsApp has deprecated the version currently being used in the NOWEB engine
-
-- [Read on Patreon](https://www.patreon.com/posts/important-noweb-104631614)
-- [Read on Boosty](https://boosty.to/wa-http-api/posts/6ccedda7-ddae-413b-b15f-f2f22192c0d8)
-- Build: `2024.5.8`
-- Engine: **NOWEB**
-
-----
-
-### 2024.4
-**🎉 New**
-
-Add **WAHA Dashboard** - UI to manage your WhatsApp sessions!
-- Read more about [Dashboard]({{< relref "/docs/how-to/dashboard" >}})
-
-----
-
-Add `GET /api/sessions/{session}` endpoint to get information about a specific session.
-- Read more about [Get session information]({{< relref "/docs/how-to/sessions#get-session" >}})
-- Issue: [#300](https://github.com/devlikeapro/waha/issues/300)
-
-----
-
-Implement `GET /api/contacts/profile-picture` for **NOWEB** engine.
-- Read more about [Get contact profile picture](https://waha.devlike.pro/docs/how-to/contacts/#get-contact-profile-picture)
-- Issue: [#298](https://github.com/devlikeapro/waha/issues/298)
-
-----
-
-### 2024.3
-**🎉 New**
-
-----
-
-Add `message.reaction` webhook in **WEBJS** and **NOWEB** engines
-- Read more about [message.reaction]({{< relref "/docs/how-to/events#messagereaction" >}}) event
-- Issue: [#275](https://github.com/devlikeapro/waha/issues/275)
-
-👉 **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`
-- Read [Star and unstar message]({{< relref "/docs/how-to/send-messages#star-and-unstar-message" >}}) documentation
-- Issue: [#273](https://github.com/devlikeapro/waha/issues/240)
-
-----
-
-Add `PUT /api/{session}/chats/{chatId}/messages/{messageId}` endpoint to **edit** the message.
-- Read more about [Edit message]({{< relref "/docs/how-to/send-messages#edit-message" >}})
-- Issue: [#241](https://github.com/devlikeapro/waha/issues/241)
-
-----
-
-Add `DELETE /api/{session}/chats/{chatId}/messages/{messageId}` endpoint to **delete** the message.
-- Read more about [Delete message]({{< relref "/docs/how-to/send-messages#delete-message" >}})
-- Issue: [#209](https://github.com/devlikeapro/waha/issues/209)
-
-----
-
-Add `POST /api/sendContactVcard` support for **NOWEB** engine.
-- Read more about [Send Contact vCard]({{< relref "/docs/how-to/send-messages#send-contact-vcard" >}})
-- Issue: [#276](https://github.com/devlikeapro/waha/issues/256)
-
-----
-
-Handles `caption` and `filename` right in `POST /api/sendFile`
-- Issue: [#94](https://github.com/devlikeapro/waha/issues/94)
-- Issue: [#133](https://github.com/devlikeapro/waha/issues/133)
-
-----
-
-Add security settings for who can send messages `PUT /api/{session}/groups/{groupId}/settings/security/messages-admin-only`
-- Read [Security - who can send messages]({{< relref "/docs/how-to/groups##security---who-can-send-messages" >}})
-- Issue: [#274](https://github.com/devlikeapro/waha/issues/274)
-
-----
-
-Add `config.debug` field to `POST /api/sessions/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.
-```json
-{
- "adminsOnly": false
-}
-```
-
-- `POST /api/sendContactVcard` doesn't work in **VENOM** anymore (use **NOWEB** engine).
-
-### 2024.2
-- Add support for [MongoDB as storage for Session data]({{< relref "/docs/how-to/storages" >}})
-- Support persistent file storage for media files - [now you can save media files between container restarts]({{< relref "/docs/how-to/storages#media" >}})
-- If you set `WHATSAPP_FILES_LIFETIME=0` environment variable - media files will be never deleted.
-- Add `GET /api/health` endpoint to [check the health of the service](https://waha.devlike.pro/docs/how-to/observability/)
-
-### 2024.1
-- Implement [Patron Portal](https://portal.devlike.pro/) where you can get your personal API key and manage your perks.
- - Read more on [Patreon ->](https://www.patreon.com/posts/waha-patron-97637416)
- - Read more on [Boosty ->](https://boosty.to/wa-http-api/posts/8319079f-dac1-4179-b954-fcc559097c76)
-
-### 2024.2
-- Listen for browser disconnected and page close events in **WEBJS** engine [#262](https://github.com/devlikeapro/waha/issues/262)
-
-### 2023.12
-December 2023
-- Add `chatId` field to `GET /api/contacts/check-exists` to help get the right `chatId` for Brazilian numbers.
-Read more about
- [error sending text to half of Brazilian numbers (every number registered before 2012) ->](https://github.com/devlikeapro/waha/issues/238)
-
-### 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](https://github.com/devlikeapro/waha/issues/185)
-- Add dedicated `media` field in webhook payload - now you can know which media is attached to the message.
-```json { title="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
-- Add `GET /api/sessions/{session/me` endpoint so you [can get the phone number associated with the session](https://waha.devlike.pro/docs/how-to/sessions/#get-me)
-- Add [polls support in NOWEB engine](https://waha.devlike.pro/docs/how-to/polls)
-- Add dedicated [Get QR](https://waha.devlike.pro/docs/how-to/sessions/#get-qr) endpoint!
-- Support [pairing method (NOWEB)](https://waha.devlike.pro/docs/how-to/sessions/#get-pairing-code) - you can connect with a code instead of QR.
-- Add string field `ackName: DEVICE|READ|...` in [message.ack payload](https://waha.devlike.pro/docs/how-to/events/#messageack)
-- Support `message.ack` event webhook in **NOWEB** engine
-
-### 2023.8
-August 2023
-- Added [stories (aka status) endpoints](https://waha.devlike.pro/docs/how-to/send-messages/#send-status-aka-stories) to **NOWEB** engine!
- - `POST /api/{session}/status/text|image|voice|video` - choose one that suites your!
-- Added [chats endpoints](https://waha.devlike.pro/docs/how-to/chats)
- - 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](https://waha.devlike.pro/docs/how-to/presence)!
- - With `online` presence you can show your status as online [#121](https://github.com/devlikeapro/waha/issues/121)
- - With `offline` presence you can get notifications for your device [#28](https://github.com/devlikeapro/waha/issues/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]({{< relref "/docs/how-to/events" >}}) -
- you can define webhook configuration when you start a session with `POST /api/sessions/start`!
- - Add HMAC authentication for webhooks
- - Configure retries
- - Add you custom headers
-- Added [proxy configuration](https://waha.devlike.pro/docs/how-to/config/#proxy) with supporting proxy authentication.
- Thanks **puntolino** for the contribution!
- You can control proxy's settings per session with `POST /api/sessions/start` or globally with environment variables.
-- Added [presence information](https://waha.devlike.pro/docs/how-to/presence) - 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 ->]({{< relref "/docs/how-to/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/sessions/stop` with the `logout: True` parameter or by calling `POST /api/sessions/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 `engine` field in webhook payload
-
-```json { title="message" }
-{
- "event": "message",
- "session": "default",
- "engine": "WEBJS",
- "payload": {}
-}
-```
-
-### 2023.5
-May 2023
-
-- Added new [NOWEB engine]({{< relref "/docs/how-to/engines" >}}). **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 ->]({{< relref "/docs/overview/how-to-avoid-blocking" >}}).
-
-### 2023.4
-March 2023
-
-- Add [Groups API]({{< relref "/docs/how-to/groups" >}})
-- Use Chromium by default instead of Chrome
-
-### 2023.1
-January 2023
-
-- Added [Contacts API]({{< relref "/docs/how-to/contacts" >}})
- - 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](https://github.com/devlikeapro/waha/issues/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/sessions/` 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
-
-**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`.
-
-```json { title="message.any" }
-{
- "event": "message.any",
- "payload": {
- }
-}
-```
+---
+title: "🆕 Changelog"
+description: "WAHA's changelog"
+lead: "You can find here the list of changes made to WAHA."
+date: 2020-10-06T08:49:31+00:00
+lastmod: 2020-10-06T08:49:31+00:00
+draft: false
+
+menu:
+ docs:
+ parent: "help"
+weight: 199
+toc: true
+---
+
+## Get Notified
+
+If you wish to get **Monthly Summary** about WAHA changes, subscribe to our channels.
+
+{{< callout context="tip" title="You can subscribe on free tier!" icon="outline/rss" >}}
+
+- [**Patreon ->**](https://patreon.com/wa_http_api)
+- [**Boosty ->**](https://boosty.to/wa-http-api)
+ {{< /callout >}}
+
+If you wish to get **Real-Time Email** about new changes,
+you can **Watch Releases** in [**🐙 WAHA GitHub**](https://github.com/devlikeapro/waha)
+
+{{< details "💡 GitHub - How To Subscribe" >}}
+
+Go to [https://github.com/devlikeapro/waha](https://github.com/devlikeapro/waha), click **Watch - Custom**:
+{{< imgo src="/images/github/github-watch.png" full="false" >}}
+
+Select **Releases**, click **Apply**:
+{{< imgo src="/images/github/github-watch-releases.png" full="false" >}}
+
+You will get notifications about new releases in associated email!
+
+{{< /details >}}
+
+## Releases
+
+Latest Version:
+
+
+
+
+{{< callout context="note" icon="outline/info-circle" >}}
+Check the [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) page to learn how to update WAHA.
+{{< /callout >}}
+
+### 2025.8
+
+🛠️ **Fixes**
+
+- `2025.8.1` - **WEBJS** - fix create group - {{< issue 1145 >}}
+- `2025.8.1` - **NOWEB** - fix channel list - {{< issue 1177 >}}
+- `2025.8.1` - limited characters in the session name - {{< issue 1163 >}}
+
+### 2025.7
+
+**🆕 NEW**
+
+- `2025.7.11` - Add languages (i18n) on [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}})
+- `2025.7.8` - Add [**👤 Update Contact API**]({{< relref "/docs/how-to/contacts#update-contact" >}}) - {{< issue 1124 >}}
+ - **WEBJS**, **GOWS**, **NOWEB**
+- `2025.7.5` - Add [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}}) - {{< issue 441 >}}
+- `2025.7.2` - **WEBJS** - Add `GET /api/server/debug/browser/trace` API to [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}}) - {{< issue 1092 >}}
+- `2025.7.2` - **WEBJS** - `--a-waha-session` and `--a-waha-timestamp` to chrome/chromium args - {{< issue 1092 >}}
+
+**🧩 Apps**:
+
+- `2025.7.11` - **ChatWoot** - fix @lid issue - find first by chat id
+- `2025.7.11` - **ChatWoot** - add **Udru** language
+- `2025.7.8` - **ChatWoot** - send `png` as image, not as attachment
+- `2025.7.5` - Add [**🧩 ChatWoot App**]({{< relref "/docs/apps/chatwoot" >}}) - {{< issue 441 >}}
+
+🛠️ **Fixes**
+
+- `2025.7.11` - **WEBJS** - Fix "You provided 'null' where a stream was expected" - {{< issue 1178 >}}
+- `2025.7.10` - **GOWS** - speed up sending a message to groups - {{< issue 1100 >}}
+- `2025.7.10` - **NOWEB** - do not freeze server in a lot of sessions case (use regular `sqlite3`)
+- `2025.7.9` - **WEBJS** - add `WAHA_RUN_XVFB=False` parameter - {{< issue 1151 >}}
+- `2025.7.9` - adjust `UV_THREADPOOL_SIZE` values (`cpu*2` or min is `4`)
+- `2025.7.7` - **WEBJS** - add browser cache - {{< issue 1131 >}}, {{< issue 1140 >}}
+- `2025.7.6` - **WEBJS** - fix **send seen** and **send read messages** - {{< issue 1117 >}}
+- `2025.7.5` - **WEBJS** - ignore old reactions on connection - {{< issue 494 >}}
+- `2025.7.5` - **WEBJS** - increase rendering processes to 2
+- `2025.7.4` - **NOWEB** - handle [**👤 Lids**]({{< relref "/docs/how-to/contacts/#api---lids" >}}) on first message
+ - {{< issue 1073 >}}, {{< issue 1097 >}}
+- `2025.7.4` - **NOWEB** - fix some connection issues
+ - {{< issue 531 >}}, {{< issue 1098 >}}
+- `2025.7.4` - **WEBJS** - increase `protocolTimeout` to 300s - {{< issue 1103 >}}
+- `2025.7.4` - **WEBJS** - fix some `STARTING => FAILED` sessions - {{< issue 1071 >}}
+- `2025.7.4` - **GOWS** - Fix [**🟢 Status**]({{< relref "/docs/how-to/status" >}}) to 10K contacts - {{< issue 1058 >}}
+- `2025.7.3` - **GOWS** - fix generating preview links youtu.be
+- `2025.7.3` - **GOWS** - fix fetching media for some messages
+- `2025.7.3` - **GOWS** - reconnect on session start if any network error happens
+- `2025.7.3` - **GOWS** - fix stuck in `STARTING`
+ - {{< issue 1043 >}}, {{< issue 1068 >}}, {{< issue 1094 >}}
+- `2025.7.3` - **WEBJS** - disable GPU
+- `2025.7.2` - **WEBJS** - limit renderer process to **1** - {{< issue 1092 >}}
+- `2025.7.2` - remove healthcheck and `ping-check.sh` script - {{< issue 1085 >}}
+- `2025.7.1` - move `HEALTHCHECK` from Dockerfile to docker-compose - {{< issue 1090 >}}
+
+**⚙️ Updates**
+
+- `2025.7.9` - **NOWEB** - up proto to `v1025126393`
+- `2025.7.4` - **NOWEB** - up engine to `2025-07-04`
+- `2025.7.3` - **GOWS** - up engine and proto to `v1024307498`
+
+### 2025.6
+
+**🆕 NEW**
+
+- `2025.6.5` - [**🔒 Security**]({{< relref "/docs/how-to/security" >}}) now available in **WAHA Core** - {{< issue 1069 >}}
+- `2025.6.5` - Support hash in Api Key variable `WAHA_API_KEY=sha512:{HASH}` in [**🔒 API Key Security**]({{< relref "/docs/how-to/security" >}}) - {{< issue 1069 >}}
+- `2025.6.3` - Add `message.edited` to [**🔄 Events**]({{< relref "/docs/how-to/events#messageedited" >}}) - {{< issue 916 >}}, {{< issue 1041 >}}
+ - **WEBJS**, **GOWS**, **NOWEB**
+ - ⚠️ **NOWEB** - removed an edited **protocol message** from `message` and `message.any`, now listen `message.edited` instead
+- `2025.6.3` - **GOWS** Add `message.revoked` to [**🔄 Events**]({{< relref "/docs/how-to/events#messagerevoked" >}}) - {{< issue 917 >}}
+- `2025.6.3` - Add `revokedMessageId` field to `message.revoked` to [**🔄 Events**]({{< relref "/docs/how-to/events#messagerevoked" >}})
+- `2025.6.2` - Add `convert: true` flag (`false` by default) to `/api/sendVoice` and `/api/sendVideo` - {{< issue 724 >}}
+- `2025.6.2` - Add API to convert voice and video files before sending it - {{< issue 724 >}}
+ - [**POST /api/{session}/media/convert/voice**]({{< relref "/docs/how-to/send-messages#media---convert-voice" >}})
+ - [**POST /api/{session}/media/convert/video**]({{< relref "/docs/how-to/send-messages#media---convert-video" >}})
+ - No more `ffmpeg` required, just use `convert: true` or convert API!
+
+🛠️ **Fixes**
+
+- `2025.6.7` - fix `curl: command not found` in healthcheck - {{< issue 1085 >}}
+ - `:noweb` and `:gows` docker images
+- `2025.6.6` - **NOWEB** - show poll on the sender device - {{< issue 988 >}}
+- `2025.6.6` - **WEBJS** - return message response - {{< issue 1083 >}}
+- `2025.6.6` - **WEBJS** - fix pin message - {{< issue 1081 >}}, {{< issue 1082 >}}
+- `2025.6.6` - **WEBJS** - fix zombie processes - {{< issue 1078 >}}
+- `2025.6.6` - Return `501 Not Implemented` if engine does not support API - {{< issue 1047 >}}
+- `2025.6.4` - **NOWEB** - fix _continuous loop of state synchronization_ - {{< issue 1054 >}}
+- `2025.6.3` - Add `timeout` for `AsyncLock` to prevent long queues
+ - **NOWEB** - has a lot of it
+ - **WEBJS**, **GOWS** - some API for session management
+- `2025.6.3` - **WEBJS** - add `Xvfb` to container {{< issue 1032 >}}
+- `2025.6.2` - **WEBJS** - fix disconnection issues {{< issue 1032 >}}
+- `2025.6.1` - **GOWS** - fix memory leak {{< issue 919 >}}
+- `2025.6.1` - **WEBJS** - fix [**👥 Groups**]({{< relref "/docs/how-to/groups" >}}) management issues
+ - {{< issue 1023 >}}, {{< issue 1024 >}}, {{< issue 1025 >}}, {{< issue 1026 >}}, {{< issue 1027 >}}
+
+**⚙️ Updates**
+
+- `2025.6.2` - **WEBJS** - update chrome, puppeter
+- `2025.6.1` - **GOWS** - up engine to **2025.06.09** version
+- `2025.6.1` - **WEBJS** - up engine to **2025.06.09** version
+
+### 2025.5
+
+**🆕 NEW**
+
+- `2025.5.5` - **WEBJS** - [**✅ Presence**]({{}}) API and Events - {{< issue 636 >}}
+- `2025.5.5` - **GOWS** - [**📶 Polls**]({{< relref "docs/how-to/polls" >}}) support - {{< issue 899 >}}
+- `2025.5.5` - Filter chats by `ids` in [**💬 Chats - Get Chats Overview**]({{< relref "/docs/how-to/chats#get-chats-overview" >}}) API - {{< issue 791 >}}
+- `2025.5.4` - Add [**👤 Contacts - Lids API**]({{< relref "/docs/how-to/contacts/#api---lids" >}}) to map `@lid` to `@c.us` - {{< issue 957 >}}
+ - **WEBJS**, **NOWEB**, **GOWS**
+- `2025.5.4` - **GOWS** - [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) support - {{< issue 922 >}}
+- `2025.5.4` - **GOWS** - add `POST /api/sendContactVcard` support - {{< issue 902 >}}
+
+🛠️ **Fixes**
+
+- `2025.5.6` - Fix fetch media from S3/PostgreSQL - {{< issue 1007 >}}
+- `2025.5.5` - Subscribe [**✅ Presence**]({{}}) on each request
+ - **WEBJS**, **NOWEB**, **GOWS**
+- `2025.5.5` - **WEBJS** - hide "Fresh Look" modal form {{< issue 987 >}}
+- `2025.5.5` - **WEBJS** - add `tini` to docker to handle zombie processes {{< issue 990 >}}
+- `2025.5.5` - **Local Storage** - fix empty session name issues when calling logout or delete
+- `2025.5.5` - fix pairing Business Accounts connected to official Meta API - {{< issue 864 >}}
+ - **NOWEB**, **GOWS**
+- `2025.5.4` - **PostgreSQL** - use `5432` port by default if not provided {{< issue 975 >}}
+- `2025.5.4` - **NOWEB** - fix "async-lock timed out in queue" error on session actions {{< issue 831 >}}
+- `2025.5.3` - **NOWEB** - fix `poll.vote` event - {{< issue 960 >}}
+- `2025.5.2` - **GOWS** - fix pairing Business Accounts connected to official Meta API - {{< issue 864 >}}
+- `2025.5.2` - **NOWEB** - fix pairing via code {{< issue 961 >}}
+- `2025.5.2` - **GOWS** and **NOWEB** - fix "undefined senderKeyDistributionMessage" error
+- `2025.5.2` - protect **PostgreSQL** media with an API key
+- `2025.5.2` - minor security update
+- `2025.5.1` - **NOWEB** - fix syncing for accounts with many messages/contacts - {{< issue 952 >}}
+ - [**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}}): **Local**, **PostgreSQL**, **MongoDB**
+- `2025.5.1` - **NOWEB** - no duplicate `message.ack` for a single message - {{< issue 948 >}}
+- `2025.5.1` - **WEBJS** - fix potential connection leak to storages - {{< issue 952 >}}
+- `2025.5.1` - **WEBJS** - fix adding/removing participant to group - {{< issue 944 >}}
+- `2025.5.1` - **WEBJS** - fix sorting groups in `/chats` and `/chats/overview` - {{< issue 915 >}}
+
+**⚙️ Updates**
+
+- `2025.5.5` - update nestjs - fixes `DeprecationWarning: The 'util.isObject' API is deprecated`
+
+### 2025.4
+
+`2025.4.2`
+
+**🆕 NEW**
+
+- Add [**💬 Chats - Read messages**]({{< relref "/docs/how-to/chats#read-messages" >}}) API to mark unread messages as read {{< issue 783>}}
+ - **WEBJS**, **NOWEB**, **GOWS**
+- Add `filter.ack` to [**💬 Chats - Get messages**]({{< relref "/docs/how-to/chats#get-messages" >}}) API
+ - **WEBJS**, **NOWEB**, **GOWS**
+- **WEBJS** - add `message.ack` events for [**👥 Groups**]({{< relref "/docs/how-to/groups" >}}) and [**🟢 Status**]({{< relref "/docs/how-to/status" >}}) messages
+ - {{< issue 495 >}}, {{< issue 900 >}}
+- **WEBJS** - add `message._data.receipts` in [**💬 Chats** - **Get message by id**]({{< relref "/docs/how-to/chats#get-message-by-id" >}}) [**👥 Groups**]({{< relref "/docs/how-to/groups" >}}) and [**🟢 Status**]({{< relref "/docs/how-to/status" >}})
+ - It shows all receipts (ack status) for the message
+ - {{< issue 495 >}}, {{< issue 900 >}}
+- Read multiple messages by using `messageIds` in [**POST /api/sendSeen**]({{< relref "/docs/how-to/send-messages#send-seen" >}}) API
+ - **NOWEB**, **GOWS**
+
+🛠️ **Fixes**
+
+- **NOWEB** - update message status on `/api/sendSeen` - {{< issue 635 >}}
+- **NOWEB** - fix "Cannot read properties of undefined (reading 'protocolMessage')" - {{< issue 932 >}}
+- **WEBJS** - restart browser on **ProtocolError** and **Promise was collected**
+ - {{< issue 244 >}}, {{< issue 714 >}}, {{< issue 685 >}}, {{< issue 936 >}}
+- **NOWEB** - Fix `ack` for new messages (it was `UNKNOWN`, now it's `DEVICE`)
+- **GOWS** - send `DEVICE` `message.ack` for all groups participants
+- Fix **sending** messages to **anonymous groups** (one with `@lid` participants)
+ - **NOWEB**
+ - **GOWS**
+- Fix **receiving** messages to **groups** and **status** (some messages were missed)
+ - **NOWEB**
+ - **GOWS**
+
+**⚙️ Updates**
+
+- **NOWEB** - update engine to the latest version
+- **GOWS** - update engine to the latest version
+- **WEBJS** - update
+ - **puppeter** (all images)
+ - **chrome** (`devlikeapro/waha-plus:chrome`and `devlikeapro/waha:chrome` images)
+
+---
+
+`2025.4.1`
+
+- Fix Send Reaction to [**📢 Channels**]({{< relref "/docs/how-to/channels#send-reaction-to-the-channel" >}}) - {{< issue 889 >}}
+ - **GOWS**, **NOWEB**
+- [**📤 Send Link Custom Preview**]({{< relref "/docs/how-to/send-messages#send-link-custom-preview" >}}) - {{< issue 880 >}}, {{< issue 596 >}}
+ - **GOWS**, **NOWEB**
+- **GOWS** - fix Send Reaction to other participants messages {{< issue 894 >}}
+
+---
+
+### 2025.3
+
+`2025.3.3`
+
+- **GOWS** - fix timeout on chat overview - {{< issue 881 >}}, {{< issue 878 >}}
+- **NOWEB** - cache presence data for 1 minute
+
+`2025.3.2`
+
+- Add [**📤 Button Reply**]({{< relref "/docs/how-to/send-messages#send-buttons-reply" >}}) API - {{< issue 848 >}}
+ - **WEBJS**
+- Add features for [**🔄 Global Webhooks**]({{< relref "/docs/how-to/events#global-webhooks" >}}) - {{< issue 855 >}}
+ - **GOWS**, **NOWEB**, **WEBJS**
+ - Set HMAC using `WHATSAPP_HOOK_HMAC_KEY` environment variable
+ - Set retries using `WHATSAPP_HOOK_RETRIES_*` environment variables
+ - Set custom headers using `WHATSAPP_HOOK_CUSTOM_HEADERS` environment variables
+- **GOWS** - Fix Get Contact `The "original" argument must be of type function` - {{< issue 866 >}}
+- **NOWEB** - fix out of memory when session stuck in `STARTING` statuses
+ - {{< issue 821 >}}, {{< issue 860 >}}, {{< issue 869 >}}
+- **NOWEB** - mark session as `FAILED` if QR code is not scanned in the interval.
+- **NOWEB** - presences optimizations - store presence for 1 hour and fetch new if not accessed
+- Handle sending [**🟢 Status**]({{< relref "/docs/how-to/status" >}}) to 50K contacts - {{< issue 858 >}}
+ - **GOWS**, **NOWEB**
+- Add [**🟢 Status - Get New Status Message ID**]({{< relref "/docs/how-to/status" >}}) - {{< issue 858 >}}
+ - **GOWS**, **NOWEB**
+ - You can use it in [**Send Status to 10K contacts**]({{< relref "/docs/how-to/status#send-status-to-10k-contacts-manually" >}}) flow
+- Add searches by Name and Phone Number to [**📊Dashboard**]({{< relref "/docs/how-to/dashboard#chat-ui" >}})
+- **GOWS** - extract `replyTo` - {{< issue 876 >}}
+
+`2025.3.1`
+
+- **GOWS** multiple improvements
+ - Enable Link Previews - {{< issue 763 >}}
+ - Delete Status Message - {{< issue 754 >}}
+ - Delete Message - {{< issue 796 >}}
+ - Edit Message - {{< issue 797 >}}
+ - Reply To Message - {{< issue 799 >}}
+ - Add `filename` on `/api/sendFile` - {{< issue 853 >}}
+- `linkPreviewHighQuality: true` for [**📤 Send messages - Link Preview**]({{< relref "/docs/how-to/send-messages#link-preview" >}})
+ - **GOWS**, **NOWEB**
+- Add `event.timestamp` to [**🔄 Events**]({{< relref "/docs/how-to/events" >}}) - {{< issue 755 >}}
+- **NOWEB** - Filter [**📞 Calls**]({{< relref "/docs/how-to/calls" >}}) from `message` event - {{< issue 840 >}}
+- Support **disappearing messages** in [**📤 Send messages**]({{< relref "/docs/how-to/send-messages" >}}) - {{< issue 736 >}}
+ - **GOWS**, **NOWEB**, **WEBJS**
+ - Might require repairing (logout/scan qr) for old chats
+- Add `source: api|app` in [**🔄 Events** - message.any]({{< relref "/docs/how-to/events#messageany" >}}) - {{< issue 787 >}}
+- Add [**👥 Groups Count API**]({{< relref "/docs/how-to/groups#get-groups-count" >}}) - {{< issue 752 >}}
+ - **GOWS**, **NOWEB**, **WEBJS**
+
+### 2025.2
+
+`2025.2.8`
+
+- **WEBJS** - fix empty channels {{< issue 832 >}}
+- Edit message `linkPreview` {{< issue 833 >}}
+
+`2025.2.7`
+
+- Add [**👥 Group Picture API**]({{< relref "/docs/how-to/groups#group-picture" >}}) - {{< issue 802 >}}
+ - **WEBJS**, **NOWEB**, **GOWS**
+ - Picture Update available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
+- **GOWS** - Add [**👥 Group API**]({{< relref "/docs/how-to/groups" >}}) - {{< issue 825 >}}
+- **NOWEB** - Add [**👥 Group Settings API**]({{< relref "/docs/how-to/groups" >}}) - {{< issue 695 >}}, {{< issue 808 >}}
+- Add `exclude=participants` to [**👥 Get All Groups API**]({{< relref "/docs/how-to/groups#get-all-groups" >}}) - {{< issue 242 >}}
+ - **WEBJS**, **NOWEB**, **GOWS**
+- **NOWEB** - fix `TypeError: group.participants is not iterable` - {{< issue 810 >}}
+- **NOWEB** - disable auto-restart every 30 mins, restart will happen only on socket error - {{< issue 756 >}}
+
+`2025.2.6`
+
+- **NOWEB** + **PostgreSQL** - fix `\u0000 - unsupported Unicode escape sequence` - {{< issue 820 >}}
+
+`2025.2.5`
+
+- **NOWEB** - fix `body: null` or empty `body` in some cases - {{< issue 813 >}}
+- **NOWEB** - add `message.revoked` event
+
+`2025.2.4`
+
+- Add [**👥 group.v2 events**]({{< relref "/docs/how-to/groups#events" >}})
+ - `group.v2.join` - when you join a group
+ - `group.v2.leave` - when you leave a group
+ - `group.v2.participants` - when someone joins, leaves, get promoted or demoted in a group
+ - `group.v2.update` - when group information are updated
+ - **WEBJS**, **NOWEB**, **GOWS** engines
+ - {{< issue 583 >}}, {{< issue 527 >}}, {{< issue 404 >}}
+- **NOWEB** - catch and log unhandled errors {{< issue 809 >}}
+
+`2025.2.3`
+
+- Add [**🆔 Profile API**]({{< relref "/docs/how-to/profile" >}} ) to get and update profile information {{< issue 529 >}}
+ - **WEBJS**, **NOWEB**, **GOWS** engines
+- Fix `hasMedia` behaviour - now when you request messages with `downloadMedia=False`, `hasMedia: true` if message has media
+ - **WEBJS**, **NOWEB**, **GOWS** engines
+
+`2025.2.2`
+
+- [**📢 Search Public Channels**]({{< relref "/docs/how-to/channels#search-channels-by-view" >}}) API - {{< issue 440 >}}
+ - Available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
+- [**📢 Get Messages (Preview) From Public Channels**]({{< relref "/docs/how-to/channels##get-messages-from-channel-preview" >}}) API
+ - Available in [**➕ WAHA Plus**]({{< relref "/docs/how-to/waha-plus" >}})
+- **PostgreSQL** - fix `sorry, too many clients already` in some cases
+ - **WEBJS**, **NOWEB**, **GOWS** engines
+- **S3** - fix `headers[headerName].trim is not a function` error {{< issue 790 >}}
+
+`2025.2.1`
+
+- **GOWS** - [**👤 Contacts**]({{< relref "/docs/how-to/contacts" >}}) API
+- **GOWS** - [**💬 Chats - Get Chats Overview**]({{< relref "/docs/how-to/chats#get-chats-overview" >}}) API
+- **GOWS** - [**💬 Chats - Get Messages**]({{< relref "/docs/how-to/chats#get-messages" >}}) API
+- **NOWEB** - fix group message error {{< issue 765 >}}, {{< issue 766 >}}
+- **GOWS** - fix group message error {{< issue 765 >}}, {{< issue 766 >}}
+
+### 2025.1
+
+[**Release Notes**]({{< relref "/blog/waha-2025-1" >}})
+
+`2025.1.6`
+
+- **WEBJS** - fix send image/video to [**📢 Channels**]({{< relref "/docs/how-to/channels" >}}) - {{< issue 733 >}}
+
+`2025.1.5`
+
+- **GOWS** - add [**📢 Channels**]({{< relref "/docs/how-to/channels" >}}) API
+- **GOWS** - add [**🟢 Status (aka Stories) API**]({{< relref "/docs/how-to/status" >}}) API
+- **GOWS** - add [**Check Contact exists**]({{< relref "/docs/how-to/contacts" >}}) API
+
+`2025.1.4`
+
+- [**🖥️ Session Storage - PostgresSQL**]({{< relref "/docs/how-to/storages#sessions---postgresql" >}}) - add support for storing sessions in PostgreSQL
+ - Available in all [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}})!
+- [**🖼️ Media Storage - PostgresSQL**]({{< relref "/docs/how-to/storages#media---postgresql" >}}) - add support for storing media files in PostgreSQL
+ - Available in all [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}})!
+- [**🗄️ Local Storage**]({{< relref "/docs/how-to/storages" >}}) available in **WAHA Core** now - {{< issue 741 >}}
+ - Both **🖥️ Session** and **🖼️ Media** storages
+- **S3**, **PostgreSQL** - add `chat-id` metadata {{< issue 717 >}}
+- **WEBJS** - remove unnecessary flags for chrome/chromium process to increase stability
+ - {{< issue 685 >}}, {{< issue 714 >}}
+
+`2025.1.3`
+
+- **GOWS** - add [**🏭 GOWS Engine**]({{< relref "/docs/how-to/engines#gows" >}}) beta version (does not support many features yet)
+- Lazy QR code png generation (300+ sessions performance issue)
+- Shutdown HTTP server gracefully
+
+`2025.1.2`
+
+- **NOWEB** - fix corrupted sessions {{< issue 731 >}}
+- Use atomic write for files (**NOWEB** + media files)
+
+`2025.1.1`
+
+- **NOWEB** - do not save empty creds into file when session stops {{< issue 727 >}}
+- **NOWEB** + **MongoDB** - add descending order for messages
+- Some timeout fixes
+
+### 2024.12
+
+[**Release Notes**]({{< relref "/blog/waha-2024-12" >}})
+
+`2024.12.6`
+
+- Add [**💬 Get chats overview API**]({{< relref "/docs/how-to/chats#get-chats-overview" >}})
+ - **WEBJS**, **NOWEB**
+ - {{< issue 566 >}}
+ - {{< issue 573 >}}
+ - {{< issue 701 >}}
+- Add [**📊 Chat UI to Dashboard**]({{< relref "/docs/how-to/dashboard#chat-ui" >}}) -
+ as an example for [**💬 Get chats overview API**]({{< relref "/docs/how-to/chats#get-chats-overview" >}})
+- Add [**💬 Get chat picture API**]({{< relref "/docs/how-to/chats#get-chat-picture" >}})
+- Add `refresh` flag to **Get chat picture** and **Get contact picture** API
+- Cache profile picture for 24 hours
+- **WEBJS** - fix "Could not get the quoted message" error when replying to a message - {{< issue 576 >}}
+- **NOWEB** - Fix `not-authorized` on get profile picture {{< issue 381 >}}
+
+`2024.12.5`
+
+- **NOWEB** - attempt #3 to fix missing messages {{< issue 671 >}}
+
+`2024.12.4`
+
+- Add [**👥 Join Group API**]({{< relref "/docs/how-to/groups#join-group" >}}) - {{< issue 688 >}}
+
+`2024.12.3`
+
+- **NOWEB** - use **NOWEB** engine by default in [devlikeapro/waha-plus:noweb]({{< relref "/docs/how-to/engines#docker-images" >}}) - {{< issue 414 >}}
+- **NOWEB** - fix `rate-overlimit` error on groups API {{< issue 462 >}}
+- Add pagination to [**👥 Get Groups API**]({{< relref "/docs/how-to/groups#get-all-groups" >}})
+- Add [**👥 Refresh Groups API**]({{< relref "/docs/how-to/groups#refresh-groups" >}})
+
+`2024.12.2`
+
+- **NOWEB** - attempt #2 to fix missing messages {{< issue 671 >}}
+
+`2024.12.1`
+
+- **WEBJS** - fix get channel info by id {{< issue 682 >}}
+- **WEBJS** - fix channel messages {{< issue 683 >}}
+
+### 2024.11
+
+`2024.11.11`
+
+- **NOWEB** - fix 403 on media message {{< issue 667 >}}
+- **WEBJS** - fix channels list and message {{< issue 664 >}}
+
+`2024.11.10`
+
+- **WEBJS** - fix empty groups and participants {{< issue 670 >}} {{< issue 674 >}}
+
+`2024.11.9`
+
+- **NOWEB** - attempt to fix missing messages {{< issue 671 >}}
+
+`2024.11.8`
+
+- **WEBJS** - Fix QR code (set `WAHA_WEBJS_CACHE_TYPE=none` by default) - {{< issue 659 >}}
+
+`2024.11.7`
+
+- **WEBJS** - Add `WAHA_WEBJS_CACHE_TYPE=none` - ability to disable cache for `WEBJS` engine {{< issue 653 >}}, {{< issue 654 >}}
+ - [**⚙️ Configuration - WEBJS**]({{< relref "/docs/how-to/config#webjs" >}})
+
+`2024.11.6`
+
+- Fix **WAHA Core** version {{< issue 645 >}}
+
+`2024.11.5`
+
+- Add [**📊 Dashboard - Event Monitor**]({{< relref "dashboard#event-monitor" >}}) - observe your events in real-time!
+- All [**🔄 Webhooks**]({{< relref "events#webhooks" >}}) features in **WAHA Core** version now: Retries, HMAC, Custom Headers!
+- [**🔄 Websockets**]({{< relref "events#websockets" >}}) supports all events now {{< issue 535 >}}
+- [**💬 Chats** - **Pin, Unpin message**]({{< relref "/docs/how-to/chats#pin-message" >}}) {{< issue 613>}}
+ - **WEBJS**, **NOWEB**
+- **NOWEB** - fix `me.pushName` after authentication {{< issue 409 >}}
+- Add `engine.event` for debug and troubleshooting
+
+`2024.11.4`
+
+- **NOWEB** - fix many contacts send status issues {{< issue 390 >}}, {{< issue 413 >}}
+- **NOWEB** - `contacts` list for [**🟢 Status (aka Stories) API**]({{< relref "docs/how-to/status" >}}) is not required anymore
+- **WEBJS** - fix **HTTP ERROR 429** {{}}
+
+`2024.11.3`
+
+- add `linkPreview` flag in `POST /api/sendText` to disable generating preview for links {{< issue 596 >}}, {{< issue 598 >}}
+- Fix "Sqlite: attempt to write to read only database" error {{< issue 628 >}}
+- Fix `POST /api/sendVideo` - "TargetCloseError: Protocol error" {{< issue 629 >}}
+
+`2024.11.2`
+
+- **WEBJS** - fix cases when it stops receiving events (message, message.ack, etc)
+
+`2024.11.1`
+
+- Create, Update and Delete [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) - {{< issue 607 >}}
+ - **WEBJS**, **NOWEB**
+- **WEBJS** - Add [**🟢 Status (aka Stories) API**]({{< relref "docs/how-to/status" >}})
+ - **NOWEB** related issues: {{< issue 390 >}}, {{< issue 413 >}}. You can **WEBJS** for now to handle such cases for now.
+- **NOWEB** + **MongoDB** - fix double message issue - {{< issue 623 >}}
+
+### 2024.10
+
+`2024.10.13`
+
+- **NOWEB** - fix waves issue on voice message {{< issue 621 >}}
+- Fix `GET /api/messages` limit {{< issue 620 >}}
+
+`2024.10.12`
+
+- **WEBJS** - fix `FAILED` session (remove `--single-process`)
+
+`2024.10.11`
+
+- **WEBJS** + **MongoDB** - Fix `SingletonLock: File exists` error on launch
+
+`2024.10.10`
+
+- **WEBJS** - Update puppeter and Chrome version
+- **WEBJS** - Set window size to 1280x720
+- **WEBJS** - Fix `SingletonLock: File exists` error on launch
+
+`2024.10.9`
+
+- Add pagination and filters to [**💬 Chats** - **Get messages from chat**]({{< relref "/docs/how-to/chats#get-messages" >}})
+ - **WEBJS** can return messages by a single chat
+ - **NOWEB** can return messages by a chat or `chatId=all`
+ - {{< issue 140 >}}, {{< issue 449 >}}, {{< issue 458 >}}
+- Add [**💬 Chats** - **Get message by id**]({{< relref "/docs/how-to/chats#get-message-by-id" >}})
+ - `GET /api/{session}/chats/{chatId}/messages/{messageId}`
+ - {{< issue 159 >}}, {{< issue 484 >}}
+- Add [**💬 Chats** - Pagination]({{< relref "/docs/how-to/chats#pagination" >}})
+ - {{< issue 371 >}}
+- Add [**👤 Contacts** - Pagination]({{< relref "/docs/how-to/contacts#pagination" >}})
+ - {{< issue 371 >}}
+- Add [**💬 Chats** - Unread Chat]({{< relref "/docs/how-to/chats#unread-chat" >}})
+ - `POST /api/{session}/chats/{chatId}/unread`
+ - **WEBJS**, **NOWEB**
+ - {{< issue 498 >}}
+- **NOWEB** - Fix `/archive` and `/unarchive` chats - [**💬 Chats** - Archive Chat]({{< relref "/docs/how-to/chats#archive-chat" >}})
+ - {{< issue 445 >}}
+- Remove the device from **Connected Devices** on [**🖥️ Session Logout**]({{< relref "/docs/how-to/sessions#logout-session" >}})
+ - **WEBJS**, **NOWEB**
+ - {{< issue 148 >}}, {{< issue 327 >}}, {{< issue 194 >}}, {{< issue 211 >}}
+
+`2024.10.8`
+
+- Add `WAHA_LOCAL_STORE_BASE_DIR` to allow overriding the base directory for local storage [#597](https://github.com/devlikeapro/waha/issues/597)
+
+`2024.10.7`
+
+- **WAHA Core** - fix webhooks issue [#595](https://github.com/devlikeapro/waha/issues/595)
+
+`2024.10.6`
+
+- **WEBJS** + **MongoDB** - reduce CPU usage
+
+`2024.10.5`
+
+- Add **Send Buttons** API `POST /api/sendButtons` - [$544](https://github.com/devlikeapro/waha/issues/544)
+ - [**📤 Send messages** - Send Buttons]({{}})
+ - **NOWEB**
+- Add **forward message** API `POST /api/forwardMessage` - [#158](https://github.com/devlikeapro/waha/issues/158)
+ - [**📤 Send messages** - Forward Message]({{}})
+ - **WEBJS**, **NOWEB**
+- Fix sessions stuck in `STARTING` on container restart - [#586](https://github.com/devlikeapro/waha/issues/586)
+- Add `WAHA_AUTO_START_DELAY_SECONDS=0` environment variable so you can control the delay between sessions
+ - [**⚙️ Configuration** - Sessions]({{}})
+- Track session status and do not restart it - [#491](https://github.com/devlikeapro/waha/issues/491)
+- Add workers environment variables: `WAHA_WORKER_ID`, `WAHA_WORKER_RESTART_SESSIONS`
+- Add request id in webhooks headers and logs [#580](https://github.com/devlikeapro/waha/issues/580)
+ - [**🔄 Webhooks** - Headers]({{< relref "events#headers" >}})
+- Add `policy` for webhook retries [#587](https://github.com/devlikeapro/waha/issues/587)
+ - [**🔄 Webhooks** - Headers]({{< relref "events#retries" >}})
+
+`2024.10.4`
+
+- **NOWEB** - send video note via `POST /api/sendVideo` via `asNote: true`
+- **NOWEB** - handle "sent by advertisement" message properly [#567](https://github.com/devlikeapro/waha/issues/567)
+- **NOWEB** + **MongoDB** - save auth data when stopping session (and container)
+
+`2024.10.3`
+
+- **WEBJS** + **MongoDB** - handle removing temp folder with retries
+- **WEBJS** - add more logs for state changes to help debugging
+
+`2024.10.2`
+
+- 📢 **WEBJS** + **MongoDB** setup - handle disconnection properly (it stop saving auth data if connection to mongodb lost)
+
+`2024.10.1` - [**Release Notes**]({{< relref "/blog/waha-2024-10" >}})
+
+- Receive **media** now available in **WAHA Core** version!
+ - [**📥 Receive messages** - Files]({{}})
+- Add `PORT` environment variable for Heroku deployment - [#555](https://github.com/devlikeapro/waha/issues/555)
+- Add `WAHA_BASE_URL` environment variable to set the base URL for the server for `media.url` links
+- **WEBJS** - Add `message.waiting` event for encrypted but not yet decrypted messages [#554](https://github.com/devlikeapro/waha/issues/554)
+ - [**🔄 Webhooks** - message.waiting]({{< relref "events#messagewaiting" >}})
+ - [https://faq.whatsapp.com/3398056720476987](https://faq.whatsapp.com/3398056720476987)
+- **WEBJS** - handle connectivity issues better, restart client if required [#552](https://github.com/devlikeapro/waha/issues/552)
+- Use `axios` as default library for sending webhooks - solve bad webhooks performance issues for many sessions installation.
+- Handle webhooks retries properly in **WAHA Plus** version (using `axios`)
+
+### 2024.9
+
+`2024.9.6`
+
+- **NOWEB** - set session presence (`online|offline`) at the start - [#412](https://github.com/devlikeapro/waha/issues/412)
+ - Affects notifications on your phone (if it's `online` - you won't get in-app notifications on your device)
+- **WEBJS**, **NOWEB** - fix auto restart logic bug
+- **WEBJS** - support pairing via code `POST /api/{session}/auth/request-code`
+ - Read more [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions#get-pairing-code" >}})
+- Retrieve engine info only on detailed `GET /api/sessions/{name}`
+- Check session's status before performing the request in most endpoints
+- **Dashboard** - add login via **QR** and **Code** auth flows
+- **Dashboard, API** - Add `me` for `STOPPED` sessions (account phone number, push name)
+- **Dashboard** - Hide duplicated sessions flag for multiple servers setup (match by `session.name+me.id`)
+
+`2024.9.5`
+
+- **NOWEB** - fix memory leak and performance problems [#533](https://github.com/devlikeapro/waha/issues/533)
+- **WEBJS** - reduce memory usage for chrome/chromium for ~40MB per session
+- Adjust error message for WAHA Core when session `STOPPED` [#538](https://github.com/devlikeapro/waha/issues/538)
+- Removed `VENOM` engine completely
+- Add special `/api/server/debug/heapsnapshot` to get heap dump for Node.js by `WAHA_DEBUG_MODE=True`
+
+`2024.9.4`
+
+- Fix empty config sessions operations (`Session not found`)
+
+`2024.9.3`
+
+- **NOWEB** - fix restarting issue when websocket is not connected yet (WebSocket was closed before the connection was established)
+
+`2024.9.2`
+
+- **NOWEB** - fix error on incoming messages - [#521](https://github.com/devlikeapro/waha/issues/521)
+
+`2024.9.1` - [**Release Notes**]({{< relref "/blog/waha-2024-9" >}})
+
+- Add support for **S3** to store media file - [#353](https://github.com/devlikeapro/waha/issues/353)
+ - Read more [**🗄️ Storages**]({{< relref "/docs/how-to/storages" >}})
+- Add more granular API for [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}})
+ - Dedicated `create, update, delete, start, stop, logout, restart` actions!
+ - The old API is working the same way as before for backward compatibility, but marked as **Deprecated**
+ - Related issues: [#435](https://github.com/devlikeapro/waha/issues/435), [#480](https://github.com/devlikeapro/waha/issues/480)
+- Add ability to add your [**Metadata**]({{< relref "/docs/how-to/sessions#metadata" >}}) to a session [#443](https://github.com/devlikeapro/waha/issues/443).
+ - `metadata` field available in:
+ - [List Sessions]({{< relref "/docs/how-to/sessions#list-sessions" >}}) and [Get Session]({{< relref "/docs/how-to/sessions#get-session" >}}) responses
+ - [**🔄 Webhooks**]({{< relref "events#metadata" >}}) events
+ - [**📊 Dashboard**]({{< relref "dashboard" >}}) for view, and search sessions by metadata
+- Add **Bulk Operations** (start, restart, etc.) for [**📊 Dashboard**]({{< relref "dashboard" >}}) - [#438](https://github.com/devlikeapro/waha/issues/438)
+- Add environment variables on [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}}) - [#319](https://github.com/devlikeapro/waha/issues/319)
+- Add [**🔄 Webhooks - Custom Headers**]({{< relref "/docs/how-to/events#custom-headers" >}}) on [**📊 Dashboard**]({{< relref "/docs/how-to/dashboard" >}})
+- Add `GET /api/server/version` and `/api/server/environment` endpoints
+ - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
+- Validate API request on `/api/sessions/*` endpoints - [#470](https://github.com/devlikeapro/waha/issues/470)
+ - 📢 **Requires attention** - make sure you're sending the right requests
+- Add `POST /api/sendSeen` documentation and correct swagger spec [#485](https://github.com/devlikeapro/waha/issues/485)
+- Add `GET /api/server/status` endpoint to **get server uptime** - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
+- Add `POST /api/server/stop` endpoint to **restart** server - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
+- Add `WHATSAPP_API_SCHEMA=http` environment variable so you can get the right `media.url` link
+- Add `media.error` to messages with media and error - [#510](https://github.com/devlikeapro/waha/issues/510)
+- Add `reply_to` field for text and media (image, files, etc) messages - [#503](https://github.com/devlikeapro/waha/issues/503)
+ - [**📤 Send messages** - reply_to]({{}})
+- Add `replyTo` field for receiving message - [#506](https://github.com/devlikeapro/waha/issues/506)
+ - [**📥 Receive messages** - replyTo]({{}})
+- Update **NOWEB** engine to the latest upstream changes
+
+### 2024.8
+
+`2024.8.5`
+
+- **NOWEB** - ⚠️ urgent fix [#511](https://github.com/devlikeapro/waha/issues/511)
+
+`2024.8.4`
+
+- **WEBJS** - fix get `GET /api/{session}/chats?limit=1` "Cannot read properties of undefined (reading 'getChats')" -
+ [#486](https://github.com/devlikeapro/waha/issues/486)
+- **NOWEB** - fix sticker download - [#504](https://github.com/devlikeapro/waha/issues/504)
+
+`2024.8.3`
+
+- fix restart container with **NOWEB** engine [#483](https://github.com/devlikeapro/waha/issues/483)
+- fix " this.logger.info is not a function" in swagger plus [#496](https://github.com/devlikeapro/waha/issues/496)
+
+`2024.8.2`
+
+- fix flaky **WEBJS** engine issues (`Failed to add page binding with name ...`)
+- **WEBJS** + **MongoDB** - switch to native `zip` and `unzip` binaries [#465](https://github.com/devlikeapro/waha/issues/465)
+ - If you're not using official docker image install `zip` and `unzip` AND set `WAHA_ZIPPER=ZIPUNZIP` env variable.
+- Add `WAHA_HTTP_LOG_LEVEL=info` variable to control `request completed` log level - [#466](https://github.com/devlikeapro/waha/issues/466) - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
+
+`2024.8.1` - [**Release Notes**]({{< relref "/blog/waha-2024-8" >}})
+
+- Add [**🏷️ Labels**]({{< relref "docs/how-to/labels" >}}) support [#318](https://github.com/devlikeapro/waha/issues/318)
+- Add [**📞 Calls**]({{< relref "docs/how-to/calls" >}}) events [#307](https://github.com/devlikeapro/waha/issues/307)
+- Add [**chat.archive**]({{< relref "docs/how-to/events#chatarchive" >}}) event [#434](https://github.com/devlikeapro/waha/issues/434)
+- Add [**Archive and Unarchive chat endpoints**]({{< relref "docs/how-to/chats" >}}) [#434](https://github.com/devlikeapro/waha/issues/434)
+- Add "sessions.name" index for MongoDB storage [#447](https://github.com/devlikeapro/waha/issues/447)
+- Add `WHATSAPP_API_KEY_EXCLUDE_PATH` to exclude URI from key auth [#451](https://github.com/devlikeapro/waha/issues/451) - [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
+- Add `GET /ping` endpoint to just touch the service (no checks like in `GET /health` is done during that) - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}})
+
+---
+
+### 2024.7
+
+- `2024.7.7` - **WEBJS** + **MongoDB** fix - `unexpected end of file` [#457](https://github.com/devlikeapro/waha/issues/457)
+- `2024.7.6` - **WEBJS** restart fix [#444](https://github.com/devlikeapro/waha/issues/444)
+- `2024.7.5` - [**📰 WhatsApp Channels**]({{< relref "/docs/how-to/channels" >}})
+- `2024.7.4` - **NOWEB** fix profile picture [#422](https://github.com/devlikeapro/waha/issues/422)
+- `2024.7.3` - added JSON logging format - [**🔍 Observability**]({{< relref "/docs/how-to/observability" >}}).
+- `2024.7.2` - **WEBJS** create group fix [#416](https://github.com/devlikeapro/waha/issues/416)
+- `2024.7.1` - **WEBJS** urgent update [#399](https://github.com/devlikeapro/waha/issues/399)
+
+---
+
+### 2024.6
+
+#### 📢 Breaking changes
+
+---
+
+Docker image has been renamed to `devlikeapro/waha` and `devlikeapro/waha-plus`!
+
+- Read more about [WAHA Docker images]({{< relref "/docs/how-to/engines#docker-images" >}})
+- Build: `2024.6.2`
+
+---
+
+**_🎉 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`
+
+- Read more about [WAHA Docker images]({{< relref "/docs/how-to/engines#versions" >}})
+- Build: `2024.6.1`
+
+---
+
+Added `limit` and `offset` parameters to `GET /api/{session}/chats` endpoint.
+
+- Read more about [Get all chats]({{< relref "/docs/how-to/chats#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**]({{< relref "/blog/waha-https" >}})
+
+- Read more about [**🔒 Security**]({{< relref "/docs/how-to/security" >}})
+- Build: `2024.6.5`
+- Issue: [#42](https://github.com/devlikeapro/waha/issues/42)
+- Issue: [#369](https://github.com/devlikeapro/waha/issues/369)
+
+---
+
+Add [Websockets](({{< relref "/docs/how-to/events#websockets" >}})) support!
+
+- Read more about [Websockets]({{< relref "/docs/how-to/events#websockets" >}})
+- Build: `2024.6.7`
+
+---
+
+**🎉 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]({{< relref "/docs/engines/noweb#store" >}}) before using these endpoints.
+
+- Build: `2024.6.3`
+- Engine: **NOWEB**
+- [Read more about NOWEB Store]({{< relref "/docs/engines/noweb#store" >}})
+- Issue [#169](https://github.com/devlikeapro/waha/issues/169)
+- Issue [#206](https://github.com/devlikeapro/waha/issues/206)
+- Issue [#217](https://github.com/devlikeapro/waha/issues/217)
+- Issue [#322](https://github.com/devlikeapro/waha/issues/322)
+- Issue [#339](https://github.com/devlikeapro/waha/issues/339)
+
+---
+
+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](https://github.com/devlikeapro/waha/issues/356)
+
+---
+
+Delete status endpoint - [`POST /api/{session}/status/delete`]({{}})
+
+- Build: `2024.6.7`
+- Engine: **NOWEB**
+- Issue: [#386](https://github.com/devlikeapro/waha/issues/386)
+
+---
+
+**🎉 New - DASHBOARD**
+
+---
+
+Starting `2024.6.3` [Dashboard]({{< relref "/docs/how-to/dashboard" >}}) is available in **WAHA Core** version!
+
+- Read more about [WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}})
+- Build: `2024.6.3`
+
+---
+
+Starting `2024.6.3` [Dashboard]({{< relref "/docs/how-to/dashboard" >}}) allows connecting to **multiple WAHA instances**!
+
+- Read more about [WAHA Dashboard]({{< relref "/docs/how-to/dashboard" >}})
+- Build: `2024.6.3`
+
+---
+
+**🐛 Fixes - NOWEB**
+
+Sender presence keeps on typing after sending message.
+
+- Issue: [#379](https://github.com/devlikeapro/waha/issues/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.
+
+- Read more about it on [Configuration]({{< relref "/docs/how-to/config" >}})
+- Issue: [#351](https://github.com/devlikeapro/waha/issues/351)
+- Build: `2024.5.13`
+
+---
+
+[Swagger White Label]({{< relref "/docs/how-to/swagger#white-label" >}}) - show your own brand in the Swagger documentation!
+
+- Read more about [Swagger White Label]({{< relref "/docs/how-to/swagger#white-label" >}})
+- Issue: [#305](https://github.com/devlikeapro/waha/issues/305)
+- Build: `2024.5.4`
+
+---
+
+**🐛 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).
+
+- Issue: [#315](https://github.com/devlikeapro/waha/issues/315)
+- Read more about [start a session](https://waha.devlike.pro/docs/how-to/sessions/#start)
+- Build: `2024.5.3`
+- Engine: **ALL**
+
+---
+
+**🐛 Fixes - WEBJS**
+
+Handling rare errors in MongoDB process for saving and restoring session data.
+
+- Build: `2024.5.12`
+- Engine: **WEBJS**
+- Commit: [9c398f2](https://github.com/devlikeapro/waha-plus/commit/9c398f26f937bf0de2c43ebb1e032c7a766ca8f7)
+
+---
+
+Fix send video issue `POST /api/sendVideo` in **WEBJS**.
+
+- Issue: [#321](https://github.com/devlikeapro/waha/issues/321)
+- Issue: [#328](https://github.com/devlikeapro/waha/issues/328)
+- Build: `2024.5.9`
+- Engine: **WEBJS**
+
+---
+
+Use local cache for **WEBJS** engine (versions file).
+
+- Issue: [#316](https://github.com/devlikeapro/waha/issues/316)
+- Build: `2024.5.4`
+- Engine: **WEBJS**
+
+---
+
+**🐛 Fixes - NOWEB**
+
+Fix `message.ack` event for viewing status (`status@broadcast`) messages.
+
+- Issue: [#329](https://github.com/devlikeapro/waha/issues/329)
+- Build: `2024.5.14`
+
+---
+
+Auto restart **NOWEB** connection every 30 minutes.
+
+- Issue: [#336](https://github.com/devlikeapro/waha/issues/336)
+- Build: `2024.5.14`
+
+---
+
+Set heap memory limit to 16GB for **NOWEB** engine.
+
+- Issue: [#347](https://github.com/devlikeapro/waha/issues/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](https://github.com/devlikeapro/waha/issues/345)
+- Build: `2024.5.10`
+
+---
+
+Important **NOWEB** Engine Update!
+WhatsApp has deprecated the version currently being used in the NOWEB engine
+
+- [Read on Patreon](https://www.patreon.com/posts/important-noweb-104631614)
+- [Read on Boosty](https://boosty.to/wa-http-api/posts/6ccedda7-ddae-413b-b15f-f2f22192c0d8)
+- Build: `2024.5.8`
+- Engine: **NOWEB**
+
+---
+
+### 2024.4
+
+**🎉 New**
+
+Add **WAHA Dashboard** - UI to manage your WhatsApp sessions!
+
+- Read more about [Dashboard]({{< relref "/docs/how-to/dashboard" >}})
+
+---
+
+Add `GET /api/sessions/{session}` endpoint to get information about a specific session.
+
+- Read more about [Get session information]({{< relref "/docs/how-to/sessions#get-session" >}})
+- Issue: [#300](https://github.com/devlikeapro/waha/issues/300)
+
+---
+
+Implement `GET /api/contacts/profile-picture` for **NOWEB** engine.
+
+- Read more about [Get contact profile picture](https://waha.devlike.pro/docs/how-to/contacts/#get-contact-profile-picture)
+- Issue: [#298](https://github.com/devlikeapro/waha/issues/298)
+
+---
+
+### 2024.3
+
+**🎉 New**
+
+---
+
+Add `message.reaction` webhook in **WEBJS** and **NOWEB** engines
+
+- Read more about [message.reaction]({{< relref "/docs/how-to/events#messagereaction" >}}) event
+- Issue: [#275](https://github.com/devlikeapro/waha/issues/275)
+
+👉 **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`
+
+- Read [Star and unstar message]({{< relref "/docs/how-to/send-messages#star-and-unstar-message" >}}) documentation
+- Issue: [#273](https://github.com/devlikeapro/waha/issues/240)
+
+---
+
+Add `PUT /api/{session}/chats/{chatId}/messages/{messageId}` endpoint to **edit** the message.
+
+- Read more about [Edit message]({{< relref "/docs/how-to/send-messages#edit-message" >}})
+- Issue: [#241](https://github.com/devlikeapro/waha/issues/241)
+
+---
+
+Add `DELETE /api/{session}/chats/{chatId}/messages/{messageId}` endpoint to **delete** the message.
+
+- Read more about [Delete message]({{< relref "/docs/how-to/send-messages#delete-message" >}})
+- Issue: [#209](https://github.com/devlikeapro/waha/issues/209)
+
+---
+
+Add `POST /api/sendContactVcard` support for **NOWEB** engine.
+
+- Read more about [Send Contact vCard]({{< relref "/docs/how-to/send-messages#send-contact-vcard" >}})
+- Issue: [#276](https://github.com/devlikeapro/waha/issues/256)
+
+---
+
+Handles `caption` and `filename` right in `POST /api/sendFile`
+
+- Issue: [#94](https://github.com/devlikeapro/waha/issues/94)
+- Issue: [#133](https://github.com/devlikeapro/waha/issues/133)
+
+---
+
+Add security settings for who can send messages `PUT /api/{session}/groups/{groupId}/settings/security/messages-admin-only`
+
+- Read [Security - who can send messages]({{< relref "/docs/how-to/groups##security---who-can-send-messages" >}})
+- Issue: [#274](https://github.com/devlikeapro/waha/issues/274)
+
+---
+
+Add `config.debug` field to `POST /api/sessions/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.
+
+```json
+{
+ "adminsOnly": false
+}
+```
+
+- `POST /api/sendContactVcard` doesn't work in **VENOM** anymore (use **NOWEB** engine).
+
+### 2024.2
+
+- Add support for [MongoDB as storage for Session data]({{< relref "/docs/how-to/storages" >}})
+- Support persistent file storage for media files - [now you can save media files between container restarts]({{< relref "/docs/how-to/storages#media" >}})
+- If you set `WHATSAPP_FILES_LIFETIME=0` environment variable - media files will be never deleted.
+- Add `GET /api/health` endpoint to [check the health of the service](https://waha.devlike.pro/docs/how-to/observability/)
+
+### 2024.1
+
+- Implement [Patron Portal](https://portal.devlike.pro/) where you can get your personal API key and manage your perks.
+ - Read more on [Patreon ->](https://www.patreon.com/posts/waha-patron-97637416)
+ - Read more on [Boosty ->](https://boosty.to/wa-http-api/posts/8319079f-dac1-4179-b954-fcc559097c76)
+
+### 2024.2
+
+- Listen for browser disconnected and page close events in **WEBJS** engine [#262](https://github.com/devlikeapro/waha/issues/262)
+
+### 2023.12
+
+December 2023
+
+- Add `chatId` field to `GET /api/contacts/check-exists` to help get the right `chatId` for Brazilian numbers.
+ Read more about
+ [error sending text to half of Brazilian numbers (every number registered before 2012) ->](https://github.com/devlikeapro/waha/issues/238)
+
+### 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](https://github.com/devlikeapro/waha/issues/185)
+- Add dedicated `media` field in webhook payload - now you can know which media is attached to the message.
+
+```json { title="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
+
+- Add `GET /api/sessions/{session/me` endpoint so you [can get the phone number associated with the session](https://waha.devlike.pro/docs/how-to/sessions/#get-me)
+- Add [polls support in NOWEB engine](https://waha.devlike.pro/docs/how-to/polls)
+- Add dedicated [Get QR](https://waha.devlike.pro/docs/how-to/sessions/#get-qr) endpoint!
+- Support [pairing method (NOWEB)](https://waha.devlike.pro/docs/how-to/sessions/#get-pairing-code) - you can connect with a code instead of QR.
+- Add string field `ackName: DEVICE|READ|...` in [message.ack payload](https://waha.devlike.pro/docs/how-to/events/#messageack)
+- Support `message.ack` event webhook in **NOWEB** engine
+
+### 2023.8
+
+August 2023
+
+- Added [stories (aka status) endpoints](https://waha.devlike.pro/docs/how-to/send-messages/#send-status-aka-stories) to **NOWEB** engine!
+ - `POST /api/{session}/status/text|image|voice|video` - choose one that suites your!
+- Added [chats endpoints](https://waha.devlike.pro/docs/how-to/chats)
+ - 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](https://waha.devlike.pro/docs/how-to/presence)!
+ - With `online` presence you can show your status as online [#121](https://github.com/devlikeapro/waha/issues/121)
+ - With `offline` presence you can get notifications for your device [#28](https://github.com/devlikeapro/waha/issues/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]({{< relref "/docs/how-to/events" >}}) -
+ you can define webhook configuration when you start a session with `POST /api/sessions/start`!
+ - Add HMAC authentication for webhooks
+ - Configure retries
+ - Add you custom headers
+- Added [proxy configuration](https://waha.devlike.pro/docs/how-to/config/#proxy) with supporting proxy authentication.
+ Thanks **puntolino** for the contribution!
+ You can control proxy's settings per session with `POST /api/sessions/start` or globally with environment variables.
+- Added [presence information](https://waha.devlike.pro/docs/how-to/presence) - 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 ->]({{< relref "/docs/how-to/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/sessions/stop` with the `logout: True` parameter or by calling `POST /api/sessions/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 `engine` field in webhook payload
+
+```json { title="message" }
+{
+ "event": "message",
+ "session": "default",
+ "engine": "WEBJS",
+ "payload": {}
+}
+```
+
+### 2023.5
+
+May 2023
+
+- Added new [NOWEB engine]({{< relref "/docs/how-to/engines" >}}). **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 ->]({{< relref "/docs/overview/how-to-avoid-blocking" >}}).
+
+### 2023.4
+
+March 2023
+
+- Add [Groups API]({{< relref "/docs/how-to/groups" >}})
+- Use Chromium by default instead of Chrome
+
+### 2023.1
+
+January 2023
+
+- Added [Contacts API]({{< relref "/docs/how-to/contacts" >}})
+ - 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](https://github.com/devlikeapro/waha/issues/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/sessions/` 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
+
+**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`.
+
+```json { title="message.any" }
+{
+ "event": "message.any",
+ "payload": {}
+}
+```
diff --git a/content/docs/overview/faq.md b/content/docs/overview/faq.md
index 9771d3e81..dc97ab817 100644
--- a/content/docs/overview/faq.md
+++ b/content/docs/overview/faq.md
@@ -1,105 +1,107 @@
----
-title: "❓ FAQ"
-description: "Answers to frequently asked questions."
-lead: "Answers to frequently asked questions."
-date: 2020-10-06T08:49:31+00:00
-lastmod: 2020-10-06T08:49:31+00:00
-draft: false
-
-menu:
-docs:
-parent: "help"
-weight: 190
-toc: true
----
-
-## System Requirements
-### How much CPU and Memory does WAHA need?
-
-WAHA has multiple [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}) under the hood, and the CPU and Memory requirements change depending on the engine used.
-
-{{< callout context="tip" icon="outline/server" >}}
-We **strongly recommend** using a VPS or server with a minimum **2CPU** and **4GB RAM** configuration for the project **even for a single session**.
-
-If you want to host **more sessions** - please check the numbers below
-{{< /callout >}}
-
-
-| Sessions (accounts) in the container | **WEBJS** | **NOWEB** | **GOWS** |
-|--------------------------------------|:---------------:|:---------------:|:---------------:|
-| 1 | 0.3CPU / 400MB | 0.1 CPU / 200MB | 0.1 CPU / 200MB |
-| 10 | 3CPU / 2.5GB | 1CPU / 2GB | 0.5 CPU / 1GB |
-| 50 | 15CPU / 20GB | 2CPU / 4GB | 1.5 CPU / 3GB |
-| 100 | - | 4CPU / 8GB | 3-5 CPU / 5GB |
-| 500 | - | - | 5-8 CPU / 25GB |
-
-{{< include file="content/docs/how-to/install/-the-hosting.md" >}}
-
-### How to horizontally scale WAHA?
-You can scale WAHA horizontally by **running multiple instances of WAHA** on **different servers**
-and distribute the load between them.
-
-{{< callout context="tip" icon="outline/rocket" >}}
-Read about [**WAHA Scaling - how to handle 50+ sessions ->**]({{< relref "/blog/waha-scaling" >}})
-{{< /callout >}}
-
-## WAHA Plus
-### What is the difference between WAHA Core and WAHA Plus?
-
-These are two versions of the product we build:
-
-**WAHA Core**
-- The free and open source project available for everyone.
-- Supports automating a single **WhatsApp Account** (aka [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}}))
-- Sends and receives **unlimited text messages**.
-- Doesn't have any built-in [🔒 Security]({{< relref "/docs/how-to/security" >}}) features,
-which means you need to make sure your infrastructure is secure.
-
-**WAHA Plus**
-- The full version available through donations
-- Supports **unlimited** [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}})
-- Sends and receives **multimedia messages** (images, videos)
-- Has built-in [🔒 Security]({{< relref "/docs/how-to/security" >}}) features
-
-{{< callout >}}
-You can find the full comparison table on [**🎁 Support Us**]({{< relref "/support-us#donations" >}}) page.
-{{< /callout >}}
-
-### What is the difference between Core, Plus and PRO Tiers?
-
-- **Core Tier** - it's free tier (aka community edition) that you're already in, and you can use **WAHA Core** for free!
-- **Plus Tier** - allows you to have access to **WAHA Plus** docker image and enjoy all features available in the product!
-- **PRO Tier** - also gives you access to **WAHA Plus** image AND **WAHA Plus Source Code** on [GitHub](https://github.com/devlikeapro/waha-plus). Also our team will pay additional attentions to your requests 🫶
- - [waha-plus](https://github.com/devlikeapro/waha-plus)
- - [gow-plus](https://github.com/devlikeapro/gows-plus)
- - [dashboard](https://github.com/devlikeapro/waha-hub)
-
-{{< callout >}}
-You can find the full tier comparison table on [**🎁 Support Us**]({{< relref "/support-us#donations" >}}) page.
-{{< /callout >}}
-
-
-### Is it one time donation?
-
-According to [**🎁 Support Us**]({{< relref "/support-us#donations" >}}) page:
-> It doesn't require monthly subscriptions, once installed on your server - it always works!
-> **(until WhatsApp made backward-incompatible changes, and you have to update the image, or you need to reinstall it on new server )**
-
-Meaning that the installed WAHA will continue to work even after you subscription got expired.
-Unfortunately, WhatsApp makes backward incompatible changes and when it happens we need to keep up and update the docker image,
-which means that you need to update your WAHA as well, otherwise it won't work 😔
-It happens like every **3-6 months** or so and depends on your country as well.
-
-In order to update WAHA you need to have **active docker key**
-(which you get on WAHA [Patron Portal](https://portal.devlike.pro)), meaning at this time you need to be active subscriber.
-
-In summary, it's not one time purchase, it's rather **"every 3-6 months" purchase** to get the latest update.
-
-
-{{< callout >}}
-💡 We recommend staying subscribing, so we can keep developing awesome product for you!
-Your support the only reason why we're able to publish and maintain the project 🫶
-
-You can find the full comparison table on [**🎁 Support Us**]({{< relref "/support-us#donations" >}}) page.
-{{< /callout >}}
-
+---
+title: "❓ FAQ"
+description: "Answers to frequently asked questions."
+lead: "Answers to frequently asked questions."
+date: 2020-10-06T08:49:31+00:00
+lastmod: 2020-10-06T08:49:31+00:00
+draft: false
+
+menu:
+docs:
+parent: "help"
+weight: 190
+toc: true
+---
+
+## System Requirements
+
+### How much CPU and Memory does WAHA need?
+
+WAHA has multiple [**🏭 Engines**]({{< relref "/docs/how-to/engines" >}}) under the hood, and the CPU and Memory requirements change depending on the engine used.
+
+{{< callout context="tip" icon="outline/server" >}}
+We **strongly recommend** using a VPS or server with a minimum **2CPU** and **4GB RAM** configuration for the project **even for a single session**.
+
+If you want to host **more sessions** - please check the numbers below
+{{< /callout >}}
+
+| Sessions (accounts) in the container | **WEBJS** | **NOWEB** | **GOWS** |
+| ------------------------------------ | :------------: | :-------------: | :-------------: |
+| 1 | 0.3CPU / 400MB | 0.1 CPU / 200MB | 0.1 CPU / 200MB |
+| 10 | 3CPU / 2.5GB | 1CPU / 2GB | 0.5 CPU / 1GB |
+| 50 | 15CPU / 20GB | 2CPU / 4GB | 1.5 CPU / 3GB |
+| 100 | - | 4CPU / 8GB | 3-5 CPU / 5GB |
+| 500 | - | - | 5-8 CPU / 25GB |
+
+{{< include file="content/docs/how-to/install/-the-hosting.md" >}}
+
+### How to horizontally scale WAHA?
+
+You can scale WAHA horizontally by **running multiple instances of WAHA** on **different servers**
+and distribute the load between them.
+
+{{< callout context="tip" icon="outline/rocket" >}}
+Read about [**WAHA Scaling - how to handle 50+ sessions ->**]({{< relref "/blog/waha-scaling" >}})
+{{< /callout >}}
+
+## WAHA Plus
+
+### What is the difference between WAHA Core and WAHA Plus?
+
+These are two versions of the product we build:
+
+**WAHA Core**
+
+- The free and open source project available for everyone.
+- Supports automating a single **WhatsApp Account** (aka [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}}))
+- Sends and receives **unlimited text messages**.
+- Doesn't have any built-in [🔒 Security]({{< relref "/docs/how-to/security" >}}) features,
+ which means you need to make sure your infrastructure is secure.
+
+**WAHA Plus**
+
+- The full version available through donations
+- Supports **unlimited** [**🖥️ Sessions**]({{< relref "/docs/how-to/sessions" >}})
+- Sends and receives **multimedia messages** (images, videos)
+- Has built-in [🔒 Security]({{< relref "/docs/how-to/security" >}}) features
+
+{{< callout >}}
+You can find the full comparison table on [**🎁 Support Us**]({{< relref "/support-us#donations" >}}) page.
+{{< /callout >}}
+
+### What is the difference between Core, Plus and PRO Tiers?
+
+- **Core Tier** - it's free tier (aka community edition) that you're already in, and you can use **WAHA Core** for free!
+- **Plus Tier** - allows you to have access to **WAHA Plus** docker image and enjoy all features available in the product!
+- **PRO Tier** - also gives you access to **WAHA Plus** image AND **WAHA Plus Source Code** on [GitHub](https://github.com/devlikeapro/waha-plus). Also our team will pay additional attentions to your requests 🫶
+ - [waha-plus](https://github.com/devlikeapro/waha-plus)
+ - [gow-plus](https://github.com/devlikeapro/gows-plus)
+ - [dashboard](https://github.com/devlikeapro/waha-hub)
+
+{{< callout >}}
+You can find the full tier comparison table on [**🎁 Support Us**]({{< relref "/support-us#donations" >}}) page.
+{{< /callout >}}
+
+### Is it one time donation?
+
+According to [**🎁 Support Us**]({{< relref "/support-us#donations" >}}) page:
+
+> It doesn't require monthly subscriptions, once installed on your server - it always works!
+> **(until WhatsApp made backward-incompatible changes, and you have to update the image, or you need to reinstall it on new server )**
+
+Meaning that the installed WAHA will continue to work even after you subscription got expired.
+Unfortunately, WhatsApp makes backward incompatible changes and when it happens we need to keep up and update the docker image,
+which means that you need to update your WAHA as well, otherwise it won't work 😔
+It happens like every **3-6 months** or so and depends on your country as well.
+
+In order to update WAHA you need to have **active docker key**
+(which you get on WAHA [Patron Portal](https://portal.devlike.pro)), meaning at this time you need to be active subscriber.
+
+In summary, it's not one time purchase, it's rather **"every 3-6 months" purchase** to get the latest update.
+
+{{< callout >}}
+💡 We recommend staying subscribing, so we can keep developing awesome product for you!
+Your support the only reason why we're able to publish and maintain the project 🫶
+
+You can find the full comparison table on [**🎁 Support Us**]({{< relref "/support-us#donations" >}}) page.
+{{< /callout >}}
diff --git a/content/docs/overview/how-to-avoid-blocking.md b/content/docs/overview/how-to-avoid-blocking.md
index d0307a3b4..60b0ae41c 100644
--- a/content/docs/overview/how-to-avoid-blocking.md
+++ b/content/docs/overview/how-to-avoid-blocking.md
@@ -1,92 +1,90 @@
----
-title: "⚠️ How to Avoid Blocking"
-description: "How to Avoid Blocking From Whatsapp"
-date: 2020-11-12T13:26:54+01:00
-lastmod: 2020-11-12T13:26:54+01:00
-draft: false
-
-menu:
- docs:
- parent: "help"
-weight: 103
-toc: true
----
-
-How to Avoid Blocking in WhatsApp when developing bots.
-
-It's important to keep in mind that WhatsApp has strict policies in place to prevent spamming and abuse of their
-platform.
-
-If you're developing a bot for WhatsApp, it's crucial to follow these guidelines to avoid getting blocked.
-
-## Guidelines to Follow
-
-### 1. Only Reply to Messages
-
-When developing a bot for WhatsApp, you **should never initiate a conversation**.
-Instead, your bot **should only reply** to messages that it receives.
-This will prevent your bot from being flagged as spam by WhatsApp's users and algorithms.
-
-> You can use a short link http://wa.me/7911111111?text=Hi
-> so a user can click on it and start the dialog with the bot first
-
-### 2. Avoid Spamming and Sending Unnecessary Content
-
-Sending too many messages or sending content that the user did not request can lead to your bot being blocked. Make
-sure to only send relevant and useful information to the user.
-Additionally, do not send too many messages at once, as this can also trigger spam filters.
-
-### 3. Other Considerations
-
-There are other guidelines to follow when developing a bot for WhatsApp, such as avoiding the use of banned words and
-not sharing sensitive or inappropriate content.
-Make sure to read WhatsApp's policies thoroughly to ensure that your bot complies with all of their rules.
-
-## How to Process Messages
-
-When processing messages in your bot, it's important to follow certain steps to avoid being flagged as spam.
-Here's a recommended process to follow:
-
-1. **Send seen** before processing the message. This can be done by sending a `POST /api/sendSeen/` request to
- the WAHA API.
-
-2. **Start typing** before sending a message and wait for a random interval depending on the size of the message. This can
- be done by sending a `POST /api/startTyping/` request.
-
-3. **Stop typing** before sending the message. This can be done by sending a `POST /api/stopTyping/` request.
-
-4. **Send the text message** using the `POST /api/sendText` request.
-
-By following these steps, you can ensure that your bot processes messages in a way that's compliant with WhatsApp's
-guidelines and reduces the risk of being blocked.
-
-## How to Avoid Getting Banned
-
-WhatsApp knows that it's uncommon for someone to send so many messages or bulk messages to people they've never talked to before, so it is considered spam/marketing junk pretty quickly. Here are some tips before sending a message to WhatsApp:
-
-**Dos and Don'ts:**
-
-1. Important: Do NOT send messages which get you reported. As long as you don't get reports from users who you sent a message to, your account will be mostly fine.
-2. Having real content, a survey that the person agreed with is different from a marketing message on a Saturday night.
-3. Send messages written in different ways; you could make a script that places spacebars randomly in your string AND includes the person's (first) name.
-4. Never use fixed times; always go for sending the first message, wait a random time between 30 and 60 seconds, and then send the second message.
-5. Always try to group contacts by their area code; WhatsApp expects a regular person to talk mostly with contacts that are within the same area of your phone number.
-6. Have a profile picture; this is not related to WhatsApp Bots Catcher® but sending a new message to someone without having a picture/name/status will elevate your chances of being manually tagged as spam.
-7. Send "seen" confirmation to messages or disable it on WhatsApp.
-8. Avoid sending links that were previously marked as spam on WhatsApp or non-HTTPS. A URL shortener is a good idea.
-9. IMPORTANT: It's terrible if you send messages 24/7 without giving it some time to wait. Random delays between messages are not enough; send a reasonable amount of messages keeping in mind your conversion rate. For example: for one hour, send a maximum of 4 messages per contact that have replied to your message, and stop sending messages for one hour, then start again. Again, don't send messages without stopping for a while between every "package".
-10. Send only one short message when starting a conversation; one should not send long texts or multiple messages without the user's consent.
-
-**Keep in mind:**
-
-1. For every message you send to someone who doesn't have your number in their contact list, they are asked if it's spam. Being tagged as spam a few times (5-10) will get you banned.
-2. WhatsApp records every movement you make; you can even check the logs when sending a simple support email. It contains all kinds of information, so act as human as possible.
-3. Try to engage in conversations; as long as you send a message and the person doesn't automatically block you, it'll be quite okay. People constantly talking to you and adding you to their contact list will make your number stronger against a ban.
-4. Think about it like a points system: you start with zero points (negative if your device was previously blacklisted). If you reach below zero, you are out. If you engage in conversations, you get a point. If you are tagged as spam, you lose some points. If you are blocked, you may lose more points.
-5. Finally, if your content is spam, it doesn't matter if you are using a broadcast list, group, or direct contact; you will still be banned.
-
-As an API, we say all that's left to do right now is to agree with WhatsApp's policy, not send spam messages, and always wait for the other person to contact you first.
-
-You could do this by sending an SMS to the person with a link to start a chat on WhatsApp with you by link [https://wa.me/12132132131?text=Hi](https://wa.me/12132132131?text=Hi).
-
-
+---
+title: "⚠️ How to Avoid Blocking"
+description: "How to Avoid Blocking From Whatsapp"
+date: 2020-11-12T13:26:54+01:00
+lastmod: 2020-11-12T13:26:54+01:00
+draft: false
+
+menu:
+ docs:
+ parent: "help"
+weight: 103
+toc: true
+---
+
+How to Avoid Blocking in WhatsApp when developing bots.
+
+It's important to keep in mind that WhatsApp has strict policies in place to prevent spamming and abuse of their
+platform.
+
+If you're developing a bot for WhatsApp, it's crucial to follow these guidelines to avoid getting blocked.
+
+## Guidelines to Follow
+
+### 1. Only Reply to Messages
+
+When developing a bot for WhatsApp, you **should never initiate a conversation**.
+Instead, your bot **should only reply** to messages that it receives.
+This will prevent your bot from being flagged as spam by WhatsApp's users and algorithms.
+
+> You can use a short link http://wa.me/7911111111?text=Hi
+> so a user can click on it and start the dialog with the bot first
+
+### 2. Avoid Spamming and Sending Unnecessary Content
+
+Sending too many messages or sending content that the user did not request can lead to your bot being blocked. Make
+sure to only send relevant and useful information to the user.
+Additionally, do not send too many messages at once, as this can also trigger spam filters.
+
+### 3. Other Considerations
+
+There are other guidelines to follow when developing a bot for WhatsApp, such as avoiding the use of banned words and
+not sharing sensitive or inappropriate content.
+Make sure to read WhatsApp's policies thoroughly to ensure that your bot complies with all of their rules.
+
+## How to Process Messages
+
+When processing messages in your bot, it's important to follow certain steps to avoid being flagged as spam.
+Here's a recommended process to follow:
+
+1. **Send seen** before processing the message. This can be done by sending a `POST /api/sendSeen/` request to
+ the WAHA API.
+
+2. **Start typing** before sending a message and wait for a random interval depending on the size of the message. This can
+ be done by sending a `POST /api/startTyping/` request.
+
+3. **Stop typing** before sending the message. This can be done by sending a `POST /api/stopTyping/` request.
+
+4. **Send the text message** using the `POST /api/sendText` request.
+
+By following these steps, you can ensure that your bot processes messages in a way that's compliant with WhatsApp's
+guidelines and reduces the risk of being blocked.
+
+## How to Avoid Getting Banned
+
+WhatsApp knows that it's uncommon for someone to send so many messages or bulk messages to people they've never talked to before, so it is considered spam/marketing junk pretty quickly. Here are some tips before sending a message to WhatsApp:
+
+**Dos and Don'ts:**
+
+1. Important: Do NOT send messages which get you reported. As long as you don't get reports from users who you sent a message to, your account will be mostly fine.
+2. Having real content, a survey that the person agreed with is different from a marketing message on a Saturday night.
+3. Send messages written in different ways; you could make a script that places spacebars randomly in your string AND includes the person's (first) name.
+4. Never use fixed times; always go for sending the first message, wait a random time between 30 and 60 seconds, and then send the second message.
+5. Always try to group contacts by their area code; WhatsApp expects a regular person to talk mostly with contacts that are within the same area of your phone number.
+6. Have a profile picture; this is not related to WhatsApp Bots Catcher® but sending a new message to someone without having a picture/name/status will elevate your chances of being manually tagged as spam.
+7. Send "seen" confirmation to messages or disable it on WhatsApp.
+8. Avoid sending links that were previously marked as spam on WhatsApp or non-HTTPS. A URL shortener is a good idea.
+9. IMPORTANT: It's terrible if you send messages 24/7 without giving it some time to wait. Random delays between messages are not enough; send a reasonable amount of messages keeping in mind your conversion rate. For example: for one hour, send a maximum of 4 messages per contact that have replied to your message, and stop sending messages for one hour, then start again. Again, don't send messages without stopping for a while between every "package".
+10. Send only one short message when starting a conversation; one should not send long texts or multiple messages without the user's consent.
+
+**Keep in mind:**
+
+1. For every message you send to someone who doesn't have your number in their contact list, they are asked if it's spam. Being tagged as spam a few times (5-10) will get you banned.
+2. WhatsApp records every movement you make; you can even check the logs when sending a simple support email. It contains all kinds of information, so act as human as possible.
+3. Try to engage in conversations; as long as you send a message and the person doesn't automatically block you, it'll be quite okay. People constantly talking to you and adding you to their contact list will make your number stronger against a ban.
+4. Think about it like a points system: you start with zero points (negative if your device was previously blacklisted). If you reach below zero, you are out. If you engage in conversations, you get a point. If you are tagged as spam, you lose some points. If you are blocked, you may lose more points.
+5. Finally, if your content is spam, it doesn't matter if you are using a broadcast list, group, or direct contact; you will still be banned.
+
+As an API, we say all that's left to do right now is to agree with WhatsApp's policy, not send spam messages, and always wait for the other person to contact you first.
+
+You could do this by sending an SMS to the person with a link to start a chat on WhatsApp with you by link [https://wa.me/12132132131?text=Hi](https://wa.me/12132132131?text=Hi).
diff --git a/content/docs/overview/introduction.md b/content/docs/overview/introduction.md
index e3f0bc862..caf2b35c6 100644
--- a/content/docs/overview/introduction.md
+++ b/content/docs/overview/introduction.md
@@ -1,41 +1,41 @@
----
-title: "📖 Introduction"
-description: "WAHA - WhatsApp API that you can install on your own server and run in less than 5 minutes!"
-lead: ""
-date: 2020-10-06T08:48:57+00:00
-lastmod: 2020-10-06T08:48:57+00:00
-draft: false
-
-menu:
-docs:
-parent: "overview"
-weight: 101
-toc: true
----
-**WAHA** - WhatsApp HTTP API that you can install on your own server and run in less than 5 minutes!
-
-
-
-
-
-## Get started
-
-{{< callout context="tip" icon="outline/rocket" >}}
-Run **WhatsApp API** in less than 5 minutes!
-
-[**⚡ Quick Start**]({{< relref "quick-start" >}})
-will guide you through the necessary steps to successfully send your first text message using WhatsApp API.
-{{< /callout >}}
-
-
-{{< callout context="info" title="Disclaimer" icon="outline/gavel" >}}
-This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or any of its subsidiaries or its affiliates. The official WhatsApp website can be found at [whatsapp.com](https://whatsapp.com).
-
-"WhatsApp" as well as related names, marks, emblems and images are registered trademarks of their respective owners. Also, it is not guaranteed that you will not be blocked by using this method. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe.
-
-For any businesses looking to integrate with WhatsApp for critical applications, we highly recommend using officially supported methods, such as Twilio's solution or other alternatives. You might also consider [the official API ->](https://developers.facebook.com/docs/whatsapp/).
-{{< /callout >}}
-
-## Quick Links
-
-{{< include file="content/docs/overview/quick-start/links.md" >}}
+---
+title: "📖 Introduction"
+description: "WAHA - WhatsApp API that you can install on your own server and run in less than 5 minutes!"
+lead: ""
+date: 2020-10-06T08:48:57+00:00
+lastmod: 2020-10-06T08:48:57+00:00
+draft: false
+
+menu:
+docs:
+parent: "overview"
+weight: 101
+toc: true
+---
+
+**WAHA** - WhatsApp HTTP API that you can install on your own server and run in less than 5 minutes!
+
+
+
+
+
+## Get started
+
+{{< callout context="tip" icon="outline/rocket" >}}
+Run **WhatsApp API** in less than 5 minutes!
+
+[**⚡ Quick Start**]({{< relref "quick-start" >}})
+will guide you through the necessary steps to successfully send your first text message using WhatsApp API.
+{{< /callout >}}
+
+{{< callout context="info" title="Disclaimer" icon="outline/gavel" >}}
+This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or any of its subsidiaries or its affiliates. The official WhatsApp website can be found at [whatsapp.com](https://whatsapp.com).
+
+"WhatsApp" as well as related names, marks, emblems and images are registered trademarks of their respective owners. Also, it is not guaranteed that you will not be blocked by using this method. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe.
+
+For any businesses looking to integrate with WhatsApp for critical applications, we highly recommend using officially supported methods, such as Twilio's solution or other alternatives. You might also consider [the official API ->](https://developers.facebook.com/docs/whatsapp/).
+{{< /callout >}}
+
+## Quick Links
+
+{{< include file="content/docs/overview/quick-start/links.md" >}}
diff --git a/content/docs/overview/quick-start/index.md b/content/docs/overview/quick-start/index.md
index 553d3dc8d..777bc6e14 100644
--- a/content/docs/overview/quick-start/index.md
+++ b/content/docs/overview/quick-start/index.md
@@ -1,212 +1,219 @@
----
-title: "⚡ Quick Start"
-description: "One page summary of how to start WhatsApp API."
-lead: "Step-by-Step guide to send your first message via WhatsApp API."
-date: 2020-11-16T13:59:39+01:00
-lastmod: 2020-11-16T13:59:39+01:00
-draft: false
-
-parent: "overview"
-weight: 102
-toc: true
----
-
-{{< imgo src="waha-first-message.jpg" full="false" >}}
-
-## Step-by-Step guide
-On this page, you're going to install and run WAHA,
-authenticate the client using a QR code,
-and send **your first message** to WhatsApp using the API!
-
-We will guide you through the necessary steps to successfully send your first text message using the WhatsApp API.
-
-
- Are you a visual learner?
-
-We've got you covered!
-Watch the video tutorial below to see how to send your first message using WAHA
-
-
-
-
-
-
-
-## Step 0. Requirements
-
-WAHA works on top of **Docker**, that's the only thing you'll need!
-
-
-
-
-👉 Please follow the
-
- Docker official guides to install it on Linux, Windows, and macOS
-
-
-{{< details "Why Docker?" >}}
-Docker makes it easy to ship an **all-in-one solution** with the runtime and dependencies.
-You don't have to worry about language-specific libraries or Chrome installation.
-
-Also, Docker makes installation and update processes so simple, just one command!
-{{< /details >}}
-
-## Step 1. Download image
-
-Assuming you have installed [Docker](https://docs.docker.com/get-docker/), let's download the image!
-Follow the instructions below:
-
-{{< include file="content/docs/how-to/install/download-image.md" >}}
-
-## Step 2. Run WAHA
-
-Run WhatsApp HTTP API:
-
-```bash
-docker run -it -v $(pwd)/sessions:/app/.sessions --rm -p 3000:3000 --name waha devlikeapro/waha
-
-# It prints logs and the last line must be
-# WhatsApp API is running on: http://[::1]:3000
-```
-
-{{< callout context="danger" title="Not a Production-Ready Installation!" icon="outline/shield-check" >}}
-☝️ The above command is meant only for **initial testing**, not for production use.
-
-Please follow the [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) guide to set up a secure WAHA instance
-after you finish the quick start guide.
-
-{{< /callout >}}
-
-👉 Now, open the [📊 Dashboard]({{< relref "/docs/how-to/dashboard" >}}) at
-
-http://localhost:3000/dashboard
-
-
-You'll see the WAHA Dashboard:
-
-
-
-## Step 3. Start a new session
-
-To start a new session, you should have your mobile phone with the **WhatsApp application** installed close to you.
-
-Here is the
-
-official instruction on WhatsApp site
-
-on how to log in.
-
-Now you can start the **default** session (current status should be `STOPPED`).
-
-You can leave all configuration parameters as default:
-
-
-## Step 4. Get and scan QR
-
-Wait until the session status is `SCAN_QR` and click on the "camera" icon:
-
-
-👉 If instead of the QR you see **Click to reload QR** - **stop** the session and **start** it again.
-
-
-
-You'll see the QR code from the WhatsApp Web app. Now get **your phone** with the WhatsApp application installed and **scan the QR**:
-
-
-The session status will move to `WORKING` status:
-
-
-## Step 5. Send a text message
-
-Now we're ready to send the first messages to WhatsApp via the API!
-
-Replace `123123` with **your phone number without +**, but keep the `@c.us` part:
-{{< tabs "send-text-message" >}}
-
-{{< tab "curl" >}}
-```sh
-curl -X 'POST' \
- 'http://localhost:3000/api/sendText' \
- -H 'accept: application/json' \
- -H 'Content-Type: application/json' \
- -d '{
- "chatId": "123123@c.us",
- "text": "Hi there!",
- "session": "default"
-}'
-```
-{{< /tab >}}
-
-{{< tab "JavaScript" >}}
-```js
-fetch('http://localhost:3000/api/sendText', {
- method: 'POST',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({
- chatId: "123123@c.us",
- text: "Hi there!",
- session: "default"
- })
-})
-.then(response => response.json())
-.then(data => console.log(data))
-.catch(error => console.error('Error:', error));
-```
-{{< /tab >}}
-
-{{< tab "Python" >}}
-```python
-import requests
-
-url = "http://localhost:3000/api/sendText"
-headers = {
- "Accept": "application/json",
- "Content-Type": "application/json"
-}
-data = {
- "chatId": "123123@c.us",
- "text": "Hi there!",
- "session": "default"
-}
-
-response = requests.post(url, json=data, headers=headers)
-print(response.json())
-```
-{{< /tab >}}
-
-{{< /tabs >}}
-
-As alternative to `curl`, you can use [**📚 Swagger**]({{< relref "/docs/how-to/swagger" >}}) for that.
-
-Open Swagger at
-
-http://localhost:3000/#/chatting
-, scroll down to **chatting** section.
-
-- Find `POST /api/sendText` endpoint and expand it
-- Click **Try it out**
-- Replace `123123@c.us` with **your phone number without +**, but keep `@c.us` part
-- Click **Execute**
-
-
-
-## What's next?
-
-{{< include file="content/docs/how-to/install/-the-hosting.md" >}}
-
-{{< callout context="tip" icon="outline/robot" title="Build Fast" >}}
-Ask [**🤖 WAHA GPT**]({{< relref "/gpt" >}}) to help you build **{python|js|php}** code!
-{{< /callout >}}
-
-{{< include file="content/docs/overview/quick-start/links.md" >}}
+---
+title: "⚡ Quick Start"
+description: "One page summary of how to start WhatsApp API."
+lead: "Step-by-Step guide to send your first message via WhatsApp API."
+date: 2020-11-16T13:59:39+01:00
+lastmod: 2020-11-16T13:59:39+01:00
+draft: false
+
+parent: "overview"
+weight: 102
+toc: true
+---
+
+{{< imgo src="waha-first-message.jpg" full="false" >}}
+
+## Step-by-Step guide
+
+On this page, you're going to install and run WAHA,
+authenticate the client using a QR code,
+and send **your first message** to WhatsApp using the API!
+
+We will guide you through the necessary steps to successfully send your first text message using the WhatsApp API.
+
+
+ Are you a visual learner?
+
+We've got you covered!
+Watch the video tutorial below to see how to send your first message using WAHA
+
+
+
+
+
+
+## Step 0. Requirements
+
+WAHA works on top of **Docker**, that's the only thing you'll need!
+
+
+
+
+
+👉 Please follow the
+
+Docker official guides to install it on Linux, Windows, and macOS
+
+
+{{< details "Why Docker?" >}}
+Docker makes it easy to ship an **all-in-one solution** with the runtime and dependencies.
+You don't have to worry about language-specific libraries or Chrome installation.
+
+Also, Docker makes installation and update processes so simple, just one command!
+{{< /details >}}
+
+## Step 1. Download image
+
+Assuming you have installed [Docker](https://docs.docker.com/get-docker/), let's download the image!
+Follow the instructions below:
+
+{{< include file="content/docs/how-to/install/download-image.md" >}}
+
+## Step 2. Run WAHA
+
+Run WhatsApp HTTP API:
+
+```bash
+docker run -it -v $(pwd)/sessions:/app/.sessions --rm -p 3000:3000 --name waha devlikeapro/waha
+
+# It prints logs and the last line must be
+# WhatsApp API is running on: http://[::1]:3000
+```
+
+{{< callout context="danger" title="Not a Production-Ready Installation!" icon="outline/shield-check" >}}
+☝️ The above command is meant only for **initial testing**, not for production use.
+
+Please follow the [**🔧 Install & Update**]({{< relref "/docs/how-to/install" >}}) guide to set up a secure WAHA instance
+after you finish the quick start guide.
+
+{{< /callout >}}
+
+👉 Now, open the [📊 Dashboard]({{< relref "/docs/how-to/dashboard" >}}) at
+
+http://localhost:3000/dashboard
+
+
+You'll see the WAHA Dashboard:
+
+
+
+## Step 3. Start a new session
+
+To start a new session, you should have your mobile phone with the **WhatsApp application** installed close to you.
+
+Here is the
+
+official instruction on WhatsApp site
+
+on how to log in.
+
+Now you can start the **default** session (current status should be `STOPPED`).
+
+You can leave all configuration parameters as default:
+
+
+## Step 4. Get and scan QR
+
+Wait until the session status is `SCAN_QR` and click on the "camera" icon:
+
+
+👉 If instead of the QR you see **Click to reload QR** - **stop** the session and **start** it again.
+
+
+
+You'll see the QR code from the WhatsApp Web app. Now get **your phone** with the WhatsApp application installed and **scan the QR**:
+
+
+The session status will move to `WORKING` status:
+
+
+## Step 5. Send a text message
+
+Now we're ready to send the first messages to WhatsApp via the API!
+
+Replace `123123` with **your phone number without +**, but keep the `@c.us` part:
+{{< tabs "send-text-message" >}}
+
+{{< tab "curl" >}}
+
+```sh
+curl -X 'POST' \
+ 'http://localhost:3000/api/sendText' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -d '{
+ "chatId": "123123@c.us",
+ "text": "Hi there!",
+ "session": "default"
+}'
+```
+
+{{< /tab >}}
+
+{{< tab "JavaScript" >}}
+
+```js
+fetch("http://localhost:3000/api/sendText", {
+ method: "POST",
+ headers: {
+ "Accept": "application/json",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ chatId: "123123@c.us",
+ text: "Hi there!",
+ session: "default"
+ })
+})
+ .then((response) => response.json())
+ .then((data) => console.log(data))
+ .catch((error) => console.error("Error:", error));
+```
+
+{{< /tab >}}
+
+{{< tab "Python" >}}
+
+```python
+import requests
+
+url = "http://localhost:3000/api/sendText"
+headers = {
+ "Accept": "application/json",
+ "Content-Type": "application/json"
+}
+data = {
+ "chatId": "123123@c.us",
+ "text": "Hi there!",
+ "session": "default"
+}
+
+response = requests.post(url, json=data, headers=headers)
+print(response.json())
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
+
+As alternative to `curl`, you can use [**📚 Swagger**]({{< relref "/docs/how-to/swagger" >}}) for that.
+
+Open Swagger at
+
+http://localhost:3000/#/chatting
+, scroll down to **chatting** section.
+
+- Find `POST /api/sendText` endpoint and expand it
+- Click **Try it out**
+- Replace `123123@c.us` with **your phone number without +**, but keep `@c.us` part
+- Click **Execute**
+
+
+
+## What's next?
+
+{{< include file="content/docs/how-to/install/-the-hosting.md" >}}
+
+{{< callout context="tip" icon="outline/robot" title="Build Fast" >}}
+Ask [**🤖 WAHA GPT**]({{< relref "/gpt" >}}) to help you build **{python|js|php}** code!
+{{< /callout >}}
+
+{{< include file="content/docs/overview/quick-start/links.md" >}}
diff --git a/content/docs/overview/quick-start/links.md b/content/docs/overview/quick-start/links.md
index fcf088d34..74c716e76 100644
--- a/content/docs/overview/quick-start/links.md
+++ b/content/docs/overview/quick-start/links.md
@@ -1,38 +1,36 @@
-
-{{< card-grid >}}
-{{< card title="Learn WAHA" icon="outline/book" color="yellow" >}}
-
-- [📤 Send messages]({{}})
-- [📥 Receive messages]({{}})
-- [📊 Dashboard]({{< relref "/docs/how-to/dashboard" >}})
-- [🔍 Other How-to guides]({{}})
-
-{{< /card >}}
-{{< card title="Get Ready for Production" icon="outline/server" color="purple" >}}
-
-- [🔧 Installation Guide]({{< relref "/docs/how-to/install" >}})
-- [🔒 Security]({{< relref "/docs/how-to/security" >}})
-- [🗄️ Storages]({{< relref "/docs/how-to/sessions" >}})
-- [➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}})
-
-
-{{< /card >}}
-{{< /card-grid >}}
-
-{{< card-grid >}}
-{{< card title="What's going on?" icon="outline/info-circle" color="green" >}}
-
-- [🆕 Changelog]({{< relref "/docs/overview/changelog" >}})
-- [🐙 GitHub](https://github.com/devlikeapro/waha)
-
-{{< /card >}}
-{{< card title="Other docs" icon="outline/books" color="red" >}}
-
-- [🧩 Apps]({{< relref "/docs/apps/about" >}})
-- [🔌 Integrations]({{< relref "/docs/integrations" >}})
-- [📚 Swagger]({{< relref "/docs/how-to/swagger" >}})
-- [🏭 Engines]({{< relref "/docs/how-to/engines" >}})
-
-{{< /card >}}
-{{< /card-grid >}}
-
+
+{{< card-grid >}}
+{{< card title="Learn WAHA" icon="outline/book" color="yellow" >}}
+
+- [📤 Send messages]({{}})
+- [📥 Receive messages]({{}})
+- [📊 Dashboard]({{< relref "/docs/how-to/dashboard" >}})
+- [🔍 Other How-to guides]({{}})
+
+{{< /card >}}
+{{< card title="Get Ready for Production" icon="outline/server" color="purple" >}}
+
+- [🔧 Installation Guide]({{< relref "/docs/how-to/install" >}})
+- [🔒 Security]({{< relref "/docs/how-to/security" >}})
+- [🗄️ Storages]({{< relref "/docs/how-to/sessions" >}})
+- [➕ WAHA Plus]({{< relref "/docs/how-to/waha-plus" >}})
+
+{{< /card >}}
+{{< /card-grid >}}
+
+{{< card-grid >}}
+{{< card title="What's going on?" icon="outline/info-circle" color="green" >}}
+
+- [🆕 Changelog]({{< relref "/docs/overview/changelog" >}})
+- [🐙 GitHub](https://github.com/devlikeapro/waha)
+
+{{< /card >}}
+{{< card title="Other docs" icon="outline/books" color="red" >}}
+
+- [🧩 Apps]({{< relref "/docs/apps/about" >}})
+- [🔌 Integrations]({{< relref "/docs/integrations" >}})
+- [📚 Swagger]({{< relref "/docs/how-to/swagger" >}})
+- [🏭 Engines]({{< relref "/docs/how-to/engines" >}})
+
+{{< /card >}}
+{{< /card-grid >}}
diff --git a/content/gpt/_index.md b/content/gpt/_index.md
index e0ce0cafa..eb04eaaaa 100644
--- a/content/gpt/_index.md
+++ b/content/gpt/_index.md
@@ -1,47 +1,45 @@
----
-title: "WAHA GPT"
-description: "WAHA GPT to help you with development"
-summary: "WAHA GPT to help you with development"
-date: 2024-10-26T15:50:07+02:00
-lastmod: 2024-10-26T15:50:07+02:00
-draft: false
-images: ['wahagpt.png']
----
-
-Ask anything,
-**WAHA GPT**
-will help you with development!
-
-
-
-
-
-
-
-
----
-
-
-
-
-[https://chatgpt.com/g/g-pgnsaOg6W-waha-gpt](https://chatgpt.com/g/g-pgnsaOg6W-waha-gpt)
-
-> Write Python code to send a text message to +212321.
-
-🤔 ...
-
-> Write Python client for session management to use it as: `client.sessions.create('name', config)`
-
-🤔 ...
-
-> How to get a contact by phone number?
-
-🤔 ...
-
-
-
-
+---
+title: "WAHA GPT"
+description: "WAHA GPT to help you with development"
+summary: "WAHA GPT to help you with development"
+date: 2024-10-26T15:50:07+02:00
+lastmod: 2024-10-26T15:50:07+02:00
+draft: false
+images: ["wahagpt.png"]
+---
+
+Ask anything,
+**WAHA GPT**
+will help you with development!
+
+
+
+