DocsReference
Instagram publishing goes through the Meta Content Publishing API. You need a Business or Creator account — personal profiles cannot be published to via the API.
Authentication
Connect via Meta OAuth. LetsPost requests the following scopes:
- instagram_basic — read profile and media
- instagram_content_publish — create feed posts, Reels, and carousels
- pages_read_engagement — required by Meta even for Instagram-only publishing
After connecting, LetsPost stores a long-lived access token (60 days). We refresh it automatically before it expires, but if your Meta password changes or you revoke access in Meta's security settings, you'll need to reconnect.
Supported formats
| Format | Supported | Notes |
|---|---|---|
| Image post | ✓ | JPEG or PNG, up to 8 MB. Aspect ratio 4:5 to 1.91:1. |
| Video (feed) | ✓ | MP4, max 60 s, up to 1 GB. |
| Carousel | ✓ | 2–10 images or videos per carousel. Each item follows the same limits as single-post media. |
| Reel | ✓ | MP4, 9:16 aspect ratio, max 90 s, up to 1 GB. |
| Story | — | Not available via the Content Publishing API. Stories can only be posted manually. |
Limits & quotas
| Limit | Value |
|---|---|
| Caption length | 2,200 characters |
| Hashtags per post | 30 |
| Video duration (feed) | 60 s |
| Video duration (Reel) | 90 s |
| Carousel items | 10 slides |
| Max file size | 1 GB (video) / 8 MB (image) |
Gotchas
- Business/Creator account required — The API does not work with personal Instagram accounts. If your account type is wrong, the OAuth flow completes but publishing will fail with a permissions error.
- Hashtag limit is enforced server-side — Instagram silently removes posts that exceed 30 hashtags. LetsPost warns you in the composer, but doesn't block submission — stay under 30.
- Reels must be 9:16 — Non-vertical videos sent as Reels will be rejected by Meta. LetsPost transcodes your video to 9:16 if it isn't already — check the preview before publishing to confirm the crop.
- Token expiry on password change — Changing your Facebook/Instagram password immediately invalidates all active tokens. You'll need to go to Profiles → Connected accounts and reconnect Instagram.
Was this page helpful?
Something unclear? Email us — we read every message.