Skip to content
Fresh 2026

WhatsApp Message Template

Represents a specific message template. Make the API call to the message template ID.

To find a message template ID, call https://graph.facebook.com/{api-version}/{whatsapp-business-account-ID}/message_templates.

For more information on how to use the API, see WhatsApp Business Management API.

Reading

Retrieves information about the message template

Example

Requirements

  • whatsapp_business_management permission

  • whatsapp_business_messaging permission

  • public_profile permission

  • WHATSAPP MESSAGE TEMPLATE ID

  • USER ACCESS TOKEN

Request

cURLAndroid SDKObjective-C

sh
curl -i -X GET \
 "https://graph.facebook.com/LATEST-VERSION/WHATS-APP-MESSAGE-TEMPLATE-ID?access_token=USER-ACCESS-TOKEN"
java
GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/WHATS-APP-MESSAGE-TEMPLATE-ID",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

request.executeAsync();
m
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]\
    initWithGraphPath:@"/WHATS-APP-MESSAGE-TEMPLATE-ID"\
           parameters:nil\
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {\
    // Insert your code here\
}];

Response

json
{
  "name": "shiptest",
  "components": [\
    {\
      "type": "BODY",\
      "text": "testing"\
    }\
  ],
  "language": "en_US",
  "status": "REJECTED",
  "category": "TRANSACTIONAL",
  "id": "WHATS-APP-MESSAGE-TEMPLATE-ID"
}

Parameters

This endpoint doesn't have any parameters.

Fields

FieldDescription
id<br>numeric stringID
bid_spec<br>WhatsAppBusinessHSMWhatsAppBusinessBidSpecbid_spec
category<br>enumThe category type of the message template<br>Default
components<br>list<WhatsAppBusinessHSMWhatsAppHSMComponentGet>An array of JSON objects describing the message template components.<br>Default
correct_category<br>enumThe correct category for the template.<br>Default
cta_url_link_tracking_opted_out<br>boolOptional boolean field for opting out/in of link tracking at template level
degrees_of_freedom_spec<br>WhatsAppBusinessHSMMarketingMessageDegreesOfFreedomSpecdegrees_of_freedom_spec
language<br>stringThe language (and locale) of the element translation<br>Default
library_template_name<br>stringTemplate Library name that this HSM is clone from<br>Default
message_send_ttl_seconds<br>integerTemplate message delivery retry time-to-live (TTL) override value. If we are unable to deliver a message to a WhatsApp user, we will retry the delivery for a period of time known as a time-to-live, TTL, or the message validity period.<br>TTL can be configured for certain message types. See Time-To-Live.<br>Default
name<br>stringThe message template name<br>Default
parameter_format<br>enumThe parameter format, can be Named or Positional<br>Default
previous_category<br>enumPrevious category of the template. See Template Categories.<br>Default
product_set_id<br>numeric stringproduct_set_id is required for Dynamic Product Messages. Coming Soon!<br>Default
quality_score<br>WhatsAppBusinessHSMWhatsAppBusinessHSMQualityScoreShapeQuality score of the HSM
rejected_reason<br>enumThe reason the message template was rejected<br>enum {ABUSIVE_CONTENT, INVALID_FORMAT, NONE, PROMOTIONAL, TAG_CONTENT_MISMATCH, SCAM}
status<br>enumThe status of the message template. Values can be:<br>APPROVED, Indicates the template has been reviewed, approved, and can now be sent in template messages.<br>IN_APPEAL, Indicates the template is in the rejection appeal process and cannot be sent.<br>PENDING, Indicates the template is still undergoing template review and cannot be sent.<br>REJECTED, Indicates the template has been reviewed and rejected and cannot be sent.<br>PENDING_DELETION, Indicates the template is undergoing deletion and cannot be sent.<br>DELETED, Indicates the template has been deleted and cannot be sent.<br>DISABLED, Indicates the template has been disabled due to poor template quality and cannot be sent.<br>PAUSED, Indicates the template has been paused due to poor template quality and cannot be sent.<br>LIMIT_EXCEEDED, Indicates the template has been paused due to template pacing.<br>Default
sub_category<br>enumSub category of the template<br>Default

Edges

EdgeDescription
compare<br>Edge<WhatsAppBusinessHSMComparison>compare

Error Codes

ErrorDescription
80008There have been too many calls to this WhatsApp Business account. Wait a bit and try again. For more info, please refer to https://developers.facebook.com/docs/graph-api/overview/rate-limiting.
100Invalid parameter
200Permissions error
104Incorrect signature

Creating

You can make a POST request to message_templates edge from the following paths:

  • /{whats_app_business_account_id}/message_templates

When posting to this edge, a WhatsAppMessageTemplate will be created.

Parameters

