# Post and schedule Instagram Reels, photos and carousels

Canonical: https://status200uploads.com/platforms/instagram

Checked on 26 October 2026.

Status 200 Uploads publishes Instagram Reels, single feed photos and carousels to your Business or Creator account, now or at a time you choose. Use the dashboard, the REST API or an AI app such as Claude; you sign in on Instagram itself, and posts go out through our own Meta app, so there is nothing for you to register with Meta.

## Quick facts

- **What you can post:** A Reel (one video), a feed post with one photo, or a carousel of 2 to 10 files.
- **Largest video:** 300 MB per file. [File limits of every network](https://status200uploads.com/docs/file-limits)
- **Largest image:** 8 MB per image.
- **Reel length:** Up to 15 minutes, Instagram's own limit for Reels published from an app.
- **Caption:** Up to 2,200 characters. A dry run or a scheduled post flags a longer caption (caption_over_limit) before Instagram sees it.
- **Account type:** A Business or Creator account: Instagram does not let apps publish to a personal account.
- **Daily allowance:** Instagram counts the posts an account publishes in a rolling window. The account's posting options show how many are used and how many are left.
- **Scheduling:** Schedule a post up to 365 days ahead, or send it now.
- **Plans:** Instagram is on every plan, Free included. [Pricing](https://status200uploads.com/pricing)
- **How it connects:** You sign in on Instagram itself (OAuth), so we never see your Instagram password.
- **Your own Meta app:** Not needed. Every post is published by our own Meta app, so you never create one or wait for Meta to review it.

## What you can post

### Reels

One video becomes a Reel, up to 300 MB and 15 minutes. A Reel is shared to your profile feed as well as the Reels tab, and it can have a cover image: give its web address and Instagram fetches it when the Reel goes out. A Reel must be a video; a photo sent as a Reel is refused before anything reaches Instagram.

### Feed photos

A single photo in the feed, up to 8 MB. Send one image and no post type, and it goes out as a feed photo with your caption.

### Carousels

2 to 10 files in one post that people swipe through. Send two or more files and Instagram gets a carousel; more than 10 are refused before anything is sent, and so is a carousel with a single file.

## Settings

| Setting | Dashboard | REST field | AI connector option | What it does |
| --- | --- | --- | --- | --- |
| Post type | Post Type | instagram.postType | post_type | Reel, feed photo or carousel. Leave it out and we choose from the files: a carousel for two or more, a Reel for one video, otherwise a feed photo. |
| Reel cover | Cover Image URL (optional) | instagram.coverUrl | cover_url | The web address (https:// or http://) of the Reel's cover image. Instagram fetches it when the Reel goes out, so it must still be there then. Reels only. |

## Automatic changes

- `unknown_field`: A field we do not read is not used, and the answer says so (with the field name we think you meant, when there is one). The post still goes out.
- `field_not_used`: A field we read but could not use for this post (for example another network's block, or a setting that does not apply to this kind of post) is named in the answer. The post still goes out.
- `options_outside_post`: An option sent next to "post" instead of inside it is not used, and the answer says where it belongs.
- `media_url_not_kept`: A scheduled post that names its media by web address fetches the file when it goes out, and we keep no copy: the answer reminds you the file must still be there then.
- `posts_close_together`: The answer warns when another Instagram post of the account is scheduled within 20 seconds: leave at least a minute between them.
- `caption_over_limit`: In a dry run or a scheduled post, a caption longer than Instagram allows is flagged. We send it as it is; Instagram may refuse it or cut it short.
- `moved_to_next_day`: When the daily limit of the profile is reached while a scheduled post is going out, the networks that did not fit move to the next day as a scheduled post of their own, and the post read back says so.
- `queued_for_next_day`: On a plan with a daily limit, a post over the day's limit is queued for the next day instead of failing (answer 202), and the answer gives the time.

## Your way to post

### From the dashboard

1. Under Connections, connect Instagram and sign in on Instagram with your Business or Creator account.
2. In Schedule, add the video or photos and write the caption once for every network you pick.
3. Pick Instagram, choose Reel, feed photo or carousel, add a cover address for a Reel if you want one, then post now or set a time.

[Connect Instagram](https://status200uploads.com/connections)

### From the REST API

Publish an uploaded video as a Reel, shared to the feed (POST /api/v2/posts)

```bash
curl -X POST 'https://status200uploads.com/api/v2/posts' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer rl_your_api_key' \
  -d '{
    "post": {
      "accountId": "@myprofile",
      "platform": "instagram",
      "content": {
        "text": "Check out this reel! #trending",
        "mediaID": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
      },
      "instagram": {
        "postType": "reel",
        "shareToFeed": true
      }
    }
  }'
```

[Full page](https://status200uploads.com/integrations/rest-api)

### From Python

A carousel with the status200uploads package (pip install status200uploads)

```python
from status200uploads import Status200

s200 = Status200()  # reads STATUS200_API_KEY

carousel = {
    "accountId": "@yourprofile",
    "platform": "instagram",
    "content": {
        "text": "Three looks from the new collection",
        "mediaID": ["FIRST_FILE_ID", "SECOND_FILE_ID", "THIRD_FILE_ID"],
    },
    "instagram": {"postType": "carousel"},
}
result = s200.publish(carousel, wait=True)  # follows the post until Instagram has it
print(result.final.get("permalink") if result.final else result.code)
```

[Full page](https://status200uploads.com/integrations/python)

### From n8n

1. After the node that produces your caption and file, add an HTTP Request node that sends POST https://status200uploads.com/api/v2/posts.
2. Send your API key as Authorization Bearer rl_your_key, Content-Type application/json, and an Idempotency-Key built from the item, for example {{ $json.id }}-instagram.
3. Paste the body below; postType reel makes the video a Reel.

The HTTP Request body for a Reel

```json
{
  "post": {
    "accountId": "@yourprofile",
    "platform": "instagram",
    "content": {
      "text": "{{ $json.caption }}",
      "mediaID": ["{{ $json.fileId }}"]
    },
    "instagram": { "postType": "reel", "coverUrl": "{{ $json.coverUrl }}" }
  }
}
```

[Full page](https://status200uploads.com/integrations/n8n)

### From an AI app

Prompt: "Make a carousel on Instagram from the three photos I uploaded today, with the caption "Three looks from the new collection"."

The app lists your media with status200_list_media and picks the three photos, sets post_type to carousel, and checks the post with status200_validate_post: a carousel needs at least two files, so the connector refuses one with a single file before anything is sent. Then it publishes with status200_publish_post and tells you what Instagram answered.

[Full page](https://status200uploads.com/integrations/mcp)

## Errors

| HTTP | Code | Meaning | Fix |
| --- | --- | --- | --- |
| 401 | RECONNECT_REQUIRED | Instagram no longer accepts the saved sign-in. | Connect Instagram again under Connections, then send the post again. |
| 401 | NO_TOKEN | This profile has no Instagram connection stored. | Connect Instagram under Connections. |
| 401 | TOKEN_REFRESH_FAILED | The Instagram sign-in could not be renewed just now. | Try again later; if it keeps failing, connect Instagram again. |
| 400 | media_wrong_for_post_type | The files do not fit the post type, for example a photo sent as a Reel. Nothing was sent. | Send a video for a Reel, or choose another post type. |
| 400 | no_container | Instagram did not return a container for the upload. | Check the file against Instagram's limits and send it again. |
| 400 | bad_request | The Reel cover is not a web address. Nothing was recorded. | Send a full address starting with https://, or leave the cover out. |
| 400 | media_not_available | A scheduled post's file or cover address no longer answers. | Put the file back at that address, or upload it and send its mediaID. |
| 413 | MEDIA_TOO_LARGE | The file is larger than Instagram takes through us. | Use a smaller file: Reels up to 300 MB, photos up to 8 MB. |

## Questions

### Can I schedule Instagram Reels through an API?

Yes. Upload the video, then send it to POST https://status200uploads.com/api/v2/posts with an instagram block and post.scheduledFor, up to 365 days ahead. The REST API is on every plan, Free included, and the Reel goes out through our Meta app, not one you register yourself.

### Do I need an Instagram Business or Creator account?

Yes. Instagram lets apps publish only to Business and Creator accounts, so switch a personal account to one of those in Instagram first, then connect it under Connections.

### Does a Reel also appear in my feed?

Yes, by default: a Reel is shared to your profile feed as well as the Reels tab.

### How many photos can an Instagram carousel have?

2 to 10 files. With more than 10, or a carousel of one, the post is refused before anything reaches Instagram, so you can fix it and send it again.

### How large can an Instagram Reel be?

Up to 300 MB and 15 minutes per Reel, which is Instagram's own limit for apps. Photos can be up to 8 MB each.

### Why was my post refused with media_wrong_for_post_type?

The post type and the files disagree: a Reel needs a video, so a photo sent with postType reel is stopped before Instagram is called. Leave postType out and we choose it from the files.

### How many Instagram posts can I publish in a day?

Instagram itself limits how many posts an account publishes in a rolling window. GET /api/v2/accounts/{profile_id}/options shows how many are used and how many are left, and your Status 200 Uploads plan has its own allowance on top.

## More on Instagram

- [Instagram errors](https://status200uploads.com/platforms/instagram/errors)
- [Instagram API guide](https://status200uploads.com/platforms/instagram/api-guide)

## Related

- [TikTok](https://status200uploads.com/platforms/tiktok)
- [Facebook](https://status200uploads.com/platforms/facebook)
- [Threads](https://status200uploads.com/platforms/threads)
- [REST API](https://status200uploads.com/integrations/rest-api)
- [Python](https://status200uploads.com/integrations/python)
- [n8n](https://status200uploads.com/integrations/n8n)
- [AI agents (MCP)](https://status200uploads.com/integrations/mcp)
- [Claude](https://status200uploads.com/integrations/claude)
- [Instagram options in the API reference](https://status200uploads.com/docs/api#post-create)
- [File limits of every network](https://status200uploads.com/docs/file-limits)
- [Pricing](https://status200uploads.com/pricing)
