Postato Docs
GuidesPlatforms

Instagram

Feed, reels, stories, carousels, and tagging on Instagram.

Instagram

Instagram posting via Postato uses the Graph API. Accounts must be Instagram Business or Creator; personal accounts cannot publish through any API (Meta restriction, not ours).

Post types

postTypeWhat it isMedia
feedSingle-image or single-video feed post1 image or 1 video
carouselSwipeable multi-media2–10 images/videos
reelShort-form vertical video1 video
story24-hour ephemeral content1 image or 1 video

Auto-promotion

Send postType: "feed" with 2+ media items in a single content element → Postato auto-upgrades to carousel. Don't pre-classify; just attach the media you have.

Media specs

TypeRequirement
Image aspect ratio4:5 to 1.91:1. Square (1:1) is safest.
Image formatJPEG, PNG. HEIC gets transcoded.
Image max size30 MB
Video duration (feed)3 s – 60 s
Video duration (reel)Up to 90 s
Video max size100 MB for feed; 1 GB for reels
Video formatMP4 or MOV, H.264 codec, AAC audio
Vertical video aspect9:16 strongly preferred for reels

Files outside these specs are rejected by Meta at publish time. Postato doesn't transcode.

Captions

  • Up to 2,200 characters. Longer fails at delivery.
  • Hashtags count toward the limit. Instagram ignores >30 hashtags; Postato doesn't trim, Meta does.
  • Mentions (@username) create clickable links; the referenced account must exist and be public.

User tagging (photo tags)

Only on feed images and carousel images (not reels, not videos, not stories):

{
  "media": [
    {
      "id": "med_01H...",
      "userTags": [
        { "username": "coworker", "x": 0.3, "y": 0.4 }
      ]
    }
  ]
}
  • x and y are normalized 0–1 (top-left origin).
  • The tagged user must have a public account. Private-account tags fail silently.
  • Max 20 tags per image.

Location tagging

Via options.locationId:

{
  "options": { "locationId": "123456789" }
}

You need Instagram's internal location ID (a numeric string). There's no free-text "São Paulo" lookup; use the Graph API's location search to resolve beforehand. We're considering exposing a helper tool; let us know if that's useful.

Collaborators

Via options.collaborators:

{
  "options": { "collaborators": ["instagram_handle_1", "instagram_handle_2"] }
}

Collaborators receive an invite; the post appears on their profile only after they accept. Max 3.

Stories

postType: "story" with 1 image or 1 video. 24-hour expiry is enforced by Instagram; there's no setting from our side. Stories don't accept captions the way feed posts do; any text is ignored.

Scheduling

All Instagram post types support scheduled status. Meta requires scheduled posts be at least 10 minutes in the future and at most 6 months out.

Gotchas

  • "Account is not approved for publishing": you haven't finished Meta's app review for instagram_business_content_publish. During development this affects only test users; in production, every business account must be linked to a reviewed Facebook app.
  • Images look fine in preview but pixelate on post: Instagram compresses aggressively. Upload at 1080×1350 (portrait) or 1080×1080 (square) to match Instagram's native resolution exactly.
  • Shadow ban risk: posting the same caption verbatim across many accounts triggers duplicate content filters. Rotate copy.
  • API breakage cycles: Meta periodically deprecates endpoints with short notice. Postato tracks these; stay subscribed to our change log.

On this page