Instagram Messaging API reference

Every Instagram Messaging API limit, in one table

45documented limits
8groups
2026-08-20last verified

Last verified against Meta for Developers - Graph API rate limiting

Instagram messaging is available through two Graph API routes - the original Messenger Platform route, where a Facebook Page linked to the Instagram professional account does the talking, and the Instagram API with Instagram Login, which since July 2024 needs no Page at all. The ceilings below apply to both unless a row says otherwise; where the routes genuinely differ (media formats, permission names, account prerequisites), the row names its route. Every value is quoted from Meta's documentation and carries the source link - nothing here is inferred or folklore.

The limits fall into three tiers of pain. The policy tier is absolute: the 24-hour messaging window, the 7-day human-agent extension, and the one-per-comment private reply cannot be engineered around, only designed for - crossing them produces error 10/2534022 and its relatives, and persistent violation ends in an account-level block. The throughput tier - 100 Send API calls per second per account for text but only 10 for audio and video, 2 conversation reads per second, 750 private replies per hour on posts - throttles you with 613/2534040 and (#4) when bursts exceed it. The content tier caps what a single message may hold: 1,000 characters of text, 8 MB images, 25 MB video, 13 quick replies, 10 carousel cards, 4 ice breakers.

Two prerequisites gate everything and fail silently rather than loudly: the account must be a professional account, and the Allow access to messages toggle must be on in the Instagram app. If your integration returns errors, the code-by-code companion is the Instagram error reference; if it returns nothing at all, start with the troubleshooting guide. For building on these constraints rather than against them, see the Instagram chatbot overview.

Jump to: Messaging window & the human agent extension · Rate limits & throughput · Message content & structured messages · Media attachments · Private replies (comment to DM) · Story replies & mentions · Inbox behavior & conversation moderation · Account, permission & app requirements

Messaging window & the human agent extension

The window is Instagram messaging's defining constraint: apps may only message a person within 24 hours of that person's last message, and the send that misses it fails with error 10/2534022, documented as "This message is sent outside of allowed window." Instagram is deliberately stricter than its siblings - the Messenger message tags that reopen conversations elsewhere are documented as not available here, and there is no WhatsApp-style template mechanism. The single extension is the human_agent tag: 7 days, humans only, granted through App Review. Everything else is re-entry design - ice breakers, story interactions, and comment-triggered private replies that prompt a fresh inbound message.

WhatLimitNotesSource
Standard messaging window24 hours from the person's last messageDocumented as "Apps can only send a message to a customer within 24 hours of receiving the customer's message." Sends outside it fail with code 10, subcode 2534022. Any new inbound message, including a story reply, restarts the clock.docs ↗
human_agent tag window7 days from the person's message"Messages can be sent within 7 days of the person's message." For human support that cannot be resolved in the standard window; automated messages are a documented disallowed usage.docs ↗
Human Agent feature approvalApp Review required (plus Business Verification)Apply under App Dashboard > App Review > Permissions & Features > Human Agent. The feature reference notes it requires successful App Review and is only available with business verification.docs ↗
Messenger message tags on InstagramNot available (HUMAN_AGENT only)ACCOUNT_UPDATE, CONFIRMED_EVENT_UPDATE and CUSTOMER_FEEDBACK are each documented as "Not available for Instagram Messaging API." HUMAN_AGENT is the only tag documented for Instagram.docs ↗
Re-engagement templatesNone documentedInstagram has no equivalent of WhatsApp's approved re-engagement templates. After the 7-day human-agent horizon, the documented options all require the person to message again.docs ↗

Rate limits & throughput

Instagram messaging calls are counted per Instagram professional account and per API, so ceilings travel with the account - a viral account cannot be scaled around by adding servers. Text sending is generous at 100 calls per second, but media sending is a tenth of that, and conversation reads are a tight 2 per second, which is why bots that re-read threads on every webhook event throttle at trivial scale. Exceeding a messaging ceiling returns 613/2534040; exhausting app-wide or Page budgets surfaces as (#4), (#17) or (#32). Watch the X-App-Usage and X-Business-Use-Case-Usage response headers, including estimated_time_to_regain_access, before the errors arrive.

WhatLimitNotesSource
Send API - text, links, reactions, stickers100 calls/second per Instagram professional account"Your app can make 100 calls per second per Instagram professional account for messages that contain text, links, reactions, and stickers."docs ↗
Send API - audio or video content10 calls/second per Instagram professional accountMedia messages run at a tenth of the text ceiling; queue them separately so a media burst cannot starve text replies.docs ↗
Conversations API (thread reads)2 calls/second per Instagram professional accountThe tightest messaging limit. Derive state from webhook payloads instead of re-reading conversations per event.docs ↗
Private Replies API - live comments100 calls/second per Instagram professional accountApplies to private replies to Instagram Live comments, which are only sendable during the broadcast.docs ↗
Private Replies API - posts and reels750 calls/hour per Instagram professional accountRoughly one comment-triggered DM every five seconds sustained; spread giveaway-style campaigns across the hour.docs ↗
Instagram Platform calls (non-messaging)Calls within 24 hours = 4800 x Number of ImpressionsPer app-user pair on a rolling 24-hour window; impressions are views of the account's content in the last 24 hours. Messaging endpoints are excluded and use the per-second limits above.docs ↗

Message content & structured messages

Instagram supports a narrower message surface than Messenger, with hard caps on each structured type. Payloads that exceed them are rejected as parameter errors - typically code 100 or the Instagram-specific 100/2534015 ("Invalid message data") - so cross-platform senders should validate against these numbers, not Messenger's, ideally in a schema check that runs before the API call. Quick replies, ice breakers and the persistent menu are documented as unavailable on desktop, which matters when reproducing customer reports: a missing menu on the web client is expected behavior, not a bug in your integration.

WhatLimitNotesSource
Text message lengthUnder 1,000 characters (UTF-8, 1,000 bytes or less)Documented both as "Text message must be less than 1000 characters" and "Message text must be UTF-8 and be 1,000 bytes or less" - multi-byte scripts and emoji hit the byte limit first.docs ↗
Attachments per messageUp to 10The send-message guide documents sending single or multiple images with up to 10 attachments in one message.docs ↗
Quick replies per message13 maximum"A maximum of 13 quick replies are supported." Plain text only, and quick replies are currently not available on desktop.docs ↗
Quick reply title length20 characters before truncationLonger titles are cut off in the client rather than rejected, so keep labels short by design.docs ↗
Generic template elements (carousel cards)10 maximum"A maximum of 10 elements is supported." Oversized carousels are rejected as invalid message data.docs ↗
Generic template title / subtitle80 characters eachBoth the title and subtitle carry a documented 80-character limit.docs ↗
Generic template buttons per element3 maximum (postback and web_url only)Only postback and web_url button types are supported on Instagram generic templates.docs ↗
Ice breakers (FAQ questions)4 maximum"Use the Ice Breaker API to set a maximum of 4 questions." A default locale is required; ice breakers are not available on desktop and show only in brand-new conversations.docs ↗
Persistent menuMobile only (Instagram app v226+); 5 items recommendedSet with platform=instagram on the Messenger Profile API. Docs recommend limiting menu items to 5; composer_input_disabled and webview_height_ratio are not available, and menus do not update in real time in existing threads.docs ↗

Media attachments

Media ceilings are small by phone-camera standards - 8 MB for images, 25 MB for everything else - and the two API routes document slightly different format lists, so normalize assets before sending rather than forwarding originals. Oversized files fail with 100/2018109, unreachable URLs with 100/2018008, and slow or corrupt video with 100/2018294, whose 75-second fetch budget is documented explicitly. Remember that Meta fetches URL-sent media from its own servers, not from the recipient's device: files must be publicly reachable, served with a valid TLS certificate, and fast enough to download well inside the timeout.

WhatLimitNotesSource
Image attachments8 MB max - png, jpeg (gif also listed on the Messenger Platform route)The Instagram Login route's guide lists png and jpeg; the Messenger Platform route's send-message reference additionally lists gif. Photographic content should ship as JPEG to stay under 8 MB.docs ↗
Audio attachments25 MB max - aac, m4a, wav, mp4Uncompressed wav breaches 25 MB quickly on long recordings; prefer aac/m4a.docs ↗
Video attachments25 MB max - mp4, ogg, avi, mov, webmContainer support does not guarantee codec support; H.264 MP4 is the safe target.docs ↗
File attachments (Instagram Login route)25 MB max - pdfDocumented on the Instagram Login route's send-message guide; pdf is the only listed file format.docs ↗
Video URL fetch time75 seconds"If the video can't be fetched within 75 seconds, it will time out" (error subcode 2018294). Host video on fast, CDN-backed storage or upload via the Attachment Upload API.docs ↗
Inbound media webhooksGifs, stickers and disappearing media not deliveredThe webhooks reference documents that messages with gifs and stickers are not supported and disappearing media is not supported - those inbound messages will not carry usable payloads.docs ↗

Private replies (comment to DM)

Private replies convert a public comment into a direct message, and they are Instagram's most valuable re-entry tool precisely because their window is independent of the DM window. The rules are strict and per-comment: one reply, within 7 days for posts, ads and reels, live-broadcast-only for live comments. Violations return error 100/2534025 ("The comment is invalid for a private reply"), and campaign-scale automation additionally runs into the 750-per-hour ceiling listed under rate limits. Build these automations as real-time consumers of the comments webhook, not batch sweeps over old comments.

WhatLimitNotesSource
Reply window - posts, ads, reels comments7 days from when the comment was createdDocumented as "within 7 days from when the comment was created." Older comments are invalid targets.docs ↗
Reply window - Instagram Live commentsDuring the live broadcast onlyPrivate replies to live comments "can only be sent during the live broadcast."docs ↗
Private replies per comment1"Only one message can be sent to the Instagram user who commented." Deduplicate on comment ID, including webhook redeliveries.docs ↗
Required permissionsinstagram_manage_comments + pages_messaging (Advanced Access)Documented alongside a Page access token from a user with the MESSAGING task and the Human Agent feature for the escalation flows described in the guide.docs ↗

Story replies & mentions

Story interactions arrive as normal messages webhook events - a reply to your story carries a reference to the story, and a mention of your account in someone else's story arrives with a story_mention attachment - and both count as inbound messages that open the standard 24-hour window. The constraints are about visibility and lifetime rather than volume: mention webhooks only flow from public accounts (or private accounts that follow you), and the media URL dies with the story. Fetch what you need immediately; a dead CDN URL is not an API error like 100/2018008, it is documented expiry.

WhatLimitNotesSource
Story mention webhook visibilityPublic accounts only (private accounts only if they follow you)"A story mention webhook will only flow in if the user mentioning the account has their account set up as public. Story mentions from a private account will only flow in if the account follows the said account."docs ↗
Story media URL lifetimeUntil the story expires (24 hours) or is deleted"A story is temporary (it disappears after 24 hours or when deleted by the user)" - after that "the URL will stop rendering and you should show a placeholder message."docs ↗
Caching story mediaNot permitted"You must not store or cache the media content on your server." Only the CDN URL itself may be stored to avoid repeated API calls.docs ↗

Inbox behavior & conversation moderation

Deliverability on Instagram is not only about API acceptance - the account's inbox has documented behavior of its own. Meta publishes a high-volume threshold past which the inbox stops displaying and sending new messages, with warning banners shown in the conversation, and a moderation API that moves conversations to the spam folder or blocks users outright. A blocked or spam-filed user is unreachable in ways that surface as 551 or 200/1545041 on sends, and a business that users block en masse risks the account-level cutoff documented under 100/2534029.

WhatLimitNotesSource
High-volume inbox threshold72,000 messages sent and received"If an Instagram Professional account sends and receives more than 72,000 messages, new messages will not be displayed in the Instagram Inbox and your Instagram Professional account cannot send new messages until the message volume decreases." Banner warnings ("Your Message May Be Delayed", "Your Message Wasn't Delivered") appear in the conversation.docs ↗
Moderation actions per request2 actions, 10 IDsThe moderation API documents "Up to 10 IDs can be provided in each request" and "Up to 2 actions can be specified in each request" across block, unblock and move-to-spam.docs ↗
Move to spamConversation moves to the spam folder in Meta Business Suite inboxA conversation must already exist between the user and the business before any moderation action can be used.docs ↗
Block / unblock userBlocks messaging in both directionsBlock "prevents a user from messaging the Instagram business and prevents the business from messaging the user"; unblock restores both directions.docs ↗

Account, permission & app requirements

These are the gates everything above sits behind, and most of them fail silently - no webhook events, empty account lists - rather than with an error code. The professional-account requirement and the Allow access to messages toggle are consumer-app settings invisible from the developer dashboard; when the toggle is revoked after connection, sends fail with 200/2534041. Development-mode and Standard Access restrictions produce the "works for admins, silent for customers" pattern behind code 200 and code 10. Choose one API route deliberately - permissions and tokens do not transfer between them.

WhatLimitNotesSource
Account typeInstagram professional account (Business or Creator)Personal accounts cannot use the messaging API on either route.docs ↗
Facebook Page link (Messenger Platform route)RequiredThe Page linked to the Instagram professional account addresses all calls; an unlinked Page fails with error 100/2534013.docs ↗
Facebook Page link (Instagram Login route)Not required"This API setup does not require a Facebook Page to be linked to the Instagram professional account."docs ↗
Allow access to messages toggleMust be enabled by the account ownerInstagram app: Settings > Messages and story replies > Message controls > Connected Tools > Allow access to messages. Off by default; per account, and revocable at any time by anyone with the Instagram login.docs ↗
Permissions (Messenger Platform route)instagram_basic, instagram_manage_messages, pages_manage_metadataGranted via Facebook Login; the Page access token used for messaging must include instagram_manage_messages.docs ↗
Permissions (Instagram Login route)instagram_business_basic, instagram_business_manage_messagesThe instagram_business_* scope family is specific to this route; tokens are not interchangeable with the Page-based route.docs ↗
Messaging the publicAdvanced Access + Live mode (Business Verification for most apps)"Apps with Standard Access can only send messages to people that have a role on the app." Advanced Access is granted through App Review.docs ↗
Receiving webhooksApp must be published"Your app must be published, regardless of app review status, to receive webhooks" - and all messaging apps for the business must be subscribed to the messaging webhook fields.docs ↗

Instagram guides and tools

Other platforms

Frequently asked questions

How long is the Instagram messaging window?

24 hours from the person's last message to the account. Meta documents the rule on its error page as "Apps can only send a message to a customer within 24 hours of receiving the customer's message." Sends after that fail with error 10, subcode 2534022. The window reopens whenever the person sends another message, including story replies.

Can I message someone after 24 hours on Instagram?

Only with the human_agent tag, and only within 7 days of the person's message. The tag requires approval for the Human Agent feature through App Review and is documented for genuine human support - business closed for the weekend, issues needing more than 24 hours - not automation. Beyond 7 days there is no sanctioned path; the person must message you again.

Does Instagram support message tags like Messenger?

No. Meta's Send API reference marks ACCOUNT_UPDATE, CONFIRMED_EVENT_UPDATE and CUSTOMER_FEEDBACK as "Not available for Instagram Messaging API." The only tag that works on Instagram is HUMAN_AGENT. There is also no template system like WhatsApp's for re-opening conversations, which makes window-aware design essential on this channel.

What are the Instagram Send API rate limits?

Documented per Instagram professional account: 100 calls per second for messages containing text, links, reactions and stickers, and 10 calls per second for messages containing audio or video. Conversation history reads through the Conversations API are limited to 2 calls per second. Exceeding them returns error 613 with subcode 2534040, or the generic (#4) throttling error.

How long can an Instagram DM text message be?

1,000 characters. The send-message documentation states text "must be less than 1000 characters" and elsewhere that message text "must be UTF-8 and be 1,000 bytes or less" - so emoji-heavy or non-Latin text hits the byte form earlier. Longer content should be split across messages or linked. Oversized payloads are rejected as parameter errors (code 100).

What media can a bot send in Instagram DMs?

Images (png, jpeg - gif is additionally listed on the Messenger Platform route) up to 8 MB, audio (aac, m4a, wav, mp4) up to 25 MB, and video (mp4, ogg, avi, mov, webm) up to 25 MB; the Instagram Login route also documents pdf files up to 25 MB. Videos sent by URL must be fetchable within 75 seconds or the send times out with subcode 2018294.

How many quick replies, carousel cards and ice breakers does Instagram allow?

A maximum of 13 quick replies per message, each title truncated beyond 20 characters and plain text only. Generic-template carousels carry up to 10 elements with 80-character titles and subtitles and up to 3 buttons per element (postback and web_url only). Ice breakers are capped at 4 questions and require a default locale.

What are the rules for Instagram private replies (comment to DM)?

One private reply per comment, sent within 7 days of the comment's creation for posts, ads and reels; replies to live comments can only be sent during the broadcast. Rate limits are 750 private replies per hour per account for posts and reels, and 100 calls per second for live comments. Invalid targets return error 100, subcode 2534025.

What accounts can use the Instagram messaging API at all?

Only Instagram professional accounts - Business or Creator. On the Messenger Platform route the account must also be linked to a Facebook Page; the Instagram API with Instagram Login drops the Page requirement. In both cases the owner must enable Allow access to messages under Message controls in the Instagram app, and public messaging requires Advanced Access with Business Verification.

Is there a limit on total message volume for an account?

Yes - Meta documents a high-volume threshold: if an Instagram professional account sends and receives more than 72,000 messages, new messages stop being displayed in the Instagram inbox and the account cannot send new ones until volume decreases, with banner warnings shown in the conversation. API sends are separately paced by the per-second Send API limits.

Build on Instagram without tracking every limit yourself

Conferbot paces sends, queues retries and surfaces limit errors as readable status.