We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.

Starting October 1, 2024, businesses on Cloud API can create new authentication templates from the template library.

Template Library

Template Library makes it faster and easier for businesses to create utility templates for common use cases, like payment reminders, delivery updates — and authentication templates for common identity verification use cases.

These pre-written templates have already been categorized as utility or authentication. Library templates contain fixed content that cannot be edited and parameters you can adapt for business or user-specific information.

You can browse and create templates using Template Library in WhatsApp Manager, or programmatically via the API.

Creating Templates via WhatsApp Manager (WAM)

Follow the instructions below to create templates using the Template Library in WhatsApp Manager.

1: In the sidebar of WAM, under Message Templates, select Create Template.





2: Under Browse the WhatsApp Template Library, select Browse Templates.

3: You will now see all currently available templates. Use the search bar to search by topic or use case, or use the dropdown options on the sidebar to filter the results.

Note that hovering over a template will show you its parameter values.

4: To create a template, select one by clicking on it. Then, add your template name, select the language, and fill out the button details. Once you have completed these steps, click Submit.

Note: If you choose Customize template, your template will have to go through review before you are able to send messages.

Template Parameters and Restrictions

When a template contains the value library_template_name in the GET <WABAID>/message_templates?name=<TEMPLATE_NAME> response, it is a template created from the Template Library and is subject to type checks and restrictions.

Templates in the library contain both fixed content and parameters. The parameters represent spaces in the template where variable information can be inserted, such as names, addresses, and phone numbers.

In the example above, parameters like the name Jim or the business name CS Mutual can be modified to accept variables like your customer's name and your business's name.

Messages sent using templates from Template Library are subject to parameter checks during send time. Values used in parameters that are outside of the established ranges listed below will cause the message send to fail.

List of parameters and sample values

All parameters are length restricted. If you receive an error, try again with a shorter value.

Parameter TypeDescriptionSample Value

ADDRESS

A location address.

  • Must be a valid address
  • 1 Hacker Way, Menlo Park, CA 94025

TEXT

Basic text.

  • regarding your order.
  • 12 pack of paper towels
  • your request
  • puchase
  • Jasper's Market

AMOUNT

A number signifying a quantity.

  • May contain a prefix or suffix for monetary values such as USD or RS
  • May contain decimals (.) and commas (,)
  • May contain valid currency symbols such as $ and €
  • 145
  • USD $375.32
  • €1,376.22 EUR
  • RS 1200

DATE

A standard calendar date.

  • 2021-04-19
  • 13/03/2021
  • 5th January 1982
  • 08.22.1991
  • January 1st, 2024
  • 05 12 2022

PHONE NUMBER

A telephone number.

  • May contain numbers, spaces, dashes (-), parentheses, and plus symbols (+)
  • +1 4256789900
  • +91-7884-789122
  • +39 87 62232

EMAIL

A standard email address.

  • Must be a valid email address
  • 1hackerway@meta.com
  • yourcustomername@gmail.com
  • abusinessorcustomername@hotmail.com

NUMBER

A number.

  • Must be a number.
  • Cannot contain spaces.
  • 23444
  • 90001234921388904
  • 453638

Forms

Forms are only available to accounts who have had their message limits increased.

Some templates in Template Library are interactive forms that are powered by WhatsApp Flows.

In WhatsApp Manager, you can identify these specific templates by the "Form" label they contain. The current supported use cases are Customer Feedback and Delivery Failure.

Identifying forms in the request response

When calling the GET /message_template_library endpoint, the type key in the buttons array will show as "FORMS".

 
{
      "name": "delivery_failed_2_form",
      "language": "en_US",
      "category": "UTILITY",
      "topic": "ORDER_MANAGEMENT",
      "usecase": "DELIVERY_FAILED",
      "industry": [
        "E_COMMERCE"
      ],
      "body": "We were unable to deliver order {{1}} today. 

Please {{2}} to schedule another delivery attempt.",
      "body_params": [
        "#12345",
        "try a redelivery"
      ],
      "body_param_types": [
        "TEXT",
        "TEXT"
      ],
      "buttons": [
        {
          "type": "FLOW",
          "text": "Reschedule"
        }
      ],
      "id": "7138055039625658"
},
    

Using the API

The Template Library API has two endpoints:

// Used to browse available library templates
GET /message_template_library
// Used when you are ready to create a template from the library.
POST /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates

Searching and Filtering Available Templates

Templates with Header param types of Document only support PDFs

To browse and filter available templates, use the message_template_library endpoint.

Once you find the template you are interested in, note the name as you will use it when creating the template via the POST method.

Request Syntax

// Get all available templates
GET /message_template_library

// Search for substring
GET /message_template_library?search=<SEARCH_KEY>

// Filter by template topic
GET/message_template_library?topic=<TOPIC>

// Filter by template use case
GET/message_template_library?usecase=<USECASE>

// Filter by template industry
GET/message_template_library?industry=<INDUSTRY>

// Filter by template language
GET/message_template_library?language=<LANGUAGE>

Query String Parameters

PlaceholderDescriptionSample Value

<SEARCH_KEY>

String

Optional.


A substring you are searching for in the content, name, header, body, or footer of the template.

payments

<TOPIC>

Enum

Optional.


The topic of the template.


See Template Filters below

ORDER_MANAGEMENT

