# Instagram posting errors: what each code means and what to do

Canonical: https://status200uploads.com/platforms/instagram/errors

Checked on 26 October 2026.

An Instagram post through Status 200 Uploads can be refused by us before anything is sent, by Instagram while it takes the file, or by Instagram after it accepted the post. Our refusals carry a fixed code, such as RECONNECT_REQUIRED or media_wrong_for_post_type, with a sentence saying what to do. Instagram's own refusals carry Meta's code and subcode (in error.details, or in History when Instagram refuses later), such as 9 and 2207042 for the publishing limit. This page lists both, with whether sending the same request again can work.

## How to read an error

Every refusal is JSON with error.code and error.message. Switch on the exact code: Instagram's sign-in codes are written in capitals (RECONNECT_REQUIRED, NO_TOKEN), where Facebook and LinkedIn answer reconnect_required in lower case.

Instagram publishes in two steps. It first takes the file into a container, then publishes the container. Our answer comes after the first step: it says processing and gives the container_id, and the post finishes after the answer. History shows how it ended, and GET /api/v2/posts/{id} reads it back.

When Instagram refuses the first step, the failed post is written into History along with the answer, so you can read the reason later. A post we refuse before calling Instagram, such as a picture sent as a Reel, leaves no failed post behind: nothing reached Instagram, and it does not use a post of your plan.

A post that Instagram accepted and then failed keeps Instagram's container id, so History does not offer Retry on it: a retry would send the same post again. Fix what the reason says and publish it as a new post.

## The connection to your Instagram account

When the Instagram sign-in we hold has expired, we renew it as the post goes out. When that is not possible, the answer comes from the Instagram step, so the post shows in History as failed.

| HTTP | Code | Meaning | What to do | Send it again? | Where it shows |
| --- | --- | --- | --- | --- | --- |
| 401 | `RECONNECT_REQUIRED` | Instagram ended the sign-in we hold for this profile, and it cannot be renewed. | Connect Instagram again under Connections, then publish the post again. | never: No. The same request cannot work: change it first. | API answer, History, AI app |
| 401 | `NO_TOKEN` | This profile's Instagram connection has no sign-in stored. | Connect Instagram under Connections. | never: No. The same request cannot work: change it first. | API answer, History, AI app |
| 401 | `TOKEN_REFRESH_FAILED` | Renewing the Instagram sign-in failed just now, without Instagram saying it was ended. | Publish it again a little later. If it fails again, connect Instagram again under Connections. | wait_and_resend: Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, History |

## The post type and its files

Instagram makes a Reel only from a video, and a carousel only from 2 to 10 files. We check this before anything is sent, because Instagram answers a file that does not fit with a sentence about the file's format, which hides the real cause.

| HTTP | Code | Meaning | What to do | Send it again? | Where it shows |
| --- | --- | --- | --- | --- | --- |
| 400 | `media_wrong_for_post_type` | The files do not fit the post type: a picture sent as a Reel, one file or more than 10 files as a carousel, or several files on a Reel or a feed image. Nothing was sent. | Send a video for a Reel and 2 to 10 files for a carousel, or choose the post type that fits the files. | never: No. The same request cannot work: change it first. | API answer, AI app |
| 413 | `MEDIA_TOO_LARGE` | The file is larger than Instagram takes through us. Nothing reached Instagram. | Use a smaller file: Reels up to 300 MB, photos up to 8 MB. | never: No. The same request cannot work: change it first. | API answer, History, AI app |
| 400 | `bad_request` | A Reel's cover (post.instagram.coverUrl) or a media address is not an http:// or https:// address. error.field names it, and no post is recorded. | Send a full address that starts with https://, or leave the cover out. | never: No. The same request cannot work: change it first. | API answer |
| 400 | `media_not_available` | A scheduled post's file, or a Reel's cover, answers "not found" at its address: deleted, moved, or past the 7 days a library file is kept. | Upload the file again and schedule the post with its new mediaID. | never: No. The same request cannot work: change it first. | API answer, AI app |

## Sending the post to Instagram

