📢 Channels
On this page
Here’s complete information about WhatsApp Channels (aka Newsletters) and how to use them.

Features
Here’s the list of features that are available by 🏭 Engines:
📢 Channels - API
| API | WEBJS | NOWEB | GOWS |
|---|---|---|---|
Search public channelsPOST /api/{session}/channels/search/by-viewPOST /api/{session}/channels/search/by-text | ➕ | ➕ | ➕ |
“Views” for SearchGET /api/{session}/channels/search/views | ➕ | ➕ | ➕ |
“Countries” for SearchGET /api/{session}/channels/search/countries | ➕ | ➕ | ➕ |
“Categories” for SearchGET /api/{session}/channels/search/categories | ➕ | ➕ | ➕ |
Get Messages from Channels (preview)GET /api/{session}/channels/{invite}/messages/preview | ➕ | ➕ | ➕ |
Create ChannelPOST /api/{session}/channels | #439 | ✔️ | ✔️ |
Get channel - by id and invite codeGET /api/{session}/channels/{ChannelID} | ✔️ | ✔️ | ✔️ |
List channelsGET /api/{session}/channels | ✔️ | ✔️ | ✔️ |
Delete channelDELETE /api/{session}/channels/{ChannelID} | ✔️ | ||
Get messagesGET /api/{session}/chats/{ChannelID}/messages | ✔️ | ✔️ #433 | |
Send messages - TextPOST /api/sendText | ✔️ | ✔️ | ✔️ |
Send messages - ImagePOST /api/sendImage | ✔️ | ✔️ | ✔️ |
Send messages - VideoPOST /api/sendVideo | ✔️ | ✔️ | ✔️ |
Send messages - PollPOST /api/sendPoll | |||
Receive messages - Textmessage event | ✔️ | ✔️ | ✔️ |
Receive messages - Mediamessage event | ✔️ | ✔️ | ✔️ |
| Receive messages - Polls | ✔️ | ||
| Receive messages - Polls Votes (in my channel) | |||
| Receive messages - Reactions (in my channel) | |||
| Channels - follow, unfollow | ✔️ | ||
| Channels - mute, unmute | ✔️ | ||
| Admins - Send Invite | |||
| Admins - Revoke Invite | |||
| Admins - Accept Invite | |||
| Admins - Demote Admin |
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
- ➕ - Available in ➕ WAHA Plus
Channels API
💡 Channels have a special @newsletter prefix, so you can distinguish them from regular chats and groups.
123123123@newsletter- channel ID
Get your channels
You can get list of subscribed or owned channels:
Get all (your and subscribed) channels:
GET /api/{session}/channelsFilter channels by your role:
GET /api/{session}/channels?role=OWNERrolecan beOWNER,ADMIN,SUBSCRIBER
[
{
"id": "111111111111111111@newsletter",
"name": "Channel - Owner - Picture",
"description": "Hi there, I'm new here",
"invite": "https://whatsapp.com/channel/111111111111111111GdZ60l",
"preview": "https://mmg.whatsapp.net/m1/v/t24/123",
"picture": "https://mmg.whatsapp.net/m1/v/t24/123",
"verified": false,
"role": "OWNER"
},
{
"id": "111111111111111111@newsletter",
"name": "Channel - Subscriber - No Picture",
"description": "",
"invite": "https://whatsapp.com/channel/111111111111111111111111",
"preview": null,
"picture": null,
"verified": false,
"role": "SUBSCRIBER"
}
]Create a new channel
You can create a new channel:
POST /api/{session}/channels{
"name": "Channel Name",
"description": "Channel Description",
"picture": {
"mimetype": "image/jpeg",
"filename": "filename.jpg",
"url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg"
}
}Delete a channel
You can delete a channel DELETE /api/{session}/channels/123123%40newsletter
DELETE /api/{session}/channels/{ID}- 👉 Remember to escape
@inchatIdandmessageIdwith%40. - Allowing to delete only channels where you’re
OWNER.
Get channel by Id
You can get a channel by ID
GET /api/{SESSION}/channels/{ID}- 👉 Remember to escape
@inchatIdandmessageIdwith%40.
{
"id": "111111111111111111@newsletter",
"name": "Channel - Owner - Picture",
"description": "Hi there, I'm new here",
"invite": "https://whatsapp.com/channel/111111111111111111GdZ60l",
"preview": "https://mmg.whatsapp.net/m1/v/t24/123",
"picture": "https://mmg.whatsapp.net/m1/v/t24/123",
"verified": false,
"role": "OWNER",
"subscribersCount": 12323
}Get channel by Invite Code
You can get a channel information by Invite Code
GET /api/{session}/channels/{inviteCode}inviteCodehere is the last part in invite URLhttps://whatsapp.com/channel/111111111111111111GdZ60l-111111111111111111GdZ60l
💡 To get full picture you need to get channel by ID after you get the invite code.
{
"id": "111111111111111111@newsletter",
"name": "Channel - Owner - Picture",
"description": "Hi there, I'm new here",
"invite": "https://whatsapp.com/channel/111111111111111111GdZ60l",
"preview": "https://mmg.whatsapp.net/m1/v/t24/123",
"picture": "https://mmg.whatsapp.net/m1/v/t24/123",
"verified": false,
"role": "OWNER"
}Search API
Search channels by view
You can search public (not subscribed yet) channels by view:
POST /api/{session}/channels/search/by-view{
"view": "RECOMMENDED",
"countries": [
"US"
],
"categories": [],
"limit": 50,
"startCursor": ""
}view- Usevaluefrom get available viewscountries- usecodefrom get available countriescategories- useidfrom get available categorieslimit- we recommend using default50value, it’s the way official clients workstartCursor- useendCursorfrom the previous response (if any data available on the next page)
{
"page": {
"startCursor": null,
"endCursor": "base64encodedstring",
"hasNextPage": true,
"hasPreviousPage": false
},
"channels": [
{
"id": "123123123123@newsletter",
"name": "Channel Name",
"invite": "https://www.whatsapp.com/channel/111111111111111111111111",
"preview": "https://mmg.whatsapp.net/m1/v/t24/An&_nc_cat=10",
"picture": "https://mmg.whatsapp.net/m1/v/t24/An&_nc_cat=10",
"description": "string",
"verified": true,
"subscribersCount": 0
}
]
}Search channels by text
You can search public (not subscribed yet) channels by text:
POST /api/{session}/channels/search/by-text{
"text": "Donald Trump",
"categories": [],
"limit": 50,
"startCursor": ""
}text- search textcategories- useidfrom get available categorieslimit- we recommend using default50value, it’s the way official clients workstartCursor- useendCursorfrom the previous response (if any data available on the next page)
Get Search Views
List of available views for search:
GET /api/{session}/channels/search/views[
{
"value": "RECOMMENDED",
"name": "Explore"
}
]Get Search Countries
List of available countries for search (not full one, you can try different code values if you don’t see your country):
GET /api/{session}/channels/search/countries[
{
"code": "US",
"name": "United States"
}
]Get Search Categories
List of available categories for search:
GET /api/{session}/channels/search/categories[
{
"value": "BUSINESS",
"name": "Business"
},
{
"value": "ENTERTAINMENT",
"name": "Entertainment"
}
]Get Messages (Preview) for Channel
You can get latest messages from public channels (not subscribed yet) by invite code (or channel id). Returns only preview messages (one that you’ll see on channel preview).
GET /api/{SESSION}/channels/{INVITE}/messages/preview?downloadMedia=false&limit=100Query parameters:
{SESSION}- your session{INVITE}- invite code (123123123) or channel id (123132123@newsletter). Invite code is recommended.downloadMedia- whether to download media or notlimit- limit of messages to return. 100 is recommended.
[
{
"reactions": {
"👍": 10,
"❤️": 5
},
"viewCount": 0,
"message": {
"id": "false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA",
"timestamp": 1666943582,
"body": "string",
"media": {}
}
}
]reactions- reactions for the messageviewCount- views count for the messagemessage- message object - the same as inpayloadfield message event
How-to
Send Text to the channel
You can use regular POST /api/sendText endpoint to send a
text message into the channel
👉 Make sure you’re OWNER or ADMIN for the channel
{
"session": "default",
"chatId": "12132132130@newsletter",
"text": "Hi there!"
}Send Image to the channel
You can use regular POST /api/sendImage endpoint
to send an image into the channel
{
"session": "default",
"chatId": "11111111111@newsletter",
"file": {
"mimetype": "image/jpeg",
"url": "https://github.com/devlikeapro/waha/raw/core/examples/dev.likeapro.jpg",
"filename": "filename.jpeg"
},
"caption": "string"
}Send Video to the channel
You can use regular POST /api/sendVideo endpoint
to send a video message into the channel
{
"chatId": "111111111111111111@newsletter",
"file": {
"mimetype": "video/mp4",
"filename": "video.mp4",
"url": "https://github.com/devlikeapro/waha/raw/core/examples/video.mp4"
},
"caption": "Just watch at this!",
"session": "default"
}Send Reaction to the channel
PUT /api/reaction{
"messageId": "false_11111111111@newsletter_100_AAAAAAAAAAAAAAAAAAAA",
"reaction": "👍",
"session": "default"
}messageId can be in formats:
{fromMe}_{id}@newsletter_{serverID}_{clientID}-false_11111111111@newsletter_100_AAAAAAAAAAAAAAAAAAAAfalse_11111111111@newsletter_AAAAAAAAAAAAAAAAAAAA- using characters. Works if you’re subscribed to the channel.false_11111111111@newsltter_123- usingserver_id. If you’re not subscribed to the channel, you can use this format.
You can find server_id in channel message:
Send Poll Vote to the channel
POST /api/sendPollVote{
"chatId": "11111111111@newsletter",
"pollMessageId": "false_11111111111@newsletter_AAAAAAAAAAAAAAAAAAAA",
"pollServerId": 123,
"votes": [
"Awesome!"
],
"session": "default"
}You can find server_id in channel message:
Get messages from the channel
You can use regular
GET /api/{session}/chats/{chatId}/messages
to fetch messages from the channel
GET /api/default/chats/123%40newsletter/messages?downloadMedia=true&limit=100[
{
"id": "true_111111111111111111@newsletter_1111111111111111111111",
"timestamp": 1720775833,
"from": "111111111111111111@newsletter",
"fromMe": true,
"body": "Caption",
"hasMedia": true,
"media": {
"mimetype": "image/jpeg",
"filename": null,
"url": "http://localhost:3000/api/files/1111111111111111111111.jpeg",
"error": null
},
"mediaUrl": "http://localhost:3000/api/files/1111111111111111111111.jpeg",
"ack": 0,
"ackName": "PENDING",
"_data": {}
}
]Receive messages from the channel
For all incoming messages in your own and subscribed channels you’ll receive
messageevent for a message from the channel (send by someone else)message.anyevent for a message from the channel ( including your messages)
{
"event": "message",
"session": "default",
"me": {
"id": "111111111111@c.us",
"pushName": "Slovakia WAHA"
},
"payload": {
"id": "false_123123@newsletter_11111111111111111111111111111111",
"timestamp": 1720776511,
"from": "111111111111111111@newsletter",
"fromMe": false,
"body": "How are you all?! ❤️",
"hasMedia": false,
"ack": null,
"ackName": "UNKNOWN",
"_data": {}
},
"engine": "NOWEB",
"environment": {
"version": "2024.7.4",
"engine": "NOWEB",
"tier": "PLUS",
"browser": "/usr/bin/google-chrome-stable"
}
}
