Instagram

Instagram is media-first. The main question is not whether you can send a caption, but whether the media combination, count, and publish surface are valid for the connected business or creator account.

Feed, Reels, Stories, and carousels for connected business or creator accounts.
Instagram account requirementWhite-label requirement: connected Instagram accounts must be Business or Creator accounts linked to a Facebook Page. Your Meta app must pass app review before public use.

At a glance

Publishing
Supported
Scheduling
Supported
Analytics
Supported
Inbox
Supported
Connection
OAuth via Meta — Quickstart and White-label both supported

Feature matrix

FeatureSupportNotes
Feed postsSingle image, single video, or 2-10 carousel
ReelsExactly 1 video
StoriesExactly 1 image or video
Carousel2-10 items, image + video mix allowed
First commentSupported
SchedulingUse scheduled_at
Inbox (comments + DMs)Routed into UniPost inbox
Text-only postsXInstagram is media-first
ThreadsXNot a Twitter-style thread platform

Known constraints

LimitationWhy
Daily safety cap100 publishes/day per connected Instagram account (UTC reset). Protects accounts from being flagged for spam — failed posts do not count.
Text-only posts not supportedInstagram requires media on every post
Impressions removedGraph API v22 no longer exposes impressions for image or carousel
Requires Business or Creator accountPersonal IG accounts cannot publish via the Graph API

Publishing

Ready to publish?Use the shared Publishing guide for hosted URLs, local file uploads, preflight validation, and async publish status. Then use the Instagram examples below for platform-specific payload shape.

Publish examples by surface

Each example calls POST/v1/posts with Bearer auth. Swap the account_ids for your own, then copy the snippet for your language.

Single image

Reel

Story

Media & field requirements

FieldRequiredLimitsNotes
media_urls or media_idsRequired1 image, 1 video, or 2-10 carousel itemsMedia is required. Use media_urls for hosted assets, or upload local files with POST/v1/media and wait until the media row is uploaded before publishing with media_ids.
captionOptional2,200 charsCommonly sent with media
platform_options.instagram.mediaTypeOptionalfeed / reels / storyDefaults to feed. Use it to force Reels or Story behavior and trigger Instagram-specific preflight validation.
first_commentOptionaltextSupported after publish
reelsExactly 1 videoRequiredReels do not accept images or carousels
storyExactly 1 media itemRequiredStories accept one image or one video

Hosted URLs: pass the public URL in media_urls. Local files: reserve an upload with POST/v1/media, PUT the bytes to the returned upload_url, then publish with media_ids. Full flow in the Publishing guide.

Media specifications

Per-surface limits for text, images, and video. These are the source of truth UniPost uses for preflight validation and media optimization — treat hard-limit values as enforced and "recommended" values as platform guidance.

Feed

Permanent grid post. Single image or single video; can also be a carousel (see below).

TypeRequirementValue
TextCaption2,200 chars (≈125 visible before the 'more' fold)
TextHashtags≤ 30 per caption (Instagram policy)
Text@mentions≤ 20 per caption
ImageFormatsJPEG only — Graph API rejects PNG, WebP, HEIC
ImageMax file size8 MB
ImageWidthMin 320 px, max 1,440 px; 1,080 px recommended
ImageAspect ratio4:5 to 1.91:1 (0.8 – 1.91)
ImageRecommended1,080 × 1,080 (1:1) or 1,080 × 1,350 (4:5)
ImageColor spacesRGB (Adobe RGB is re-encoded)
VideoFormatsMP4, MOV (MPEG-4 Part 14)
VideoMax file size100 MB
VideoDuration3 sec – 60 min
VideoAspect ratio4:5 to 1.91:1
VideoWidthMax 1,920 px
VideoFrame rate23 – 60 fps
VideoCodecH.264 (video) + AAC-LC (audio)
VideoBitrate≤ 25 Mbps video, ≤ 128 kbps audio (48 kHz)

