Connect Instagram first
- 01
Open Accounts in 1Post and choose Connect.
- 02
Pick Instagram.
- 03
Sign in with Instagram and approve access for the Business or Creator account you want to post to.
- 04
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.
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.
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.
{
"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 sends the same fields to create_post; set one up.