Skip to content

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

https://api.azmarq.com/v1/whatsapp/clevertap

Headers

  • Name
    Content-Type
    Type
    string
    Description

    application/json

  • Name
    apikey
    Type
    string
    Description

    Dashboard API key. See Authentication.


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

curl --location --request POST 'https://api.azmarq.com/v1/whatsapp/clevertap' \
--header 'Content-Type: application/json' \
--header 'apikey: YOUR_API_KEY' \
--data-raw '{
  "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
}

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

curl --location --request POST 'https://api.azmarq.com/v1/whatsapp/clevertap' \
--header 'Content-Type: application/json' \
--header 'apikey: YOUR_API_KEY' \
--data-raw '{
  "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
}

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

curl --location --request POST 'https://api.azmarq.com/v1/whatsapp/clevertap' \
--header 'Content-Type: application/json' \
--header 'apikey: YOUR_API_KEY' \
--data-raw '{
  "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
}

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

curl --location --request POST 'https://api.azmarq.com/v1/whatsapp/clevertap' \
--header 'Content-Type: application/json' \
--header 'apikey: YOUR_API_KEY' \
--data-raw '{
  "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
}

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

curl --location --request POST 'https://api.azmarq.com/v1/whatsapp/clevertap' \
--header 'Content-Type: application/json' \
--header 'apikey: YOUR_API_KEY' \
--data-raw '{
  "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
}

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

curl --location --request POST 'https://api.azmarq.com/v1/whatsapp/clevertap' \
--header 'Content-Type: application/json' \
--header 'apikey: YOUR_API_KEY' \
--data-raw '{
  "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
}

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

curl --location --request POST 'https://api.azmarq.com/v1/whatsapp/clevertap' \
--header 'Content-Type: application/json' \
--header 'apikey: YOUR_API_KEY' \
--data-raw '{
  "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?