Instagram API Rate Limits: Posts per Day and Call Caps

Instagram's API has two separate limits: a cap on how many posts an account can publish in a moving 24 hours, and a cap on how many API calls an app can make for that account. For the first, Meta's documentation gives two figures. The rate-limit section of its content publishing guide says 100 API-published posts, and three other places, including the reference for the endpoint that reports the limit, say 50. Both were live when we read the pages on 10 November 2026. A carousel counts as one post under either figure, and the number that applies to a given account is the one Instagram returns from GET /<IG_USER_ID>/content_publishing_limit. Calls are capped separately, at 4,800 per 24 hours multiplied by the account's impressions.

By · · 9 min read

Drafted with AI assistance from our own research and Search Console data, and reviewed by Rahul A before publishing. Rules and prices change; check the linked official source before you act.

If you would rather not build the publishing flow yourself, PostWharf, the tool we make, publishes to Instagram from one API call and gives every post a delivery receipt that says, network by network, whether it went out and why not if it did not.

Instagram API limits at a glance

Every figure in this table comes from Meta's developer documentation, read on 10 November 2026. The sections below explain the main rows and link the pages they come from.

LimitFigureCounted perWindow
Posts published through the API100 or 50, depending on the pageInstagram accountMoving 24 hours
Media containers created400Instagram accountRolling 24 hours
Life of an unpublished container24 hours, then it expiresContainerNot applicable
Images and videos in one carousel20 in the publishing guide; the error message for subcode 2207028 still says no more than 10PostNot applicable
API calls, apart from the two rows below4,800 × impressionsApp and account pairRolling 24 hours
Business Discovery and Hashtag Search callsMeta's Platform Rate Limits, not the formula aboveApp or userRolling hour
Messaging callsTheir own limits, such as 2 calls a second for the Conversations APIInstagram accountPer second or per hour

Posts per day: Meta publishes both 100 and 50

Four lines in Meta's documentation state the daily publishing cap, and they do not agree.

Meta pageWhere on the pageFigure it givesPage last updated
Content publishing guideRate Limit100 API-published posts in a 24-hour moving period20 October 2026
Content publishing guideCreate a carousel container, Limitations50 published posts in a 24-hour period20 October 2026
IG User Media Publish referenceLimitations50 posts in a 24-hour moving period28 September 2026
IG User Content Publishing Limit referenceThe quota_total fieldCurrently 5023 July 2024

The updated date belongs to the whole page, so it cannot settle which sentence is current. The guide contradicts itself a few screens apart, under one date.

Other guides add a third number. The three top results we read for this search on 10 November 2026 give 25, 50 and 100 between them. None of the Meta pages above gives 25 as a publishing cap.

Two working rules follow. First, do not hard-code any of these numbers: ask Instagram for the account's own ceiling, as described below. Second, if you have to budget before you can ask, plan to 50, because a queue that never goes over 50 is inside the limit whichever line turns out to be right.

What counts against the daily cap

  • The count is taken when you publish, not when you upload. Meta enforces the cap on POST /<IG_ID>/media_publish. Creating a container uses none of it, though containers have a ceiling of their own: 400 per account in a rolling 24 hours, according to the IG User Media reference.
  • A carousel is one post. The 100 line and the guide's 50 line both say so. Its items are a different matter. Each image or video in a carousel is its own container and the carousel is one more, so a carousel at the guide's maximum of 20 items is 21 containers against the 400, and Meta states no exception for carousel items.
  • Every published container counts the same. The limit endpoint counts how many times the account has published a container, and Meta's pages name no media type that is exempt. Read that way, a Reel or a Story uses one post just as a photo does.
  • Only API publishing is counted. The guide's wording is a limit on API-published posts. It says nothing about posts made in the Instagram app.
  • The cap sits on the account. Meta words it as a limit on the Instagram account, not on the app. Read that way, two tools publishing to the same account draw on one allowance.
  • The window moves. There is no reset at midnight. A post stops counting 24 hours after it was published, so the allowance comes back one post at a time.

How to check an account's remaining allowance

Meta gives the allowance its own endpoint, on the same host you publish through:

GET https://graph.facebook.com/<API_VERSION>/<IG_USER_ID>/content_publishing_limit
  ?fields=quota_usage,config
  &access_token=<ACCESS_TOKEN>

Apps that use Instagram Login call graph.instagram.com instead. The token needs the same permissions as publishing: instagram_business_basic and instagram_business_content_publish with Instagram Login, or instagram_basic, instagram_content_publish and pages_read_engagement with Facebook Login. Which of the two an account uses, and the account type it has to be, is covered in Instagram API publishing: accounts, Pages and breaks.

FieldWhat it holds
quota_usageHow many times the account has published a container in the last 24 hours, or since the since timestamp if you send one. Returned by default.
config.quota_totalThe most the account can publish in the window. This is the account's real ceiling.
config.quota_durationThe length of the window in seconds, currently 86,400, which is 24 hours.

The remaining allowance is config.quota_total minus quota_usage. If you leave fields out you get quota_usage alone, which tells you how many posts have gone out but not out of how many. The optional since parameter takes a Unix timestamp no older than 24 hours.

One oddity in the reference is worth knowing before you copy from it. Its sample request asks for a field named rate_limit_settings, which its own field table does not list. The table and the sample response both use config.

Meta also recommends that your app enforce the limit itself, especially if it lets people schedule posts ahead. For a scheduler that means three things: count the posts due for one account across any 24-hour span, not per calendar day; read the endpoint before a large batch; and stop the batch at the first refusal instead of sending the rest.

The separate cap on API calls

The daily post cap is not the only way to be refused. Almost every call to an Instagram endpoint also counts towards a call allowance that Meta's rate limiting page works out like this:

