CleverTap WhatsApp

Use this endpoint from CleverTap Connected WhatsApp / custom channel integrations. The request uses CleverTap’s component array shape; the platform maps it to Meta Cloud API before send.

Endpoint

Headers

  • Name
    contentType
    Type
    string
    Description

    This should be set to application/json.

  • Name
    apikey
    Type
    string
    Description

    Find your API key under your login account.


POST

Template With Body Variables

Send an approved flat (non-carousel) template with body placeholders.

Required attributes

  • Name
    payloadVersion
    Type
    number
    Description

    CleverTap payload version. Example: 1

  • Name
    wabaNumber
    Type
    string
    Description

    Your WhatsApp Business number (with country code).

  • Name
    to
    Type
    string
    Description

    Recipient MSISDN with country code.

  • Name
    isTemplate
    Type
    boolean
    Description

    Must be true for template sends.

  • Name
    template.namespace
    Type
    string
    Description

    Approved template name.

  • Name
    template.languageCode
    Type
    string
    Description

    Template language code, e.g. en or en_US.

  • Name
    components
    Type
    array
    Description

    CleverTap component rows: BODY, optional HEADER, optional BUTTON.

Request

POST
  curl -P - /v1/whatsapp/clevertap\
  -H 'apikey':'string'
  -H "Content-Type: application/json" \
  -d '{
      "payloadVersion": 1,
      "wabaNumber": "+91XXXXXXXXXX",
      "to": "+91XXXXXXXXXX",
      "isTemplate": true,
      "template": {
        "namespace": "order_update",
        "languageCode": "en"
      },
      "components": [
        {
          "type": "BODY",
          "body": {
            "parameters": [
              { "type": "text", "text": "John" },
              { "type": "text", "text": "ORD-123" }
            ]
          }
        }
      ]
    }'

Response

{
  "id": "58d63c02-XXXX-XXXX-XXXX-XXXXbb39453",
  "data": [
  {
  "recipient": "+91XXXXXXXXXX",
  "messageId": "58d63c02-XXXXX-XXXXX-XXXXX-XXXX9bb39453:1"
  } ],
  "totalCount": 1,
  "message": "Message Sent Successfully!", "error": null
}

POST

Template With Image Header

Header media uses CleverTap’s nested header object. Prefer mediaURL / link for the public file URL.

Required attributes

  • Name
    components[].type
    Type
    string
    Description

    HEADER with header.type = image (or video / document for flat templates).

  • Name
    components[].header.image.link
    Type
    string
    Description

    Public HTTPS media URL (aliases: mediaURL, mediaUrl).

Request

POST
  curl -P - /v1/whatsapp/clevertap\
  -H 'apikey':'string'
  -H "Content-Type: application/json" \
  -d '{
      "payloadVersion": 1,
      "wabaNumber": "+91XXXXXXXXXX",
      "to": "+91XXXXXXXXXX",
      "isTemplate": true,
      "template": {
        "namespace": "promo_image",
        "languageCode": "en"
      },
      "components": [
        {
          "type": "HEADER",
          "header": {
            "type": "image",
            "image": {
              "link": "https://example.com/banner.jpg"
            }
          }
        },
        {
          "type": "BODY",
          "body": {
            "parameters": [
              { "type": "text", "text": "Weekend Sale" }
            ]
          }
        }
      ]
    }'

Response

{
  "id": "58d63c02-XXXX-XXXX-XXXX-XXXXbb39453",
  "data": [
  {
  "recipient": "+91XXXXXXXXXX",
  "messageId": "58d63c02-XXXXX-XXXXX-XXXXX-XXXX9bb39453:1"
  } ],
  "totalCount": 1,
  "message": "Message Sent Successfully!", "error": null
}

POST

Template With Dynamic URL Button

