Posts, carousels, Reels and Stories on Instagram.
API id: instagram
Instagram has two post types. Choose one with channels[].postType. If
you leave it out, you get post.
postType | What it is |
|---|---|
post (default) | Stays on the profile grid: one image, a carousel of up to 10, or one video (published as a Reel). |
story | One image or one video up to 60 seconds. Disappears after 24 hours. |
At a glance
| Post | Story | |
|---|---|---|
| Caption | 2,200 characters | None — Instagram shows no text on a Story |
| Files | 1 to 10 | Exactly 1 |
| File needed? | Yes | Yes |
| Extra blocks | Up to 2, published as comments (no files) | No |
| Alt text | Yes | No |
| Tag people | Yes, on images (up to 20, with a position) | Yes, on images and video (up to 20) |
| Edit after publish | No | No |
| Delete after publish | No — Instagram does not let apps delete posts | No |
| Analytics | Impressions, likes, comments, shares, saves | |
| Comments | Read and reply (posts only) | No |
Files
File types: JPEG, PNG, WebP, MP4 and MOV.
Post
- Images: shape between 4:5 (portrait) and 1.91:1 (landscape). JPEG up to 8 MB.
- Video: from 3 seconds to 15 minutes.
Story
- Video: from 3 to 60 seconds.
Options
Send these in channels[].options. They work on post only.
| Key | Type | What it does |
|---|---|---|
collaborators | list | Up to 3 usernames (without @). Each one gets an invite. The post shows on their profile only after they accept. |
cover_url | media | Cover image for a Reel (a post with one video). JPEG, PNG or WebP, up to 8 MB. Ignored on other posts. |
location_id | search | The place to tag the post with. |
Tag people
Use mediaUserTags on the block, keyed by media id. On a post, give each person
a position (x and y, from 0 to 1):
{
"channelId": "CHANNEL_INSTAGRAM",
"blocks": [
{
"content": "Team day ☀️",
"mediaIds": ["MEDIA_ID"],
"mediaUserTags": {
"MEDIA_ID": [{ "username": "ada", "x": 0.25, "y": 0.75 }]
}
}
]
}Example: a Story
{
"channelId": "CHANNEL_INSTAGRAM",
"postType": "story",
"blocks": [{ "mediaIds": ["MEDIA_ID"] }]
}Good to know
- Instagram and Facebook are set up from the same Meta app in Platform apps.
- The
location_idsearch uses your Meta app's Facebook App ID and Secret, so set up Facebook in Platform apps too. - Because Instagram posts cannot be deleted by apps,
retractwill leave them in theremaininglist.
Comments
You can read the comments on a published post or Reel and reply to them. See Read and reply to comments. Stories have no comments.
- 25 comments per page, each with its replies. Use
nextCursorfor more. - Instagram only nests one level. A reply to a reply is posted under the top-level comment, like in the app.
- Commenters show by their username. Comments have no link of their own, so
urlisnull. - Your own extra blocks (the comments Bulkit posted for you) are not listed.
- Needs
instagram_business_manage_comments. Bulkit already asks for it when you connect, because extra blocks need it too. - Instagram may count comments and still return none. This is seen on Meta apps in Development mode; switching the app to Live in the Meta App Dashboard is the usual fix. When it happens, Bulkit returns
422 platform_refusedwith the number of comments Instagram reports, rather than an empty list. - If your app serves Instagram accounts you don't own, it needs Advanced Access to
instagram_business_manage_comments(App Review and Business Verification). - Comments on ads are not available through the API.
Set up
To connect accounts, you first need your own app on this platform. See the Instagram app setup guide.