Menu
Sign up

Instagram Story images by API: 9:16 templates, safe zones and publishing

Generate Instagram Story images from a template at 9:16: what Instagram and Meta actually specify, where to keep text, and how to publish a Story by API.

Published November 6, 2026 · 5 min read

An Instagram Story image is a vertical full-screen card: a "new post" teaser, a countdown to a launch, a sale, a quote, a poll result. With Shareglint you keep each of those as a template and render the Story at 9:16 from data — together with the feed version of the same post if you want, from one request. This page covers what Instagram and Meta actually specify (less than most size charts claim), where to keep text, and how to publish a Story by API.

What is actually specified

Size charts on the web give "1080×1920" as Instagram's Story size. Instagram does not: its Help Center has no pixel size or aspect ratio for organic Stories (we checked on 2026-11-06). What Meta does publish:

  • Publishing API: for Story images, "we recommended 9:16 to avoid cropping or blank space"; JPEG only, up to 8 MB, sRGB (Meta for Developers, IG User Media, read 2026-11-06). No width is required.
  • Story ads: 9:16 at 1440×2560, with roughly 14% at the top, 35% at the bottom and 6% at each side kept free of text and logos (Meta Ads Guide).

So: 9:16 is the official recommendation, 1440×2560 the ad specification, and 1080×1920 the common practice for organic Stories — a 9:16 size phones display full-screen, not a number from Instagram.

The story preset is 1080×1920, and raster files come out at twice that by default — 2160×3840, still 9:16. Instagram scales it to the screen; use "scale": 1 if you prefer the smaller file.

One Story, and the feed post with it

curl -X POST "https://shareglint.com/v1/images?wait=true" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "template": "story-new-post",
    "sizes": ["story", "portrait"],
    "format": "jpeg",
    "modifications": {
      "title": "Five charts that changed how we plan",
      "label": "New post",
      "handle": "@northwind",
      "url": "northwind.dev/blog",
      "image": "https://cdn.example.com/charts.jpg"
    }
  }'

format: jpeg because Instagram's publishing API takes JPEG only — "JPEG is the only image format supported" (Instagram content publishing). A PNG is fine if a person uploads the Story by hand. sizes returns the 9:16 Story and the 4:5 feed post of the same design; each is one render, and the same values again are free. The layout is redone for each shape, not cropped — see one template, every size.

For a run of Stories — a countdown for each of the last seven days before a launch, a sale for each product — send a batch with "sizes": ["story"] and one row per Story. Rows per batch by plan: Free 50, Starter 500, Pro 1,000, Scale 2,000, Business 5,000.

Keep text in the safe area

On a Story, Instagram draws the progress bar and account name over the top of the image and the reply field and buttons over the bottom. Text placed there is covered. Meta's numbers for Story ads are a good rule for organic Stories too: keep about 14% at the top, 35% at the bottom and 6% at each side free of text and logos. On a 1080×1920 Story that is roughly 270 px at the top and 670 px at the bottom.

Check a built-in template's Story version with the free preview before a campaign, especially with long text. In your own template, the size-story class on <html> lets you add the space only to the Story version:

.size-story .content { padding: 280px 64px 680px; }

Publishing a Story by API

Meta's Content Publishing API publishes Stories for Instagram professional accounts (business or creator):

  1. POST /<IG_ID>/media with image_url set to the rendered JPEG and media_type=STORIES creates the container. Meta downloads the image, so the URL must be public — the render's URL is.
  2. POST /<IG_ID>/media_publish with creation_id publishes it.

What the API cannot do, per the same documentation: "Publishing stickers (i.e., link, poll, location) is not supported" — mentioning users without a sticker is. Stories expire after 24 hours, as in the app. If a Story needs a link sticker or a poll, post it by hand or from a scheduling tool that supports it; the image itself can still come from the template.

A Story for every new post, without code

The most common automation is a "new post" Story whenever the blog publishes. In n8n or Make that is three steps: an RSS trigger on your feed; an HTTP request to POST /v1/images with the post's title and cover image, "sizes": ["story"] and "format": "jpeg"; and a step that sends the returned URL to Meta's API, or hands it to your scheduling tool for a person to add the link sticker. The same flow can render the 4:5 feed version in the same request. Because a repeated request with the same values is free, a workflow that runs twice by mistake does not pay twice.

Ideas that work as templated Stories

  • New post teasers from your blog's RSS feed: title, cover image, "new post" label (story-new-post).
  • Countdowns to a launch or an event, one Story per day (countdown; animated-countdown as an MP4 for a moving one).
  • Flash sales with the discount and end time (flash-sale).
  • Poll results after a poll closes (poll-results).
  • Quotes from an article or a podcast episode (quote-og or podcast-quote in the story size).

Cost

One render per image and size: a Story plus its feed version is two renders, repeats are free. An animated Story (MP4) costs 5 renders. The Free plan's 100 renders a month carry a watermark. Starter is $9 a month for 2,000 renders (pricing).

What it does not do

  • It does not post Stories; Meta's API or your scheduler does.
  • It cannot add interactive stickers (links, polls, questions, music) — those are Instagram features, and the API cannot add link, poll or location stickers either.
  • It does not crop your photos smartly: an image field shows the photo you give it, scaled to the template's frame.

FAQ

What size is an Instagram Story image?

Instagram's Help Center gives no pixel size for organic Stories. Meta's publishing API recommends 9:16 to avoid cropping or blank space, and its ads guide specifies 1440×2560 for Story ads; 1080×1920 is the common choice for organic Stories.

Can I publish an Instagram Story automatically?

Yes, for professional accounts: Instagram's Content Publishing API creates a Story from a public JPEG URL with media_type set to STORIES. Link, poll and location stickers cannot be added through the API.

Where should text go on a Story?

Away from the top and bottom, where Instagram shows the account name, progress bar and reply field. For Story ads Meta recommends keeping about 14% at the top, 35% at the bottom and 6% at each side free of text and logos.

Can I get the Story and the feed post from one template?

Yes. Request sizes story and portrait (or square) together and the template is laid out again for each shape — one design, both formats.