For dynamic URL buttons, send only the {{n}} suffix in parameters[0].text (Meta #132012 if a full URL is sent for a non-shorten template). Use subType: dynamicUrl (or sub_type: url).

When the template URL uses the shorten domain (e.g. https://5az.me/{'{{1}}'}), pass the full destination URL; the platform shortens it before Meta send.

Required attributes

  • Name
    components[].type
    Type
    string
    Description
    BUTTON
  • Name
    components[].index
    Type
    number
    Description

    Zero-based button index matching the template.

  • Name
    components[].parameters[0].text
    Type
    string
    Description

    URL suffix, or full destination URL for shorten templates.

Request

POST
  curl -P - /v1/whatsapp/clevertap\
  -H 'apikey':'string'
  -H "Content-Type: application/json" \
  -d '{
      "payloadVersion": 1,
      "wabaNumber": "+91XXXXXXXXXX",
      "to": "+91XXXXXXXXXX",
      "isTemplate": true,
      "template": {
        "namespace": "promo_cta",
        "languageCode": "en"
      },
      "components": [
        {
          "type": "BODY",
          "body": {
            "parameters": [
              { "type": "text", "text": "John" }
            ]
          }
        },
        {
          "type": "BUTTON",
          "subType": "dynamicUrl",
          "index": 0,
          "parameters": [
            { "type": "text", "text": "summer-sale" }
          ]
        }
      ]
    }'

Response

{
  "id": "58d63c02-XXXX-XXXX-XXXX-XXXXbb39453",
  "data": [
  {
  "recipient": "+91XXXXXXXXXX",
  "messageId": "58d63c02-XXXXX-XXXXX-XXXXX-XXXX9bb39453:1"
  } ],
  "totalCount": 1,
  "message": "Message Sent Successfully!", "error": null
}

POST

Send an approved carousel template. Card count must match the template. Each card needs a header media row; carousel headers support IMAGE or VIDEO only (not document).

Component types in the CleverTap request may be uppercase (CAROUSEL, HEADER, BODY, BUTTON); the platform normalizes them for Meta.

Required attributes

  • Name
    payloadVersion
    Type
    number
    Description

    CleverTap payload version.

  • Name
    wabaNumber
    Type
    string
    Description

    Your WhatsApp Business number.

  • Name
    to
    Type
    string
    Description

    Recipient MSISDN.

  • Name
    isTemplate
    Type
    boolean
    Description
    true
  • Name
    template.namespace
    Type
    string
    Description

    Approved carousel template name.

  • Name
    components
    Type
    array
    Description

    Include one CAROUSEL row with cards. Optionally a root BODY for bubble text above the carousel.

  • Name
    components[].cards[].components
    Type
    array
    Description

    Per-card HEADER, optional BODY, optional BUTTON rows.

Request

POST
  curl -P - /v1/whatsapp/clevertap\
  -H 'apikey':'string'
  -H "Content-Type: application/json" \
  -d '{
      "payloadVersion": 1,
      "wabaNumber": "+91XXXXXXXXXX",
      "to": "+91XXXXXXXXXX",
      "isTemplate": true,
      "template": {
        "namespace": "promo_carousel_template",
        "languageCode": "en"
      },
      "components": [
        {
          "type": "CAROUSEL",
          "cards": [
            {
              "card_index": 0,
              "components": [
                {
                  "type": "HEADER",
                  "header": {
                    "type": "image",
                    "image": {
                      "link": "https://example.com/earbuds.jpg"
                    }
                  }
                },
                {
                  "type": "BODY",
                  "body": {
                    "parameters": [
                      { "type": "text", "text": "Wireless Earbuds" },
                      { "type": "text", "text": "1999" }
                    ]
                  }
                }
              ]
            },
            {
              "card_index": 1,
              "components": [
                {
                  "type": "HEADER",
                  "header": {
                    "type": "image",
                    "image": {
                      "link": "https://example.com/watch.jpg"
                    }
                  }
                },
                {
                  "type": "BODY",
                  "body": {
                    "parameters": [
                      { "type": "text", "text": "Smart Watch" },
                      { "type": "text", "text": "4999" }
                    ]
                  }
                }
              ]
            }
          ]
        }
      ]
    }'

Response

{
  "id": "58d63c02-XXXX-XXXX-XXXX-XXXXbb39453",
  "data": [
  {
  "recipient": "+91XXXXXXXXXX",
  "messageId": "58d63c02-XXXXX-XXXXX-XXXXX-XXXX9bb39453:1"
  } ],
  "totalCount": 1,
  "message": "Message Sent Successfully!", "error": null
}

POST

Add a BUTTON row inside each card for dynamic URL CTAs. Use subType: dynamicUrl and send the path suffix—or the full destination URL when the template uses the shorten domain.

Static quick-reply / phone buttons do not need send-time params.

Required attributes

  • Name
    components[].cards[].components[].type
    Type
    string
    Description

    BUTTON with subType dynamicUrl (or sub_type url).

  • Name
    components[].cards[].components[].index
    Type
    number
    Description

    Button index on that card (0-based).

  • Name
    components[].cards[].components[].parameters[0].text
    Type
    string
    Description

    URL suffix, or full destination for Personalised Clicker / shorten templates.

Request

