How to Get Instagram API Access for Posting (2026)

6 min read

How to Get Instagram API Access for Posting (2026)

Instagram has a publishing API, and getting access is easier than it used to be. You need an Instagram Business or Creator account and a Meta app with the Instagram permissions. Since Business Login for Instagram shipped, users can authenticate directly through Instagram — no Facebook account and no linked Facebook Page required. Publishing itself is a two-step container flow, and the thing that breaks most first integrations is publishing before Instagram has finished ingesting the media.

#Quick answer

  • Personal accounts? No. Business or Creator only.
  • Facebook Page required? No longer. Business Login for Instagram authenticates directly.
  • Free? Yes. No fee for the API.
  • App review? Needed for other people's accounts; your own accounts work in development mode.
  • Biggest gotcha? Error 9007 — publishing before the media container is ready.

#Two access paths, and why the newer one is better

Business Login for Instagram (direct). The user logs in with Instagram credentials. You get an Instagram user access token and publish through graph.instagram.com. No Facebook account, no Page, no Business Manager. This removes the single biggest source of onboarding drop-off — asking a creator to connect a Facebook Page they do not have or cannot find.

Facebook Login (the older route). The user authenticates with Facebook, you enumerate their Pages, then find the Instagram account linked to a Page and publish through graph.facebook.com. Still supported and still the right choice if you already manage Pages for other reasons, but it makes onboarding meaningfully worse.

If you are building today and Instagram is the goal, use Business Login. We do, for exactly the onboarding reason.

#Setting it up

  1. Create a Meta app in the Meta Developer dashboard and add the Instagram product.
  2. Configure Business Login with your redirect URI.
  3. Request the permissions you need — content publishing plus basic account info.
  4. Test on your own accounts. In development mode you can publish to accounts with a role on the app without review.
  5. Submit for App Review when you need to publish for other people's accounts. Expect to record a screencast of the full flow.

Development mode is genuinely useful here: you can build and ship an internal tool for your own accounts without ever going through review.

#The two-step publish flow

Instagram does not accept a post in one call. You create a media container, then publish it.

 1POST /{ig-user-id}/media          → returns a container id
 2POST /{ig-user-id}/media_publish  → publishes that container

The container declares the media and caption. Crucially, Instagram fetches media from a public URL you supply — you do not upload bytes. That means your media has to be reachable by Meta's servers. Assets behind authentication, on localhost, or on a signed URL that expires too quickly will simply fail.

Media types map like this:

  • Single image — pass image_url.
  • Single video — pass video_url with media_type: REELS. Instagram no longer supports plain feed video; a single video is a Reel whether you wanted one or not.
  • Storymedia_type: STORIES, one image or video.
  • Carousel — create a container per item, then a parent carousel container referencing them all.

#The error that will catch you

Between the two calls, Instagram ingests the media asynchronously. Publish too early and you get:

 1error 9007: Media ID is not available / media is not ready

This is not a rate limit and not a permissions problem, and it is intermittent enough to pass local testing and fail in production. It happens with images too, not just video — even a small JPEG fetched from a fast CDN needs a moment.

The fix is to poll the container's status until it reports FINISHED before calling media_publish. Our adapter always waits, on every media type, with no fast path — the "images are fine" optimisation is exactly how this bug gets shipped.

#Limits worth knowing

  • 25 posts per 24 hours per account through the API. Enough for normal use, tight for bulk backfills.
  • No text-only posts. Instagram requires media. There is no exception.
  • No scheduling. The API publishes immediately; scheduling is always your own queue calling at the right time.
  • Aspect ratio and file rules are enforced and will reject media that looks fine to you.
  • Hashtags go in the caption. There is no separate field.

#Should you build it yourself?

Build it directly if Instagram is your only platform and you can carry App Review.

If you need Instagram plus anything else, the calculation changes fast. Instagram's container flow, TikTok's audit gate and LinkedIn's profile/Page split are three completely different mental models, and each has its own review process and its own token lifecycle.

With Schedule & Chill, Instagram is one of eight destinations. Connect the account once, then publish with the same call as every other platform:

 1curl -X POST https://schedulenchill.com/api/posts \
 2  -H "Authorization: Bearer YOUR_API_KEY" \
 3  -H "Content-Type: application/json" \
 4  -H "Accept: application/json" \
 5  -d '{
 6    "content": "New build, new week.",
 7    "social_account_ids": [791],
 8    "media_ids": [456]
 9  }'

Upload media to the library first with a multipart POST /api/media (up to 100MB) and pass the returned id — that also solves the "must be a public URL" requirement for you.

#Frequently Asked Questions

Do I need a Facebook Page to use the Instagram API? Not any more. Business Login for Instagram authenticates directly with Instagram credentials, so a Business or Creator account is enough. The older Facebook Login route still requires a linked Page.

Can I post to a personal Instagram account via the API? No. Publishing requires a Business or Creator account. Personal accounts can be converted for free in the Instagram app settings.

Is the Instagram API free? Yes. There is no charge for API access. The cost is App Review effort and engineering time.

What is Instagram API error 9007? It means you called media_publish before Instagram finished ingesting the media. Poll the container's status until it reports FINISHED, then publish. It affects images as well as video.

How many posts per day can I publish through the API? 25 per account per 24 hours.

Can I schedule Instagram posts through the API? No. Instagram publishes immediately. Any scheduling feature is your own system holding the post until the scheduled time.

Can I post a text-only update to Instagram? No. Every Instagram post requires media — an image or a video.

Do I need App Review to publish? Only to publish for accounts you do not control. In development mode you can publish to accounts that have a role on your app, which is enough for internal tools.

#Where to go next

Zakir Hossen profile image

Zakir Hossen

Founder of Schedule & Chill. Bootstrapped entrepreneur and software engineer.

More posts from Zakir Hossen

Related Posts

by zakir

How to Bulk Schedule Instagram Posts (3 Methods Compared)

Instagram's own tools cap out fast, third-party schedulers charge per seat, and the API has a 25-posts-per-day ceiling most people find the hard way. Here is what each method can really do and how to load a month of content in one go.

instagrambulk postingscheduling+1 more
Read more
by zakir

From Calendar to Queue: The Gap Where AI Content Workflows Die

Everyone has a content calendar and an AI that fills it. Almost nobody has a reliable path from that calendar to actually published posts. The handoff is where the whole workflow quietly fails — here is why, and how to close it.

content calendarworkflowautomation+2 more
Read more