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
Feature
Support
Notes
Feed posts
✓
Single image, single video, or 2-10 carousel
Reels
✓
Exactly 1 video
Stories
✓
Exactly 1 image or video
Carousel
✓
2-10 items, image + video mix allowed
First comment
✓
Supported
Scheduling
✓
Use scheduled_at
Inbox (comments + DMs)
✓
Routed into UniPost inbox
Text-only posts
X
Instagram is media-first
Threads
X
Not a Twitter-style thread platform
Known constraints
Limitation
Why
Daily safety cap
100 publishes/day per connected Instagram account (UTC reset). Protects accounts from being flagged for spam — failed posts do not count.
Text-only posts not supported
Instagram requires media on every post
Impressions removed
Graph API v22 no longer exposes impressions for image or carousel
Requires Business or Creator account
Personal 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
Carousel
Media & field requirements
Field
Required
Limits
Notes
media_urls or media_ids
Required
1 image, 1 video, or 2-10 carousel items
Media 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.
caption
Optional
2,200 chars
Commonly sent with media
platform_options.instagram.mediaType
Optional
feed / reels / story
Defaults to feed. Use it to force Reels or Story behavior and trigger Instagram-specific preflight validation.
first_comment
Optional
text
Supported after publish
reels
Exactly 1 video
Required
Reels do not accept images or carousels
story
Exactly 1 media item
Required
Stories 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.
Permanent grid post. Single image or single video; can also be a carousel (see below).
Type
Requirement
Value
Text
Caption
2,200 chars (≈125 visible before the 'more' fold)
Text
Hashtags
≤ 30 per caption (Instagram policy)
Text
@mentions
≤ 20 per caption
Image
Formats
JPEG only — Graph API rejects PNG, WebP, HEIC
Image
Max file size
8 MB
Image
Width
Min 320 px, max 1,440 px; 1,080 px recommended
Image
Aspect ratio
4:5 to 1.91:1 (0.8 – 1.91)
Image
Recommended
1,080 × 1,080 (1:1) or 1,080 × 1,350 (4:5)
Image
Color space
sRGB (Adobe RGB is re-encoded)
Video
Formats
MP4, MOV (MPEG-4 Part 14)
Video
Max file size
100 MB
Video
Duration
3 sec – 60 min
Video
Aspect ratio
4:5 to 1.91:1
Video
Width
Max 1,920 px
Video
Frame rate
23 – 60 fps
Video
Codec
H.264 (video) + AAC-LC (audio)
Video
Bitrate
≤ 25 Mbps video, ≤ 128 kbps audio (48 kHz)
Reels
Short-form vertical video. UniPost targets this surface when `platform_options.instagram.mediaType = "reels"`.
Type
Requirement
Value
Text
Caption
2,200 chars
Video
Formats
MP4, MOV
Video
Max per post
1 (no image or carousel)
Video
Max file size
1 GB
Video
Duration
3 sec – 15 min (Graph API ceiling)
Video
Aspect ratio
9:16 recommended; 0.01:1 – 10:1 accepted
Video
Dimensions
Min 540 × 960 px; 1,080 × 1,920 recommended
Video
Frame rate
23 – 60 fps
Video
Codec
H.264 high profile, closed GOP (≤ 4 sec)
Video
Bitrate
≤ 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"`.
Type
Requirement
Value
Text
Caption / overlay
Not rendered as a text body — use overlay stickers in-app
Image
Formats
JPEG
Image
Max file size
8 MB
Image
Aspect ratio
9:16 recommended (1,080 × 1,920)
Image
Safe area
Keep text / CTAs within center 1,080 × 1,420 px
Video
Formats
MP4, MOV
Video
Max file size
100 MB
Video
Duration
3 sec – 60 sec (clips > 15 sec may be auto-segmented in-app)
Video
Aspect ratio
9:16 (1,080 × 1,920 recommended)
Video
Frame rate
23 – 60 fps
Video
Codec
H.264 + AAC-LC
Carousel
Multi-item feed post. 2 – 10 children of mixed type (image + video). Crop follows the first child.
Type
Requirement
Value
Text
Caption
2,200 chars (carousel-level)
Image
Item count
2 – 10 children
Image
Per-item format
JPEG only
Image
Per-item max size
8 MB
Image
Aspect ratio
Derived from first child (1:1 or 4:5 most reliable)
Video
Per-item format
MP4, MOV
Video
Per-item max size
100 MB
Video
Per-item duration
3 sec – 60 min
Video
Mixed media
Image + video allowed in a single carousel
Platform-specific options
Option
Values
Notes
platform_options.instagram.mediaType
feed / reels / story
Selects which Instagram publish surface UniPost should target.
Analytics
Metric
Support
Notes
Reach
✓
Supported
Likes
✓
Supported
Comments
✓
Supported
Shares
✓
Supported
Saves
✓
Supported
Impressions
X
Removed from Graph API v22 (April 2024)
Clicks
X
Not 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.
Surface
Support
Notes
Comments on feed / Reels
✓
Source ig_comment
Direct messages (DMs)
✓
Source ig_dm
Story replies
X
Not supported by Graph webhook today
Reply from UniPost
✓
One 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.
Mode
Best for
App / credentials
Availability
Quickstart
Fast setup — UniPost handles OAuth
UniPost-managed app
Free / paid quota
White-label
Your customers connect their own accounts
Your OAuth app
Paid 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
Code
What it means
media_required
Instagram requires media
max_images_exceeded / max_videos_exceeded
More than 10 carousel items or more than 1 video supplied
invalid_instagram_media_type
Instagram mediaType must be feed, reels, or story
instagram_reels_require_video
Reels require exactly one video
instagram_story_single_media_only
Stories require exactly one image or video
media_not_uploaded
A supplied media_id is still pending — PUT the bytes to the upload_url, then poll GET/v1/media/{media_id} until uploaded
mixed_media_unsupported
Mixed media outside a valid Instagram carousel flow