Instagram

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

Instagram publishing only works for a Business or Creator account linked to a Facebook Page, and your BYOK app must pass Meta App Review for the content-publishing permission. Carousels and feed posts go through an async container flow; stories never carousel.

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 REELS container 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

PropertyValue
Caption2,200 characters (truncated if longer)
Carousel2–10 items
Story imageJPEG ≤8MB, 9:16
Story videoMP4/MOV, 3–60s, ≤100MB, H.264/HEVC, 9:16
First commentYes (requires the manage-comments permission)
Rate limit100 posts per 24h

Configuration fields

Set under config.instagram:

FieldTypeDefaultNotes
publishAsStorybooleanfalsePublish the first media item as a story instead of a feed post. Stories ignore extra carousel media and the caption.
thumb_offsetnumbermedia thumbnailReels 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_basic
  • instagram_content_publish — required to publish
  • instagram_manage_comments — required for first comments
  • instagram_manage_insights — read account & post metrics
  • pages_show_list — enumerate the linked Pages
  • pages_read_engagement
  • business_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
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 } }
  }'
201 Created
{
	"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.