Instagram API Rate Limits: Every Limit and Error Code

By Mika ReyesPublished 7 min read

The short answer

Instagram API rate limits come in three layers. Most calls are capped at 4,800 × the account's impressions per rolling 24 hours. Hashtag Search and Business Discovery are capped at 200 × your app's users per hour. Publishing is capped at 100 API posts per account per 24 hours. Response headers show your usage, and errors 4, 17, 613, or 80002 mean you're throttled.

There are several Instagram API rate limits. The Instagram API caps most calls at 4,800 × the account's impressions per rolling 24 hours. It caps Hashtag Search and Business Discovery at 200 × your app's users per hour, and publishing at 100 API posts per account per 24 hours. Messaging has its own per-second limits.

The figure most guides repeat, "200 calls per user per hour", is the platform formula. For Instagram, Meta applies it only to Business Discovery and Hashtag Search.

What is the Instagram API rate limit?

Meta's Instagram Platform overview says every endpoint falls under Instagram's business use case (BUC) limit, except Business Discovery and Hashtag Search, which fall under platform limits. Publishing and messaging add their own caps on top.

Limit What it covers Meta's rule Window
Instagram BUC Almost every Instagram endpoint 4,800 × impressions Rolling 24 hours
Platform Business Discovery, Hashtag Search 200 × number of users Rolling 1 hour
Publishing media_publish 100 API-published posts per account 24-hour moving period
Messaging Conversations, Send API, private replies Per-second or per-hour calls per account Per second or per hour

Sources: Rate limiting, content publishing, and the overview.

How is the Instagram rate limit calculated?

For most calls, the cap is 4,800 multiplied by the account's impressions in the last 24 hours. Meta defines impressions as the number of times any content from the account entered a person's screen. A busy account gets a big budget, and a new account with almost no reach gets a small one.

