← All platforms

Instagram publishing API

Live

Publish a photo or video to an Instagram professional account through the Instagram Login API. No Facebook Page is required.

Connect an account and publish today.

What this channel accepts

MediaRequired, one image or video
Caption2,200 characters
VideoPublished as REELS
Option blockNone
Hostgraph.instagram.com
Account refinstagram:<ig-user-id>

Publish to Instagram

One request shape, the same across every channel. Register media first with POST /v1/media, then pass the handles it returns.

POST /v1/posts returns 202 with a post id; the publish itself is asynchronous.

const res = await fetch("https://creasionapp.com/v1/posts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CREASION_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "accounts": [
      "instagram:17841400000000000"
    ],
    "content": "New collection, shot on film.",
    "media": [
      "media_01JQ8ZR4X7"
    ]
  }),
});

// 202 Accepted: the post is queued. Poll GET /v1/posts/{id}
// or wait for the post.completed webhook.
const { id } = await res.json();

Before you integrate

Media is mandatory

Instagram has no text-only post. A caption without media is refused before any request leaves Creasion, rather than failing at the platform.

Container, then publish

We create a media container, poll until Instagram reports FINISHED, then publish. Publishing early returns error 9007, so the wait is deliberate.

Knowing what happened

Publishing is asynchronous, so the create call returns before the post exists on Instagram. Poll GET /v1/posts/{id} or register a webhook and receive post.completed instead. When a post targets several accounts, each destination reports its own result, so a partial success names exactly which one failed and why.

Read the API docsGet an API key