Skip to main content

Quick reference

Before you start

Instagram personal accounts cannot publish via API — only Business and Creator accounts are eligible. The connect flow detects this and won’t complete OAuth for unsupported account types.The connected Instagram account must also be linked to a Facebook Page that you administer; that’s how Meta authorizes the publish action.
The connected Instagram account must:
  • Be a Business or Creator account (not Personal).
  • Be linked to a Facebook Page you administer.
  • Have granted scopes instagram_business_basic, instagram_business_content_publish, and instagram_business_manage_comments (the latter unlocks first-comment).
The first-comment scope was added in May 2026. Accounts connected before that date have to reconnect to use first-comment — the API surfaces this with the IG_SCOPE_MISSING error.

Quick start

Schedule a single-image Feed post 5 minutes from now using the flat body shape (content + platforms). The workspace is inferred from your API key — no workspaceId argument needed. The example uses mediaItems to ingest a public image URL on the fly; see Media uploads for the pre-upload alternative.
Need fine control? Switch to the nested shape (caption + targets) when you want to set platformOptions per-platform, send different media per platform, or set a kind: "REEL" discriminator — see Full control at the bottom. The flat shape’s platformOptions per-entry handles most cases though — see Platform settings.

Content types

Single-image or single-video Feed post

Default for any single-item Feed post. kind defaults to "FEED" and exactly one media item is attached. Pass 2–10 pre-uploaded mediaIds (or 2–10 mediaItems for URL ingest). Instagram crops every slide to the first slide’s aspect ratio — so if you start with a 4:5 image and follow it with a 1:1 image, the second gets top + bottom cropped without warning. Postbreeze surfaces a per-slide warning at compose-time when this is detected.
Prefer URL ingest for a quick test? Swap mediaIds for mediaItems with per-item altText:

Reel

Set kind: "REEL" via platformOptions on the platform entry. The attached media must be a video between 3–90 seconds, 9:16 aspect ratio. Reels are also shared to the Feed by default.

Media requirements

Images

Videos

Postbreeze itself accepts images (JPG, PNG, GIF, WebP, HEIC, HEIF) and videos (MP4, MOV, AVI, WebM) up to 5 GB at upload time — the tighter caps above are Instagram’s publish-time limits. See Media uploads for the full ingest pipeline.

Platform-specific fields

Instagram has no other publish-time settings. Use firstComment at the platform-entry level (not inside platformOptions) for the auto-comment. See Platform settings for the full reference.

First comment

Pass firstComment on the platform entry. Postbreeze waits 3 seconds after the main post lands (Instagram occasionally 4xx’s with media not available on faster calls) and then posts the comment as the same authenticated user.
Comment limit: 2,200 characters (same as caption). If the comment call fails (e.g. rate limit), the main post still shows as PUBLISHED and the failure surfaces on PostTarget.firstCommentError. Use the retry endpoint to try the comment again.

Analytics

Refresh cadence: every 14 days per Meta’s Insights guidance.

Common errors

What you can’t do

  • ❌ Publish to Personal Instagram accounts (Business/Creator only)
  • ❌ Stories (planned for v2)
  • ❌ Tag products or shoppable posts
  • ❌ Tag users in caption (you can include @handle but no structured tagging)
  • ❌ Add location tags (Meta removed this from the API)
  • ❌ Schedule via Instagram’s native scheduler
  • ❌ Edit captions after publish
  • ❌ Live video, IGTV

Full control (nested shape)

The nested shape (caption + targets) is the long-form alternative to the flat shape used everywhere else on this page. Reach for it when you want different captions per platform, different media per platform in the same request, or just prefer the explicit socialAccountId / platformOptions naming. The two shapes are interchangeable — every example above can be rewritten in the nested form by renaming contentcaption, scheduledForscheduledAt, platformstargets, and accountIdsocialAccountId.
SDK