Appearance
Send a Message
Updated: Jun 24, 2026
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:
- one or more images, a video, or an audio file
- a reaction or sticker
- text, including a link
Before you start
This guide assumes you have read the Messenger Platform Overview and implemented the needed components such as a Facebook Page linked to 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.
Requirements
- The ID for the Facebook Page linked to your Instagram Professional account
- The Instagram-scoped ID for customer who sent your business a message
- A Page access token requested from a person who can perform the
MESSAGEtask on the Facebook Page linked to your Instagram Professional account - The
instagram_manage_messagespermission
Limitations
- Apps with Standard Access can only send messages to people that have a role on the app
- Text message must be less than 1000 characters
- Media attachments can be:
| 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.
Send a basic message
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 1,000 bytes or less. Links must be valid formatted URLs.
Sample request
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"
}Send an image
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.
Sample request: Sending one image
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":{
"attachment": {
"type":"image",
"payload":{
"url":"<IMAGE_URL>"
}
}
}
}'Sample request: Sending multiple images with image URL
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":{
"attachments":[
{
"type":"image",
"payload":{
"url":"<IMAGE_URL>"
}
},
{
"type":"image",
"payload":{
"url":"<IMAGE_URL>"
}
},
{
...
}
]
}
}'Sample request: Sending multiple images with attachment ID
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.
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":{
"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"
}Send a published post
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 you send in the message.
Sample request
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":"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"
}Send a sticker
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.
Sample request
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"
}React to a message
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.
Sample request
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"
}'Unreact to a message
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.
Sample request
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="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"
}Send a reply
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.
Sample request
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"
}Next steps
- 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.
See also
Developer Support
- Use the Meta Status tool to check for the status and outages of Meta business products.
- Use the Meta Developer Support tool to report bugs and view reported bugs, get help with Ads or Business Manager, and more.