Head terms

Can You Schedule Instagram Stories via the API? The Real Answer

Meta's Instagram content-publishing API has no scheduling parameter for any content type, Stories included — here's what that means in practice, and how a scheduling layer like PostGate's still lets you set a future time for one.

Quick answer

No — not natively. Meta's Instagram content-publishing API has no future-publish field for any content type, Stories included; the media_publish call is immediate. Every tool that offers Story scheduling, PostGate included, holds the request on its own infrastructure and fires the real publish call at the scheduled instant — which changes what can go wrong, and when.

Short answer: no, not natively. Meta's Instagram content-publishing API has no field for a future publish time on any content type — feed, Reels, carousels, or Stories. What every scheduling tool, PostGate included, actually does when it "schedules" an Instagram Story is hold the request on its own infrastructure and fire the real, immediate publish call at the right instant. That distinction is not pedantic. It changes what can go wrong and when.

This is one of the more commonly misunderstood corners of the Instagram API, so the rest of this post walks through exactly what Meta's documentation supports, what it doesn't, and what "scheduling a Story" concretely means once you strip the marketing language off it.

PostGate handles OAuth, publishing and delivery evidence for every network through one API. Start free or read the docs.

01

Is there a scheduled_publish_time for Instagram content?

Meta's Instagram content-publishing documentation describes a two-step flow: create a media container with POST /{ig-id}/media, then publish it with POST /{ig-id}/media_publish. The second call is synchronous and immediate — it returns a live media ID or it fails. Nowhere in that flow is there a parameter that tells Instagram to hold the container and publish it later. This applies equally to Stories, Reels, single-image feed posts, and carousels; the mechanics don't change based on media_type.

That is a genuinely different situation from Facebook Pages, which is where a lot of the confusion comes from. A Facebook Page feed post created with POST /{page-id}/feed does support real, provider-side scheduling: set published=false and a scheduled_publish_time Unix timestamp between 10 minutes and 30 days out, and Meta's own systems publish it later — no third-party infrastructure required. Instagram has never offered the equivalent. If you've scheduled a Facebook Page post before and assumed Instagram worked the same way underneath, that assumption is the source of the confusion, not a misreading on your part.

02

What constraints do Stories add on top of the immediate-only flow?

A Story container is created the same way as any other, with media_type set to STORIES instead of IMAGE, VIDEO, or REELS. On top of the missing scheduling field, Stories carry format rules that don't apply to feed posts: exactly one media item per publish call (no carousels), no alt_text support, and the caption is not sent at all — Stories don't display one in the Instagram UI, so PostGate's Instagram adapter doesn't attach the post body when options.instagram.mode is set to "story".

03

What is every scheduling tool actually doing?

Because Instagram never accepts a future timestamp, any product that markets "Instagram Story scheduling" — PostGate included — is running a hold-and-fire pattern on its own side: accept the request, store it, wake up at the scheduled instant, build a fresh media container, and call media_publish right then. See how PostGate's scheduling layer works for the general mechanics, and the Stories-specific publish flow for the container and format details this post assumes.

This is not a PostGate-specific workaround — it is the only way any Instagram integration can offer Story scheduling at all, because the platform gives no other option.

04

What happens if the scheduler is down at the scheduled minute?

Because Instagram never knows the Story exists before the publish call happens, there is no fallback if the scheduling layer itself is down at the scheduled instant — the Story simply does not go out, and nothing on Meta's side is aware a request was ever supposed to fire. Contrast that with a real Facebook-style scheduled_publish_time, where Meta's own systems own the publish once you've handed it off, independent of whether your infrastructure is still running.

Media containers also expire roughly 24 hours after creation, which is why PostGate doesn't build the Story's container the moment you schedule it — it builds one close to the scheduled time and re-validates the media then. A Story's visible 24-hour lifetime is measured from the moment it actually goes live, not from when you originally scheduled it, so a delayed publish call pushes the whole window later rather than shortening it.

05

How do you schedule a Story through PostGate?

Combine options.instagram.mode: "story" with a scheduled_at ISO 8601 timestamp on the same post envelope used for an immediate publish. Exactly one media item is required.

Schedule an Instagram StoryPostGate API
curl -X POST "https://api.postgate.studio/api/posts" \
  -H "Authorization: Bearer $POSTGATE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ig-story-launch-01" \
  -d '{
    "post": { "options": { "instagram": { "mode": "story" } } },
    "profiles": ["pro_instagram123"],
    "media": ["https://cdn.example.com/story-vertical.jpg"],
    "scheduled_at": "2026-09-02T09:00:00-03:00"
  }'
06

The bottom line

Meta's Instagram API cannot be told to publish a Story at a future time — that capability does not exist for Stories, and it does not exist for any other Instagram content type either. What you get instead, from PostGate or any comparable tool, is a scheduling layer that holds the request and fires the real, immediate publish call for you. Practically, the result looks the same to your customer: the Story appears at the time they picked. Just don't assume Instagram itself knows about it in advance, because it doesn't — and that has real implications for what happens if the scheduler is unavailable at the wrong moment.

Frequently asked questions

Why can I schedule Facebook Page posts natively but not Instagram posts?

A Facebook Page feed post supports real provider-side scheduling: set published=false and a scheduled_publish_time Unix timestamp between 10 minutes and 30 days out, and Meta's own systems publish it later. Instagram has never offered the equivalent on any content type — the media_publish call is synchronous and immediate. Assuming Instagram works like Facebook underneath is where most of the confusion comes from.

What format rules apply to Instagram Stories published via API?

A Story container uses media_type STORIES and carries rules that feed posts don't: exactly one media item per publish call (no carousels), no alt_text support, and no caption — Stories don't display one in the Instagram UI, which is why PostGate's Instagram adapter doesn't attach the post body when options.instagram.mode is set to "story".

Does a delayed publish shorten how long the Story stays visible?

No — a Story's visible 24-hour lifetime is measured from the moment it actually goes live, not from when you originally scheduled it, so a delayed publish pushes the whole window later rather than shortening it. Separately, media containers expire roughly 24 hours after creation, which is why PostGate builds the container close to the scheduled time and re-validates the media then.

How do I schedule an Instagram Story with PostGate?

Combine options.instagram.mode: "story" with a scheduled_at ISO 8601 timestamp on the same post envelope used for an immediate publish, targeting an Instagram profile with exactly one media item. PostGate holds the request, builds a fresh media container near the scheduled instant, and fires the real media_publish call at that moment.

Build it with PostGate

One API for every social platform your customers care about — sandboxed, documented, and ready today.

Start building Read the docs