All integrations

Instagram

MESSAGING · MESSAGING

Direct messages read and replied to from the Instagram account they sign in with.

Connecting Instagram in practice

Instagram’s rate limit is not a fixed number: the allowance is 4,800 calls in 24 hours multiplied by the account’s impressions in that window, so a quiet account is a tight account. Publishing is separately capped at 100 posts per rolling 24 hours, and JPEG is the only image format the publishing API will accept.

Scopes that draw scrutiny

  • instagram_business_basic The baseline scope for the Instagram Login configuration. Serving professional accounts you do not own requires Advanced Access, which means App Review and Business Verification.
  • instagram_business_content_publish Publishes to the account, and is what brings the 100-posts-per-24-hours ceiling into play.
  • instagram_business_manage_messages Reads and sends direct messages, with its own separate messaging rate limits and Meta’s automated-messaging policies attached.
  • instagram_business_manage_comments Moderates comments on the account’s posts, which is visible public action taken in the customer’s name.
  • instagram_basic, instagram_content_publish, pages_read_engagement (plus ads_management and ads_read) The equivalents under the Facebook Login for Business configuration. The two ads scopes become necessary when the user holds their Page role through Business Manager.

Rate limits

  • Calls within 24 hours = 4800 × the number of impressions the account’s content received in that window.
  • Content publishing: 100 API-published posts per rolling 24 hours, where a carousel counts as one post. GET /content_publishing_limit reports current usage.
  • Conversations API: 2 calls per second per account.
  • Private Replies: 100 calls per second on Live, 750 per hour on posts and reels.
  • Send API: 100 calls per second for text and links, 10 calls per second for media.

Who has to approve

Standard Access only covers Instagram professional accounts you own or manage yourself. Serving anyone else’s account requires Advanced Access, which Meta grants only after both App Review and Business Verification — a process measured in weeks, not minutes.

Worth knowing

  • Long-lived tokens are valid for 60 days and can only be refreshed once they are at least 24 hours old, so refreshing too eagerly leaves the token on its original clock.
  • The pre-2025 scope names were deprecated on 27 January 2025 in favour of the instagram_business_* set, so older sample code authorizes nothing.
  • Publishing accepts plain JPEG only — no MPO or JPS — no filters, no shopping tags, a maximum of 10 carousel items all cropped to the first item’s aspect ratio, and media must sit on a publicly reachable URL at the moment of publication.
  • Because the 24-hour allowance is a multiple of impressions, a new or low-reach account has almost no quota, which is the opposite of the pattern most integrations are tested against.

Checked against Business login for Instagram (2026-09-29), Content publishing (2026-09-29), Instagram Platform overview (2026-09-29)

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

instagram_delete_chats_by_chat_idWRITE

Delete a chat. DELETE /api/v1/chats/{chat_id}. Delete a chat. Supported for WhatsApp and LinkedIn only.

delete
instagram_delete_messages_by_message_idWRITE

Delete a message. DELETE /api/v1/messages/{message_id}. Delete a message. Supported for WhatsApp and LinkedIn only. For LinkedIn, it is only possible within the first 60 minutes after the message is sent.

delete
instagram_get_chat_attendeesREAD

List all attendees. GET /api/v1/chat_attendees. Returns a list of messaging attendees. Some optional parameters are available to filter the results.

read
instagram_get_chat_attendees_by_attendee_id_chatsREAD

List all 1to1 chats for a given attendee. GET /api/v1/chat_attendees/{attendee_id}/chats. Returns a list of chats where a given attendee is involved.

read
instagram_get_chat_attendees_by_attendee_id_syncREAD

Resynchronize chats for a given attendee. GET /api/v1/chat_attendees/{attendee_id}/sync. Starts or monitors the synchronization of all chats for a given attendee.

read
instagram_get_chat_attendees_by_idREAD

Retrieve an attendee. GET /api/v1/chat_attendees/{id}. The id of the wanted attendee.

read
instagram_get_chat_attendees_by_id_pictureREAD

Download a chat attendee picture. GET /api/v1/chat_attendees/{id}/picture. Download the profile picture of an attendee or picture of a group chat.

read
instagram_get_chat_attendees_by_sender_id_messagesREAD

List all messages for a given attendee. GET /api/v1/chat_attendees/{sender_id}/messages. Returns a list of messages where a given attendee is involved.

read
instagram_get_chatsREAD

List all chats. GET /api/v1/chats. Returns a list of chats. Some optional parameters are available to filter the results.

read
instagram_get_chats_by_chat_idREAD

Retrieve a chat. GET /api/v1/chats/{chat_id}. Retrieve the details of a chat.

read
instagram_get_chats_by_chat_id_attendeesREAD

List all attendees from a chat. GET /api/v1/chats/{chat_id}/attendees. Returns a list of messaging attendees related to a given chat. Some optional parameters are available to filter the results.

read
instagram_get_chats_by_chat_id_messagesREAD

List all messages from a chat. GET /api/v1/chats/{chat_id}/messages. Returns a list of messages related to the given chat. Some parameters are available to filter the results.

read
instagram_get_chats_by_chat_id_syncREAD

Synchronize a conversation from its beginning. GET /api/v1/chats/{chat_id}/sync. This route can be used both to initiate a synchronization process and to monitor its status via regular polling.

read
instagram_get_messagesREAD

List all messages. GET /api/v1/messages. Returns a list of messages. Some optional parameters are available to filter the results.

read
instagram_get_messages_by_message_idREAD

Retrieve a message. GET /api/v1/messages/{message_id}. Retrieve the details of a message.

read
instagram_get_messages_by_message_id_attachments_by_attachment_idREAD

Retrieve an attachment from a message. GET /api/v1/messages/{message_id}/attachments/{attachment_id}. Retrieve one of the attachment linked to a message. The provider answers this route with the file's raw bytes. This connection has no artifact transport, so the tool returns the file's content type and byte length instead of its contents.

read
instagram_patch_chats_by_chat_idWRITE

Perform an action on a given chat. PATCH /api/v1/chats/{chat_id}. Perform an action like changing the read status, muting the chat, retrieving a group invite link, etc.

write
instagram_patch_messages_by_message_idWRITE

Edit a message. PATCH /api/v1/messages/{message_id}. Edit a message. Supported for WhatsApp and LinkedIn Classic only. WhatsApp may reject edits after an indicative 15-minute window following the original send time. LinkedIn Classic edits are only possible within the first 60 minutes after the message is sent.

write
instagram_post_chatsWRITE

Start a new chat. POST /api/v1/chats. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Start a new conversation with one or more attendee. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (attachments, linkedin.follow_up.attachments, video_message, voice_message) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part.

write
instagram_post_chats_by_chat_id_messagesWRITE

Send a message in a chat. POST /api/v1/chats/{chat_id}/messages. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Send a message to the given chat with the possibility to link some attachments. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (attachments, video_message, voice_message) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part.

write
instagram_post_messages_by_message_id_forwardWRITE

Forward a message. POST /api/v1/messages/{message_id}/forward. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Forward a message to a chat. (Whatsapp only)

write
instagram_post_messages_by_message_id_reactionWRITE

Add a reaction to a message. POST /api/v1/messages/{message_id}/reaction. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Add a reaction to a message. (Whatsapp, LinkedIn, Telegram, Instagram)

write

Put Instagram behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.