POST
  curl -P - /v1/whatsapp/clevertap\
  -H 'apikey':'string'
  -H "Content-Type: application/json" \
  -d '{
      "payloadVersion": 1,
      "wabaNumber": "+91XXXXXXXXXX",
      "to": "+91XXXXXXXXXX",
      "isTemplate": true,
      "template": {
        "namespace": "promo_carousel_shorten",
        "languageCode": "en"
      },
      "components": [
        {
          "type": "CAROUSEL",
          "cards": [
            {
              "card_index": 0,
              "components": [
                {
                  "type": "HEADER",
                  "header": {
                    "type": "image",
                    "image": {
                      "link": "https://example.com/earbuds.jpg"
                    }
                  }
                },
                {
                  "type": "BODY",
                  "body": {
                    "parameters": [
                      { "type": "text", "text": "Wireless Earbuds" }
                    ]
                  }
                },
                {
                  "type": "BUTTON",
                  "subType": "dynamicUrl",
                  "index": 0,
                  "parameters": [
                    { "type": "text", "text": "https://shop.example.com/p/earbuds?utm=ct" }
                  ]
                }
              ]
            },
            {
              "card_index": 1,
              "components": [
                {
                  "type": "HEADER",
                  "header": {
                    "type": "image",
                    "image": {
                      "link": "https://example.com/watch.jpg"
                    }
                  }
                },
                {
                  "type": "BODY",
                  "body": {
                    "parameters": [
                      { "type": "text", "text": "Smart Watch" }
                    ]
                  }
                },
                {
                  "type": "BUTTON",
                  "subType": "dynamicUrl",
                  "index": 0,
                  "parameters": [
                    { "type": "text", "text": "https://shop.example.com/p/watch?utm=ct" }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }'

Response

{
  "id": "58d63c02-XXXX-XXXX-XXXX-XXXXbb39453",
  "data": [
  {
  "recipient": "+91XXXXXXXXXX",
  "messageId": "58d63c02-XXXXX-XXXXX-XXXXX-XXXX9bb39453:1"
  } ],
  "totalCount": 1,
  "message": "Message Sent Successfully!", "error": null
}

POST

When the template has a top-level BODY above the carousel, send a root BODY component, then the CAROUSEL component.

Required attributes

  • Name
    components
    Type
    array
    Description

    Root BODY first, then CAROUSEL with the same card count as the template.

Request

POST
  curl -P - /v1/whatsapp/clevertap\
  -H 'apikey':'string'
  -H "Content-Type: application/json" \
  -d '{
      "payloadVersion": 1,
      "wabaNumber": "+91XXXXXXXXXX",
      "to": "+91XXXXXXXXXX",
      "isTemplate": true,
      "template": {
        "namespace": "promo_carousel_template",
        "languageCode": "en"
      },
      "components": [
        {
          "type": "BODY",
          "body": {
            "parameters": [
              { "type": "text", "text": "Hi John" },
              { "type": "text", "text": "this week" }
            ]
          }
        },
        {
          "type": "CAROUSEL",
          "cards": [
            {
              "card_index": 0,
              "components": [
                {
                  "type": "HEADER",
                  "header": {
                    "type": "image",
                    "image": {
                      "link": "https://example.com/product1.jpg"
                    }
                  }
                }
              ]
            },
            {
              "card_index": 1,
              "components": [
                {
                  "type": "HEADER",
                  "header": {
                    "type": "image",
                    "image": {
                      "link": "https://example.com/product2.jpg"
                    }
                  }
                }
              ]
            }
          ]
        }
      ]
    }'

Response

{
  "id": "58d63c02-XXXX-XXXX-XXXX-XXXXbb39453",
  "data": [
  {
  "recipient": "+91XXXXXXXXXX",
  "messageId": "58d63c02-XXXXX-XXXXX-XXXXX-XXXX9bb39453:1"
  } ],
  "totalCount": 1,
  "message": "Message Sent Successfully!", "error": null
}

POST

For COPY_CODE card buttons, send subType: copy_code with coupon_code (or text) in parameters.

Required attributes

  • Name
    components[].cards[].components[].subType
    Type
    string
    Description
    copy_code
  • Name
    components[].cards[].components[].parameters[0].coupon_code
    Type
    string
    Description

    Coupon string to copy.

Request

POST
  curl -P - /v1/whatsapp/clevertap\
  -H 'apikey':'string'
  -H "Content-Type: application/json" \
  -d '{
      "payloadVersion": 1,
      "wabaNumber": "+91XXXXXXXXXX",
      "to": "+91XXXXXXXXXX",
      "isTemplate": true,
      "template": {
        "namespace": "promo_carousel_template",
        "languageCode": "en"
      },
      "components": [
        {
          "type": "CAROUSEL",
          "cards": [
            {
              "card_index": 0,
              "components": [
                {
                  "type": "HEADER",
                  "header": {
                    "type": "image",
                    "image": {
                      "link": "https://example.com/product1.jpg"
                    }
                  }
                },
                {
                  "type": "BUTTON",
                  "subType": "copy_code",
                  "index": 0,
                  "parameters": [
                    { "type": "coupon_code", "coupon_code": "SAVE20" }
                  ]
                }
              ]
            },
            {
              "card_index": 1,
              "components": [
                {
                  "type": "HEADER",
                  "header": {
                    "type": "image",
                    "image": {
                      "link": "https://example.com/product2.jpg"
                    }
                  }
                },
                {
                  "type": "BUTTON",
                  "subType": "copy_code",
                  "index": 0,
                  "parameters": [
                    { "type": "coupon_code", "coupon_code": "SAVE20" }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }'

Response

{
  "id": "58d63c02-XXXX-XXXX-XXXX-XXXXbb39453",
  "data": [
  {
  "recipient": "+91XXXXXXXXXX",
  "messageId": "58d63c02-XXXXX-XXXXX-XXXXX-XXXX9bb39453:1"
  } ],
  "totalCount": 1,
  "message": "Message Sent Successfully!", "error": null
}

Was this page helpful?