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.
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.
enoren_US.
- Name
components- Type
- array
- Description
CleverTap component rows:
BODY, optionalHEADER, optionalBUTTON.
Request
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
}
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
HEADERwithheader.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 -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
}
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 -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
}
Carousel Template — Image Cards
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
CAROUSELrow withcards. Optionally a rootBODYfor bubble text above the carousel.
- Name
components[].cards[].components- Type
- array
- Description
Per-card
HEADER, optionalBODY, optionalBUTTONrows.
Request
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
}
Carousel Template — Dynamic URL / Shorten
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
BUTTONwithsubTypedynamicUrl(orsub_typeurl).
- 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 -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
}
Carousel Template — Bubble Body + Cards
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
BODYfirst, thenCAROUSELwith the same card count as the template.
Request
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
}
Carousel Template — Copy Code
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 -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
}