ParameterDescription
allow_category_change<br>booleanSet to true to allow us to assign a category based on our template guidelines and the template's contents. This can prevent the template status from immediately being set to REJECTED upon creation due to miscategorization.<br>If omitted, template will not be auto-assigned a category and its status may be set to REJECTED if determined to be miscategorized.<br>See Template Categories.
category<br>enum {UTILITY, MARKETING, AUTHENTICATION}Template category. See Template Categories.<br>Required
components<br>array<JSON object>Array of components that make up the template. See Template Components.<br>For types HEADER, BODY, FOOTER, text is required.
type<br>enum {GREETING, HEADER, BODY, FOOTER, BUTTONS, CAROUSEL, ALBUM, LIMITED_TIME_OFFER, CALL_PERMISSION_REQUEST, TAP_TARGET_CONFIGURATION, ATTACHMENT}Component type.<br>Required
format<br>enum {TEXT, IMAGE, DOCUMENT, VIDEO, LOCATION, GIF, COLLECTION}Component format.
text<br>stringRequired for components with type HEADER,BODY<br>Component text.
buttons<br>array<JSON object>Button components to be used in the template.
type<br>enum {QUICK_REPLY, URL, PHONE_NUMBER, OTP, MPM, CATALOG, FLOW, VOICE_CALL, VIDEO_CALL, POSTBACK, BOOKING_STATUS, PAYMENT_REQUEST, REQUEST_CONTACT_INFO}Button type.<br>Required
text<br>stringButton text.
url<br>URIurl
phone_number<br>phone number stringphone_number
example<br>array<string>example
flow_id<br>int64flow_id
zero_tap_terms_accepted<br>booleanzero_tap_terms_accepted
flow_action<br>enum {NAVIGATE, DATA_EXCHANGE}flow_action
navigate_screen<br>stringnavigate_screen
supported_apps<br>array<JSON object>supported_apps
package_name<br>stringpackage_name<br>Required
signature_hash<br>stringsignature_hash<br>Required
ttl_minutes<br>int64ttl_minutes
flow_name<br>stringflow_name
flow_json<br>stringflow_json
icon<br>enum {DOCUMENT, PROMOTION, REVIEW}icon
endpoint_uri<br>URIendpoint_uri
example<br>JSON objectPlaceholder examples. Templates will not be approved without examples.
header_text<br>array<string>header_text
body_text<br>array<array<string>>body_text
header_handle<br>array<string>header_handle
header_text_named_params<br>array<JSON object>header_text_named_params
param_name<br>stringparam_name<br>Required
example<br>stringexample<br>Required
body_text_named_params<br>array<JSON object>body_text_named_params
param_name<br>stringparam_name<br>Required
example<br>stringexample<br>Required
creative_sourcing_spec<br>JSON objectDefines the ACO dimensions specification the Biz can opt in or out of.
associated_product_set_id<br>numeric stringThe associated product set id
is_primary_device_delivery_only<br>booleanis_primary_device_delivery only
language<br>stringTemplate location and locale code.<br>Required
library_template_body_inputs<br>JSON objectOptional data during creation of a template from a library template. These are optional fields for the body component.
add_contact_number<br>booleanadd_contact_number
add_learn_more_link<br>booleanadd_learn_more_link
add_security_recommendation<br>booleanadd_security_recommendation
add_track_package_link<br>booleanadd_track_package_link
code_expiration_minutes<br>int64code_expiration_minutes
library_template_button_inputs<br>array<JSON object>Optional data during creation of a template from a library template. These are optional fields for the button component.
type<br>enum {QUICK_REPLY, URL, PHONE_NUMBER, OTP, MPM, CATALOG, FLOW, VOICE_CALL, VIDEO_CALL, POSTBACK, BOOKING_STATUS, PAYMENT_REQUEST, REQUEST_CONTACT_INFO}type<br>Required
phone_number<br>stringphone_number
url<br>JSON objecturl
base_url<br>stringbase_url<br>Required
url_suffix_example<br>stringurl_suffix_example
otp_type<br>enum {COPY_CODE, ONE_TAP, ZERO_TAP, NO_BUTTONS}otp_type
zero_tap_terms_accepted<br>booleanzero_tap_terms_accepted
supported_apps<br>array<JSON object>supported_apps
package_name<br>stringpackage_name<br>Required
signature_hash<br>stringsignature_hash<br>Required
booking_url<br>JSON objectbooking_url
base_url<br>stringbase_url<br>Required
url_suffix_example<br>stringurl_suffix_example
booking_management_url<br>JSON objectbooking_management_url
base_url<br>stringbase_url<br>Required
url_suffix_example<br>stringurl_suffix_example
notes<br>JSON objectnotes
text<br>stringtext<br>Required
positional_params<br>array<string>positional_params
named_params<br>array<JSON object>named_params
param_name<br>stringparam_name<br>Required
example<br>stringexample<br>Required
library_template_name<br>stringlibrary_template_name
message_send_ttl_seconds<br>int64Time to live for message template sent. If users are offline for more than TTL duration after message template is sent, we will retry the delivery for a period of time known as a time-to-live, TTL, or the message validity period.<br>TTL can be configured for certain message types. See Time-To-Live.
name<br>stringTemplate name.<br>Required
optimization_spec<br>JSON objectoptimization_spec
parameter_format<br>enum {NAMED, POSITIONAL}The parameter format of the template
product_set_id<br>numeric string[Coming soon] This will let you connect a product set (from your catalog) to the template and send messages without needing to specify products in the send API call. Our product recommendation engine will select the products your customers are most interested in and likely to convert. This feature is called Dynamic Product Message.<br>Note: This is still in development.
sub_category<br>enum {ORDER_DETAILS, ORDER_STATUS, RICH_ORDER_STATUS}Sub category of the template

