# Send template message

{% hint style="info" %}
This API requires an approved template. You can create a template using [Create a template](/business-management/business-management-api/template-management/create-a-template.md), which will then be automatically reviewed by Meta. Once approved, you can use it here to send messages.
{% endhint %}

{% hint style="info" %}
WhatsApp template messages can be sent only to personal WhatsApp accounts not WhatsApp API accounts. If you are testing WhatsApp templated message API please use your personal WhatsApp phone number instead of your business phone number on Connectly.
{% endhint %}

{% hint style="info" %}
Make sure your personal WhatsApp account you are using for testing has accepted all of WhatsApp app and privacy updates
{% endhint %}

{% openapi src="/files/Co61zoF5m8TmMptYkJKy" path="/v1/businesses/{businessId}/send/whatsapp\_templated\_messages" method="post" %}
[service.swagger.json](https://1088238995-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTPnSja6RkBiRLGAbuXVJ%2Fuploads%2FV9qAvavxfsFRbf0C65yA%2Fservice.swagger.json?alt=media\&token=018c17a7-d49f-43b0-b9b2-32ac6fa18564)
{% endopenapi %}

## 24 hour WhatsApp restriction

If the recipient has not initiated the conversation first within the last 24 hours you MUST use templated message API `/v1/businesses/{businessId}/send/whatsapp_templated_messages`.

* Generally, you use `/v1/businesses/{businessId}/send/messages` to reply to the customers who already messaged you first.
* You use `/v1/businesses/{businessId}/send/whatsapp_templated_messages` to initiate with the customer first.

### Select the WhatsApp number you want to send from

\
The endpoint supports an optional sender field in the body. If you have multiple WhatsApp phone numbers with Connectly you can choose which one you want to send the message from. The payload needs to contain the optional `sender` key specifying the phone number.

```json
{
     "sender": "+14151111234",
     "number": "+1(604) 585 2331",
     "templateName": "template", 
     "language": "en",
     "parameters": []
}
```

### Template languages

Your template can have different language translations which is why you need to provide the language in the API call.

To see a list of available languages go to [Meta's official documentation.](https://developers.facebook.com/docs/whatsapp/api/messages/message-templates/#message-templates)

Your template must have a language translation approved before you can use it for that specific language.

In most cases, the default template language is \`en\`.

Please see [Meta Business Manager](https://business.facebook.com) for the available templates and language translations.

### Most common languages for templates

The language is specified in `language` field. To see a list of available languages go to [Meta's official documentation.](https://developers.facebook.com/docs/whatsapp/api/messages/message-templates/#message-templates)

#### Brazilian Portuguese

```json
{
    "number": "16044441234",
    "templateName": "my_brazilian_template",
    "language": "pt_BR",
    "parameters": []
}
```

#### Spanish&#x20;

```json
{
    "number": "16044441234",
    "templateName": "my_spanish_template",
    "language": "es",
    "parameters": []
}
```

### How to use template parameters

The template parameters is a list of objects in the following format:

<pre class="language-json"><code class="lang-json">"parameters": [
<strong>   {
</strong>      "name": "header_document",
      "value": "YOUR_VALUE",
      "filename": "NAME_OF_DOCUMENT_FILE" // Only applicable to header_document
   }, 
   {
      "name": "body_1",
      "value": "YOUR_VALUE"
   },
   {
      "name": "body_2",
      "value": "YOUR_VALUE"
   },
   {
      "name": "body_3",
      "value": "YOUR_VALUE"
   }
]
</code></pre>

### Available options for `name` keys

**Header**

1. `header_text` - indicates text in the header. Works only if the header has any variables in it. Substitutes the variables with the specified text.
2. `header_document` - indicates document in the header. The `value` must be a valid URL with valid document. You can also specify how to name the file using `filename` parameter. See examples below.

For supported media types please reference [Meta's official documentation](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types).

**Body**

1. `body_1` - indicates text in the body
2. `body_2` - indicates text in the body
3. `body_3` - indicates text in the body
4. `body_4` - indicates text in the body
5. `body_5` - indicates text in the body
6. `body_6` - indicates text in the body
7. `body_7` - indicates text in the body
8. `body_8` - indicates text in the body
9. `body_9` - indicates text in the body
10. `body_10` - indicates text in the body
11. `body_11` - indicates text in the body
12. `body_12` - indicates text in the body
13. `body_13` - indicates text in the body
14. `body_14` - indicates text in the body
15. `body_15` - indicates text in the body

**Buttons**

1. `button_1_url_suffix` - indicates URL link in the button. The `value` must be a valid URL
2. `button_2_url_suffix` - indicates URL link in the button. The `value` must be a valid URL
3. `button_3_url_suffix` - indicates URL link in the button. The `value` must be a valid URL

## Examples

### You have a template with one header variable and several body variables

![](/files/A2hsHaGg6mgLWsvqTAXG)

```json
{
    "number": "16044441234",
    "templateName": "my_template_name",
    "language": "en",
    "parameters": [
        {
            "name": "header_text",
            "value": "Hello"
        },
        {
            "name": "body_1",
            "value": "John"
        },
        {
            "name": "body_2",
            "value": "red"
        }
    ]
}
```

### You have a template with a header image and multiple body variables

![](/files/rgfBk81tvEkkxQ6vPFqd)

```json
{
    "number": "16044441234",
    "templateName": "external_header_test2",
    "language": "pt_BR",
    "parameters": [
        {
            "name": "header_image",
            "value": "https://i.picsum.photos/id/695/200/300"
        },
        {
            "name": "body_1",
            "value": "Connectly.ai"
        },
        {
            "name": "body_2",
            "value": "John"
        }
        {
            "name": "body_3",
            "value": "a new party"
        },
        {
            "name": "body_4",
            "value": "McDonald's"
        },
        {
            "name": "body_5",
            "value": "celebrate lol"
        }
    ]
}
```

### You have a template with a header document

![](/files/3lDLq9jHvIdzzBD3L5vJ)

```json
{
    "number": "16044441234",
    "templateName": "external_header_document",
    "language": "en",
    "parameters": [
        {
            "name": "header_document",
            "value": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"
            "filename": "feelssss"
        }
    ]
}
```

### You have a template with the link button and button has a suffix

![](/files/6Vw5iwS9PrMAI7pv1Si6)

![](/files/5RcBce7om5X3XR6DEI7z)

```json
{
    "number": "16044441234",
    "templateName": "external_link_button",
    "language": "es",
    "parameters": [
        {
            "name": "button_1_url_suffix",
            "value": "connectlyai"
        }
    ]
}
```

The above payload will send a template where "Our Facebook" button will take the customer to [www.facebook.com/connectlyai](http://www.facebook.com/connectlyai)

### You have a template with two quick reply buttons

![](/files/JmrXrv3UwmvvXGNvemWL)

{% hint style="info" %}
If you have subscribed to Connectly Messaging Webhooks, whenever the customer presses a button the value (payload) that you specify will be sent through the webhook to indicate which button was pressed.
{% endhint %}

```json
{
    "number": "16044441234",
    "templateName": "my_template_name",
    "language": "en_US",
    "parameters": []
}
```

### Sending a Carousel template message

To send a Carousel message, first you need to create the template using [Create a template](/business-management/business-management-api/template-management/create-a-template.md#carousel-template).

Assuming you want to send the same template created in [Create a template](/business-management/business-management-api/template-management/create-a-template.md#carousel-template), you can use the below payload structure:

```json
{
    "number": "<TARGET PHONE NUMBER>",
    "templateName": "carousel_demo_1",
    "language": "en_US",
    "parameters": [
        {
            "name": "card.0.header.image",
            "value": "https://i.ibb.co/yB7pCHD/2025-02-20-16-38.png"
        },
        {
            "name": "card.0.body.0",
            "value": "Yuri"
        },
        {
            "name": "card.0.button.0.urlSuffix",
            "value": "fruits1234"
        },
        {
            "name": "card.1.header.image",
            "value": "https://i.ibb.co/nM0rYxB/2025-02-20-16-38-1.png"
        },
        {
            "name": "card.1.body.0",
            "value": "3-March 2025"
        },
        {
            "name": "card.1.button.0.urlSuffix",
            "value": "fruitcoupons"
        }
    ]
}

```

Note that to detect carousel button clicks and replies, you need to subscribe to our [Webhook API](/message-api/webhook-api.md).

### **Rate Limiting**

To ensure fair usage and maintain service stability, we have implemented rate limiting for above APIs. This endpoint is limited to 200 requests per second. If the limit is exceeded, the API will return a `429 Too Many Requests` response.

## WhatsApp Message template

{% hint style="info" %}
Please see the instructions [here](< https://www.facebook.com/business/help/2055875911147364?id=2129163877102343.>) for instructions on how to create a WhatsApp message template.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.connectly.ai/message-api/message-service-api/messageservice/send-template-message.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
