Supported Content Types
- Posts: Single image, single video, or carousel (mixed images + videos). 1-10 files.
- Reels: Video only. Must be vertical.
- Stories: Image or video. Expire after 24 hours. Gone like your motivation on Monday morning.
Quirks & Gotchas
Aspect Ratios are Law
Instagram is very strict here.- Stories/Reels: Must be 9:16 (vertical). Technically the API accepts wider ratios, but they’ll look terrible.
- Feed Posts: 4:5 (vertical) or 1:1 (square) for images. Videos are more flexible.
What if I have non-standard content?
Instagram feed Posts must fall within a specific aspect ratio range (4:5 to 1.91:1). If your users upload wide landscape photos or tall portrait shots that fall outside this range, you have two automatic correction options instead of rejecting the upload outright:Stories vs. Reels vs. Posts
- Stories are ephemeral. They disappear after 24 hours. Great for FOMO content.
- Reels are for growth. They’re public, discoverable, and the algorithm loves them.
- Posts are for the feed grid. The permanent collection.
Media Limits
See Platform Limits for the full breakdown of file sizes, resolutions, and aspect ratios.Text & Field Limits
Alt text is supported on image posts. Use it when you need screen-reader-friendly descriptions beyond the caption in
text.Post Options
Send Instagram-specific options insidedata.INSTAGRAM.
Instagram Misc Endpoints
Instagram audio search for Reels is documented separately: Instagram Music Library.GET /misc/instagram/tags
- Purpose: business discovery by username (public profile data for discoverable business/creator accounts).
- The response can include up to 12 recent public media items with media type, likes, comments, timestamp, and caption when Meta returns them.
- Important: works only when the Instagram account is connected via
FACEBOOKlogin flow. - If the account is connected via direct
INSTAGRAMmethod, API returns explicit400with reconnection guidance. - Private accounts and some non-business/non-creator accounts may not be discoverable and can return
exists: false. - In our tests, business discovery can sometimes return
falsefor accounts that are still valid for publishing tags. In other words: lookup may fail, while tagging that same username in publish payload can still work.
GET /misc/instagram/locations
- Purpose: search Facebook Pages with physical location data and return IDs for
data.INSTAGRAM.locationId. - Important: works only for Instagram accounts connected via
FACEBOOKmethod. - Uses the account page token (
socialAccount.accessToken). - Missing page permissions/features (for example
pages_read_engagement) return explicit400with actionable message.
Meta location search can be inconsistent. If you hit the permission/error path, there is usually nothing we can reliably fix from API side right now (this behavior is widely reported in Meta developer threads). The good news:
locationId tagging itself still works when you already have a valid location/page ID, so known IDs found externally can still be used in publish payloads. We hope this endpoint becomes stable for all accounts over time.Publishing Payload & Validation Rules
locationId mapping
data.INSTAGRAM.locationIdis mapped tolocation_idin Instagram publish payload.- Supported in single image, reel/single-video flow, and carousel parent container.
shareToFeed
- Accepted only for reel-like payloads:
type = REEL, ortype = POSTwith exactly one video upload.
- Rejected for image posts, carousels, and stories (
400).
Person tags (tagged)
- Reel/single-video: provide usernames only (no
x/ycoordinates). - Single image: each tagged user must include
xandyin range0-1. - Carousel: top-level
taggedis rejected; usecarouselItems[].taggedper item. - Carousel video item: person tags are not supported and are rejected.
Carousel item binding
carouselItemsis allowed only for real carousel posts (at least 2 uploads).- Every
carouselItems[].uploadIdmust exist in provideduploadIds. - Use each
uploadIdonly once incarouselItems.
Story constraints
- Stories do not support
collaborators. - Stories do not support
locationId.
Collaborators behavior
- Collaborators are normalized before publish (
@stripped, trim, lowercase). - Automatic fallback retry without unavailable collaborators was removed.
- Retry behavior now follows standard BullMQ worker retry policy.
Trial Reels
Trial reels are shared only with non-followers first. If the content performs well, it can be graduated to a regular reel that appears to everyone. Senddata.INSTAGRAM.trialParams.graduationStrategy in the publish payload:
Requirements and caveats:
- Only valid for
type: "REEL". Ignored for Posts and Stories. - Requires a public professional (Creator or Business) account with at least around 1,000 followers. Instagram has not published an official threshold and some users report access starting at 200 followers.
- Not all professional accounts will have access to this feature regardless of follower count.
Analytics
For general analytics concepts (refresh rates, data retention, what “Returns 0” means), see the Analytics Overview.Refresh Rate & Limits
- Default Refresh: Every 24 hours.
- Force Refresh: Available (max
Teams x 5per day). - Data Retention: 30 days. Details.
Profile Analytics
Period: Rolling window (30 days).Post Analytics
Period: Lifetime (Snapshot).Raw Analytics - Demographics & Audience Data
Instagram provides detailed demographic data via raw analytics. Here’s what the raw payload looks like when enabled for your organization:Raw demographics include both follower demographics (lifetime, who follows you) and engaged audience demographics (this month, who interacts with your content). These are two different audiences and both are useful for understanding your reach.