Return Type

This endpoint supports read-after-write and will read the node to which you POSTed.

Struct {

id: numeric string,

status: enum,

category: enum,

}

Error Codes

ErrorDescription
100Invalid parameter
80008There have been too many calls to this WhatsApp Business account. Wait a bit and try again. For more info, please refer to https://developers.facebook.com/docs/graph-api/overview/rate-limiting.
131009Parameter value is not valid
192Invalid phone number
200Permissions error
368The action attempted has been deemed abusive or is otherwise disallowed
200002HSM Template creation failed
139000Blocked by Integrity

Updating

You can update a WhatsAppMessageTemplate by making a POST request to /{whats_app_message_template_id}.

Parameters

ParameterDescription
category<br>enum {UTILITY, MARKETING, AUTHENTICATION}category
components<br>array<JSON object>The array containing all the content of the message template
type<br>enum {GREETING, HEADER, BODY, FOOTER, BUTTONS, CAROUSEL, ALBUM, LIMITED_TIME_OFFER, CALL_PERMISSION_REQUEST, TAP_TARGET_CONFIGURATION, ATTACHMENT}Component type.<br>Required
format<br>enum {TEXT, IMAGE, DOCUMENT, VIDEO, LOCATION, GIF, COLLECTION}Component format.
text<br>stringRequired for components with type HEADER,BODY<br>Component text.
buttons<br>array<JSON object>Button components to be used in the template.
type<br>enum {QUICK_REPLY, URL, PHONE_NUMBER, OTP, MPM, CATALOG, FLOW, VOICE_CALL, VIDEO_CALL, POSTBACK, BOOKING_STATUS, PAYMENT_REQUEST, REQUEST_CONTACT_INFO}Button type.<br>Required
text<br>stringButton text.
url<br>URIurl
phone_number<br>phone number stringphone_number
flow_id<br>int64flow_id
zero_tap_terms_accepted<br>booleanzero_tap_terms_accepted
flow_action<br>enum {NAVIGATE, DATA_EXCHANGE}flow_action
navigate_screen<br>stringnavigate_screen
supported_apps<br>array<JSON object>supported_apps
package_name<br>stringpackage_name<br>Required
signature_hash<br>stringsignature_hash<br>Required
flow_name<br>stringflow_name
flow_json<br>stringflow_json
icon<br>enum {DOCUMENT, PROMOTION, REVIEW}icon
creative_sourcing_spec<br>JSON objectcreative_sourcing_spec
associated_product_set_id<br>numeric stringThe associated product set id
message_send_ttl_seconds<br>int64Template message delivery retry time-to-live (TTL) override value.If we are unable to deliver a message to a WhatsApp user, we will retry the delivery for a period of time known as a time-to-live, TTL, or the message validity period. If we are unable to deliver the message for this period of time, the message will be dropped.<br>TTL can be configured for certain message types. See Time-To-Live.
parameter_format<br>enum {NAMED, POSITIONAL}The parameter format of the template
product_set_id<br>numeric string[Coming soon] This will let you connect a product set (from your catalog) to the template and send messages without needing to specify products in the send API call. Our product recommendation engine will select the products your customers are most interested in and likely to convert. This feature is called Dynamic Product Message.<br>Note: This is still in development.

Return Type

This endpoint supports read-after-write and will read the node to which you POSTed.

Struct {

success: bool,

id: string,

name: string,

category: string,

}

Error Codes

ErrorDescription
100Invalid parameter
131009Parameter value is not valid
192Invalid phone number
200Permissions error
80008There have been too many calls to this WhatsApp Business account. Wait a bit and try again. For more info, please refer to https://developers.facebook.com/docs/graph-api/overview/rate-limiting.

Deleting

You can dissociate a WhatsAppMessageTemplate from a WhatsAppBusinessAccount by making a DELETE request to /{whats_app_business_account_id}/message_templates.

Parameters

ParameterDescription
hsm_id<br>numeric stringID of template to be deleted. Required with name if deleting a specific template by ID.
hsm_ids<br>array<numeric string>IDs of all the templates for bulk deletion. Required if you wish to delete templates in bulk
name<br>stringName of template to be deleted. Deletes templates matching the name in all languages

Return Type

Struct {

success: bool,

}

Error Codes

ErrorDescription
100Invalid parameter
200Permissions error
190Invalid OAuth 2.0 Access Token
80008There have been too many calls to this WhatsApp Business account. Wait a bit and try again. For more info, please refer to https://developers.facebook.com/docs/graph-api/overview/rate-limiting.