A channel is a messenger or social media account connected to Wazzup to communicate with customers.
It's important to distinguish between a channel and a channel type (transport):
In other words, you can have multiple channels of the same transport. For example, if you have two connected WhatsApp numbers, you have two channels (two different numbers) but only one channel type/transport (WhatsApp).
When working with the methods listed above, use the end‑customer's client_access_token (obtained via simplified authorization or OAuth) in your request headers: simplified authorization or OAuth: Authorization: Bearer client_access_token
Before you start working with channels, subscribe to webhooks — some channels cannot be connected, and you won't be notified of channel status changes without them.
POST /v2/channels — create a channel.POST /v2/channels/{channel_id}/auth/2fa — confirm 2FA if required.POST /v2/channels/{channel_id}/reinit — reinitialize a channel.GET /v2/channels/{channel_id} — get a channel by ID.GET /v2/channels — get a list of channels.DELETE /v2/channels/{channel_id}?delete_chats={true|false} — delete a channel (optionally delete conversations).POST /v2/channels/{channel_id}/pairing-code — get a pairing code (WhatsApp Pairing).Connect at least one channel so the end‑customer can start messaging.
The process for connecting different channel types varies. For some, webhooks and additional methods will be required. Therefore, it is recommended to first subscribe to webhooks and review the steps for adding channels in this section.
POST /v2/channelsPOST /v2/channels
│
├── transport *
└── credentials *
├── Avito
│ └── code *
├── Instagram API
│ ├── username *
│ ├── page_id *
│ ├── inst_id *
│ └── user_token *
├── Telegram Bot
│ └── telegram_token *
└── MAX bot
└── access_token *
| Body Parameter. Required are marked with * | Type | Description |
transport* |
string |
Transport type: To connect VKontakte, use the method |
credentials* |
object credentials |
Transport-specific connection data. Leave this empty for tgapi, wapi, whatsapp, viber, max |
| Body Parameter. Required are marked with * | Type | Description |
| For Avito | ||
code* |
string |
Avito authorization code |
| For Instagram API | ||
username* |
string |
Instagram username |
page_id* |
string |
Facebook page ID |
inst_id* |
string |
Instagram user ID |
user_token* |
string |
User authorization token |
| For Telegram Bot | ||
telegram_token* |
string |
Telegram bot token |
| For MAX bot | ||
access_token* |
string |
MAX bot token |
Request example:
curl -L 'https://tech.wazzup24.com/v2/channels' \
-H 'Authorization: Bearer <client_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"transport": "telegram",
"credentials": {
"telegram_token": "6945215375:AAHffBHffYyCEeT7ffVv0ff8AKhfz4"
}
}'
Response example:
{
"data": [
{
"channel_id": "0b1f701-1e21-4ae8-b105-5028f6a",
"transport": "telegram"
}
],
"meta": {
"timestamp": 1759483774
}
}
Result: A Wazzup channel has been created, but depending on the channel type, additional actions may be required.
For whatsapp, tgapi, viber, max
The webhook will deliver a QR code as a base64 string. Convert it to PNG and scan it with your phone to link the messenger to Wazzup.
Example:
{
"event": "channel.qr_update",
"data": [
{
"channel_id": "656cc30c-7d6d-4ec4-a3d9-87abbeaf92",
"platform": "whatsapp",
"qr_code": "data:image/png;base64,iVBORw0KGg....."
}
],
"meta": {
"idempotency_key": "daa4e9e6-ca92-41a2-a91b-8cf212f687",
"timestamp": 1760947913
}
}
For wapi
Channel creation request example:
{
"transport": "wapi",
"credentials": {}
}
The response body will contain a url — a redirect link for the user. The user must follow this link to connect their WABA.
Response example:
{
"data": [
{
"channel_id": "b7936d81-1053-4c1c-9b9c-6ef6cf2",
"transport": "wapi",
"url": "https://gs.tc.im/5GYyg"
}
],
"meta": {
"timestamp": 1762944046
}
}
For telegram and maxbot
To connect a Telegram Bot or MAX bot, you only need to provide the correct bot token.
If two-factor authentication (2FA) is enabled on the messenger side, after the QR/login step, you will receive a channel.status_update webhook. It will contain channel_id: string, status: "init", reason: "wait_for_password".
In this case, submit the authentication code in the request below.
POST /v2/channels/{channel_id}/auth/2faPath parameterschannel_id — Channel ID.
| Body Parameter. Required are marked with * | Type | Description |
two_factor_code* |
string |
Authentication code |
transport* |
string |
Transport type: whatsapp, wapi, telegram, tgapi, instAPI, viber, avito, max, maxbot |
Request example:
curl -L 'https://tech.wazzup24.com/v2/channels/db72fd40-bc63-4d4b-9e14-a9a345712f/auth/2fa' \
-H 'Authorization: Bearer <client_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"two_factor_code": "1234",
"transport": "tgapi"
}'
Response example:
{
"data": null,
"meta": {
"timestamp": 1759312346
}
}
Result: 2FA authentication has been passed. The channel is transitioning to the active status.
Use this method for channels already added to Wazzup that need to be reconnected — for example, when a channel's status changes to "Unauthorized".
You can monitor status changes via webhooks.
POST /v2/channels/{channel_id}/reinitPath parameterschannel_id — Channel ID.
POST /v2/channels/{channel_id}/reinit
│
└── credentials *
├── Avito
│ └── code *
├── Instagram API
│ ├── username *
│ ├── page_id *
│ ├── inst_id *
│ └── user_token *
├── Telegram Bot
│ └── telegram_token *
└── MAX bot
└── access_token *
| Body Parameter. Required are marked with * | Type | Description |
credentials* |
object credentials |
Transport-specific connection data. Leave this empty for To reconnect VKontakte, use the method |
| Body Parameter. Required are marked with * | Type | Description |
| For Avito | ||
code* |
string |
Avito authorization code |
| For Instagram API | ||
username* |
string |
Instagram username |
page_id* |
string |
Facebook page ID |
inst_id* |
string |
Instagram user ID |
user_token* |
string |
User authorization token |
| For Telegram Bot | ||
telegram_token* |
string |
Telegram bot token |
| For MAX bot | ||
access_token* |
string |
MAX bot token |
Example:
curl -L 'https://tech.wazzup24.com/v2/channels/db72fd40-bc63-4d4b-9e14-a9a3457182f/reinit' \
-H 'Authorization: Bearer <client_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"credentials": {
"telegram_token": "69321575:AAEOaVAKzUlTtkoSVVcciE3jIpgHd8"
}
}'
Response example:
{
"data": [
{
"channel_id": "db72fd40-bc63-4d4b-9e14-a9a3457182f",
"transport": "telegram",
"state": "active",
"phone": "just_a_test_bot",
"messenger_id": "just_a_test_bot",
"tariff": "max",
"name": "just_a_test_bot"
}
],
"meta": {
"timestamp": 1763041358
}
}
Result: The channel transitions to the active status or the init status, and in either case you may receive a webhook containing a QR for scanning.
This method lets you check if a channel is operational, see its current status, view its tariff plan, and retrieve other channel-related information.
GET /v2/channels/{channel_id}Path parameterschannel_id — Channel ID.
Example:
curl -L 'https://tech.wazzup24.com/v2/channels/{channel_id}' \
-H 'Authorization: Bearer <client_access_token>'
Response example:
{
"data": [
{
"channel_id": "0b1f7601-1e21-4ae8-b105-51d028182a",
"transport": "telegram",
"state": "active",
"status": "active",
"reason": "null",
"phone": "My_Ferret2_Bot",
"messenger_id": "My_Ferret2_Bot",
"tariff": "max",
"name": "My_Ferret2_Bot"
}
],
"meta": {
"timestamp": 1759485254
}
}
data[] ├── channel_id * ├── transport * ├── state * ├── status * ├── reason * ├── phone * ├── username * ├── messenger_id * ├── name * ├── url └── tier *
| Response Parameter. Required are marked with * | Type | Description |
data |
array(object) data |
List of channels |
| Response Parameter. Required are marked with * | Type | Description |
channel_id* |
string |
Channel ID |
transport* |
string |
Channel transport |
state* |
string |
Deprecated parameter. Previously used to show the channel state; this information is now provided in the status and reason parameters |
status* |
string |
Channel status. Possible values: active, init, disabled |
reason* |
string |
The reason why the channel is in a specific status. Possible values are described below the table |
phone* |
string |
Channel phone number |
username* |
string |
Channel username |
messenger_id* |
string |
Channel identifier in the messenger |
name* |
string |
Channel name |
url |
string |
Channel URL or channel authorization URL |
tier* |
string |
Channel WABA tier. Possible values: TIER_0, TIER_1K, TIER_10K, TIER_100K, TIER_50, TIER_250, TIER_UNLIMITED |
Possible reason values depending on status:
status: "active" — reason is always nullstatus: "init" — reason: wait_for_password, wait_for_code, qr, sync or nullstatus: "disabled" — reason: blocked, not_enough_money, rejected, unauthorized, foreignphone, qridle, openelsewhere or null| Channel status | Description |
active |
Channel is active |
init |
Channel is starting up |
disabled |
Channel is disabled: removed from subscription or deleted while preserving messages |
| reason value | Description |
qridle, qr |
QR code needs to be scanned |
openelsewhere |
Channel is authorized in another Wazzup account |
not_enough_money |
Channel is unpaid |
foreignphone |
QR scanned by a different account in the messenger (different phone number) |
unauthorized |
Unauthorized |
wait_for_password |
Two-factor authentication password required |
blocked |
Facebook blocked the WABA channel |
rejected |
WABA channel rejected |
Result: You will receive information about a previously created channel.
GET /v2/channelsExample:
curl -L 'https://tech.wazzup24.com/v2/channels' \ -H 'Authorization: Bearer <client_access_token>'
Response example:
{
"data": [
// Array of objects. See the example above with getting a channel by channel_id
],
"meta": {
"timestamp": 1759485254
}
}
Result: The response contains a list of all channels in the account.
This method is used to delete a channel the end‑customer is no longer using for messaging. You can choose to keep the message history or delete it.
DELETE /v2/channels/{channel_id}Path parameterschannel_id — Channel ID.
Query parameterdelete_chats — specify =true if chats should be deleted.
Example:
curl -X DELETE 'https://tech.wazzup24.com/v2/channels/{channel_id}' \
-H 'Authorization: Bearer <client_access_token>'
Response example:
{
"data": null,
"meta": {
"timestamp": 1759485643
}
}
Result: Channel channel_id has been deleted.
This method allows you to connect a WhatsApp channel not via QR code, but using an 8‑digit pairing code to be entered in the WhatsApp app.
Send the request immediately after receiving the webhook with the QR code. If the QR code has expired, the method will return an error.
POST /v2/channels/{channel_id}/pairing-codePath parameterschannel_id — Channel ID.
| Body Parameter. Required are marked with * | Type | Description |
pairing_phone |
string |
Must be provided without the plus sign ('+') (e.g., +1 (234) 567-8901 → 12345678901) |
transport* |
string |
Channel transport: whatsapp |
Request example for WhatsApp code:
curl -L 'https://tech.wazzup24.com/v2/channels/ab59105d-5e8d-487a-9ad1-e21bc6fe64a6/pairing-code' \
-H 'Authorization: Bearer <client_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"pairing_phone": "79999999999",
"transport": "whatsapp"
}'
Response example:
{
"data": [
{
"pairing_code": "LYY1WZNL",
"pairing_phone": "79999999999"
}
],
"meta": {
"timestamp": 1759319225
}
}
Result: You have received the code for WhatsApp channel authorization. Enter it in the mobile WhatsApp application.