Reels

Short-form vertical video. UniPost targets this surface when `platform_options.instagram.mediaType = "reels"`.

TypeRequirementValue
TextCaption2,200 chars
VideoFormatsMP4, MOV
VideoMax per post1 (no image or carousel)
VideoMax file size1 GB
VideoDuration3 sec – 15 min (Graph API ceiling)
VideoAspect ratio9:16 recommended; 0.01:1 – 10:1 accepted
VideoDimensionsMin 540 × 960 px; 1,080 × 1,920 recommended
VideoFrame rate23 – 60 fps
VideoCodecH.264 high profile, closed GOP (≤ 4 sec)
VideoBitrate≤ 25 Mbps video, 128 kbps AAC-LC stereo (48 kHz)

Stories

Ephemeral full-screen vertical content. Single asset per publish; UniPost maps this to `mediaType = "story"`.

TypeRequirementValue
TextCaption / overlayNot rendered as a text body — use overlay stickers in-app
ImageFormatsJPEG
ImageMax file size8 MB
ImageAspect ratio9:16 recommended (1,080 × 1,920)
ImageSafe areaKeep text / CTAs within center 1,080 × 1,420 px
VideoFormatsMP4, MOV
VideoMax file size100 MB
VideoDuration3 sec – 60 sec (clips > 15 sec may be auto-segmented in-app)
VideoAspect ratio9:16 (1,080 × 1,920 recommended)
VideoFrame rate23 – 60 fps
VideoCodecH.264 + AAC-LC

Multi-item feed post. 2 – 10 children of mixed type (image + video). Crop follows the first child.

TypeRequirementValue
TextCaption2,200 chars (carousel-level)
ImageItem count2 – 10 children
ImagePer-item formatJPEG only
ImagePer-item max size8 MB
ImageAspect ratioDerived from first child (1:1 or 4:5 most reliable)
VideoPer-item formatMP4, MOV
VideoPer-item max size100 MB
VideoPer-item duration3 sec – 60 min
VideoMixed mediaImage + video allowed in a single carousel

Platform-specific options

OptionValuesNotes
platform_options.instagram.mediaTypefeed / reels / storySelects which Instagram publish surface UniPost should target.

Analytics

MetricSupportNotes
ReachSupported
LikesSupported
CommentsSupported
SharesSupported
SavesSupported
ImpressionsXRemoved from Graph API v22 (April 2024)
ClicksXNot exposed per-post

Inbox

Instagram routes comments and DMs into UniPost inbox once the connected account is a Business or Creator account linked to a Facebook Page.

SurfaceSupportNotes
Comments on feed / ReelsSource ig_comment
Direct messages (DMs)Source ig_dm
Story repliesXNot supported by Graph webhook today
Reply from UniPostOne reply per item supported

Connection modes

Pick the setup that matches how the account is owned. Quickstart is fastest when you publish to your own accounts; White-label is required when your customers bring their own accounts through a branded flow. Full setup details in Quickstart and White-label.

ModeBest forApp / credentialsAvailability
QuickstartFast setup — UniPost handles OAuthUniPost-managed appFree / paid quota
White-labelYour customers connect their own accountsYour OAuth appPaid plans only

White-label requirement: connected Instagram accounts must be Business or Creator accounts linked to a Facebook Page. Your Meta app must pass app review before public use.

Validation errors

CodeWhat it means
media_requiredInstagram requires media
max_images_exceeded / max_videos_exceededMore than 10 carousel items or more than 1 video supplied
invalid_instagram_media_typeInstagram mediaType must be feed, reels, or story
instagram_reels_require_videoReels require exactly one video
instagram_story_single_media_onlyStories require exactly one image or video
media_not_uploadedA supplied media_id is still pending — PUT the bytes to the upload_url, then poll GET/v1/media/{media_id} until uploaded
mixed_media_unsupportedMixed media outside a valid Instagram carousel flow

Next steps