Skip to content

Instagram rules

Instagram is the strict network. Every rule below is Meta’s, enforced at publish time. MissLess validates what it can before the post is stored and surfaces the rest as network_error with Meta’s message in details, or on the target’s error.

An Instagram target needs at least one media item. A post with an Instagram target and an empty media array is rejected with validation_error on field: "media". Text-only posts are a Facebook thing.

Instagram only accepts JPEG, and MissLess does not convert. A post that targets an Instagram account with a PNG, WEBP or GIF image is rejected with validation_error on field: "media" before anything reaches Meta. Export JPEG from your pipeline when Instagram is a target. The same media can still go to Facebook, which accepts all four image formats.

Aspect ratio must be between 4:5 (portrait) and 1.91:1 (landscape). A square 1080 by 1080 or a portrait 1080 by 1350 is safe. Anything taller than 4:5 is refused by Meta.

Two to ten media ids in media make a carousel. One is a single image. Eleven is validation_error. Items can mix images and videos. All items in a carousel share one caption and one first comment.

A video on an Instagram target is published as a Reel. Meta processes the file first, which takes from a few seconds to a few minutes depending on length. ?wait=true often returns while the post is still publishing; the final result comes by webhook or poll.

  • MP4 or MOV, up to 100 MB.
  • Reels are vertical by design. 9:16 is the expected ratio.
  • Set options.instagram.share_to_feed to true if the Reel should also appear on the profile grid.
  • Captions are limited to 2,200 characters.
  • At most 30 hashtags per post, counting the caption and the first comment together.
  • At most 20 mentions.

MissLess checks length before publishing and returns validation_error on field: "caption". Hashtag and mention counts are checked by Meta.

Each Instagram account can publish at most 100 posts through the API in a rolling 24-hour window. Carousel items count as one post. Past that, Meta refuses with an application-limit error, which arrives as network_error; the post lands in failed or partial. Schedule around it rather than retrying in a loop.

Common network_error reasons on Instagram targets, as they appear in targets[].error:

Message pattern Cause Fix
“aspect ratio” Image outside 4:5 to 1.91:1 Crop or pad before upload
“media type” Video where an image was expected, or the reverse Match options.instagram.media_type to the files
“not authorized” or “permission” The user removed a permission, or the account is no longer linked to its Page Reconnect through a connect link
“application request limit” The 100 per 24 hours cap Wait, then publish
“media not found” or “could not fetch” Meta could not download the media URL in time Retry; check the media still exists

For everything else Meta’s full error is in details on the error response, or in last_error on the post.