---
title: "Instagram Story Image Generator API: 1080x1920 Vertical"
description: "Render vertical covers with the Instagram Story image generator API. POST title and metadata as JSON, get back a 1080x1920 PNG ready for Stories or Reels."
url: "https://html2img.com/templates/instagram-story/"
---

# Instagram Story Image API

Send title and CTA as JSON, get back a 1080x1920 vertical PNG sized for Stories.

Brand teams and short-form video producers use the Instagram Story image generator API to ship 9:16 vertical covers for Stories, Reels covers, and TikTok holding cards. The 1080x1920 output respects Instagram's safe zones, with the title placed inside the central area that survives both the top profile bubble and the bottom sticker tray. You post the title, optional eyebrow, optional CTA, and brand inputs as JSON, and the response holds a PNG ready to publish via the Graph API or schedule with Buffer.

## At a glance

- **Template slug:** `instagram-story`
- **Category:** social
- **Endpoint:** `POST https://app.html2img.com/api/v1/templates/instagram-story`
- **Authentication:** `X-API-Key` header
- **Cost:** one credit per render, PNG or PDF
- **Page:** https://html2img.com/templates/instagram-story/

## Fields

| Field | Type | Required | Example |
| --- | --- | --- | --- |
| `title` | string | Yes | Behind the scenes |
| `subtitle` | string | No | How our team built the v3 release in six weeks. |
| `eyebrow` | string | No | NEW EPISODE |
| `cta` | string | No | Swipe up |
| `background_image_url` | url | No | https://picsum.photos/seed/insta-story/1080/1920 |
| `logo_url` | url | No |  |
| `background_color` | string | No | #0F0F1A |
| `accent_color` | string | No | #FACC15 |

## Defaults

| Field | Default |
| --- | --- |
| `width` | 1080 |
| `height` | 1920 |

## Example request

```bash
curl -X POST https://app.html2img.com/api/v1/templates/instagram-story \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Behind the scenes","subtitle":"How our team built the v3 release in six weeks.","eyebrow":"NEW EPISODE","cta":"Swipe up","background_image_url":"https://picsum.photos/seed/insta-story/1080/1920","background_color":"#0F0F1A","accent_color":"#FACC15"}'
```

## In your language

### PHP

```php
<?php
$response = \Illuminate\Support\Facades\Http::withHeaders([
    'X-API-Key' => 'YOUR_API_KEY',
])->post('https://app.html2img.com/api/v1/templates/instagram-story', ['title' => 'Behind the scenes', 'subtitle' => 'How our team built the v3 release in six weeks.', 'eyebrow' => 'NEW EPISODE', 'cta' => 'Swipe up', 'background_image_url' => 'https://picsum.photos/seed/insta-story/1080/1920', 'background_color' => '#0F0F1A', 'accent_color' => '#FACC15']);

$url = $response->json('url');
```

### Node.js

```javascript
const response = await fetch('https://app.html2img.com/api/v1/templates/instagram-story', {
  method: 'POST',
  headers: {
    'X-API-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "title": "Behind the scenes",
    "subtitle": "How our team built the v3 release in six weeks.",
    "eyebrow": "NEW EPISODE",
    "cta": "Swipe up",
    "background_image_url": "https://picsum.photos/seed/insta-story/1080/1920",
    "background_color": "#0F0F1A",
    "accent_color": "#FACC15"
}),
});

const { url } = await response.json();
```

### Python

```python
import requests

response = requests.post(
    'https://app.html2img.com/api/v1/templates/instagram-story',
    headers={'X-API-Key': 'YOUR_API_KEY'},
    json={'title': 'Behind the scenes', 'subtitle': 'How our team built the v3 release in six weeks.', 'eyebrow': 'NEW EPISODE', 'cta': 'Swipe up', 'background_image_url': 'https://picsum.photos/seed/insta-story/1080/1920', 'background_color': '#0F0F1A', 'accent_color': '#FACC15'},
)

url = response.json()['url']
```

## What it is for

### E-commerce auto-generating Story art from product launches

Stores launching a new SKU benefit from a Story cover that drops on launch day, alongside the feed post. Render with the product name, price, and a CTA to swipe up, schedule via Meta Business Suite, and the launch reaches both feed and Stories surfaces with consistent branding. Riverside Bakery launches 3 to 4 product Stories per month through this template.

