The number Instagram enforces is the one GET /{ig-user-id}/content_publishing_limit returns, and on 11 September 2026 that is quota_total: 50 (content_publishing_limit reference, accessed 11 September 2026). The sentence you searched for, "Instagram accounts are limited to 100 API-published posts within a 24-hour moving period," lives in the content publishing guide and nowhere else. Two reference pages say 50. One guide page says 100. The endpoint wins.
Three things follow. Carousels count once, since the guide states "Carousels count as a single post." The window rolls: a slot you used at 13:00 comes back at 13:00 the next day, never at midnight. And the cap is enforced on POST /{ig-user-id}/media_publish, so container creation still succeeds while the publish call fails with code 9, subcode 2207042 (error codes reference, accessed 11 September 2026).
Instagram accounts are limited to 100 API-published posts within a 24-hour moving period
That sentence is the opening line of the rate limit section in Meta's content publishing guide for the Instagram Platform, accessed 11 September 2026. It is documentation prose. The API never returns it. When your logs contain it, a human pasted it there from the guide, or a vendor's help page quoted it.
Read the rest of the section and the sentence loses weight. The same page says "This limit is enforced on the POST /<IG_ID>/media_publish endpoint when attempting to publish a media container." and tells you to check usage with GET /<IG_ID>/content_publishing_limit. Scroll to the carousel section on that same page and the number changes: "Accounts are limited to 50 published posts within a 24-hour period." One page, two caps, a few screens apart.
So the guide sentence tells you three true things and one unreliable one. True: there is a per-account cap, the window moves, carousels count once. Unreliable: the figure. Meta's Instagram Platform changelog has no entry for any change to the publishing limit (checked 11 September 2026), so there is no dated record of when 25 became 50, or of 100 ever applying to anyone.
Is the Instagram API publishing limit 25, 50, or 100?
Fifty, for every account we have checked, and for both reference pages Meta maintains for the endpoints involved. The media_publish reference states "An Instagram professional account can only publish 50 posts within a 24 hour moving period" (accessed 11 September 2026). The content_publishing_limit reference documents quota_total as 50 and quota_duration as 86400 seconds on the same date. The 100 exists in one guide paragraph. The 25 exists in the past.
| Number | Where it appears | Status on 11 September 2026 |
|---|---|---|
| 25 | Vendor help pages, such as Ayrshare's "Instagram Graph API Error 9: The 25-Post Daily Limit" | Stale. No Meta page cites it. |
| 50 | content_publishing_limit reference (quota_total), media_publish reference, carousel section of the publishing guide | Enforced. Matches the value the endpoint returns. |
| 100 | Rate limit section of the content publishing guide | Prose only. No endpoint or error message repeats it. |
The 25 has a long tail. Ayrshare's troubleshooting article still states that "you can only publish 25 media items per Instagram Professional account within a rolling 24-hour window" (Ayrshare, accessed 11 September 2026), and search results for the error are full of pages like it. Those pages were correct once. The endpoint is correct now.
A documented quota is a claim. quota_total is a measurement. When the two disagree, ship the measurement.
How the 24-hour moving period works
Moving period means the window is anchored to each publish, never to a calendar day. Meta defines quota_usage, when the since parameter is omitted, as "the number of times the app user has published a container within the last 24 hours" (content_publishing_limit reference, accessed 11 September 2026), so each publish drops out of the count 86,400 seconds after it happened. Nothing happens at midnight, in any timezone.
Work the timeline for a busy account. You publish 50 posts between 13:00 and 14:00 on Tuesday. At 14:01 quota_usage reads 50 and the 51st publish fails. The first slot returns at 13:00 on Wednesday, when the Tuesday 13:00 publish ages out. By 14:00 Wednesday all 50 are back, one at a time, in the order you spent them. A client that reads "daily limit" and waits for Wednesday 00:00 gains nothing.
Enforcement happens at the publish step, which changes where your code has to look. POST /{ig-user-id}/media creates a container and succeeds with or without quota left. POST /{ig-user-id}/media_publish is where the check runs (content publishing guide, accessed 11 September 2026). Creating containers you cannot publish is waste on a clock: the guide states a container expires when "not published within 24 hours".
The container status endpoint has its own etiquette. Meta recommends "querying a container's status once per minute, for no more than 5 minutes" while a video processes. Poll faster than that and you spend Business Use Case call budget on nothing; poll for longer and the media has almost certainly failed. The rate limits post covers the X-Business-Use-Case-Usage header that governs those calls.
How to check your remaining quota
One GET tells you how many publishes are left. Ask for both quota_usage and config, subtract, and you have the number that matters for the next 24 hours.
curl "https://graph.instagram.com/v25.0/{ig-user-id}/content_publishing_limit?fields=quota_usage,config&access_token=$TOKEN"{
"data": [
{
"quota_usage": 2,
"config": {
"quota_total": 50,
"quota_duration": 86400
}
}
]
}Remaining is quota_total minus quota_usage, 48 in that response. Meta describes quota_usage as "The number of times the app user has published an IG Container" and quota_duration as the period the count covers, "currently 86400 seconds, or 24 hours" (content_publishing_limit reference, accessed 11 September 2026). Never store quota_total as a constant. Read it on each call; a raise from 50 will show up here before any guide page is edited.
Scopes depend on which login flow issued the token. With Instagram Login the call needs instagram_business_basic and instagram_business_content_publish. With Facebook Login it needs instagram_basic, instagram_content_publish, and pages_read_engagement, plus ads_management or ads_read when the user holds a Business Manager role (content_publishing_limit reference, accessed 11 September 2026). If those scopes are what stalled your app review, the no-app-review route is the other way in.
The error you get when you hit the limit
Meta's error codes reference lists the limit error as code 9, subcode 2207042, with the message "You reached maximum number of posts that is allowed to be published by Content Publishing API." and the advice "The app user has reached their daily publishing limit. Advise the app's user to try again the following day." (accessed 11 September 2026). The message names no number, which is why searchers end up quoting the guide sentence instead.
{
"error": {
"message": "You reached maximum number of posts that is allowed to be published by Content Publishing API.",
"type": "OAuthException",
"code": 9,
"error_subcode": 2207042,
"fbtrace_id": "AbCdEfGhIjKlMnOp"
}
}Compare the neighbour you will also meet on this endpoint. Code 9007, subcode 2207027, "The media is not ready for publishing, please wait for a moment", comes with the advice to "Check the container status and publish when its status is FINISHED." That one is a retry measured in seconds. Subcode 2207042 is a wait measured in hours, up to 24 of them, and no retry budget outlasts it. Branch on error_subcode, not on code: Meta documents 2207042 as the only publishing-cap subcode.
Keeping a scheduler under the limit
The pattern that never trips is boring. Read content_publishing_limit before every publish, keep one queue per Instagram account, and refuse to call media_publish when remaining is zero. Retrying 2207042 is pointless until the oldest publish in the window ages out, so record publish timestamps and compute the earliest free slot instead of backing off blindly. How one publish call fans out to the other networks is covered in the social sharing API post.
SocialAPI.ai's Instagram connector does exactly that. It calls GET /{ig-user-id}/content_publishing_limit?fields=config,quota_usage before each publish and computes remaining as quota_total minus quota_usage, so when Meta answers, the cap it enforces is the one Meta reports for that account. At zero the publish is refused before media_publish is called, and the Instagram target comes back failed with the code platform.instagram.rate_limit (errors guide):
{
"code": "platform.instagram.rate_limit",
"message": "Platform rate limit exceeded",
"meta": {
"platform": "instagram",
"reason": "content_publishing_limit",
"remaining": 0
}
}Two properties of that error matter for a scheduler. The refusal happens before Meta is called, and on plans with a post allowance an immediate publish that fails on every target is refunded. And a scheduled target that hits it is marked failed and fires a post.failed webhook (post.partial when other targets went out) rather than retrying on its own, so reschedule it with scheduled_at past the earliest free slot. The content publishing API page lists which other platforms carry a publish cap of their own.
To see the number without publishing, GET /v1/accounts/{id}/limits returns posts_remaining for Instagram (API reference). To stay under it by design, send posts with scheduled_at and space them: 50 posts across 24 hours is one every 29 minutes, and the Instagram publishing docs list scheduled_at as supported. Once the posts are out, the replies to them arrive through the comments API, and the `shares` metric on media tells you which ones travelled.
Questions developers ask about the Instagram publishing limit
- Does a carousel count as one post or one per image?
- One. Meta's content publishing guide says "Carousels count as a single post" and, in its carousel section, "Publishing a carousel counts as a single post" (accessed 11 September 2026). The count is taken at media_publish on the carousel container. The child containers you created for each image or video never reach media_publish and never touch quota_usage. A ten-image carousel therefore spends one of the 50 slots, the same as a single photo.
- Do Reels and Stories count toward the 100-post limit?
- Plan on yes. Meta defines quota_usage as the number of times the app user has published an IG Container, and Reels and Stories are published through the same media_publish call as feed photos. None of the Meta pages cited in this post lists an exemption for any media type, and the error codes reference documents one limit error for the endpoint. If a Reel-heavy account needs more than 50 publishes a day, the endpoint will tell you before the error does.
- Does the Instagram publishing limit reset at midnight?
- No. Meta calls it a 24-hour moving period, and quota_duration is 86400 seconds counted from each publish. A slot used at 13:00 on Tuesday frees at 13:00 on Wednesday. Waiting for a calendar boundary is the usual mistake in scheduler code. The fix is to store each publish timestamp and compute the earliest free slot, or to read content_publishing_limit again and act on quota_usage rather than on the clock.
- Is the limit per Instagram account or per app?
- Per app user, which in practice means per Instagram professional account connected to your app. Meta's reference describes quota_usage as the number of times the app user has published a container, and the sentence you searched for begins with "Instagram accounts are limited". Two accounts connected to one app get 50 each. Whether one account connected to two apps shares a single bucket is not documented on any page cited here; assume it does. App-level call quotas, such as the Business Use Case limit reported in X-Business-Use-Case-Usage, are separate.
- Does deleting a post give the quota back?
- Meta documents nothing on this. The content_publishing_limit reference describes quota_usage as a count of publishes, with no mention of deletions, and the error codes reference offers only "try again the following day" as the remedy. Treat quota_usage as monotonic within the window: a publish counts whether the post still exists or not. If you need certainty for a specific account, read the endpoint before and after a delete instead of trusting a forum answer.
If you would rather never read content_publishing_limit yourself, the Instagram connector does it before every publish and the posts docs show the scheduled_at field. Sign up free to test it on one account. If a Meta fact on this page is wrong, tell us and it gets corrected with a date.
Every Meta claim above traces to a page on developers.facebook.com, each accessed 11 September 2026. Where Meta pages disagree with each other, both are cited and the endpoint value is treated as authoritative. Meta, content publishing guide (Instagram Platform) · Meta, IG User content_publishing_limit reference · Meta, IG User media_publish reference · Meta, Instagram Platform error codes reference · Meta, Instagram Platform changelog · Ayrshare, Instagram Graph API Error 9: The 25-Post Daily Limit & How to Fix It · SocialAPI.ai errors guide · SocialAPI.ai Instagram publishing docs
