StoriesFly logo
GET /api/v1/user/stories

Instagram Stories API

Send a username and get the stories that account has up right now, as JSON: a media link, the time and the video length of each. One request returns all of an account's stories. You do not log in to Instagram. You send your API key.

Three endpoints for stories

user/stories returns every story an account has up. story returns one story, by its link or id. highlight returns a highlight with every story in it.

All three are GET requests under /api/v1/ with the key in the X-Api-Key header.

EndpointYou sendYou getRequestsFresh for
GET /api/v1/user/storiesusername or id of the accountThe stories the account has up now13 minutes
GET /api/v1/storyurl or id of the storyOne story and its account13 minutes
GET /api/v1/highlighturl or id of the highlightThe highlight and every story in it115 minutes

Fields of a story

The answer of user/stories has user (the account's id and username) and stories. stories is an empty list when the account has none up.

Every story has the same fields, in this order.

FieldTypeMeaning
idstringId of the story. Pass it to story as id
urlstringLink to the story on instagram.com
taken_atnumberWhen the story was posted, as Unix time in seconds
taken_at_isostringThe same moment as an ISO 8601 date in UTC
media_typestringphoto or video
media_urlstringLink to the photo, or to the video file when the story is a video
thumbnail_urlstringLink to a still image of the story. For a photo it is the photo itself
video_durationnumber or nullLength of a video in seconds. null for a photo

Example request

This call reads the stories of brooklynandbailey. Put your own key in the header.

cURL
curl "https://storiesfly.com/api/v1/user/stories?username=brooklynandbailey" \
  -H "X-Api-Key: sf_live_your_key"

Example response

The first story is a video with its length in seconds, the second is a photo. The answer carries X-Units-Charged: 1. Long media links are shortened in this example.

Response

  "user" 
    "id" "286628010"
    "username" "brooklynandbailey"
  
  "stories" 
    
      "id" "4008637512964239886"
      "url" "https://www.instagram.com/stories/brooklynandbailey/4008637512964239886/"
      "taken_at" 1792086850
      "taken_at_iso" "2026-10-15T17:54:10.000Z"
      "media_type" "video"
      "media_url" "https://scontent-lga3-2.cdninstagram.com/o1/v/t2/f2/m78/AQPH74NahzbMjNpeMfSF0lL2HOrUTana5q4EzP0NQZQHGeUJCeTuDuAvmgXOQa7K9UWTibUM1hngLk3u7IsLT4iSQQxNyL_rn0rbjwk…"
      "thumbnail_url" "https://scontent-lga3-3.cdninstagram.com/v/t51.71878-15/851828943_1070743629289559_5712408482754146592_n.jpg"
      "video_duration" 7.666
    
    
      "id" "4008666677715020807"
      "url" "https://www.instagram.com/stories/brooklynandbailey/4008666677715020807/"
      "taken_at" 1792090327
      "taken_at_iso" "2026-10-15T18:52:07.000Z"
      "media_type" "photo"
      "media_url" "https://scontent-lga3-1.cdninstagram.com/v/t51.82787-15/850290260_18648501079036011_4776426096727558547_n.jpg"
      "thumbnail_url" "https://scontent-lga3-1.cdninstagram.com/v/t51.82787-15/850290260_18648501079036011_4776426096727558547_n.jpg"
      "video_duration" null
    
  

Highlights

highlight takes the link of a highlight or its id and returns id, title, cover_url, items_count, created_at, created_at_iso, user and stories. The stories in it have the fields above.

The whole highlight is 1 request, however many stories it holds.

To find the ids of an account's highlights, call user/highlights. For each highlight it returns id, title, cover_url, items_count, created_at and created_at_iso, a page at a time with next_cursor, and a page takes 1 request.

What it costs

An account's stories take 1 request, however many stories it has. Reading the stories of 1,000 accounts takes 1,000 requests, which is $1.50 at the Start rate.

An account with no stories up returns an empty list and is charged like any other answer. A wrong parameter and a failure on our side cost nothing.

You get 100 free requests when you sign in with Telegram. See pricing for the levels and the billing rules.

How fresh the data is

Answers of user/stories and story are at most 3 minutes old. Answers of highlight are at most 15 minutes old.

Instagram keeps a story up for 24 hours. After that user/stories no longer lists it, and story answers not_found, which is charged like an answer.

Media links point to Instagram's servers and stop working after some time. Save the file when you need it later.

What it cannot do

  • It reads public accounts only. For a private account user/stories answers private_account (HTTP 403), which is charged like an answer.
  • You never log in to Instagram, and your own account never appears among the story's viewers.
  • It cannot post, reply or send messages, and it does not show who viewed a story.

Reference and next steps

Every parameter, error and example is in the docs: user/stories, story, highlight and user/highlights.

Get your key to make the first call. To see how this differs from Instagram's official API, read Instagram API without login. Rates are on the pricing page.

FAQ

Questions developers ask

How many requests does it take to get all the stories of an account?

One. user/stories returns every story the account has up in a single call, and a call takes 1 request.

How fresh are the stories?

At most 3 minutes old. A highlight is at most 15 minutes old.

Can I get the stories of a private account?

No. user/stories answers private_account for a private account. The profile of that account still works.

Will my own Instagram account show up among the viewers of a story?

You never log in to Instagram, and your own account never appears among the story's viewers.

How long do the media links work, and how do I keep a story?

The links point to Instagram's servers and expire after some time. Download the file from media_url when you get the answer and store it yourself. A story is up for 24 hours, so a story you did not save cannot be fetched later.

Your first 100 requests are on us

Sign in with Telegram, create a key, call any endpoint. Top up only when you need more.