Instagram Business is published via Meta’s Graph API, not the consumer Instagram API. Connecting Instagram is a side effect of connecting Facebook — there is no separateDocumentation Index
Fetch the complete documentation index at: https://docs.letmepost.dev/llms.txt
Use this file to discover all available pages before exploring further.
connect/instagram endpoint. One Meta OAuth produces two letmepost rows: one facebook, one instagram (when an IG Business is linked to a Page the user manages).
Connect
Start atPOST /v1/accounts/connect/facebook (not instagram). The Facebook OAuth grants the scopes needed for both Pages and IG Business. After complete:
- We call
GET /me/accountsto discover Pages. - For each Page, we read
instagram_business_accountto find the linked IG. - One row per discovered Page, plus one IG row per Page that has an IG Business linked.
facebook.pages.none.
If a Page has no IG Business linked: only the Facebook row is created.
Scopes
The Facebook connect requests these scopes (all of them; IG Business only works withpages_show_list + the instagram_* scopes):
extended scopes (off by default): pages_read_user_content, pages_manage_engagement, instagram_manage_comments, instagram_manage_insights.
Token lifecycle
We exchange the short-lived token for a long-lived (~60-day) token at connect time, then refresh on schedule.token.expiring fires before expiry.
Posting
Instagram has no text-only post shape — every post needs at least one media item (instagram.media.required).
single-image.json
reels.json
carousel.json
Constraints
- Caption: 2200 graphemes max (
instagram.text.max_graphemes) - Media required (
instagram.media.required) - Carousel: 2–10 items, mixed allowed (
instagram.media.count_max) - Image mime: JPEG only (
instagram.media.mime_allowed) - Video mimes: mp4, mov
- Image size: 8 MB max
- Video size: 1 GB max; Reels duration ≤ 90 s (enforced platform-side)
- Aspect ratio: 0.8..1.91 for feed, 9:16 for Reels — caught at container-finalize as
instagram.media.aspect_ratio - Media URLs must be publicly reachable — the canonical
instagram.media.reachable(Meta’s notoriousOAuthException 2207052)
Preflight rules
instagram.media.requiredinstagram.text.max_graphemesinstagram.media.count_maxinstagram.media.alt_text_max_graphemesinstagram.media.mime_allowedinstagram.media.image_size_maxinstagram.media.video_size_maxinstagram.media.reachableinstagram.media.aspect_ratio
Notes
- Use
POST /v1/mediato upload. URLs from your own host work but introduce the reachability failure mode — Meta’s CDN must be able to fetch them anonymously. - Reels and feed video are unified on the modern API; we route single-video posts through the Reels container and feed-video posts have been retired.