Calls within 24 hours = 4800 × Number of Impressions

The count is kept separately for each pairing of app and Instagram account, over a rolling 24 hours. Impressions are the number of times any content from that account appeared on someone's screen in the last 24 hours. An account whose content was seen 1,000 times in the past day therefore gives your app 4.8 million calls for it, and one seen 10 times gives 48,000.

Meta's formula for Threads is identical and adds a floor of 10 impressions. The Instagram section states no floor, so the documentation does not say what an account with nothing seen in the last day is allowed.

Three details decide how fast the allowance is spent:

  • Each ID is a call. One request that names three IDs counts as three calls, not one.
  • Publishing takes several calls. A photo is two: create the container, then publish it. A carousel at the guide's maximum of 20 items is at least 22: 20 item containers, the carousel container and the publish. Video adds one call for every status check, and Meta recommends checking once a minute for no more than five minutes.
  • Time counts as well as calls. Responses under this limit carry an X-Business-Use-Case-Usage header. Its entry of type instagram reports call_count, total_cputime and total_time as percentages, and calls may be throttled when either time figure reaches 100.

Two groups of endpoints sit outside the formula. Business Discovery and Hashtag Search follow Meta's Platform Rate Limits, which allow 200 calls an hour multiplied by the app's users for calls made with an app token, and an undisclosed number for each user token. Messaging endpoints have fixed limits for each Instagram account, such as 2 calls a second for the Conversations API and 750 calls an hour for private replies to comments on posts and Reels.

What the refusal looks like

The two limits fail with different codes, and the wait is different too. The table also lists the platform rate limit and the spam block, which are refused differently again.

Limit reachedCodeSubcodeWhat Meta says it meansWhen to send again
Daily publishing cap92207042The account has reached its daily publishing limit.Once the window has moved on. Meta's advice is to try again the following day.
Call allowance for an Instagram account80002None listedThe app has reached its Business Use Case rate limit for Instagram.After the minutes given in the header's estimated_time_to_regain_access.
Platform rate limit4 for the app, 17 for the userNoneThe app or the user behind the token has reached its rate limit.When the call count has dropped back under the limit.
Suspected spam42207051Instagram suspects the publishing activity is spam. This is a block, not a quota.Not on a timer. Slow down, and tell Meta if the block is a mistake.

Meta lists subcode 2207042 under HTTP status 400. Its user message begins "You reached maximum number of posts", but that text follows the locale of the request, so match on the subcode, not on the sentence.

The cap is refused at the publish call, so by then the container already exists. Meta says an unpublished container expires after 24 hours. It does not say whether a container refused with 2207042 can still be published later, so read its status_code before you reuse it and create a new one if it reads EXPIRED or ERROR.

For the call allowance Meta's guidance is blunt: stop calling. Further calls keep adding to the count and lengthen the wait, which makes a tight retry loop the worst answer to either refusal. Which failures are worth sending again at all is covered in our guide to publishing retry rules. Throttling on other networks can be harder to see, because it sometimes hides behind a success response, which is the subject of rate limits that look like success.

What PostWharf does at Instagram's limits

With PostWharf you do not write the container, publish and status calls yourself. You send one post to the Instagram scheduling API, and each network it goes to gets its own row on the post's delivery receipt.

  • PostWharf publishes no rate limit per API key. Throughput is bounded by each network's own limits. Plans carry a monthly post allowance, which is shown on the pricing page.
  • Retries are kept for failures in transit. Those are sent again with backoff, without you. A rejection that would fail the same way again is left alone, and the reason stays on its row of the receipt.
  • One network failing does not hide the others. A post that reached your other networks but not Instagram is marked partial, and GET /v1/posts/:id returns a delivery for each channel with its status, attempts, live URL and error text.
  • A carousel carries up to 10 files here. That is the lower of Meta's two figures, so a carousel that is accepted is inside both.
  • Instagram's allowance stays the same. Meta words the cap as a limit on the Instagram account, so posts sent through PostWharf count towards it like any other API-published post.

PostWharf charges per brand, not per connected channel, and the REST API comes with every plan.

Sources consulted: Meta for Developers (developers.facebook.com): Content publishing, updated 20 October 2026 · Meta for Developers (developers.facebook.com): IG User Content Publishing Limit, updated 23 July 2024 · Meta for Developers (developers.facebook.com): IG User Media Publish, updated 28 September 2026 · Meta for Developers (developers.facebook.com): IG User Media, updated 28 September 2026 · Meta for Developers (developers.facebook.com): Graph API rate limits, no date shown on the page · Meta for Developers (developers.facebook.com): Instagram Platform overview, updated 29 October 2026 · Meta for Developers (developers.facebook.com): Instagram Platform error codes, updated 2 June 2026 · Meta for Developers (developers.facebook.com): Graph API error handling, no date shown on the page · All eight were read on 10 November 2026. Meta changes these pages without notice, so read the limit endpoint for the account before you rely on any figure here.

Common questions

How many posts a day can the Instagram API publish?

Meta's own pages give two figures, 100 and 50 API-published posts in a moving 24 hours, and a carousel counts as one post. Read the account's content publishing limit to see the ceiling that applies to it.

What happens when an Instagram account reaches its daily publishing limit?

The publish call is refused with code 9 and subcode 2207042. Meta's advice is to try again the following day, once the 24-hour window has moved on.

Is the limit on API calls separate from the limit on posts?

Yes. Instagram caps how many posts an account can publish in a moving 24 hours and, separately, how many API calls an app can make for that account. Reaching the call allowance is refused with code 80002, and the response header says how many minutes to wait.

PostWharf is priced per workspace rather than per connected channel, and every plan carries unlimited channels. See per-brand pricing.