This document contains the requirements for sending freeform messages from your Instagram Professional account to your customers or people interested in your account using the Messenger Platform from Meta.
Note:If your app users don't have a Facebook Page linked to their Instagram professional account, learn more about building an app with the Instagram API with Instagram Login .
You can send a freeform message that contains:
This guide assumes you have read the Messenger Platform Overview and implemented the needed components such as a Facebook Page linked your Instagram Professional account (or test Page), registered as a Meta developer, and created a Business App ID with the Messenger > Instagram Messaging product in the App Dashboard.
You may also want to check the status of the Meta Developer Platform to ensure there are no issues.
MESSAGE
task on the Facebook Page linked to your Instagram Professional accountinstagram_manage_messages
permission| Media Type | Supported Format | Supported Size Maximum |
|---|---|---|
| Audio |
aac, m4a, wav, mp4 | 25MB |
| Image |
png, jpeg |
8MB |
| Video |
mp4, ogg, avi, mov, webm | 25MB |
| File |
25MB |
For more information about media attachments, see Upload Media for Instagram Messaging .
To send a message that contains text or a link, send a POST
request to the /PAGE-ID/messages
endpoint with the recipient
parameter containing the Instagram-scoped ID (IGSID) and the message
parameter containing the text or link.
Message text must be UTF-8 and be a 1000 bytes or less. Links must be valid formatted URLs.
Formatted for readability.
curl -i -X POST \
"https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>" \
--data 'recipient={"id":"IGSID"}&message={"text":"TEXT-OR-LINK"}'
Sample API response
Upon success, your app receives the following JSON response:
{
"recipient_id": "IGSID",
"message_id": "MESSAGE-ID"
}
To send an image, send a POST
request to the /me/messages
endpoint with the recipient
parameter containing the Instagram-scoped ID ( <IGSID>
) and the message
parameter containing up to ten attachment
objects with type
set to image
and payload
containing url
set to the URL for the image.
curl -X POST "https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>
-H "Content-Type: application/json"
-d '{
"recipient":{
"id":"<IGSID>"
},
"message":{
"attachment": {
"type":"image",
"payload":{
"url":"<IMAGE_URL>"
}
}
}
}'
curl -X POST "https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>
-H "Content-Type: application/json"
-d '{
"recipient":{
"id":"<IGSID>"
},
"message":{
"attachments":[
{
"type":"image",
"payload":{
"url":"<IMAGE_URL>"
}
},
{
"type":"image",
"payload":{
"url":"<IMAGE_URL>"
}
},
{
...
}
]
}
}'
The same images can be uploaded using the Attachment Upload API
and sent to many different users to avoid the delays and timeouts of uploading multiple high-resolution images. You can also mix both url
and attachment_id
parameters in the payload
.
curl -X POST "https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>
-H "Content-Type: application/json"
-d '{
"recipient":{
"id":"<IGSID>"
},
"message":{
"attachments":[
{
"type":"image",
"payload":{
"attachment_id":"<attachment_ID>"
}
},
{
"type":"image",
"payload":{
"attachment_id":"<attachment_ID>"
}
},
{
...
}
]
}
}'
Sample API responses
Upon success, your app receives the following JSON response:
{
"recipient_id": "IGSID",
"message_id": "MESSAGE-ID"
}
To send a message that contains a post you published to Instagram, send a POST
request to the /PAGE-ID/messages
endpoint with the recipient
parameter containing the Instagram-scoped ID (IGSID) and the message
parameter containing an attachment
object with the type
set to MEDIA_SHARE
and payload
containing the Meta ID for the post.
Your business must own the media to be used in the message.
curl -i -X POST \
"https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>" \
--data 'recipient={"id":"IGSID"}&message={
"attachment":
{
"type":"MEDIA_SHARE",
"payload":{"id":"POST-ID"}
}
}’
Sample API response
Upon success, your app receives the following JSON response:
{
"recipient_id": "IGSID",
"message_id": "MESSAGE-ID"
}
To send a heart sticker, send a POST
request to the /PAGE-ID/messages
endpoint with the recipient
parameter containing the Instagram-scoped ID (IGSID) and the message
parameter containing an attachment
object with the type
set to like_heart
.
Formatted for readability.
curl -i -X POST \
"https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>" \
--data 'recipient={"id":"IGSID"}&message={
"attachment":
{
"type":"like_heart"
}
}’
Sample API response
Upon success, your app receives the following JSON response:
{
"recipient_id": "IGSID",
"message_id": "MESSAGE-ID"
}
To send a reaction, send a POST
request to the /PAGE-ID/messages
endpoint with the recipient
parameter containing the Instagram-scoped ID (IGSID) and the sender_action
parameter to react
with the payload
containing the message_id
set to the ID for the message to apply the reaction to and reaction
to love
.
Formatted for readability.
curl -i -X POST \
"https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>" \
--data 'recipient={"id":"IGSID"}&sender_action=react&payload={
"message_id":"MESSAGE-ID",
"reaction":"love",
}'
To remove a reaction from a message, send a POST
request to the /PAGE-ID/messages
endpoint with the recipient
parameter containing the Instagram-scoped ID (IGSID) and the sender_action
parameter to unreact
with the payload
containing the message_id
set to the ID for the message from which to remove the reaction.
curl -i -X POST \
"https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>" \
--data 'recipient={"id”:”IGSID”}&sender_action="unreact"&payload={
“message_id":"MESSAGE-ID",
}'
Sample API response
Upon success, your app receives the following JSON response for react and unreact requests:
{
"recipient_id": "IGSID"
}
To send a reply to a specific past message within the chat, send a POST
request to the /PAGE-ID/messages
endpoint with the recipient
parameter containing the Instagram-scoped ID (IGSID), your message details in the message
parameter object, and the reply_to
object with mid
set to the message id of the specific message in the chat you want to reply to. The message can either be the message your business sent, or the user had sent.
You can send a text message, media message, template message as a reply to a message by using the reply_to
object
Formatted for readability.
curl -X POST "https://graph.facebook.com/<API_VERSION>/me/messages?access_token=<PAGE_ACCESS_TOKEN>
-H "Content-Type: application/json"
-d '{
"recipient":{
"id":"<IGSID>"
},
"message":{
"text": "TEXT"
},
"reply_to": {
"mid": "<MESSAGE_ID>"
}
}'
Sample API response
Upon success, your app receives the following JSON response with the recipient's ID and the message ID:
{
"recipient_id": "IGSID"
"message_id": "MESSAGE-ID"
}
Upload media such as audio, or image to Meta servers to be used in multiple messages.
Send a structured message such as a generic template , a product template , or a persistent menu .