<USECASE>

Enum

Optional.


The use case of the template.


See Template Filters below

SHIPMENT_CONFIRMATION

<INDUSTRY>

Enum

Optional.


The industry of the template.


See Template Filters below

E_COMMERCE

<LANGUAGE>

Enum

Optional.


The template language locale code.


See Supported Languages

en_US

Example Request

curl 'https://graph.facebook.com/v21.0/102290129340398/message_templates?search="payments"'
-H 'Authorization: Bearer EAAJB...'

Example Response

 
{
      "name": "low_balance_warning_1",
      "language": "en_US",
      "category": "UTILITY",
      "topic": "PAYMENTS",
      "usecase": "LOW_BALANCE_WARNING",
      "industry": [
        "FINANCIAL_SERVICES"
      ],
      "header": "Your account balance is low",
      "body": "Hi {{1}}, 
This is to notify you that your {{2}} in your {{3}} account, ending in {{4}} is below your pre-set {{5}} of {{6}}. 
Click the button to deposit more {{7}}.
{{8}}",
      "body_params": [
        "Jim",
        "available funds",
        "CS Mutual checking plus",
        "1234",
        "limit",
        "$75.00",
        "funds",
        "CS Mutual"
      ],
      "buttons": [
        {
          "type": "URL",
          "text": "Make a deposit",
          "url": "https://www.example.com/"
        },
        {
          "type": "PHONE_NUMBER",
          "text": "Call us",
          "phone_number": "+18005551234"
        }
      ],
      "id": "7147013345418927"
}
    

Template Filters

There are several templates to choose from in the Template Library. You can use the API to filter them based on a few factors.

List of Industry, Topic, and Use Case Enums

Industry

E_COMMERCE

FINANCIAL_SERVICES

Topic

ACCOUNT_UPDATE

CUSTOMER_FEEDBACK

ORDER_MANAGEMENT

PAYMENTS

Use Case

ACCOUNT_CREATION_CONFIRMATION

PAYMENT_DUE_REMINDER

FEEDBACK_SURVEY

PAYMENT_ACTION_REQUIRED

SHIPMENT_CONFIRMATION

PAYMENT_OVERDUE

DELIVERY_UPDATE

PAYMENT_CONFIRMATION

ORDER_DELAY

FRAUD_ALERT

DELIVERY_FAILED

AUTO_PAY_REMINDER

DELIVERY_CONFIRMATION

PAYMENT_SCHEDULED

ORDER_PICK_UP

PAYMENT_REJECT_FAIL

ORDER_ACTION_NEEDED

STATEMENT_AVAILABLE

ORDER_CONFIRMATION

LOW_BALANCE_WARNING

ORDER_OR_TRANSACTION_CANCEL

RECEIPT_ATTACHMENT

RETURN_CONFIRMATION

STATEMENT_ATTACHMENT

TRANSACTION_ALERT

Creating Templates

Note: The modification of rules surrounding body properties for this endpoint is for the explicit purpose of showcasing how to use the endpoint with Template Library.

To create a new template using the Template Library, call the existing <WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates endpoint using the body properties below.

Request Syntax

POST /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates

Post Body

     
{
  "name": "<NAME>",
  "category": "UTILITY",
  "language": "en_US",
  “library_template_name”: “<LIBRARY_TEMPLATE_NAME>”,
  "library_template_button_inputs": "[
    {'type': 'URL', 'url': {'base_url' : 'https://www.example.com/{{1}}',
    'url_suffix_example' : 'https://www.example.com/demo'}},
    {type: 'PHONE_NUMBER', 'phone_number': '+16315551010'}
]"
}
    

Body Properties

PlaceholderDescriptionSample Value

<NAME>

String

Required.


The name you are providing for your template.


Maximum 512 characters.

my_payment_template

<CATEGORY>

Enum

Required.


The template category.


Must be UTILITY for use with Template Library.

UTILITY

<LANGUAGE>

Enum

Required.


The template language locale code.


See Supported Languages

en_US

<LIBRARY_TEMPLATE_NAME>

String

Required.


The exact name of the Template Library template.

delivery_update_1

<LIBRARY_TEMPLATE_BUTTON_INPUTS>

Array of objects

Optional.


The website and/or phone number of the business being used in the template.


Note: For utility templates that have button inputs, this property is not optional.

“[ {'type': 'URL', 'url': {'base_url' : 'https://www.example.com/{{1}}', 'url_suffix_example' : 'https://www.example.com/demo'}}, {type: 'PHONE_NUMBER', 'phone_number': '+16315551010'} ]"

Example Request

curl 'https://graph.facebook.com/v19.0/102290129340398/message_templates'
-H 'Authorization: Bearer EAAJB...'
-H 'Content-Type: application/json'
-d '
{
  "name": "my_delivery_update",
  "language": "en_US",
  "category": "UTILITY",
  “library_template_name”: “delivery_update_1”,
  "library_template_button_inputs": "[
    {'type': 'URL', 'url': {'base_url' : 'https://www.example.com/{{1}}',
    'url_suffix_example' : 'https://www.example.com/order_update}}
  ]"
}
    

Example Response

{
  "id": "{hsm-id}",
  "status": "APPROVED",
  "category": "UTILITY"
}

Sending Template Messages

To learn how to send templated messages, view the Send Templates guide