Appearance
Fresh 2026
Send a Generic Template
The generic template allows you to send a structured message that includes an image, text and buttons. A generic template with multiple options described in the elements array will send a horizontally scrollable carousel of items, each composed of an image, text and buttons.<br>## Before you start<br>This guide assumes you have set up your webhooks server to receive notifications and subscribed your app to Instagram messages and messaging_postbacks events.<br>You will need:<br>- The ID for the Instagram professional account, <IG_ID><br>- The elements for the template<br>- The payload to include in the webhook notification for each element<br>### Limitations<br>This feature is currently not available on desktop.<br>#### Host URL<br>https://graph.instagram.com | ! |
Send a template
To send a template message send a POST request to the /<IG_ID>/messages endpoint with the following parameters:
recipient.idset to the Instagram-scoped ID of the person you are sending the messagemessage.attachmentobject with:typeset totemplatepayloadobject with:template_typeset togenericelementsset to an array of objects that the recipient can select such as links, buttons, and images
Sample request
curl
curl -X POST -H "Content-Type: application/json" -d '{
"recipient":{
"id":"<IGSID>"
},
"message":{
"attachment":{
"type":"template",
"payload":{
"template_type":"generic",
"elements":[\
{\
"title":"Welcome!",\
"image_url":"https://raw.githubusercontent.com/fbsamples/original-coast-clothing/main/public/styles/male-work.jpg",\
"subtitle":"We have the right hat for everyone.",\
"default_action": {\
"type": "web_url",\
"url": "https://www.originalcoastclothing.com/",\
},\
"buttons":[\
{\
"type":"web_url",\
"url":"https://www.originalcoastclothing.com/",\
"title":"View Website"\
},{\
"type":"postback",\
"title":"Start Chatting",\
"payload":"DEVELOPER_DEFINED_PAYLOAD"\
}\
]\
}\
]
}
}
}
}' "https://graph.instagram.com/v20.0/me/messages?access_token=INSTAGRAM_ACCESS_TOKEN"On success your app receives a JSON response with the Instagram-scoped ID for the reciepient and the ID for the message.
Example Response
js
{
"recipient_id": "1254477777772919",
"message_id": "AG5Hz2Uq7tuwNEhXfYYKj8mJEM_QPpz5jdCK48PnKAjSdjfipqxqMvK8ma6AC8fplwlqLP_5cgXIbu7I3rBN0P"
}Properties
| Property | Type | Description |
|---|---|---|
recipient.id | String | The Instagram-scoped ID (<IGSID>) for the person to whom you are sending the message |
message.attachment | Object | An object describing attachments to the message. |
message.attachment
| Property | Type | Description |
|---|---|---|
type | String | Value must be template |
payload | Object | payload of the template. |
message.attachment.payload
| Property | Type | Description |
|---|---|---|
template_type | String | Value must be generic |
elements | Array | An array of element objects that describe instances of the generic template to be sent. Specifying multiple elements will send a horizontally scrollable carousel of templates. A maximum of 10 elements is supported. |
message.attachment.payload.elements
The generic template supports a maximum of 10 elements per message. At least one property must be set in addition to title.
| Property Name | Type | Description |
|---|---|---|
title | String | The title to display in the template. 80 character limit. |
subtitle | String | Optional. The subtitle to display in the template. 80 character limit. |
image_url | String | Optional. The URL of the image to display in the template. |
default_action | Object | Optional. The default action executed when the template is tapped. Accepts the same properties as URL button, except title. |
buttons | Array | Optional. An array of buttons to append to the template. A maximum of 3 buttons per element is supported. Only postback and web_url buttons are supported. |
Learn more
Visit the message.attachment.data for GIFs and Stickers.