Text messages

You can only send a text message up until 24 hours after receiving a message from the user. If you have not received a message from the user within this time, you will need to start a new conversation by sending a Template message.

To send text messages, specify text in the type field. A text message can be a maximum of 4096 characters long.

Send a text message

POST https://waba-v2.360dialog.io/messages

To send a message, use the request URL and the following body parameters.

Request example

{

"messaging_product": "whatsapp",

"recipient_type": "individual",

"to": "PHONE_NUMBER",

"type": "text",

"text": {

"body": "Hello, dear customer!"

}

}

Request Body

NameTypeDescription

recipient_type

string

individual

to

string

wa_idof the contact you want to message

type

string

text

text

object

contains body field

messaging_product

string

Required only for Cloud API. Messaging service used for the request. Use "whatsapp".

context

object

Required if replying to any message in the conversation.

An object containing the ID of a previous message you are replying to. For example:

{"message_id":"MESSAGE_ID"}

Cloud API only.

A successful response includes a messages object with an ID for the newly created message.

{
    "messaging_product": "whatsapp",
    "contacts": [
        {
            "input": "16505076520",
            "wa_id": "16505076520"
        }
    ],
    "messages": [
        {
            "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA"
        }
    ]
}

Formatting in Text Messages

WhatsApp allows some formatting in messages. To format all or part of a message, use these formatting symbols:

FormattingSymbolExample

Bold

Asterisk (*)

Your total is *$10.50*.

Italics

Underscore (_)

Welcome to _WhatsApp_!

Strike-through

Tilde (~)

This is ~better~ best!

Code

Three backticks (```)

```print 'Hello World';```

Sending URLs in Text Messages

By default, the mobile WhatsApp application recognizes URLs and makes them clickable. To include a URL preview, include "preview_url": true and make sure the URL begins with http:// or https://. A hostname is required, IP addresses are not matched.

When sending preview-url with Cloud API hosting, the preview-url should be inside the text object.

Example:

    "text":  {// the text object
        "preview_url": true,
        "body": You have to check out this amazing messaging service https://www.whatsapp.com/"
    }

The majority of the time when you send a URL, whether with a preview or not, the receiver of the message will see a URL that they can click on.

URL previews are only rendered after one of the following has happened:

  1. The business has sent a message template to the user.

  2. The user initiates a conversation with a "click to chat" link.

  3. The user adds the business phone number to their address book and initiates a conversation.

If the end user did not initiate the conversation with you - you must use a Template message instead.

[will be deprecated] If the WABA is registered in On-premise API

To use preview-url with the 360dialog On-Premise hosting, it must be sent as a top-level object:

Example:

{
    "preview_url": true,
    "to": "whatsapp-id",
    "text": {
        "body": "You have to check out this amazing messaging service https://www.whatsapp.com/"
     }
 

Replies

You can send any message as a reply to a previous message in a conversation by including the previous message's ID in the context object. The recipient will receive the new message along with a contextual bubble that displays the previous message's content.

Recipients will not see a contextual bubble if:

  • replying with a template message ("type":"template")

  • replying with an image, video, PTT, or audio, and the recipient is on KaiOS

These are known bugs which Meta is addressing. We will keep you updated on this matter.

Sample request:

POST https://waba-v2.360dialog.io/messages
{
   "messaging_product": "whatsapp",
   "context": {
     "message_id": "MESSAGE_ID"
   },
   "to": "<phone number> or <wa_id>",
   "type": "text",
   "text": {
     "preview_url": False,
     "body": "your-text-message-content"
   }
 }

A successful response includes an object with an identifier prefixed with wamid. Use the ID listed after wamid to track your message status.

Note: if the previous message is more than 30 days old or doesn't correspond to any message in the conversation, the message will be sent normally instead of as a reply.

Sample response:

{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "PHONE_NUMBER",
    "wa_id": "WHATSAPP_ID",
  }]
  "messages": [{
    "id": "wamid.ID",
  }]
}

[will be deprecated] If the WABA is registered in On-premise API

As announced in November 2023, Meta is transitioning to a fully Cloud-hosted WhatsApp Business Platform and will stop supporting On-Premise API in October 2025.

Starting from On-Premise client v2.53, all new feature updates will be exclusively delivered to Cloud API. While the On-Premise API client will receive quarterly releases, they will focus solely on bug fixes and security patches. From May 15, 2024, 360dialog will not allow for new numbers to be onboarded with On-Premise API. We will continue supporting already registered On-Premise API throughout 2024, but we strongly recommend to start changing the hosting type of numbers to Cloud as soon as possible. Learn here how to integrate with Cloud API.

Send a text message

POST https://waba.360dialog.io/v1/messages

To send a message, use the request URL and the following body parameters.

Request example

{

"recipient_type": "individual",

"to": "wa_id",

"type": "text",

"text": {

"body": "Hello, dear customer!"

}

}

Request Body

NameTypeDescription

recipient_type

string

individual

to*

string

wa_id of the contact you want to message

type

string

text

text

object

contains body field

A successful response includes a messages object with an ID for the newly created message.

{
    "messages": [
        {
            "id": "gBGHSRUUIXKJTwIJVQgXRR0rdXiv"
        }
    ],
    "meta": {
        "api_status": "stable",
        "version": "2.31.5"
    }
}

Last updated