curl --request POST \
--url https://api.jelou.ai/v1/bots/{botId}/templates \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"category": "UTILITY",
"language": "<string>",
"elementName": "<string>",
"template": "<string>",
"isVisible": true,
"params": [
{
"param": "<string>",
"label": "<string>",
"example": "<string>"
}
],
"paramsNumber": 123,
"displayName": "<string>",
"type": "HSM",
"mediaUrl": "<string>",
"interactiveAction": "NONE",
"buttons": [
{
"text": "<string>",
"type": "QUICK_REPLY",
"url": "<string>",
"phone_number": "<string>",
"example": "<string>"
}
],
"header": "<string>",
"exampleHeader": "<string>",
"headerParams": [
{}
],
"example": "<string>",
"extraSettings": {
"addSecurityRecommendation": true,
"codeExpirationMinutes": 45,
"allowChangeCategory": true
}
}
'{
"message": [
"<string>"
],
"status": "<string>",
"data": {}
}Create a new HSM template and submit it to WhatsApp for approval
curl --request POST \
--url https://api.jelou.ai/v1/bots/{botId}/templates \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"category": "UTILITY",
"language": "<string>",
"elementName": "<string>",
"template": "<string>",
"isVisible": true,
"params": [
{
"param": "<string>",
"label": "<string>",
"example": "<string>"
}
],
"paramsNumber": 123,
"displayName": "<string>",
"type": "HSM",
"mediaUrl": "<string>",
"interactiveAction": "NONE",
"buttons": [
{
"text": "<string>",
"type": "QUICK_REPLY",
"url": "<string>",
"phone_number": "<string>",
"example": "<string>"
}
],
"header": "<string>",
"exampleHeader": "<string>",
"headerParams": [
{}
],
"example": "<string>",
"extraSettings": {
"addSecurityRecommendation": true,
"codeExpirationMinutes": 45,
"allowChangeCategory": true
}
}
'{
"message": [
"<string>"
],
"status": "<string>",
"data": {}
}POST /v1/bots/{botId}/templates
| Property | Type | Description |
|---|---|---|
| botId | string | Unique bot ID. Example: 123456789 |
| Property | Type | Description |
|---|---|---|
| sendToAprove | boolean | Defines whether the template should be submitted to WhatsApp for approval. |
| Property | Type | Description |
|---|---|---|
| category | string | HSM template category. Values: UTILITY, MARKETING, AUTHENTICATION |
| language | string | Template language. |
| isVisible | boolean | Defines whether the template should be shown to operators. |
| params | array | Parameter structure. For the authentication category, Meta has restricted to one parameter. |
| paramsNumber | number | Number of parameters. For the authentication category, Meta has restricted to one parameter. |
| elementName | string | Unique identifier for the template. Can only contain lowercase letters, underscores (_), and numbers. |
| displayName | string | Display name of the template. |
| template | string | Template body. For the authentication category, Meta has restricted the content. |
| type | string | HSM type. Values: HSM, IMAGE, VIDEO, DOCUMENT |
| mediaUrl | string | Media URL. Required when the HSM type is IMAGE, VIDEO, DOCUMENT. Not applicable for the authentication category. |
| interactiveAction | string | HSM interactive action. Values: NONE, CALL_TO_ACTION, QUICK_REPLY, OTP |
| buttons | array | Button structure. Required when the HSM interactive action is CALL_TO_ACTION, QUICK_REPLY, or OTP. |
| header | string | Template header. Applicable only for text-type templates. Not applicable for the authentication category and has a 60-character limit. |
| exampleHeader | string | Header example. Required only if the template will have a header. |
| headerParams | array | Parameter structure. The header supports a maximum of one parameter. |
| example | string | Template example. If the template has a parameter, it must be replaced with an example. |
| extraSettings | object | Optional settings for the template. |
Text
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "text_template_utility",
"template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, contact support.",
"example": "Thank you for your order, Maria! Your confirmation number is 71936. If you have any questions, contact support.",
"elementName": "text_template_utility",
"params": [
{"param": "1", "label": "customer", "example": "Maria"},
{"param": "2", "label": "order", "example": "71936"}
],
"paramsNumber": 2,
"type": "HSM",
"language": "en",
"category": "UTILITY",
"interactiveAction": "NONE"
}'
Text with quick reply buttons
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "template_quick_reply",
"template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. Use the buttons to contact us.",
"example": "Thank you for your order, Maria! Your confirmation number is 57893. Use the buttons to contact us.",
"elementName": "template_quick_reply",
"params": [
{"param": "1", "label": "customer", "example": "Maria"},
{"param": "2", "label": "order", "example": "57893"}
],
"paramsNumber": 2,
"type": "HSM",
"language": "en",
"category": "UTILITY",
"interactiveAction": "QUICK_REPLY",
"buttons": [
{"text": "Contact Support", "type": "QUICK_REPLY"},
{"text": "Contact Sales", "type": "QUICK_REPLY"}
]
}'
Text with CTA buttons
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "template_call_action",
"template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. Use the buttons to contact us.",
"example": "Thank you for your order, Maria! Your confirmation number is 67996. Use the buttons to contact us.",
"elementName": "template_call_action",
"params": [
{"param": "1", "label": "customer", "example": "Maria"},
{"param": "2", "label": "order", "example": "67996"}
],
"paramsNumber": 2,
"type": "HSM",
"language": "en",
"category": "UTILITY",
"interactiveAction": "CALL_TO_ACTION",
"buttons": [
{"text": "Contact Support", "type": "URL", "url": "https://apps.jelou.ai", "example": "https://apps.jelou.ai"},
{"text": "Call", "type": "PHONE_NUMBER", "phone_number": "+PHONE_NUMBER"}
]
}'
Image
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "image_template",
"template": "Hello {{1}}. We invite you to check out our promotions.",
"example": "Hello Maria. We invite you to check out our promotions.",
"elementName": "image_template",
"params": [
{"param": "1", "label": "customer", "example": "Maria"}
],
"paramsNumber": 1,
"type": "IMAGE",
"language": "en",
"category": "MARKETING",
"mediaUrl": "https://cdn.example.com/image.jpeg",
"interactiveAction": "NONE"
}'
Document
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "document_template",
"template": "Hello {{1}}. Please find your requested document attached.",
"example": "Hello Maria. Please find your requested document attached.",
"elementName": "document_template",
"params": [
{"param": "1", "label": "customer", "example": "Maria"}
],
"paramsNumber": 1,
"type": "DOCUMENT",
"language": "en",
"category": "MARKETING",
"mediaUrl": "https://cdn.example.com/document.pdf",
"interactiveAction": "NONE"
}'
Video
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "video_template",
"template": "Hello {{1}}. Watch our new video.",
"example": "Hello Maria. Watch our new video.",
"elementName": "video_template",
"params": [
{"param": "1", "label": "customer", "example": "Maria"}
],
"paramsNumber": 1,
"type": "VIDEO",
"language": "en",
"category": "MARKETING",
"mediaUrl": "https://cdn.example.com/video.mp4",
"interactiveAction": "NONE"
}'
200 - Successful response
{
"message": ["Template has been created."],
"status": "success",
"data": {
"template": "Hello! We are *Jelou*. \nWelcome _{{1}}_. Soon {{2}} from the team will reach out to you.",
"displayName": "Welcome",
"elementName": "test_hsm_api",
"params": [
{"label": "Customer name", "param": "1"},
{"label": "Agent name", "param": "2"}
],
"paramsNumber": 2,
"isVisible": false,
"language": "EN",
"createdAt": "2021-01-28T15:08:38.492Z",
"updatedAt": "2021-01-28T15:08:38.492Z",
"botId": "BOT_ID",
"companyId": 100,
"status": "APPROVED"
}
}
400 - Bad Request
{
"message": ["Template name already exists"],
"status": "failed"
}
401 - Unauthorized
{
"message": "Authentication failed"
}
404 - Not Found
{
"message": ["The Bot could not be found at the moment."],
"statusMessage": "failed",
"error": {
"code": "E1019",
"key": "BOT_NOT_FOUND"
}
}
status field in the response indicates whether your template has been approved by WhatsApp.| Language | Code | Content |
|---|---|---|
| English | en | {{1}} is your verification code. |
| Portuguese (BR) | pt_BR | Seu código de verificação é {{1}}. |
| Spanish | es | Tu código de verificación es {{1}}. |
params field when creating a template:
[
{"label": "Customer name", "param": "1"},
{"label": "Order number", "param": "2"}
]
buttons field when the interactive actions are CALL_TO_ACTION, QUICK_REPLY, or OTP.
| Property | Description |
|---|---|
| text | Button text, this value cannot be updated. |
| type | Button type. Value: QUICK_REPLY |
[
{"text": "More information", "type": "QUICK_REPLY"},
{"text": "Talk to an operator", "type": "QUICK_REPLY"},
{"text": "Sales", "type": "QUICK_REPLY"}
]
| Property | Description |
|---|---|
| text | Button text, this value cannot be updated. |
| type | Button type. Values: PHONE_NUMBER, URL |
| phone_number | Button phone number. |
| url | Button URL. |
| example | URL example. Required when the button type is URL. |
[
{"text": "Sales", "phone_number": "+PHONE_NUMBER", "type": "PHONE_NUMBER"},
{"type": "URL", "text": "View site", "url": "https://apps.jelou.ai/{{1}}", "example": "https://apps.jelou.ai/offers"}
]
| Property | Description |
|---|---|
| text | Button text, this value cannot be updated. |
| type | Button type. Value: OTP |
[
{"text": "COPY CODE", "type": "OTP"}
]
| Property | Type | Description |
|---|---|---|
| addSecurityRecommendation | boolean | Adds an additional security message in authentication templates. |
| codeExpirationMinutes | number | Adds a footer message with the code expiration time. Values between 1 and 90 minutes. |
| allowChangeCategory | boolean | Allows Meta to update the template category if necessary. |
Basic authentication using Base64 encoded clientId:clientSecret
UTILITY, MARKETING, AUTHENTICATION ^[a-z0-9_]+$Show child attributes
HSM, IMAGE, VIDEO, DOCUMENT NONE, CALL_TO_ACTION, QUICK_REPLY, OTP Show child attributes
60Show child attributes
Was this page helpful?