Instagram messaging API rate limits across client accounts

Instagram messaging API rate limits are set per Instagram professional account and per API, not per agency and not per app. Meta's documentation gives four ceilings for messaging: 2 calls per second for reading conversations, 100 calls per second for sending text, 10 calls per second for sending audio or video, and 750 calls per hour for private replies to comments on posts and reels.
That matters more to an agency than to a single business, because the number that circulates online is a different one. Plenty of pages state that Instagram allows 200 automated DMs per hour per account. That figure does appear in Meta's rate limiting page, twice, but neither time is it the Instagram messaging limit. This guide reads the documentation itself, consulted on 18 September 2026 and linked at every point, and turns it into a throughput budget you can put next to a client name.
TL;DR
- Instagram messaging limits are stated per Instagram professional account and per API, so adding a client adds a bucket instead of diluting the others.
- The four documented messaging ceilings are 2 calls per second on the Conversations API, 100 calls per second on the Send API for text, 10 calls per second for audio or video, and 750 calls per hour for private replies to comments on posts and reels.
- The hourly one is the only ceiling a normal comment to DM campaign can actually hit. The per second ones are far above what a setter team produces.
- Everything that is not messaging, insights and media included, runs on a different formula: 4800 multiplied by the number of impressions, in a rolling 24 hour window, per app and account pair. Your smallest client has your smallest reporting budget.
- An agency serving accounts it does not own needs Advanced Access, which means App Review and Business Verification.
Table of contents
- The number that circulates, and what Meta actually publishes
- The Instagram messaging API rate limits, ceiling by ceiling
- Why the limits do not pool across a client portfolio
- The ceiling that bites first is the hourly one
- Your reporting job breaks before your DM job does
- Advanced Access, the line every agency crosses
- Two clocks per conversation, and the leads that leave after 30 days
- Build the throughput budget for one client account
- Where SetScale fits
- FAQ
- Conclusion
The number that circulates, and what Meta actually publishes
Search for Instagram DM limits and you will be told, repeatedly, that the official cap is 200 automated messages per hour per account. The number is real. It is in Meta's documentation. It is simply attached to two other things.
The first is the app level Platform rate limit. Meta's Graph API rate limiting page states the formula for requests made with an application access token as "Calls within one hour = 200 * Number of Users", where the Number of Users is based on the unique daily active users of the app. That is a budget for your whole application across all its users, not an allowance of messages for one Instagram account.
The second is the Messenger API, which is Facebook Messenger rather than Instagram. Its formula on the same page is "Calls within 24 hours = 200 * Number of Engaged Users", where the Number of Engaged Users is the number of people the business can message via Messenger.
Neither sentence is about Instagram messaging. The Instagram messaging section of that same page opens differently:
Calls to the Instagram messaging endpoints are counted against the number of calls your app can make per Instagram professional account and the API used.
Per account, and per API. Two axes, no hourly message cap in sight except one, which we come to below. Working from the wrong number is not a small mistake for an agency: it sets your pacing, your promises to clients, and the size of the infrastructure you pay for.
The Instagram messaging API rate limits, ceiling by ceiling
Here are the messaging ceilings exactly as Meta states them, for the Instagram API with Instagram Login.
| What you are doing | Documented ceiling | Applies to |
|---|---|---|
| Reading conversations, Conversations API | 2 calls per second | one Instagram professional account |
| Sending text, links, reactions, stickers, Send API | 100 calls per second | one Instagram professional account |
| Sending audio or video, Send API | 10 calls per second | one Instagram professional account |
| Private replies to comments on posts and reels | 750 calls per hour | one Instagram professional account |
| Private replies to Instagram Live comments | 100 calls per second | one Instagram professional account |
One nuance worth knowing if you inherited an older integration. The same page lists a second path, the Messenger API for Instagram, where the Send API ceiling for text, links, reactions and stickers is 300 calls per second per Instagram professional account rather than 100. The audio and video ceiling stays at 10 calls per second, and the private reply ceilings are identical. If your provider quotes you a send ceiling, ask which of the two paths they run on.
The other structural rule on that page: when both kinds of limit could apply to a request, Meta states that "BUC rate limits will be applied". Business Use Case limits win over Platform limits.
Why the limits do not pool across a client portfolio
This is the part that changes an agency's planning, and it is good news.
Because the messaging ceilings attach to an Instagram professional account, they do not add up into one shared pot that your tenth client drains for everyone else. Client nine hitting its hourly private reply ceiling during a viral reel does not slow the DMs of client three. Each account carries its own budget, and onboarding another client adds a bucket rather than splitting one.
The consequence is operational, not theoretical. Pacing has to be implemented per account. A global queue that sends at a fixed rate across your whole portfolio is both too slow for the busy accounts and, if it bursts, capable of hitting one account's ceiling while the rest of the portfolio sits idle. If you already run several client Instagram accounts from one desk, this is the reason your queue needs an account dimension from the first line of code.
There is a second per account object worth noting. Meta's Instagram Platform overview explains that an Instagram-scoped User ID "is specific to the person and the Instagram account they are interacting with". The same human who messages two of your clients is two different IDs to you. Any deduplication across client accounts has to happen on your side, in your own data, which is one more argument for routing conversations into a CRM you control.
The ceiling that bites first is the hourly one
Look again at the table and one line stands apart. Four of the five ceilings are expressed per second. One is expressed per hour: 750 private replies per hour, per account, for comments on posts and reels.
Per second ceilings are not a constraint for a human scale setting operation. A team replying to inbound DMs does not produce 100 sends in a second, and if it does, it is one burst that a queue smooths out.
The hourly one is different, because comment to DM is a campaign mechanic, not a conversation mechanic. A client posts a reel, asks people to comment a keyword, and the replies arrive in a spike. The spike is exactly where 750 per hour lives, and it is the only documented Instagram messaging ceiling a normal agency workload can reach on a good day. Two practical conclusions: cap the keyword campaigns you run simultaneously on the same client account, and hold a queue rather than dropping the overflow, because a private reply that arrives late still arrives, and a lead that never gets one is gone.
Meta's own best practice on that page is blunt about what happens if you ignore the signal:
When the limit has been reached, stop making API calls. Continuing to make calls will continue to increase your call count, which will increase the time before calls will be successful again.
Retrying on failure, the default behaviour of most naive queues, is the one behaviour that lengthens your outage. This is also why your response time commitments should be written per account with a stated burst policy, instead of as one portfolio wide promise.
Your reporting job breaks before your DM job does
Messaging is only part of what an agency's software does with a client account. It also pulls insights, media and comments to build the monthly report that proves ROI. Those calls run on a completely different formula, and it is the one that quietly hurts.
Calls to the Instagram Platform endpoints, excluding messaging, are counted against the calling app's call count. An app's call count is unique for each app and app user pair, and is the number of calls the app has made in a rolling 24 hour window. It is calculated as follows: Calls within 24 hours = 4800 * Number of Impressions
The Number of Impressions, Meta specifies, is the number of times any content from that account entered a person's screen in the last 24 hours. Read that as an agency and the implication is uncomfortable: your budget on an account is proportional to that account's reach. The new client with a small audience, the seasonal client in a quiet month, the account that is rebuilding after a bad quarter, those are the accounts where your reporting job has the least room. The moment an account goes quiet is the moment your polling has the smallest allowance, which is the opposite of what an inexperienced integration assumes.
Two documented ways to spend less of that budget. First, Meta states in its FAQ that "All calls count towards the rate limits, not just individual API requests" and that in a single request specifying multiple IDs, "each ID counts as one API call". Batching saves round trips, not budget. Second, from the Instagram Platform overview: "We strongly recommend using webhooks to receive notifications about your app users' media objects or messages. Using webhooks will reduce the number of needed API calls made by your app and hence, reducing the risk of being rate limited." A webhook first architecture is not an elegance preference here, it is the documented way to stay under the ceiling.
If your team is planning this layer rather than buying it, our setting infrastructure guide for teams and agencies covers where these pieces sit.
Advanced Access, the line every agency crosses
An agency is, by definition, on the far side of Meta's access boundary. The Instagram Platform overview states that Standard Access is for apps serving your own accounts or accounts you manage, and that Advanced Access "is the access level required if your app serves Instagram professional accounts that you don't own or manage". Advanced Access requires App Review and Business Verification.
The practical reading: an integration that works fine in your sandbox with your own account can behave differently the day it touches a client's account, because some features, in Meta's words, "might not work properly until your app has been granted Advanced Access". If you are sizing a build or a migration, the review and verification calendar belongs in the plan, next to the client account access checklist you ask every new client to complete.
The same page also notes that the authorization code returned by the login flow is valid for one hour, and that the short lived access token it exchanges for is valid for one hour too. Token refresh is a scheduled job, not an afterthought.
Ready to hand this plumbing to someone else? Join the waitlist.
Two clocks per conversation, and the leads that leave after 30 days
Rate limits answer how fast. Two other documented clocks answer how long, and they shape the follow up process more than the ceilings do.
The first is the messaging window. Meta's Instagram messaging API guide states that a conversation only begins when the Instagram user messages first, and that "Your app has 24 hours to respond to any message sent from an Instagram user to your app user".
The second is the human agent tag. The Instagram Platform overview describes the feature as allowing "a human agent respond to user messages using the human_agent tag within 7 days of a user's message", for cases where the issue cannot be resolved in the standard window, giving the examples of a business closed for the weekend or an issue needing more than 24 hours. That is the documented route for a closer picking up a thread on Monday, and it is a tag on a message, not a general licence to reopen conversations. Meta also documents a Handover Protocol for passing a conversation from an automated experience to a human inbox.
The third clock is the one nobody plans for. In the Limitations section of the messaging guide: "Messages in the Requests folder that have not been active for 30 days will not be returned in API calls." The Requests folder is where messages from people who do not follow the account land. In other words, your coldest inbound leads, the ones from non followers, stop being visible to your software after 30 days of inactivity. If your revival campaign runs on a 60 day cycle, part of its audience no longer exists as far as the API is concerned, and no error will tell you. Pull those conversations into your own store early, and let your follow up process work from your data rather than from Meta's inbox.
Two smaller limitations from the same section, both worth knowing before a client asks: group messaging is not supported, an Instagram professional account converses with one customer per conversation, and messages delivered by the API are not marked as Read in the app until a reply is sent.
Build the throughput budget for one client account
Here is the artefact. One line per client account, filled in from the documented ceilings above and from what that account actually does. It is a page, not a project.
- Name the account and the API path. Instagram API with Instagram Login or Messenger API for Instagram, because the send ceiling differs.
- Write the five messaging ceilings from the table above next to it. They are identical for every account, which is the point: they are a floor you can count on.
- Estimate the peak hour. Not the average day. The reel that lands, the launch, the paid campaign. Compare that peak to 750 private replies per hour, and only to that one.
- Estimate the non messaging budget. This is the account specific line: reach drives 4800 multiplied by impressions over a rolling 24 hours. Rank your clients by reach and you have ranked them by reporting headroom.
- Decide the pacing policy per account. A queue, a smoothing rule, and an explicit instruction to stop on a limit error rather than retry.
- Decide what you log. The response headers, described below, are the only honest source.
On that last point, Meta exposes usage in headers rather than in a dashboard your team will remember to open. The X-App-Usage header carries call_count, total_time and total_cputime as percentages of the allowance. The Business Use Case header, X-Business-Use-Case-Usage, carries the same percentages plus a type field, whose documented values include instagram and messenger, and an estimated_time_to_regain_access expressed in minutes. That last field is what turns a throttling incident into an ETA you can give a client.
The documented throttle error codes are worth alerting on by name: 4 when the app has reached its rate limit, 17 when the user has, 32 on Pages API requests, and 613 for a custom rate limit. Meta also documents 613 with subcode 1996, which "indicates that we have noticed inconsistent behavior in the API request volume of your app", the classic signature of onboarding a batch of new client accounts on the same afternoon. Stagger onboarding, and the pattern looks less like an anomaly.
Rate limits are one of the three numbers that make a multi account setting operation predictable. The other two, response time and reply quality, are covered in our SLA rules and in setter quality assurance across accounts.
Where SetScale fits
SetScale is an AI setter built for teams and agencies, which means multi account from the start rather than as an upgrade: per account pacing, per seat reporting, several closers on one pipeline, and a white label direction for agencies that resell the service. The product is not open yet, and the only thing you can do today is reserve your place.
If Instagram is one channel of several for your clients, the same reasoning applies on the others. We have covered the WhatsApp Business API setup for a team and WhatsApp coexistence for agencies, and the Instagram channel page sums up how we treat this one.
FAQ
Is there a daily Instagram DM limit for the API? Meta's rate limiting page states the Instagram messaging limits per account and per API, in calls per second and, for private replies to comments on posts and reels, in calls per hour. It does not state a daily message cap for Instagram messaging. The 24 hour formula on that page, 4800 multiplied by impressions, covers the Instagram Platform endpoints excluding messaging.
Do the limits apply to my app or to each client account? Messaging limits are stated per Instagram professional account and per API. The non messaging call count is described as unique for each app and account pair, over a rolling 24 hour window. In both cases the account is part of the unit, so portfolios do not share one pot.
What happens when we hit a limit? Requests fail with a documented error code: 4 for the app, 17 for the user, 32 for Pages API requests, 613 for a custom rate limit. Meta's instruction is to stop calling, because continuing to call increases the call count and lengthens the wait. The X-Business-Use-Case-Usage header gives an estimated_time_to_regain_access in minutes.
Can we message a lead who never wrote to us first? No. The documentation is explicit that conversations begin when the Instagram user sends a message to the account, and only then can your app reply, within 24 hours.
Does the human agent tag replace the 24 hour window? It extends the response time to within 7 days of the user's message, for human agent support when the issue cannot be resolved in the standard window. It is a documented tag for specific situations, not a general reopening mechanism.
Conclusion
The honest summary of an afternoon spent in Meta's documentation: the ceilings are generous, they are per account, and the only one an agency workload realistically touches is 750 private replies per hour on comment campaigns. The real constraints sit elsewhere, in the reporting budget that shrinks with a client's reach, in the Advanced Access review that gates every account you do not own, and in the leads that disappear from the Requests folder after 30 days.
Build the per account throughput budget once, log the usage headers, and stop retrying on limit errors. That is the difference between an integration that scales with your client list and one that surprises you during a client's launch week.
Want this running without building it? Join the waitlist.