Skip to main content
Platform guides7 min read

Instagram API Publishing: Reels, Photos, and Carousel Limits

Instagram publishing through the official API has a hard requirement that most people discover late: the account must be a business or creator account, connected through Meta. Personal accounts cannot publish through the API. Once that is in place, the workflow is straightforward: choose the account, prepare media, send the post, and read metrics back. This guide covers the account requirement, the post types and limits, and the metrics you can expect per connected account.

Account requirements

Instagram publishing targets business or creator accounts connected through Meta OAuth. The Instagram account must be a professional account, linked to a Facebook Page you manage. The connection is consent-based, and the scopes you approve are visible when the account is added. The connection flow is the same one used for the other Meta platforms, which keeps onboarding consistent across Instagram, Threads, and Facebook. After connection, the account appears in the account listing endpoint with an accountId you use for publishing. Expired accounts are returned in the listing so your interface can prompt for reconnection, but publishing requires an active account. Planning for this early avoids a common failure: the account was never converted to professional.

Post types and media limits

One content endpoint covers the media types Instagram accepts: single photos, carousels, and video. Carousels support up to 10 media items and must stay photo-only; mixing stills and video in one carousel is rejected. Images can use JPEG, PNG, WebP, or GIF where the platform supports them. The same endpoint handles the other four platforms, so the request shape you build for Instagram carries over to the rest of the workflow.

Instagram media limits
Media typeLimit
PhotoSingle image
CarouselUp to 10 photo items
VideoSingle video, platform format rules apply
Text-onlyNot supported

Instagram carousel limits in the API

Instagram accepts a maximum of 10 items per carousel, and every item must be a photo. A payload that mixes images and video is rejected, and one that carries 11 images fails validation with a 400. There is no override and no higher tier: 10 is the ceiling the API enforces when it checks the request. A carousel counts as one publishing action against the account quota no matter how many of the 10 slots it fills, so a 10-image post and a single photo cost the same.

Instagram carousel and media limits
RuleValue
Carousel items10 maximum
Carousel mediaPhotos only; video items are rejected
Mixed payloadRejected when photos and video appear together
Single photo1 image
Single video1 video URL, posted as a Reel
Accepted image formatsJPEG, PNG, WebP, GIF where supported

Instagram Reels API: upload and publish

Reels publish through the same content endpoint as photos. A single video URL in mediaItems becomes a Reel, so there is no separate Reels endpoint to learn and no different authentication path. Three things matter in practice. The account must be a business or creator account, because personal profiles cannot publish through the API at all. The video arrives as a URL that the backend can fetch, and the endpoint detects the media type from the file extension, which is why a single `.mp4` URL produces a Reel while several `.jpg` URLs produce a carousel. And `instagramSettings.share_to_feed` controls whether the Reel also appears in the main feed, which is a boolean and only applies to single-video posts. After the upload, Instagram reviews the video before it becomes visible, so the status endpoint can report processing before it reports published.

  • Same endpoint as photos: send one video URL and the post is a Reel.
  • Business or creator account required; personal accounts are rejected.
  • Media type is detected from the URL extension, so keep one video per request.
  • share_to_feed is a boolean and applies only to single-video posts.
  • Expect a processing window while Instagram reviews the upload.

Video publishing on Instagram

Instagram video goes through the same content endpoint as the other media types. The safe format profile matches the rest of the workflow: MP4 with H.264, vertical orientation for feeds, within the platform duration limits. Because the endpoint detects the media type from the file extension, sending one video URL produces a video post and sending multiple image URLs produces a carousel; mixing the two in one payload is rejected. After submission, the status endpoint reports processing or published, and Instagram applies its own review before the post becomes visible.

Scheduling and status

Instagram posts can be scheduled up to 7 days ahead, using the same scheduling endpoint as the other platforms. Queued content is processed server-side, and status endpoints report queued, processing, published, or failed states. If a video is rejected by Instagram, the failure is visible in status tracking so your team can fix the media and resubmit rather than discovering a missing post later. Scheduled posts hold their place in the queue until their time, and the queue processes each platform independently.

Metrics for reporting

Instagram analytics cover reach, profile views, interactions, accounts engaged, and follower demographics where the platform exposes them. These values come back per connected account, so reporting stays tied to real platform data. Like every platform in the workflow, Instagram returns null for metrics it does not provide instead of substituting an estimate. When you review a campaign, choose the date range and account scope, then read the top-content ranking to see which posts drove the most views, likes, comments, shares, or saves. For campaign reporting, match the window to the campaign rather than the calendar. For standing dashboards, the 30-day view gives a stable baseline, and drilling into a single account shows whether a change in reach came from one account or the whole workspace. Demographic breakdowns appear only where the platform exposes them, so the dashboard should render gaps rather than error out.

Building a reporting loop

A reporting loop for Instagram is four steps. Confirm the connected account has the insights permission. Pull per-account metrics for reach, profile views, and engagement over the campaign window. Read the top-content ranking for the posts that performed best. Then combine those numbers with the publishing analytics endpoint, which reports how many requests targeted Instagram and how many were accepted and published. Because both sides tie to the same account, the publish and the performance report never drift apart. The report stays the same whether the team is a brand running one account or an agency running twenty: the metric fields are per account, the ranges are per window, and the null handling is per platform. What changes is the account scope you request, not the integration code.

Campaign workflows for brands and agencies

Instagram fits two kinds of workflows, and the API serves both. A brand team runs a recurring content calendar: plan the month, prepare photos and carousels, schedule up to 7 days ahead, and let the queue publish on time. An agency runs many client accounts: each client’s business or creator accounts are connected once, organized into account groups, and selected per campaign. Both teams read the same per-account metrics afterward, which keeps reporting attached to the account that actually published. Reach, profile views, and interactions are the headline numbers, but follower demographics matter for campaign planning because they are per account and per platform. The top-content ranking answers the recurring question about what to schedule next: it sorts posts by views, likes, comments, shares, or saves, so the formats that performed last month are easy to schedule again. Because the endpoint is shared with the other platforms, an agency that publishes to Instagram and TikTok from one prepared payload keeps the two campaigns synchronized instead of running parallel pipelines that drift apart. After the campaign, the report comes from the accounts that published, and the next plan starts from the formats the report showed working.

Where scheduling saves agencies time

Scheduling is where agencies gain the most. A single backend job can submit a week of client posts, and the batch status endpoint confirms each one through the queue. Expired client accounts are returned by the listing endpoint with an expired status, so the operations team reconnects them before a campaign day rather than discovering a missing post after the fact. That makes client reporting a routine weekly output: the metrics come back per account, the publishing volume comes back per platform, and both trace to the same connected accounts.

Questions

Can I publish to Instagram with a personal account?

No. Instagram publishing through the API requires a business or creator account connected through Meta OAuth and linked to a Facebook Page.

How many photos can an Instagram carousel contain?

Up to 10 media items. Carousels must be photo-only; mixing photos and video in one carousel is rejected.

Is there an Instagram Reels API for uploads?

Reels use the same content publishing endpoint as photos. Send one video URL in mediaItems and Instagram posts it as a Reel; there is no separate Reels endpoint. The account must be a business or creator account.

Why did my Instagram carousel with 11 images fail?

The API accepts a maximum of 10 carousel items. A payload above that limit fails validation with a 400 before anything reaches Instagram, so trim the carousel to 10 and submit it as one post.

Which metrics does Instagram analytics return?

Reach, profile views, interactions, accounts engaged, and follower demographics where the platform exposes them.

Keep reading