Arrow
Get started with Wazzup
Arrow
How to connect a messenger
Arrow
How to use Wazzup chats
Arrow
How to pay for the service
Arrow
Bitrix24
Arrow
Kommo
Arrow
Zoho CRM
Arrow
HubSpot
Arrow
Pipedrive
Arrow
Other CRMs
Arrow
How to sell even easier
Arrow
All about WABA
Arrow
For partners
Arrow
Public API
For partners
Arrow

Messages

This article covers sending messages, tracking status updates, and editing or deleting messages.

You can also use Wazzup's built-in interface for messaging, eliminating the need to develop, maintain, or customize your own dialog handling UI.

When using the methods listed below, include the end‑customer's client_access_token (obtained via simplified authorization or OAuth) in the request header: Authorization: Bearer client_access_token

List of Methods

  • POST /v2/messages — Send a message.
  • PATCH /v2/messages/{message_id} — Edit a message.
  • DELETE /v2/messages/{message_id} — Delete a message (supported transports only).
  • POST /v2/messages/messages_dump — Create a job to download messages for a period.
  • GET /v2/messages/messages_dump/{export_id} — Find out the status of the message download.

Sending a Message

Message sending is asynchronous. Upon successful submission, you receive a request_id. The presence of a request_id does not guarantee delivery — it simply indicates that Wazzup has accepted your message for processing. The final outcome and the actual message_id will be delivered via a webhook that updates the message status.

You cannot include both text (text parameter) and an attachment (attachment) in a single send request. Doing so will return the error: "Cannot provide more than one of text, attachment or template". Use separate requests to send text and a file.

Method POST /v2/messages
Body parameter. Required are marked with * Type Description
channel_id* string(uuid) Channel ID
quoted_message_id string(uuid) ID of the message being quoted
recipient * object recipient Message recipient
text string Message text. Either text or attachment must be provided. You cannot send both text and attachment in the same request
attachment object attachment Attachment. Either text or attachment must be provided. You cannot send both text and attachment in the same request
crm_user_id string CRM user ID
reset_unanswered boolean Whether to reset the unanswered counter. Set to false to prevent the message from resetting the counter
template object template Template object
keyboard object keyboard Interactive buttons

recipient (object)

Body parameter. Required are marked with * Type Description
chat_type * string

Chat type. Supported values:

  • whatsapp — individual WhatsApp chats,
  • whatsgroup — WhatsApp group chats,
  • viber — Viber chats,
  • instagram — Instagram chats,
  • telegram — individual Telegram chats,
  • telegroup — Telegram group chats,
  • vk — VK chats,
  • avito — Avito chats,
  • max — individual MAX chats,
  • maxgroup — MAX group chats.
chat_id string

Chat ID — the contact's identifier in the messenger. The format depends on the chat type:

  • For whatsapp, viber — phone number in international format without the + (e.g., 37190111122).
  • For instagram — username without the @ symbol.
  • For whatsgroup, maxgroup, telegram, max, avito, vk — provided in incoming message webhooks.
username string For Telegram only. Telegram username without the @ symbol. Use this when sending messages via Telegram if the chat_id is unknown
phone string For Telegram and MAX only. Contact's phone number in international format, without the + or any other symbols: only digits with the correct country code. Can be used when sending messages via Telegram if the chat_id is unknown
crm_contact_name string Contact name in the CRM

attachment (object)

Body parameter.
Required
are marked with *
Type Description
url * string Direct link to the file
name string File name
mimetype string(mime-type) MIME type of the file
size number File size
sha1 string(hex) SHA1 hash

template (object)

Body parameter. Required are marked with * Type Description
id * string(uuid) WABA template ID. See how to retrieve WABA template IDs
values array(string) Values for template variables
buttons array(object) Buttons attached to the WABA template. Use this only if you need to assign a payload to the buttons. Button labels are predefined in the template and do not need to be provided
buttons.text string Button label
buttons.type string Button type
buttons.payload * string Button payload

keyboard (object)

Body parameter. Required are marked with * Type Description
For interactive WABA messages
buttons * array(object) Array of button objects. Maximum 10. If more than 10 are provided, only the first 10 will be used
buttons.text string Button label. Max 20 characters
buttons.type string Button type
buttons.payload * string Button payload
For Telegram Bot messages
reply_markup string Telegram keyboard type: inline, reply
one_time_keyboard boolean If true, the custom keyboard is hidden (not removed) after a button is pressed
resize_keyboard boolean Adjusts keyboard size
selective boolean Selective keyboard
remove_keyboard boolean If true, removes the custom keyboard
buttons* array
of arrays
of objects
An array of button objects. No more than 12. If there are more, only the first 12 will be sent.
buttons[].text string For inline buttons. Button label. Max 64 characters. Buttons longer than 64 characters will not be sent.
buttons[].url string(url) For inline buttons. URL to open when the button is clicked
buttons[].callback_data string For inline buttons. Callback payload. Data sent back to the bot when the button is pressed. 1–64 bytes
buttons[].text * string For reply buttons. Button label. Max 64 characters
For MAX Bot messages
buttons * array of arrays Two-dimensional array of buttons
buttons[].type * string Button type. Possible values: callback, link, message
buttons[].text * string Button label for all types
buttons[].payload * string Button payload. For callback type only
buttons[].intent string Button intent. Possible values: default, positive, negative
buttons[].url * string Button URL. For link type only
curl -L 'https://tech.wazzup24.com/v2/messages' \
-H 'Authorization: Bearer <client_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"channel_id": "020e3f61-e5df-447f-8ef9-ce8258e92c7a",
"recipient": {
"chat_type": "whatsapp",
"chat_id": "79999999999"
},
"text": "Hello World"
}'
curl -L 'https://tech.wazzup24.com/v2/messages' \
-H 'Authorization: Bearer <client_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"channel_id": "020e3f61-e5df-447f-8ef9-ce8258e92c7a",
"recipient": {
"chat_type": "whatsapp",
"chat_id": "37193850059"
},
"attachment": {
"url": "https://drive.google.com/uc?export=download&id=123456test",
"name": "new.pdf",
"mimetype": "application/pdf",
"size": 86176,
"sha1": "153e030466873745ce4a66da02d0610a7ee6ce4f"
},
"crm_user_id": "crm-123"
}'
curl -L 'https://tech.wazzup24.com/v2/messages' \
-H 'Authorization: Bearer <client_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"channel_id": "020e3f61-e5df-447f-8ef9-ce8258e92c7a",
"recipient": {
"chat_type": "whatsapp",
"chat_id": "37193850059"
},
"template": {
"id": "385bf0c5-9f2a-4f9f-be85-9b84d797cf95",
"values": [
"https://drive.google.com/uc?export=download&id=123456test"
]
},
"buttons": [
{
"text": "Thank you!",
"type": "text",
"payload": "yes"
},
{
"text": "I need more!",
"type": "text",
"payload": "yes"
},
{
"text": "I need even more!",
"type": "text",
"payload": "yes"
}
]
}'