After the checks, the post goes to Instagram. A post it accepted finishes after our answer; this one comes back when the first step did not give us a container.

| HTTP | Code | Meaning | What to do | Send it again? | Where it shows |
| --- | --- | --- | --- | --- | --- |
| 400 | `no_container` | Instagram answered the first step without a container id, so the post never started. The failed post is in History. | Check the file against Instagram's own errors below, then publish it again. | never: No. The same request cannot work: change it first. | API answer, History |

## Codes any post can get

| HTTP | Code | Meaning | What to do | Send it again? | Where it shows |
| --- | --- | --- | --- | --- | --- |
| 401 | `unauthorized` | No API key, or a key that is not active. | Send Authorization: Bearer with an active rl_ key from the API page. | never: No. The same request cannot work: change it first. | API answer |
| 403 | `account_not_found` | The accountId is not one of your profiles. The answer lists yours. | Use a profile id or "@name" from the list. | never: No. The same request cannot work: change it first. | API answer, AI app |
| 404 | `media_not_found` | The mediaID is not in your library: never imported, deleted, or removed after 7 days. | Import or upload the file again and use the new id. | never: No. The same request cannot work: change it first. | API answer, AI app |
| 409 | `media_processing` | The file is still importing. | Wait the Retry-After seconds and send the same request. | wait_and_resend: Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, AI app |
| 429 | `rate_limited` | Less than 20 seconds since your last post to the same network. | Wait the Retry-After seconds and send the same request. | wait_and_resend: Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, AI app |
| 429 | `daily_limit_reached` | Your plan's posts for today are used up. | Post after resets_at, or move to a larger plan. | after_reset: Not before the time in resets_at. | API answer, AI app |
| 429 | `monthly_limit_reached` | The Free plan's posts for this month are used up. | Post after resets_at, or move to a paid plan. | after_reset: Not before the time in resets_at. | API answer, AI app |
| 422 | `idempotency_key_reused` | The Idempotency-Key was already used with another body. | Use a new key for a new post. | never: No. The same request cannot work: change it first. | API answer |
| 500 | `server_error` | Our side failed. | Send it once more with the same Idempotency-Key; without one, check History first. | resend_once_with_key: Once, with the same Idempotency-Key. | API answer, AI app |
| 502 | `upstream_unavailable` | The request never left. Nothing was posted. | Send the same request again after a short wait. | wait_and_resend: Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer |

## Instagram's own errors

When Instagram refuses the file as we create the post, the answer is HTTP 400 with error.code CONTAINER_ERROR (CAROUSEL_ERROR or CAROUSEL_CHILD_ERROR for a carousel; none of the three is listed in the API reference yet), Instagram's message in error.message, and Meta's code and subcode in error.details. When Instagram refuses the post later, while it processes or publishes it, History shows Instagram's message; for a refused publish it adds code= and subcode=. The codes below are Meta's, written as code/subcode; what they mean comes from Meta's Instagram error reference, read on 15 October 2026.

### 9/2207042

As the post is published. The account reached the number of posts apps may publish for it in a moving 24-hour period. Meta's pages give 100 in one place and 50 in others, and count a carousel as one post. [I6, I1, I4] Wait for older posts to leave the 24-hour window, then publish again. Sending it again at once will not help.

### 9007/2207027

As the post is published. The media is not ready for publishing yet. [I6, I1] Wait and publish again. Meta suggests checking a container once a minute for up to 5 minutes.

### 9004/2207052

As Instagram fetches the file. Instagram could not fetch the file from its address. [I6] Use an address that is public and answers with the file itself, or upload the file to your media library and post it by its mediaID.

### -2/2207003

As Instagram fetches the file. Downloading the file took Instagram too long. [I6] Publish it again. A smaller file is fetched faster.

### 36000/2207004

As Instagram checks the file. The image is larger than Instagram takes: over 8 MiB. [I6] Save the image smaller and publish it again.

### 36001/2207005

As Instagram checks the file. Instagram does not take the image's format. Meta's publishing guide names JPEG as the image format. [I6, I1] Save the image as a JPEG and publish it again.

