---
title: "Instagram API: post and schedule from code"
url: "https://get1post.com/developers/instagram.md"
canonical_url: "https://get1post.com/developers/instagram"
last_updated: "2026-10-26"
type: "reference"
summary: "Post and schedule to Instagram with the 1Post API and MCP server: the request, the reply, every rule it is checked against and a dry run."
related: ["https://get1post.com/platforms/instagram.md", "https://get1post.com/platforms/instagram/specs.md", "https://get1post.com/docs/api-posts.md", "https://get1post.com/docs/mcp.md"]
---

# Instagram API: post and schedule from code

Post and schedule to Instagram with the 1Post API and MCP server: the request, the reply, every rule it is checked against and a dry run.

Post to Instagram from code with one request: POST /v1/posts with your account id, the text and a schedule_at time. Instagram text is limited to 2,200 characters, counted by code points. 1Post allows up to 50 posts a day for each connected account, and a dry run checks a post against every rule first.

## Connect Instagram first

1. Open Accounts in 1Post and choose Connect.
2. Pick Instagram.
3. Sign in with Instagram and approve access for the Business or Creator account you want to post to.
4. Choose the Business or Creator account in 1Post. It is ready to pick in the composer.

Then GET /v1/accounts returns the id of the Instagram account to use in the request.

## Send a post to Instagram

Instagram refuses a post without media, so upload the file first and put its id in media_ids (POST /v1/media/uploads, or POST /v1/media to fetch a public address). Then schedule the post.

**Schedule a post**

```bash
curl https://api.get1post.com/v1/posts \
  -H "Authorization: Bearer $ONEPOST_API_KEY" \
  -H "Idempotency-Key: instagram-first-post" \
  -d '{"accounts":["ACCOUNT_ID"],"parts":[{"text":"New batch just out of the oven.","media_ids":["MEDIA_ID"]}],"schedule_at":"2026-11-02T15:00:00Z"}'
```

The reply is 202 with the post (status scheduled) and one destination for Instagram, which moves from queued to published or failed.

## What you can send to Instagram

- Image
- Carousel
- Reel
- Story
- Trial Reel
- First comment
- Collaborators (up to 3)
- Cover image and alt text

## What Instagram publishes

- JPEG is the only image format supported, and shopping tags and filters are not supported when publishing through the API.
- A carousel can hold up to 20 images, videos or a mix, and counts as one post against the publishing limit.
- The publishing limit is stated as 100 posts in a 24-hour moving period in one place and as 50 in another on the same page.

## Instagram rules the request is checked against

| Rule | What 1Post checks |
| --- | --- |
| Text limit | 2,200 characters, counted by code points |
| Media accepted | Images, Video |
| Images per post | 10 |
| Videos per post | 10 |
| Image formats | JPEG; PNG, WEBP are converted to JPEG |
| Image shape | 4:5 to 1.91:1 |
| Carousel | 2 to 10 items |
| Threads | No |
| First comment | Yes, up to 2,200 characters |
| Posts per day, per connected account (1Post) | 50 |

The same table with sources is on the [Instagram specs page](https://get1post.com/platforms/instagram/specs.md).

## Instagram options in the request

- First comment: add first_comment with text (up to 2,200 characters) to an account object, and delay_min if it should wait.
- Media is required: Instagram refuses a post without it. Upload the file first (POST /v1/media/uploads, or POST /v1/media to fetch a public address) and list its id in the media_ids of a part.

## Check the post before it is queued

Add "dry_run": true to test a post: nothing is kept, a valid one answers 200 and a broken one answers 422 naming the rule.

**A refused request, abridged**

```json
{
  "error": {
    "code": "invalid_for_platform",
    "message": "instagram refuses this post: Instagram counts 2,232 of 2,200 characters in part 1. (text_too_long).",
    "fix": "Fix the rule named in the message and send the post again.",
    "retryable": false,
    "request_id": "REQUEST_ID"
  }
}
```

An assistant connected to the [MCP server](https://get1post.com/docs/mcp.md) sends the same fields to create_post; [set one up](https://get1post.com/assistants.md).

## Questions

**Can I post to Instagram with an API key?**

Yes. A key with write scope can create, change and cancel Instagram posts for the workspace it belongs to, with the role of the member who made it. See [API authentication](https://get1post.com/docs/api-authentication.md).

**What happens if a Instagram post breaks a rule?**

The request is refused with invalid_for_platform and the failing rule is named. Fix it and send the request again, or send it with dry_run to test the fix first.

**How many Instagram posts can I send in a day?**

Up to 50 for each connected account. A request that would pass that answers daily_cap with the time the day frees up.

**How many items can a carousel hold?**

Meta's documentation allows up to 20 items. 1Post's composer currently checks carousels of 2 to 10 items.

## Sources

- [Instagram Platform: content publishing](https://developers.facebook.com/docs/instagram-platform/content-publishing), read 2026-10-22

## Related

- [Schedule Instagram posts: formats, limits, setup](https://get1post.com/platforms/instagram.md)
- [Instagram specs and limits: text, media, daily cap](https://get1post.com/platforms/instagram/specs.md)
- [Creating and changing posts with the API: 1Post docs](https://get1post.com/docs/api-posts.md)
- [The MCP server: 1Post docs](https://get1post.com/docs/mcp.md)
