> ## Documentation Index
> Fetch the complete documentation index at: https://whatsapp-docs.kap.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Spm templates

# Single-product message templates

Updated: Nov 4, 2025

This document describes single-product message (SPM) templates, their uses, and how to use them.

SPM templates are marketing templates that allow you to present a single product from your ecommerce catalog, accompanied by a product image, product title, and product price (all pulled from your product within your catalog), along with customizable body text, optional footer text, and an interactive **View** button.

![](https://scontent-lax3-2.xx.fbcdn.net/v/t39.2365-6/456611074_369667709517740_8197750041061962345_n.png?_nc_cat=111\&ccb=1-7&_nc_sid=e280be&_nc_ohc=KlMC8d63RlkQ7kNvwE2q8oM&_nc_oc=AdnRCgQvyW-NtDo_JL6H8pVQVYiAvnWDpXxRRnX7KcQrii19EIeyrS-dJc3CfJcD2KM&_nc_zt=14&_nc_ht=scontent-lax3-2.xx&_nc_gid=AB3bxvfbzgAAyh8aXo9PCw\&oh=00_AfnKKjawWzeZOwtE8MiszzWRLpKCQi-MbpoM6Qk-rjI97Q\&oe=6954FB0A)

WhatsApp users can tap the button to see details about the product, and can add or remove the product from the WhatsApp shopping cart:

![](https://scontent-lax3-1.xx.fbcdn.net/v/t39.2365-6/455731119_491422670275236_7231575948344280249_n.png?_nc_cat=109\&ccb=1-7&_nc_sid=e280be&_nc_ohc=oRmSL19PWdUQ7kNvwG5LnDW&_nc_oc=AdkIr6e0hzEbXRmhovhhNe0xsVd-V0ffDoYCbqPsNFWuuWlTd2Ohtwv9t1Kr5ztR1GQ&_nc_zt=14&_nc_ht=scontent-lax3-1.xx&_nc_gid=AB3bxvfbzgAAyh8aXo9PCw\&oh=00_AfnmmTHgUdkOafznZKD8-rMO7nEYDjOUAYK74RD5OEzzUA\&oe=695516BF)

If the WhatsApp user adds the product to the carts and submits an order, you will be notified via webhook and the user will see that an order has been placed:

![](https://scontent-lax7-1.xx.fbcdn.net/v/t39.2365-6/455346606_8499522813412387_6714135406583255031_n.png?_nc_cat=105\&ccb=1-7&_nc_sid=e280be&_nc_ohc=9wvVExqtIrAQ7kNvwFFErxB&_nc_oc=AdlVtDIqK9QIggGSGSK0kEDGdBw9ZVSysaSKY-LT5vo16k69sNPIvAbg2M3oP_GQnOA&_nc_zt=14&_nc_ht=scontent-lax7-1.xx&_nc_gid=AB3bxvfbzgAAyh8aXo9PCw\&oh=00_AflQ5ns-EfPcnhbWHGNqGx82uIfUDQJ3fq9VWDgoy5zqZw\&oe=69550605)

Users who place an order are also able to use the View details button to see information about the order:

![](https://scontent-lax3-2.xx.fbcdn.net/v/t39.2365-6/455798578_1140213730376391_4808743486596066303_n.png?_nc_cat=107\&ccb=1-7&_nc_sid=e280be&_nc_ohc=WyFV4wOATGcQ7kNvwEXV6IF&_nc_oc=Adkje49Ufx6ABockLNqMdQYy47jitbw5JyzTSrHTVUQbnPeDgTxoshh1yEvMXEZYIVA&_nc_zt=14&_nc_ht=scontent-lax3-2.xx&_nc_gid=AB3bxvfbzgAAyh8aXo9PCw\&oh=00_AflvgqOGQZQHZBhaIE9cawwLitLRsVTwHqvNcMeBCXKlhg\&oe=69552CBF)

## Limitations

Customers must be using WhatsApp v2.22.24 or greater.
Message forwarding is disabled for SPM templates.

## Catalogs

You must have an ecommerce product catalog, with inventory, connected to your WhatsApp Business Account. See the Cloud API [Commerce](https://developers.facebook.com/documentation/business-messaging/whatsapp/catalogs/sell-products-and-services) guide to learn more about connecting a catalog to your account.

## Webhooks

When a customer adds one or more products to their cart and submits an order, an [order messages](https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/reference/messages/order) webhook is triggered, describing the order.

## Creating SPM templates

Use the [POST /\<WHATSAPP\_BUSINESS\_ACCOUNT\_ID>/message\_templates](https://developers.facebook.com/documentation/business-messaging/whatsapp/reference/whatsapp-business-account/template-api#post-version-waba-id-message-templates) endpoint to create an SPM template.

### Request syntax

```
curl 'https://graph.facebook.com/&lt;API_VERSION&gt;/&lt;WHATSAPP_BUSINESS_ACCOUNT_ID&gt;/message_templates' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer &lt;ACCESS_TOKEN&gt;' \
-d '
\{
  "name": "&lt;TEMPLATE_NAME&gt;",
  "language": "&lt;TEMPLATE_LANGUAGE&gt;",
  "category": "marketing",
  "parameter_format": "&lt;PARAMETER_FORMAT&gt;",
  "components": [\
    {\
      "type": "header",\
      "format": "product"\
    },\
    {\
      "type": "body",\
      "text": "&lt;CARD_BODY_TEXT&gt;",\
\
      <!-- Example parameter values required, if body text contains parameters -->\
      "example": {\
        "body_text_named_params": [\
          {\
            "param_name": "&lt;PARAMETER_NAME&gt;",\
            "example": "&lt;PARAMETER_EXAMPLE&gt;"\
          },\
          <!-- Additional parameters would follow -->\
        ]\
      }\
\
    },\
    {\
      "type": "footer",\
      "text": "&lt;CARD_FOOTER_TEXT&gt;"\
    },\
    {\
      "type": "buttons",\
      "buttons": [\
        {\
          "type": "spm",\
          "text": "View"\
        }\
      ]\
    }\
  ]
}'
```

### Request parameters

| Placeholder                                          | Description                                                                                                                                                                                                                                                                                          | Example Value                                                                                                                                                                                                                                    |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `&lt;ACCESS_TOKEN&gt;`<br />*String*                 | **Required.**<br />Access token.                                                                                                                                                                                                                                                                     | `EAAAN6tcBzAUBOZC82CW7iR2LiaZBwUHS4Y7FDtQxRUPy1PHZClDGZBZCgWdrTisgMjpFKiZAi1FBBQNO2IqZBAzdZAA16lmUs0XgRcCf6z1LLxQCgLXDEpg80d41UZBt1FKJZCqJFcTYXJvSMeHLvOdZwFyZBrV9ZPHZASSqxDZBUZASyFdzjiy2A1sippEsF4DVV5W2IlkOSr2LrMLuYoNMYBy8xQczzOKDOMccqHEZD` |
| `&lt;API_VERSION&gt;`<br />*String*                  | **Optional.**<br />API version. If omitted, defaults to the newest API version available to your app.                                                                                                                                                                                                | `v23.0`                                                                                                                                                                                                                                          |
| `&lt;CARD_BODY_TEXT&gt;`<br />*String*               | **Required.**<br />Card body text. Supports variables.<br />Maximum 160 characters.                                                                                                                                                                                                                  | `Use code {{1}} to get {{2}} off our newest succulent!`                                                                                                                                                                                          |
| `&lt;CARD_FOOTER_TEXT&gt;`<br />*String*             | **Optional.**<br />Footer text.<br />Maximum 60 characters.                                                                                                                                                                                                                                          | `September 30, 2024`                                                                                                                                                                                                                             |
| `&lt;PARAMETER_NAME&gt;`<br />*String*               | **Required if body text uses parameters.**<br />Example parameter value string(s). You must include a parameter example for each parameter in your body text.                                                                                                                                        | `25OFF`                                                                                                                                                                                                                                          |
| `&lt;PARAMETER_FORMAT&gt;`<br />*String*             | **Optional.**<br />[Parameter format](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview#parameter-formats). Value can be:<br />`named`<br />`positional`<br />If the `parameter_format` property is omitted, the template will use positional formatting. | `Lucky Shrub: Your gateway to succulents!`                                                                                                                                                                                                       |
| `&lt;TEMPLATE_LANGUAGE&gt;`<br />*String*            | **Required.**<br />Template [language and locale code](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages).                                                                                                                                     | `en_US`                                                                                                                                                                                                                                          |
| `&lt;TEMPLATE_NAME&gt;`<br />*String*                | **Required.**<br />Template name.<br />Maximum 512 characters.                                                                                                                                                                                                                                       | `abandoned_cart_offer`                                                                                                                                                                                                                           |
| `&lt;WHATSAPP_BUSINESS_ACCOUNT_ID&gt;`<br />*String* | **Required.**<br />WhatsApp Business Account ID.                                                                                                                                                                                                                                                     | `546151681022936`                                                                                                                                                                                                                                |

### Example request

```
curl 'https://graph.facebook.com/v24.0/161311403722088/message_templates' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
\{
  "name": "spm_template_named_params",
  "language": "en_US",
  "category": "marketing",
  "parameter_format": "named",
  "components": [\
    {\
      "type": "header",\
      "format": "product"\
    },\
    {\
      "type": "body",\
      "text": "Use code {{code}} to get {{percent}} off our newest succulent!",\
      "example": {\
        "body_text_named_params": [\
          {\
            "param_name": "code",\
            "example": "15OFF"\
          },\
          {\
            "param_name": "percent",\
            "example": "15%"\
          }\
        ]\
      }\
    },\
    {\
      "type": "footer",\
      "text": "Offer ends September 22, 2024"\
    },\
    {\
      "type": "buttons",\
      "buttons": [\
        {\
          "type": "spm",\
          "text": "View"\
        }\
      ]\
    }\
  ]
}'
```

## Sending single-product template messages

### Request syntax

Use the [POST /\<BUSINESS\_PHONE\_NUMBER\_ID>/messages](https://developers.facebook.com/documentation/business-messaging/whatsapp/reference/whatsapp-business-phone-number/message-api) endpoint to send an SPM template message.

```
curl 'https://graph.facebook.com/&lt;API_VERSION&gt;/&lt;BUSINESS_PHONE_NUMBER_ID&gt;/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer &lt;ACCESS_TOKEN&gt;' \
-d '
\{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "&lt;WHATSAPP_USER_PHONE_NUMBER&gt;",
  "type": "template",
  "template": {
    "name": "&lt;TEMPLATE_NAME&gt;",
    "language": {
      "code": "&lt;TEMPLATE_LANGUAGE&gt;"
    },
    "components": [\
      {\
        "type": "header",\
        "parameters": [\
          {\
            "type": "product",\
            "product": {\
              "product_retailer_id": "&lt;PRODUCT_ID&gt;",\
              "catalog_id": "&lt;CATALOG_ID&gt;"\
            }\
          }\
        ]\
      },\
      {\
        "type": "body",\
        "parameters": [\
          {\
            "type": "text",\
            "parameter_name": "&lt;PARAMETER_NAME&gt;",\
            "text": "&lt;PARAMETER_VALUE&gt;"\
          },\
          <!-- Additional parameter values would follow, if required by template -->\
        ]\
      }\
    ]
  }
}'
```

### Request parameters

| Placeholder                                        | Description                                                                                                                                                                                                | Example Value               |
| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- |
| `&lt;ACCESS_TOKEN&gt;`<br />*String*               | **Required.**<br />Access token                                                                                                                                                                            | `EAAAN...`                  |
| `&lt;API_VERSION&gt;`<br />*String*                | **Optional.**<br />API version. If omitted, defaults to the newest API version available to your app.                                                                                                      | `v23.0`                     |
| `&lt;BUSINESS_PHONE_NUMBER_ID&gt;`<br />*String*   | **Required.**<br />WhatsApp business phone number ID.                                                                                                                                                      | `106540352242922`           |
| `&lt;CATALOG_ID&gt;`<br />*String*                 | **Required.**<br />ID of [connected ecommerce catalog](https://www.facebook.com/business/help/158662536425974) containing the product.                                                                     | `194836987003835`           |
| `&lt;PARAMETER_NAME&gt;`<br />*String*             | **Required if template uses one or more named parameters.**<br />Name of [named parameter](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview#named-parameters). | `code`                      |
| `&lt;PARAMETER_VALUE&gt;`<br />*String*            | **Required if template uses one or more named parameters.**<br />[Named parameter](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview#named-parameters) value.   | `10OFF`                     |
| `&lt;PRODUCT_ID&gt;`<br />*String*                 | **Required.**<br />Product ID.                                                                                                                                                                             | `nqryix03ez`                |
| `&lt;TEMPLATE_LANGUAGE&gt;`<br />*String*          | **Required.**<br />Template [language and locale code](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages).                                           | `en_US`                     |
| `&lt;TEMPLATE_NAME&gt;`<br />*String*              | **Required.**<br />Template name.<br />Maximum 512 characters.                                                                                                                                             | `spm_template_named_params` |
| `&lt;WHATSAPP_USER_PHONE_NUMBER&gt;`<br />*String* | **Required.**<br />WhatsApp user phone number.                                                                                                                                                             | `+16505551234`              |

### Example request

This example sends an approved template named “spm\_template\_named\_params” which injects parameters (a discount code and the percentage discounted) into the template body, and which includes a footer. The product image is pulled from the catalog and displayed in the message header.

```
curl 'https://graph.facebook.com/v24.0/179776755229976/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
\{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "16505551234",
  "type": "template",
  "template": {
    "name": "spm_template_named_params",
    "language": {
      "code": "en_US"
    },
    "components": [\
      {\
        "type": "header",\
        "parameters": [\
          {\
            "type": "product",\
            "product": {\
              "product_retailer_id": "nqryix03ez",\
              "catalog_id": "194836987003835"\
            }\
          }\
        ]\
      },\
      {\
        "type": "body",\
        "parameters": [\
          {\
            "type": "text",\
            "parameter_name": "code",\
            "text": "25OFF"\
          },\
          {\
            "type": "text",\
            "parameter_name": "percent",\
            "text": "25%"\
          }\
        ]\
      }\
    ]
  }
}'
```

Did you find this page helpful?

![Thumbs up icon](https://static.xx.fbcdn.net/rsrc.php/yR/r/OEXJ0_DJeZv.svg)

![Thumbs down icon](https://static.xx.fbcdn.net/rsrc.php/yb/r/qKPgNVNeatU.svg)

ON THIS PAGE

Limitations

Catalogs

Webhooks

Creating SPM templates

Request syntax

Request parameters

Example request

Sending single-product template messages

Request syntax

Request parameters

Example request

***
