Publish photos, carousels, reels and stories to an Instagram Business or Creator account through the Meta Graph API. The platform id is instagram. Instagram ingests your media by URL — PostFuze hands the platform the public, time-limited media URL rather than uploading bytes.
Business/Creator account + App Review required
Supported content
- Photo — single image feed post.
- Carousel — 2–10 media items (one child container per item, wrapped in a parent
CAROUSEL). - Video / Reel — published as a
REELScontainer and also shared to the feed. - Story — image or video story, enabled with
publishAsStory. - First comment / thread — reply containers are posted as native comments.
Limits
| Property | Value |
|---|---|
| Caption | 2,200 characters (truncated if longer) |
| Carousel | 2–10 items |
| Story image | JPEG ≤8MB, 9:16 |
| Story video | MP4/MOV, 3–60s, ≤100MB, H.264/HEVC, 9:16 |
| First comment | Yes (requires the manage-comments permission) |
| Rate limit | 100 posts per 24h |
Configuration fields
Set under config.instagram:
| Field | Type | Default | Notes |
|---|---|---|---|
publishAsStory | boolean | false | Publish the first media item as a story instead of a feed post. Stories ignore extra carousel media and the caption. |
thumb_offset | number | media thumbnail | Reels cover-frame offset (ms); overrides the default cover (the video’s media thumbnail). Alias: thumbOffset. |
Required scopes
Instagram publishing runs over the Facebook Graph/Pages model (the connected Instagram account is reached through its linked Page), so the scope set combines the instagram_* Graph scopes with the pages_* scopes needed to list Pages. When none are set on the BYOK network record, PostFuze requests:
instagram_basicinstagram_content_publish— required to publishinstagram_manage_comments— required for first commentsinstagram_manage_insights— read account & post metricspages_show_list— enumerate the linked Pagespages_read_engagementbusiness_management— access the Business assets
This is the Graph model, not the “Instagram API with Instagram Login” (instagram_business_*) model.
Create a post
A two-image carousel with a caption and a first comment carrying hashtags:
curl https://api.postfuze.com/api/v1/posts \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{
"accounts": ["acct_ig_01"],
"containers": [
{
"content": "Behind the scenes of launch week ✨",
"media": [
{ "id": "media_shot1", "alt_text": "The team at the standup board" },
{ "id": "media_shot2", "alt_text": "Dashboard on a monitor" }
]
},
{ "content": "#buildinpublic #devtools #api" }
],
"config": { "instagram": { "publishAsStory": false } }
}'{
"id": "post_c901",
"status": "queued",
"default_config": { "instagram": { "publishAsStory": false } },
"containers": [
{ "id": "ctr_i1", "position": 0, "role": "main", "content": "Behind the scenes of launch week ✨" },
{ "id": "ctr_i2", "position": 1, "role": "first_comment", "content": "#buildinpublic #devtools #api" }
],
"targets": [
{ "id": "tgt_ig1", "social_account_id": "acct_ig_01", "platform": "instagram", "status": "queued", "platform_post_id": null }
]
}Instagram publishes asynchronously: PostFuze creates a media container, polls until the platform reports it ready, then publishes it. The target stays processing until the container is live, after which platform_post_id is filled in.