Overview
Connect Instagram, capabilities, and known limits.
Schedule and automate Instagram posts with feed photos, carousels, Reels, and Stories, plus comment moderation and normalized analytics. Instagram Login needs no Facebook Page.
| Page | Topics |
|---|---|
| Posts | Publish image, multi-image, Reels, Stories. Schedule, errors |
| Engagement | List, create, delete, hide comments; private replies |
| Inbox | Direct messages: list, read, send, webhooks |
| Analytics | Metrics for published media |
Quick Reference
| Property | Value |
|---|---|
| Caption limit | 2,200 characters |
| Images per post | 1 (feed), 10 (carousel) |
| Videos per post | 1 |
| Image formats | JPEG, PNG |
| Image max size | 8 MB |
| Video formats | MP4, MOV |
| Video max size | 300 MB (Reels), 100 MB (Stories) |
| Video max duration | 90 sec (Reels), 60 sec (Story) |
| Post types | Feed, Carousel, Reel, Story |
| Scheduling | Yes, with IANA timezone |
| Editing published posts | No |
| Inbox (Comments) | Yes |
| Inbox (DMs) | Yes |
| Inbox (Comment automations) | No |
| Analytics | Yes |
Before You Start
Instagram requires a Business or Creator account. Personal accounts cannot post via API, and there are no text-only posts. Every post needs at least one media URL.
Additional requirements:
- Google Drive, Dropbox, OneDrive, and iCloud links do not work as media URLs. These services return HTML pages, not media files
- Instagram enforces a rate limit of roughly 100 posts per 24-hour rolling window across all content types
- The first ~125 characters of the caption are visible before the "more" fold
mediaKind: "video"always publishes as a Reel. Standalone feed video does not exist on this path- Stories get no captions, no comments, and no durable analytics
Connect
Instagram connects two ways. Pick the method when you start OAuth with the loginMethod query param; omitting it gives you Instagram Login.
const { connections: list } = await connections.listConnections();
const ig = list.find((c) => c.platform === "instagram");
// ig.id is your accountIdIf you later get a permission error on an action that should work, reconnect Instagram once.
OAuth Scopes
Instagram Login
| Scope | What it enables |
|---|---|
instagram_business_basic | Account identity (id, username, avatar) |
instagram_business_content_publish | Publish photos, carousels, Reels, and Stories |
instagram_business_manage_comments | List, create, delete, and hide comments |
instagram_business_manage_insights | Read media metrics |
instagram_business_manage_messages | Instagram DMs in the inbox + private replies |
Instagram API with Facebook Login
The user authorizes a Facebook Page with a linked Instagram professional account. Use it when the customer manages Instagram through a Page, or when you need remote media delete.
| Scope | What it enables |
|---|---|
instagram_basic | Account identity |
instagram_content_publish | Publish photos, carousels, Reels, and Stories |
instagram_manage_comments | List, create, delete, and hide comments |
instagram_manage_insights | Read media metrics |
instagram_manage_messages | Instagram DMs in the inbox + private replies |
pages_show_list | List Pages to find the linked account |
pages_read_engagement | Read the linked Page |
business_management | Resolve Pages owned through a Business Manager |
Token Lifetime
| Token | Lifetime | Behavior |
|---|---|---|
| Access token | ~60 days | Refreshed automatically by Onepostly |
| Refresh token | No | Not used. The long-lived token renews itself. After expiry, revocation, or password change, reconnect the account |
Capabilities
| Action | Supported | Notes |
|---|---|---|
| Image post | Yes | Single image URL + optional caption |
| Multi-image | Yes | 2 to 10 URLs, images and videos can be mixed |
| Video | Yes | Publishes as a Reel, also appears in feed |
| Stories | Yes | Image or video, ephemeral |
| Text-only post | No | Instagram requires at least one media URL |
| Schedule | Yes | Cancel any time before it publishes |
| Comments | Yes | List, create, delete, hide on feed, carousels, and Reels |
| Private reply (comment → DM) | Yes | One per comment, 7-day window |
| DMs | Yes | List, read, send text + attachments |
| Paid partnership + sponsors | Yes | Up to 2 sponsors (username or numeric id) |
| Turn comments off | Yes | commentsEnabled: false, best-effort |
| Analytics | Yes | Normalized metrics |
| Thread / quote | No | Not Instagram features |
| Remote media delete | Facebook Login only | Returns MEDIA_DELETE_UNSUPPORTED on Instagram Login |
| Like / unlike | No | Not available via the API |
What You Can't Do
These features are not available through the Instagram API:
- Text-only posts (media is required)
- Story stickers (polls, questions, links, countdowns)
- Going Live
- Applying filters
- Tagging products
- Catalog audio on Reels
- Remote-deleting published media on Instagram Login connections
- Liking posts or comments