Response example:

{
"data": {
"request_id": "9820d14f-66ae-4170-997f-0f06c0800664",
"chat_id": 79385005913
},
"meta": {
"timestamp": 1759492896
}
}

Result: The send request has been accepted. You will receive a webhook with the delivery status.

Edit a Message

Editing is supported on the following channels:

  • Whatsapp Web (text only)
  • Telegram Personal
  • Telegram Bot
  • MAX
  • MAX bot (except messages with keyboard)

Messages can be edited within 15 minutes of delivery. Learn more about how message editing works in our guide.

Method PATCH /v2/messages/{message_id}

Path Parameters
message_id — ID of the message to be edited.

Body parameter. Required are marked with * Type Description
text string Message text. Either text or attachment must be provided
attachment object attachment Attachment object. Either text or attachment must be provided
crm_user_id string CRM user ID of the person editing the message

Example:

curl -L -X PATCH 'https://tech.wazzup24.com/v2/messages/8e074add-828d-4f35-afcc-99ccbfa9d0ae' \
-H 'Authorization: Bearer <client_access_token>' \
-H 'Content-Type: application/json' \
-d '{
"text": "Edited message"
}'

Response example:

{
"data": {
"message_id": "8e074add-828d-4f35-afcc-99ccbfa9d0ae",
"chat_id": "1234567890"
},
"meta": {
"timestamp": 1759397203
}
}

Result: Message message_id: 8e074add-828d-4f35-afcc-99ccbfa9d0ae has been edited.

Delete a Message

Message deletion is supported on the following channels:

  • Whatsapp
  • Telegram Personal
  • Telegram Bot
  • MAX
  • MAX bot

When a message is deleted, it is removed from the messenger for both the sender and the recipient. In the Wazzup iframe, the message will still appear but will be marked as deleted.

Learn more about how message deletion works in our guide.

Method DELETE /v2/messages/{message_id}

Path Parameters
message_id — ID of the message to be deleted.

Example:

curl -L -X DELETE 'https://tech.wazzup24.com/v2/messages/8a3f7a93-2b25-45da-8695-671bd56439e5' \
-H 'Authorization: Bearer <client_access_token>'

Response example:

{
"data": {
"message_id": "8a3f7a93-2b25-45da-8695-671bd56439e5",
"chat_id": "1234567890"
},
"meta": {
"timestamp": 1759397203
}
}

Result: Message message_id: 8a3f7a93-2b25-45da-8695-671bd56439e5 has been deleted.

Export messages

The method creates a job to export messages for the specified period.

Method POST /v2/messages/messages_dump

Request parameters

Body parameter. Required are marked with * Type Description
start_at* string Start of the message export period (ISO 8601)
end_at* string End of the message export period (ISO 8601)
channel_id string Channel ID if you need to get messages only from chats on this channel

Request example:

{
  "start_at": "2025-01-01T00:00:00.000Z",
  "end_at": "2025-01-31T23:59:59.999Z",
  "channel_id": "6a200e75-b1e6-4c92-950b-31801a31aa95"
}

Response example:

{
  "data": {
    "status": "pending",
    "export_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  "meta": {
    "timestamp": 1777885780
  }
}
Response parameters. Required are marked with * Type Description
status* string

Export status. Possible values:

  • pending — queued,
  • processing — in progress,
  • done — export is ready,
  • webhook_failed — export is ready but failed to send: an error is returned.
export_id* string Job ID. Useful for checking the export status.

Result: A job is created. When the export is ready, a link to a CSV file with messages will be sent in the webhook.

Check message export status

Method GET /v2/messages/messages_dump/{export_id}

Path parameter

export_idJob ID. Returned in the response to the POST /v2/messages/messages_dump request

Response example

{
  "data": {
    "status": "pending",
    "url": null
  },
  "meta": {
    "timestamp": 1777974260
  }
}

Result: The job status is returned in the status field. Possible values:

  • pending — queued,
  • processing — in progress,
  • done — export is ready,
  • webhook_failed — export is ready but failed to send: an error is returned.

If the status is done or webhook_failed, a link to the export is also provided in the url field of the response.