Docs
Docs/Platforms/Instagram

Instagram

Publishing to Instagram via the Octopost API

Instagram

Instagram supports feed images, carousels, Reels, and Stories -- but no text-only posts. Every post must include at least one image or video. Octopost handles Meta's container creation, media processing, carousel assembly, and Reel cover images automatically -- you just send us your content with the media attached.

Content Limits

ConstraintLimit
Caption2,200 characters
Hashtags30 per post (exceeding this may cause silent failures)
Carousel items10 images or videos
Reel duration3 seconds to 15 minutes
Reel aspect ratio9:16 (1080x1920 recommended)
Story expiry24 hours
Image formatsJPEG, PNG
Video formatsMP4, MOV
Media URLsMust be publicly accessible

Good to Know

  • No text-only posts. This is Instagram's biggest constraint. If you send a post to Instagram without any media, Octopost will return an error immediately: "Instagram requires at least one image or video. Text-only posts are not supported."
  • 30 hashtags is a hard ceiling. Going over 30 can cause the post to fail silently on Instagram's side, or reduce visibility. Octopost warns you if you exceed this.
  • Captions don't support clickable links. URLs in captions appear as plain text. Instagram does not make them tappable. This is a platform limitation, not an Octopost one.
  • Carousel items should share an aspect ratio. Mixed aspect ratios will be cropped by Instagram. For best results, keep all items consistent (1:1, 4:5, or 1.91:1).
  • Media must be at a public URL. Instagram fetches images and videos from the URLs you provide. They must be accessible from Meta's servers -- no auth-gated or localhost URLs.
  • Stories disappear after 24 hours. This is by design. Stories are not permanent feed content.
  • Instagram Business or Creator account required. Users connect their Instagram through Octopost's account settings. Personal accounts cannot use the Instagram API. The account also needs to be linked to a Facebook Page (even if the Page is unused).
  • You must specify the post type. Tell Octopost whether you're creating a feed post, carousel, Reel, or Story so it can use the correct publishing flow.

Platform-Specific Features

Feed Images

Single image or multi-image posts to the main feed. Recommended aspect ratios: 1:1 (square), 4:5 (portrait), 1.91:1 (landscape).

{
  "content": "Beautiful sunset today",
  "platforms": ["instagram"],
  "media": {
    "images": ["https://example.com/sunset.jpg"]
  }
}

Carousels

Up to 10 images or videos in a swipeable carousel:

{
  "content": "Trip highlights",
  "platforms": ["instagram"],
  "media": {
    "images": [
      "https://example.com/day1.jpg",
      "https://example.com/day2.jpg",
      "https://example.com/day3.jpg"
    ]
  }
}

Octopost creates each child container, assembles the parent carousel container, and publishes it all from this single request.

Reels

Vertical video posts. Use 9:16 aspect ratio at 1080x1920 for best results:

{
  "content": "Quick tutorial",
  "platforms": ["instagram"],
  "media": {
    "video": "https://example.com/tutorial.mp4"
  },
  "instagram": {
    "post_type": "reel"
  }
}

Octopost handles Reel-specific container creation and cover image processing.

Stories

Ephemeral content that expires after 24 hours:

{
  "platforms": ["instagram"],
  "media": {
    "images": ["https://example.com/promo.jpg"]
  },
  "instagram": {
    "post_type": "story"
  }
}

Rate Limits

Instagram's rate limits are tied to Meta's Graph API quotas. Octopost tracks your usage and paces requests to stay within safe limits.

Things Octopost Handles for You

You don't need to worry about any of this, but in case you're curious:

  • Facebook OAuth flow. Instagram API access goes through Facebook's OAuth system with instagram_basic, instagram_content_publish, and pages_show_list scopes. Octopost manages the full connection, including linking the Instagram account to the required Facebook Page.
  • Two-step container publishing. Like Threads, Instagram requires creating a media container first, then publishing it in a separate API call. Octopost handles both steps seamlessly.
  • Processing status polling. After creating a container, Instagram may need time to process the media before it can be published. Octopost polls the container status and only publishes once processing is complete, so you never hit a "media not ready" error.
  • Carousel item assembly. Each carousel item must be created as its own child container, then a parent container is created referencing all children. Octopost builds this entire chain from the flat list of URLs you provide.
  • Reel cover images. Reels can have a custom cover image. Octopost handles the cover image container and attachment if you provide one.
  • Content validation. Octopost validates the 2,200-character caption limit, the 30-hashtag limit, and the media requirement before sending anything to Meta, giving you immediate feedback instead of opaque API errors.
  • Error reporting. If something fails -- media URL not accessible, account not properly connected, missing media for a required-media platform -- Octopost reports exactly what went wrong.

Example

{
  "content": "New product launch! Check out the full collection.",
  "platforms": ["instagram"],
  "media": {
    "images": ["https://example.com/product.jpg"]
  }
}

That's it. Octopost takes care of the rest.