· 7 min
Instagram publishing requirements: photos, video, captions
Aspect ratios, file formats, size limits, caption length and the daily cap — what to check before publishing so the post isn’t rejected.
Instagram* rejects publications on formal grounds more often than people expect: the wrong aspect ratio, the wrong file format, a caption past the limit. And the error arrives after the post is already scheduled — that is, at the moment it was supposed to go out. Below are the requirements worth checking in advance, plus a table of rejections and what to do about each.
This covers feed posts. Stories and Reels have their own requirements and are out of scope here.
What you need to publish through the API
Automated publishing to Instagram* goes through the official API, which has entry conditions:
- a professional account — business or creator. A personal account cannot be published to programmatically;
- a link to a Facebook Page* — a platform requirement, even if you never post on the Page itself;
- granted access — you confirm the permissions once through the official sign-in window, and can revoke them at any time in your profile settings.
All of this is set up once. If publishing doesn’t work from day one, the cause is almost always here: the account is still personal, or the link was never completed.
Image requirements
| Parameter | Requirement | Otherwise |
|---|---|---|
| Aspect ratio | from 4:5 (portrait) to 1.91:1 (landscape) | the publication is rejected |
| Format | JPEG | HEIC and WebP are not accepted |
| File size | roughly up to 8 MB | rejected as too large |
| File availability | must be downloadable at publish time | “media not accessible” |
The most common failure is aspect ratio. A 1:1 square and a 4:5 portrait pass; the popular 9:16 that phones shoot does not — it is taller than allowed. The post looks fine in the editor and gets rejected on publish.
Second most common: HEIC. It is the default format on an iPhone, and a file sent without conversion will not be accepted. Check that your tool converts to JPEG, or convert it yourself.
Third, and least obvious: file availability. Instagram* does not accept an image “from your browser” — it downloads it by link itself. If that link is temporary and has expired, publishing fails with an error that looks like a problem with the file, even though the file is fine.
An export preset
So you don’t recalculate proportions every time, keep three sizes. All three sit inside the allowed range, and they make convenient templates in any editor.
| What you’re posting | Size | Ratio |
|---|---|---|
| Portrait (takes more of the screen) | 1080 × 1350 | 4:5 |
| Square (universal, good for carousels) | 1080 × 1080 | 1:1 |
| Landscape (screenshots, covers) | 1080 × 566 | 1.91:1 |
Export as JPEG at about 85% quality. That is enough to stay inside the size limit with no visible loss; pushing to 100% is pointless — Instagram* recompresses the file on its side anyway.
A note on safe margins: in the feed the frame is shown in full, but in the profile grid a portrait is cropped to a centre square. So anything that matters — a logo, a key line, a face — should stay out of the top and bottom 15% of a portrait frame.
Video requirements
The safe combination is MP4 with the H.264 codec and AAC audio. It is always accepted. Anything else is a gamble: an exotic codec inside a correct container is rejected just like a wrong format.
Exact duration and resolution limits change more often than the photo requirements, so don’t rely on a number from a two-year-old article — check the current documentation. The aspect ratio requirement is the same as for photos.
Captions
The limit is 2200 characters. That is a lot — a page and a half fits comfortably, and running into the ceiling is rare.
But caption length and caption readability are different things. The feed shows the first couple of lines, then “more”. Which gives a rule: the first 125 characters have to work on their own. If the key idea sits in the fourth paragraph, almost nobody sees it.
No more than 30 hashtags per publication. Going over leaves the post unpublished rather than trimming the extras. Thirty aren’t needed anyway: five to ten relevant tags outperform a long tail of generic ones.
The daily cap
No more than 25 publications per rolling 24 hours on one account. That is plenty for a normal project, but the cap is worth remembering in two situations:
- migrating an archive. Uploading old posts into a new account, you hit the wall on the twenty-sixth;
- several tools on one account. The cap counts per account, not per tool: if some posts go out manually and some on a schedule, they share one budget.
The window is rolling — it frees up gradually rather than resetting at midnight.
Carousels
A carousel is validated as a whole: every file in it must meet the same requirements as a single publication. One HEIC among nine JPEGs rejects the entire post.
Practical consequence: when assembling a carousel, bring every file to one format and one aspect ratio up front. A mixed carousel with some portrait and some square frames also looks careless in the feed — Instagram* crops them to the first frame.
What the platform doesn’t actually require
Half the “Instagram rules” passed from article to article are not requirements at all. You can break them with no consequence for publishing.
- Hashtags in the first comment. A caption-aesthetics trick, not a rule. They fit in the caption just as well.
- Posting “at the best time”. An optimisation, not a condition: a post at an unlucky hour goes out exactly like one at a lucky hour.
- Links in captions. Not forbidden, and they don’t cause rejection. They are simply not clickable — useless rather than harmful.
- A consistent visual style. Good for recognition, irrelevant to the API.
The distinction matters for one reason: real requirements are hard — breaking one means the post never appears. Everything else is a question of quality, solved by editing rather than by a pre-flight check.
Why a publication was rejected
| What you see | What happened | What to do |
|---|---|---|
| “Invalid aspect ratio” | the frame is taller than 4:5 or wider than 1.91:1 | crop to the allowed proportions |
| “Unsupported format” | HEIC, WebP or an exotic video codec | convert to JPEG or MP4 (H.264 + AAC) |
| “File too large” | image heavier than roughly 8 MB | recompress without changing the frame size |
| “Media not accessible” | the file link didn’t open at publish time | re-upload the file and publish again |
| “Caption too long” | past 2200 characters | shorten the caption |
| “Publishing limit reached” | 25 posts in the last 24 hours | wait; the window frees up gradually |
| “Access expired” | permissions were revoked or went stale | reconnect the account |
| “Content rejected” | the platform’s content rules triggered | rewrite the text or replace the media |
“Access expired” deserves its own note: it is not a publishing error but a state of the connection, and it is fixed by reconnecting the account rather than by retrying. A good tool warns about it in advance rather than at the moment a post is due.
A checklist before publishing
- the account is professional and the Page link is complete;
- every image is JPEG, not HEIC;
- aspect ratio between 4:5 and 1.91:1 — for every frame of a carousel;
- files under 8 MB;
- caption within 2200 characters, with the key idea in the first 125;
- no more than 30 hashtags, and they are on topic;
- fewer than 25 publications went out from the account in the last 24 hours;
- account access is current, with no expiry warnings.
None of this needs checking by hand for every post: in Sonaco media requirements are validated before publishing rather than at the moment it is due, and a rejection arrives as a plain reason instead of a platform error code. The post itself first goes through client approval and only then into the schedule.
How the same things work in other channels — Telegram and Threads.