Instagram BUC limit Platform limit
Formula Calls within 24 hours = 4,800 × impressions Calls within one hour = 200 × number of users
Counted per Each app and app user pair Your app (and each user's calls)
Instagram endpoints Everything except the two below Business Discovery, Hashtag Search
Usage header X-Business-Use-Case-Usage X-App-Usage
Throttle error code 80002 4 (app) or 17 (user)

Source: Meta's rate limiting docs.

Because the BUC count is unique to each app and app user pair, one heavy account can't drain the budget of another. It also means a test account with few impressions can hit the cap well before a real customer would.

How many posts can I publish per day via the API?

100 API-published posts per Instagram account in a 24-hour moving period, per Meta's content publishing docs. Meta enforces the cap on POST /<IG_ID>/media_publish, and a carousel counts as one post.

Meta's own pages disagree on the number. The same content publishing page says 100 in its rate limit section and 50 in its carousel section, and the content_publishing_limit reference lists quota_total as 50. Read quota_total for each account rather than hard-coding either figure.

When an account hits the cap, publishing fails with code 9, subcode 2207042: "You reached maximum number of posts that is allowed to be published by Content Publishing API." Meta's error codes reference says to have the user try again the following day. For the full publishing flow, see how to post to Instagram via API.

How do I check my Instagram API usage?

Read the usage headers on every response, and call content_publishing_limit before you publish. Both come from Meta's rate limiting and content_publishing_limit docs.

  • X-Business-Use-Case-Usage. A JSON string keyed by business object ID. Each entry has type (instagram for Instagram calls), call_count, total_cputime, total_time, and estimated_time_to_regain_access in minutes.
  • X-App-Usage. Your app's platform usage: call_count, total_cputime, and total_time, each a whole-number percentage of the limit over a rolling hour.
  • content_publishing_limit. Returns quota_usage, the containers published in the window. Add fields=quota_usage,config to also get quota_total and quota_duration (86400 seconds).
curl -G "https://graph.instagram.com/v25.0/<IG_USER_ID>/content_publishing_limit" \
  --data-urlencode "fields=quota_usage,config" \
  --data-urlencode "access_token=<ACCESS_TOKEN>"

Use graph.instagram.com with Instagram Login and graph.facebook.com with Facebook Login. The optional since parameter takes a Unix timestamp no older than 24 hours.

What do Instagram rate limit error codes mean?

The error code in the response body tells you which limit you hit. Meta's rate limiting docs don't document an HTTP 429 for these, so branch on error.code.

Code Subcode Meaning Source
4 The app whose token made the call hit its rate limit Rate limiting
17 The user whose token made the call hit their rate limit Rate limiting
32 Rate limit on a Pages API request (user or app) Rate limiting
613 A custom rate limit was reached Rate limiting
613 1996 Meta noticed inconsistent request volume from your app Rate limiting
80002 Instagram business use case limit reached Rate limiting
9 2207042 The account hit its daily publishing limit Error codes
4 2207051 Publishing action suspected to be spam Error codes

Subcode 1996 is the one bursty apps hit. Meta saw irregular request volume from your app, so the fix is to even out your traffic.

Why do I get "Application request limit reached"?

If that message arrives with code 4, your app has hit its platform rate limit, even when your dashboard shows plenty of headroom. On Instagram, platform limits only cover Business Discovery and Hashtag Search, and they're counted separately from the BUC budget most dashboards show.

So an app can be fine on its 4,800 × impressions budget and still be throttled on Business Discovery, which allows 200 × users per hour. Check X-App-Usage on those responses, not X-Business-Use-Case-Usage.

Is error 2207051 a rate limit?

No. Code 4 with subcode 2207051 is an action block, not a quota. Meta's error codes reference says the publishing action is suspected to be spam, with the message "We restrict certain activity to protect our community."

Retrying the same post on a timer won't clear it, because no counter is running down. Change what you're posting (repeated near-identical captions or media are a common trigger developers report), slow the cadence, and if the block looks wrong, the account owner can tell Instagram it made a mistake.

How should I handle Instagram API rate limits?

Stop calling the moment you're throttled. Meta's rate limiting docs say continued calls keep raising your call count, which pushes recovery further out. A tight retry loop makes a throttle last longer.

  1. Branch on the error code. Treat 4, 17, 32, 613, and 80002 as throttles. Treat 2207051 as a content problem and 2207042 as a daily cap.
  2. Pause per account. BUC limits are per app and user pair, so pause the one account, not your whole queue.
  3. Wait the time Meta gives you. Use estimated_time_to_regain_access from X-Business-Use-Case-Usage as your backoff.
  4. Spread requests out. Meta recommends spreading queries evenly to avoid spikes, which also keeps you clear of subcode 1996.
  5. Ask for less. Use fields filters to shrink responses and avoid calls that fetch overlapping data.
  6. Use webhooks over polling for comments and messages, so you aren't spending calls to discover nothing changed.
const THROTTLE_CODES = new Set([4, 17, 32, 613, 80002]);
 
function backoffMinutes(response, body) {
  const code = body?.error?.code;
  const subcode = body?.error?.error_subcode;
  if (code === 4 && subcode === 2207051) return null; // action block: don't retry
  if (!THROTTLE_CODES.has(code)) return 0;
 
  const usage = JSON.parse(response.headers.get("x-business-use-case-usage") ?? "{}");
  const waits = Object.values(usage).flat().map((u) => u.estimated_time_to_regain_access ?? 0);
  return Math.max(5, ...waits); // fall back to 5 minutes when no estimate is given
}

The 5-minute floor is our own default, not a Meta number. Tune it to your traffic.

What are the Instagram DM and private reply limits?

Messaging is limited per Instagram professional account, per second or per hour, separately from the call cap. The figures below are from Meta's Instagram Platform overview.

Endpoint Limit per account
Conversations API 2 calls per second
Send API: text, links, reactions, stickers 100 calls per second
Send API: audio or video 10 calls per second
Private replies: posts and Reels 750 calls per hour
Private replies: Instagram Live 100 calls per second

The private replies docs add two timing rules. You can send one message to the commenter, within 7 days of the comment (or during the broadcast, for Live). Follow-ups are allowed only after the person responds, within 24 hours of that response. The Instagram messaging API guide covers those windows in full.

Where does Adeli fit?

Meta's limits still apply when you publish through Adeli. What Adeli takes off your plate is the setup. Adeli holds the Meta developer app, carried Meta's review, and refreshes every connected account's tokens, so you hold one API key. It publishes feed posts, Reels, Stories, and carousels to Instagram from the same posting API endpoint as every other network, and returns a per-platform status on every publish plus a webhook when anything changes. The Instagram publish reference has the request format.

On cost, your first 3 connected accounts are free, and there are no per-post fees on Instagram. Is the Instagram API free? covers what building directly costs in time.

faq

Frequently asked questions

How long until the Instagram API rate limit resets?

The windows roll, so there's no fixed reset time. For Instagram's business use case limit, the X-Business-Use-Case-Usage header includes estimated_time_to_regain_access, in minutes. For platform limits, Meta says to watch X-App-Usage. Either way, every call you make while throttled adds to the count and pushes recovery further out.

Does the Instagram API return HTTP 429 when rate limited?

Meta's rate limiting docs don't mention HTTP 429. They describe throttling by error code in the response body: 4, 17, 32, 613, and 80002 for Instagram. Branch on the error code, not the HTTP status.

Does a carousel count as one post toward the publishing limit?

Yes. Meta's content publishing docs say a carousel counts as a single post, whether it holds 2 items or 10. The limit is checked when you call media_publish, not when you create containers.

Power your next project
with one social media API

Give your users publishing, scheduling, and analytics through one integration your team can actually maintain.

Try with agents

Start with free credits. No credit card required.