Feed, reels, stories, carousels, and tagging on 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
postType | What it is | Media |
|---|---|---|
feed | Single-image or single-video feed post | 1 image or 1 video |
carousel | Swipeable multi-media | 2–10 images/videos |
reel | Short-form vertical video | 1 video |
story | 24-hour ephemeral content | 1 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
| Type | Requirement |
|---|---|
| Image aspect ratio | 4:5 to 1.91:1. Square (1:1) is safest. |
| Image format | JPEG, PNG. HEIC gets transcoded. |
| Image max size | 30 MB |
| Video duration (feed) | 3 s – 60 s |
| Video duration (reel) | Up to 90 s |
| Video max size | 100 MB for feed; 1 GB for reels |
| Video format | MP4 or MOV, H.264 codec, AAC audio |
| Vertical video aspect | 9: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 }
]
}
]
}xandyare 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.