### Events posting countdown reminders

Communities running monthly events post Story countdowns in the days before each date. Render with "3 days to go", the event title, and the venue or join link, post on the calendar dates, and the Story keeps the event present without flooding the feed. The Type Conference posts countdown Stories for 7 days before the event using this template.

### Podcasts promoting new episodes

Show producers post a Story per episode to push subscribers to the new drop. Render with the episode number, title, and a CTA, post on the morning of the release, and the Story keeps the show top-of-mind for the 24 hours it stays visible. Halberd Software's podcast publishes one Story per Tuesday episode and gets 200 to 400 swipe-ups per launch.

### News outlets publishing breaking story cards

News teams use Stories to surface breaking news quickly. Render with the headline and a "Tap for more" CTA, post the moment a story breaks, and the audience sees the news in their Story tray within minutes. Linden & Co's regional news clients run this pattern across 11 stations for breaking-news coverage.

### Internal tools posting team updates to a private Story

Companies with a private team Instagram account post updates to a Story that stays visible for 24 hours. Render with the update title, accent_color from your brand kit, and post via the Graph API. Wren Analytics uses this for "Friday wins" Stories that surface team accomplishments without flooding the public feed.

## Output

- **Dimensions:** 1080x1920
- **Colour space:** sRGB
- **Transparency:** Not supported
- **Typical file size:** 120 KB to 350 KB
- **Platform specification:** [Instagram Stories format and safe zones](https://help.instagram.com/1631821640426723)

## Common mistakes

### UI overlays cover the top and bottom 250 pixels

Instagram places the profile bubble in the top 250 pixels and reaction stickers in the bottom 250 pixels. Important content placed in those zones gets covered. Keep the focal area between y=250 and y=1670 so the title and brand mark survive the UI overlays.

### Link stickers can cover added content

When you add a link sticker via Instagram's editor, it lands wherever the user drops it and may cover content. Reserve a clean area in the lower third of the safe zone where the link sticker can land without obscuring the title.

### Swipe-up artwork blocks lower-third content

A "Swipe up" CTA in the bottom band conflicts with Instagram's native swipe indicator. Either rely on Instagram's native CTA and remove your custom one, or position the custom CTA above the bottom 300 pixels.

## Questions

### What size is an Instagram Story?

The 1080x1920 PNG output (9:16 vertical) matches the Instagram Stories spec. The same dimensions also work for Facebook Stories, TikTok, YouTube Shorts cover, and Snapchat. The template renders this size by default.

### Where are the safe zones?

Keep important content between y=250 and y=1670. The top 250 pixels host the profile bubble, follow button, and timing dots. The bottom 250 pixels host the reply input and reactions. Content outside those bounds gets covered by Instagram UI on most devices.

### Can I add a link sticker visual?

The link sticker is added inside Instagram's editor when you publish, not on the image itself. Leave space in the lower portion of the safe zone for the sticker to land. The sticker color and shape come from Instagram, not from your render.

### Will it work for Reels covers?

Yes, Reels covers use the same 1080x1920 dimensions as Stories. You can use this template's output as a Reels cover by selecting it as the cover image when publishing the Reel. The same render serves both surfaces.

### Can I auto-post to Stories?

Yes, the Instagram Graph API supports Stories posting from connected Business or Creator accounts. This template produces the artwork only. Most teams render in advance, store the URLs, and queue posts via Buffer, Later, or a custom scheduler.

### What about Story Highlights?

Highlight covers are 1080x1920 cropped to a circle by Instagram's UI. Design with a centered subject so the circular crop frames it correctly. The same render works for both ephemeral Stories and persistent Highlight covers.

## Preview

![Instagram Story Image API example render](https://i.html2img.com/image-1777560109856-836344.png)

## Related templates

- [instagram-square-post](https://html2img.com/templates/instagram-square-post/)
- [open-graph-image](https://html2img.com/templates/open-graph-image/)
- [twitter-post](https://html2img.com/templates/twitter-post/)

## See also

- [Every template](https://html2img.com/templates/)
- [Templates API reference](https://html2img.com/docs/templates/)
- [OpenAPI specification](https://html2img.com/openapi.json)
