WhatsApp Template Management API
The Messages API now offers the WhatsApp Template Management API that allow you to manage templates for your WABAs and cut out the manual step of submitting and checking templates manually. You can manage your templates using the Template Management API, including adding new templates, retrieving their statuses, and deleting any that are already in use. Different sorts of media can be sent with each WhatsApp message template. You can manage your media files via the API and set up extra features to improve their functionality.
Authentication
| Key | Description | Where | Example |
|---|---|---|---|
| Authorization | Your JSON web token. | Headers | Bearer <JWT> |
Query Parameters
15002510The number of templates to return in the list. Although the max size is 500, for large datasets it is recommended to use a lower limit and instead use pagination to avoid potential timeouts.
MAZDZDA cursor point used for a paginated request to indicate the template to paginate backwards from.
MjQZDA cursor point used for a paginated request to indicate the template to paginate forwards from.
UTILITYA filter for returning only templates matching a specific category.
UTILITYAUTHENTICATIONMARKETINGspecial offerA search filter representing the content of a template. Only matching templates will be returned in the list.
enA filter for returning only templates matching a specific language code. A list of supported languages is available in the WhatsApp documentation
My TemplateA search filter representing the name, either full or partial, of a template. Only matching templates will be returned in the list.
special offerA search filter representing the name, either full or partial, or content of a template. Only matching templates will be returned in the list.
REDA search filter representing the quality score of a template. Only matching templates will be returned in the list.
GREENYELLOWREDUNKNOWNAPPROVEDA filter for returning only templates matching a specific status.
APPROVEDIN_APPEALPENDINGREJECTEDDISABLEDPAUSEDLIMIT_EXCEEDEDMAZDZDThe template before the first template in the current list
MjQZDThe template after the last template in the current list
https://api.nexmo.com/v2/whatsapp-manager/wabas/106499765517625/templates?after=MwZDZDA URI to ge the next paginated page.
https://api.nexmo.com/v2/whatsapp-manager/wabas/106499765517625/templates?before=MgZDZDA URI to ge the previous paginated page.
An array of templates in the current list
1045638762820500The unique identifier for this template.
sample_issue_resolutionThe name of the template
enThe language of the template. The same template name can be used for multiple language versions. A list of supported languages is available in the WhatsApp documentation
APPROVEDThe status of the template. Templates with a status of APPROVED can be used in WhatsApp template messages.
APPROVEDREJECTEDIN_APPEALPENDINGPENDING_DELETIONDELETEDDISABLEDLOCKEDUTILITYThe category of the template. This determines the purpose of the template. Note: until June 1st 2023 some older template categories may be listed. These should be updated to one the valid categories or they will be automatically migrated.
UTILITYAUTHENTICATIONMARKETINGMARKETINGIf the template has been updated to a different category, shows the previous category of the template.
An array of objects representing the parts of the template itself.
BODYThe type of template component.
HEADERBODYFOOTERTEXTThe format of the template component. Where type is HEADER can be TEXT, IMAGE, DOCUMENT, or VIDEO. Where type is BODY or FOOTER, must be TEXT.
Your parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}.The text to be displayed in this template component. EIther plain text or text with placeholders .1
Example Response
{
"paging": {
"cursors": {
"before": "MAZDZD",
"after": "MjQZD"
},
"next": "https://api.nexmo.com/v2/whatsapp-manager/wabas/106499765517625/templates?after=MwZDZD",
"previous": "https://api.nexmo.com/v2/whatsapp-manager/wabas/106499765517625/templates?before=MgZDZD"
},
"templates": [
{
"id": "1045638762820500",
"name": "sample_issue_resolution",
"language": "en",
"status": "APPROVED",
"category": "UTILITY",
"previous_category": "MARKETING",
"components": [
{
"type": "BODY",
"format": "TEXT",
"text": "Your parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}."
}
]
}
]
}Authentication
| Key | Description | Where | Example |
|---|---|---|---|
| Authorization | Your JSON web token. | Headers | Bearer <JWT> |
sample_issue_resolutionThe name of the template
enThe language of the template. The same template name can be used for multiple language versions. A list of supported languages is available in the WhatsApp documentation. Note: Adding new languages on legacy template categories has been disabled by Meta, see the documentation for Language Variants and Categories
UTILITYThe required category of the template. The category determines what the template will be used for. Note: Adding new languages on legacy template categories has been disabled by Meta, see the documentation for Language Variants and Categories
UTILITYAUTHENTICATIONMARKETINGtrueThis field is now deprecated. This functionality is now enabled by default by Meta and cannot be disabled. See the Meta documentation for more infomration.
An optional parameter which, when set to true, can avoid template rejection due to mis-categorization.
Including this parameter, with a value of true, will allow Meta to re-assign the template to a different category as appropriate.
truefalseAn array of objects representing the parts of the template itself.
BODYThe type of template component. HEADER, FOOTER, and BUTTONS are optional, a BODY is always a required component of a template.
HEADERBODYFOOTERBUTTONSTEXTThe format of the template component. For a Text Template, format is always TEXT for HEADER, BODY or FOOTER components.
TEXTYour parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}.The text to be displayed in this template component. EIther plain text or text with placeholders .1
Must be included when placeholders are used in the text.
An array containing one array. The inner array contains strings, with one item for each placeholder used in the text. Must be included when format is text and placeholders are included in the text.
Where type is set to BUTTONS, an array of button objects representing the properties of each button.
QUICK_REPLYThe type of button.
QUICK_REPLYURLPHONE_NUMBERYesThe text to appear on the button.
https://example.com/special-offer-opt-inA URL to which the end-user will be directed when hitting the button. Must be set when type is URL.
8001111111Phone number to which a phone call would be placed by the end-user when hitting the button. Must be set when type is PHONE_NUMBER.
Example Request
{
"name": "sample_issue_resolution",
"language": "en",
"category": "UTILITY",
"allow_category_change": true,
"components": [
{
"type": "BODY",
"format": "TEXT",
"text": "Your parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}.",
"example": {
"body_text": "[['Courier','May 1st', '3:00PM', '4:00PM']]"
},
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes",
"url": "https://example.com/special-offer-opt-in",
"phone_number": "8001111111"
}
]
}
]
}{
"name": "sample_issue_resolution",
"language": "en",
"category": "UTILITY",
"allow_category_change": true,
"components": [
{
"type": "BODY",
"format": "TEXT",
"text": "Your parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}.",
"example": {
"body_text": "[['Courier','May 1st', '3:00PM', '4:00PM']]"
},
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes",
"url": "https://example.com/special-offer-opt-in",
"phone_number": "8001111111"
}
]
}
]
}Authentication
| Key | Description | Where | Example |
|---|---|---|---|
| Authorization | Your JSON web token. | Headers | Bearer <JWT> |
Query Parameters
The name of the template to be deleted. The name is required, but if specified without hsm_id being specified then all templates matching that name will be deleted.
The ID of the specific template to be deleted. Only the template matching both the specified name and hsm_id will be deleted.
Authentication
| Key | Description | Where | Example |
|---|---|---|---|
| Authorization | Your JSON web token. | Headers | Bearer <JWT> |
1045638762820500The unique identifier for this template.
sample_issue_resolutionThe name of the template
enThe language of the template. The same template name can be used for multiple language versions. A list of supported languages is available in the WhatsApp documentation
APPROVEDThe status of the template. Templates with a status of APPROVED can be used in WhatsApp template messages.
APPROVEDREJECTEDIN_APPEALPENDINGPENDING_DELETIONDELETEDDISABLEDLOCKEDUTILITYThe category of the template. This determines the purpose of the template. Note: until June 1st 2023 some older template categories may be listed. These should be updated to one the valid categories or they will be automatically migrated.
UTILITYAUTHENTICATIONMARKETINGMARKETINGIf the template has been updated to a different category, shows the previous category of the template.
An array of objects representing the parts of the template itself.
BODYThe type of template component.
HEADERBODYFOOTERTEXTThe format of the template component. Where type is HEADER can be TEXT, IMAGE, DOCUMENT, or VIDEO. Where type is BODY or FOOTER, must be TEXT.
Your parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}.The text to be displayed in this template component. EIther plain text or text with placeholders .1
Example Response
{
"id": "1045638762820500",
"name": "sample_issue_resolution",
"language": "en",
"status": "APPROVED",
"category": "UTILITY",
"previous_category": "MARKETING",
"components": [
{
"type": "BODY",
"format": "TEXT",
"text": "Your parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}."
}
]
}Authentication
| Key | Description | Where | Example |
|---|---|---|---|
| Authorization | Your JSON web token. | Headers | Bearer <JWT> |
sample_issue_resolutionThe name of the template
enThe language of the template. The same template name can be used for multiple language versions. A list of supported languages is available in the WhatsApp documentation. Note: Adding new languages on legacy template categories has been disabled by Meta, see the documentation for Language Variants and Categories
UTILITYThe required category of the template. The category determines what the template will be used for. Note: Adding new languages on legacy template categories has been disabled by Meta, see the documentation for Language Variants and Categories
UTILITYAUTHENTICATIONMARKETINGtrueThis field is now deprecated. This functionality is now enabled by default by Meta and cannot be disabled. See the Meta documentation for more infomration.
An optional parameter which, when set to true, can avoid template rejection due to mis-categorization.
Including this parameter, with a value of true, will allow Meta to re-assign the template to a different category as appropriate.
truefalseAn array of objects representing the parts of the template itself.
BODYThe type of template component. HEADER, FOOTER, and BUTTONS are optional, a BODY is always a required component of a template.
HEADERBODYFOOTERBUTTONSTEXTThe format of the template component. For a Text Template, format is always TEXT for HEADER, BODY or FOOTER components.
TEXTYour parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}.The text to be displayed in this template component. EIther plain text or text with placeholders .1
Must be included when placeholders are used in the text.
An array containing one array. The inner array contains strings, with one item for each placeholder used in the text. Must be included when format is text and placeholders are included in the text.
Where type is set to BUTTONS, an array of button objects representing the properties of each button.
QUICK_REPLYThe type of button.
QUICK_REPLYURLPHONE_NUMBERYesThe text to appear on the button.
https://example.com/special-offer-opt-inA URL to which the end-user will be directed when hitting the button. Must be set when type is URL.
8001111111Phone number to which a phone call would be placed by the end-user when hitting the button. Must be set when type is PHONE_NUMBER.
Example Request
{
"name": "sample_issue_resolution",
"language": "en",
"category": "UTILITY",
"allow_category_change": true,
"components": [
{
"type": "BODY",
"format": "TEXT",
"text": "Your parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}.",
"example": {
"body_text": "[['Courier','May 1st', '3:00PM', '4:00PM']]"
},
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes",
"url": "https://example.com/special-offer-opt-in",
"phone_number": "8001111111"
}
]
}
]
}{
"name": "sample_issue_resolution",
"language": "en",
"category": "UTILITY",
"allow_category_change": true,
"components": [
{
"type": "BODY",
"format": "TEXT",
"text": "Your parcel from {{1}} is due to arrive on {{2}} between {{3}} and {{4}}.",
"example": {
"body_text": "[['Courier','May 1st', '3:00PM', '4:00PM']]"
},
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Yes",
"url": "https://example.com/special-offer-opt-in",
"phone_number": "8001111111"
}
]
}
]
}Authentication
| Key | Description | Where | Example |
|---|---|---|---|
| Authorization | Your JSON web token. | Headers | Bearer <JWT> |
The file to be uploaded. See an example cURL request
Example Request
POST /v2/whatsapp-manager/media/uploads HTTP/1.1
Host: api.nexmo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
mediafile=stringPOST /v2/whatsapp-manager/media/uploads HTTP/1.1
Host: api.nexmo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
mediafile=string:c2FtcGxlLm1wNA==:image/jpeg:GKAj0gAUCZmJ1voFADip2iIAAAAAbugbAAAA:e:1472075513:ARZ_3ybzrQqEaluMUdIThe uploaded file's file handle
Example Response
{
"h": ":c2FtcGxlLm1wNA==:image/jpeg:GKAj0gAUCZmJ1voFADip2iIAAAAAbugbAAAA:e:1472075513:ARZ_3ybzrQqEaluMUdI"
}Errors
The following is a non-exhaustive list of error codes that may occur while using this API.
These codes are in addition to any of our generic error codes.