### 36003/2207009

As Instagram checks the file. The image's aspect ratio is outside what Instagram takes, from 4:5 (portrait) to 1.91:1 (landscape). [I6, I1] Crop the image into that range and publish it again.

### 36004/2207010

As Instagram checks the post. The caption is too long: Instagram takes up to 2,200 characters, 30 hashtags and 20 @ tags. [I6, I2] Shorten the caption, or remove hashtags or tags, and publish it again.

### 352/2207026

As Instagram checks the file. Instagram does not take the video's format. [I6] Export the video as MP4 or MOV and publish it again.

### 25/2207050

Any step. Meta says the Instagram account is restricted. [I6] Sign in to the Instagram app and complete what it asks. Until then, sending again will not help.

### 4/2207051

Any step. Instagram restricted the activity, with Meta's words "We restrict certain activity to protect our community". [I6] Wait before posting again, and check the account in the Instagram app.

### 190

Any step. The access token expired or is no longer valid. Instagram follows the Graph API's rules for sign-in errors. [F12] Connect Instagram again under Connections, then publish the post again.

## Questions

### What does RECONNECT_REQUIRED mean on an Instagram post?

Instagram ended the sign-in we hold for that profile, and it could not be renewed, so we can no longer post for it. Connect Instagram again under Connections, then publish the post again. The failed post stays in History with the reason.

### Why does my Instagram post say processing instead of published?

Instagram publishes in two steps, and our answer comes after the first one: Instagram has the file, and the post finishes after the answer. It is not a failure. History shows how it ended, and GET /api/v2/posts/{id} reads it back.

### Why was my Instagram Reel refused with media_wrong_for_post_type?

A Reel is made from a video, and the post had a picture. We refuse it before anything reaches Instagram, so it leaves no failed post and does not use a post of your plan. Attach the video you meant, or choose Feed Image or Carousel for pictures.

### How do I see how many Instagram posts are left before the publishing limit?

Ask the profile's posting options: GET /api/v2/accounts/{profile_id}/options reports Instagram's rolling publishing limit as posts_used, posts_allowed, posts_left and window_hours. A null there means Instagram did not report it, not a zero.

### Why can I not retry a failed Instagram post from History?

When Instagram already took the post (it has a container id) and then failed it, a retry would send exactly the same post again, so History does not offer one. Fix what the reason says and publish it again as a new post.

### What does Instagram error 2207042 mean?

It is Meta's publishing limit: the account reached the number of posts apps may publish for it in a moving 24-hour period. Meta's pages give 100 in one place and 50 in others, and a carousel counts as one post. Wait for the window to move on before you publish again.

### What does Instagram error 2207052 mean?

Meta says the media could not be fetched from the address it was given. Use an address that is public and answers with the file itself, or upload the file to your media library and post it by its mediaID.

## More on Instagram

- [Instagram](https://status200uploads.com/platforms/instagram)
- [Instagram API guide](https://status200uploads.com/platforms/instagram/api-guide)

## Related

- [Facebook](https://status200uploads.com/platforms/facebook)
- [Threads](https://status200uploads.com/platforms/threads)
- [REST API](https://status200uploads.com/integrations/rest-api)
- [Python](https://status200uploads.com/integrations/python)
- [n8n](https://status200uploads.com/integrations/n8n)
- [AI agents (MCP)](https://status200uploads.com/integrations/mcp)
- [Every error code in the API reference](https://status200uploads.com/docs/api)
- [File limits of every network](https://status200uploads.com/docs/file-limits)

## Sources

Sources read on 15 October 2026.

- I1. [Instagram Platform: Content Publishing](https://developers.facebook.com/docs/instagram-platform/content-publishing)
- I2. [IG User Media reference](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user/media)
- I4. [IG User Content Publishing Limit](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user/content_publishing_limit)
- I6. [Instagram Platform: Error Codes](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/error-codes)
- F12. [Graph API: Handling Errors](https://developers.facebook.com/docs/graph-api/guides/error-handling)
