---
title: "Send Whatsapp Template Message (V2)"
method: POST
path: "/v2/whatsapp/message/template"
tags: ["Outgoing Messages"]
---

# Send Whatsapp Template Message (V2)

`POST /v2/whatsapp/message/template`

Send Whatsapp template messages. Requires to, from (WABA number), templateName, language, templateData. Body placeholders must be key-value pairs (objects), not strings. e.g. [{ "name": "John" }].

## Request body

- SendWhatsappTemplateMessagesDtoV2
  - `messages` SendWhatsappTemplateMessageDtoV2[], required — Array of template messages. Each requires to, from, content.templateName, content.language, content.templateData
    - `from` string — WABA number (with country code). Required when not using groupId.
    - `to` string — Recipient phone number with country code. Required when not using groupId.
    - `groupId` string — The unique identifier of the WhatsApp group to send the message to. Mutually exclusive with "to".
    - `content` SendTemplateMessageContentDtoV2, required
      - `templateName` string, required
      - `language` 'en' | 'en_US' | 'en_GB' | 'pt_BR' | 'es' | 'id', required
      - `templateData` SendTemplateMessageContentTemplateDataDtoV2
        - `header` SendTemplateMessageContentTemplateDataHeaderDtoV2
          - `type` 'TEXT' | 'IMAGE' | 'DOCUMENT' | 'VIDEO' — Template header type
          - `mediaUrl` string — Media link (IMAGE, VIDEO, DOCUMENT)
        - `body` SendTemplateMessageContentTemplateDataBodyDtoV2
          - `placeholders` object[], required — Key-value pairs only. One object per variable e.g. [{ "name": "John" }, { "url": "https://x.com" }]
        - `buttons` SendTemplateMessageContentTemplateDataButtonDto[] — Template buttons
          - `type` 'URL', required — Template button type
          - `parameter` string — Template button text (Required only when the URL is dynamic)
        - `cards` SendTemplateMessageContentTemplateCarouselCardsDtoV2[] — Carousel cards. Card body placeholders: key-value pairs only.
          - `cardIndex` number — Index of the card
          - `components` object
            - `header` object
              - …
            - `body` SendTemplateMessageContentTemplateDataBodyDtoV2
              - …
            - `buttons` SendTemplateMessageContentTemplateDataButtonDto[]
              - …
    - `customData` object — Arbitrary key-value pairs (string values only) stored against this message. Each entry is spread at the root level of outgoing webhooks: status update webhooks (sent / delivered / read / failed) and received-message webhooks when a customer replies to this template.
  - `byPassMediaUrlValidation` boolean — Bypass media URL validation

## Response `201`

Success

- SendWhatsappTemplateMessageResponseV2
  - `messages` object[] — Per-message result
    - `status` 'SENT' | 'FAILED' | 'ENQUEUED' — Status of the message
    - `recipient` string — Recipient phone number
    - `messageId` string — Message ID
    - `errorMessage` string — Error (when FAILED)

## Other responses

- `400` — Incorrect payload
- `401` — Unauthorized

---

[API](https://skmtc.net/doubletick/apis/doubletick-public-apis.md) · [All operations](https://skmtc.net/doubletick/apis/doubletick-public-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/doubletick/doubletick-public-apis/versions/bba484527d34/schema)
