Tagged posts API
Posts other accounts tagged this account in, a page at a time. Pass next_cursor back as cursor for the next page.
GEThttps://storiesfly.com/api/v1/user/tagged- Price 1 request
- Answers up to 15 minutes old
Parameters
All parameters go in the query string.
| Name | Type | Sent | Description |
|---|---|---|---|
username | string | one of | Instagram username. A leading @ is ignored. Send exactly one of username or id. |
id | string | one of | Numeric Instagram id of the account. Send exactly one of username or id. |
cursor | string | optional | The next_cursor of the page before. Leave it out for the first page. |
Example request
Put your own key in the header.
curl "https://storiesfly.com/api/v1/user/tagged?username=arianagrande" \
-H "X-Api-Key: sf_live_your_key"const res = await fetch(
"https://storiesfly.com/api/v1/user/tagged?username=arianagrande",
{ headers: { "X-Api-Key": process.env.STORIESFLY_KEY } }
);
const data = await res.json();import os
import requests
r = requests.get(
"https://storiesfly.com/api/v1/user/tagged",
params={"username": "arianagrande"},
headers={"X-Api-Key": os.environ["STORIESFLY_KEY"]},
)
data = r.json()Example response
{
"user": {
"id": "7719696",
"username": "arianagrande"
},
"posts": [
{
"id": "3608551885977161255",
"shortcode": "DIUJtJFPA4n",
"url": "https://www.instagram.com/reel/DIUJtJFPA4n/",
"owner": {
"id": "1903376664",
"username": "jeffgoldblum"
},
"taken_at": 1744393416,
"taken_at_iso": "2025-04-11T17:43:36.000Z",
"caption": "“I didn’t know this was happening…” Well, now you do! Sign up to my mailer for something special landing in your inbox in 48 hours…link in bio! @arianagrande …",
"media_type": "reel",
"pinned": false,
"thumbnail_url": "https://scontent-iad3-2.cdninstagram.com/v/t51.75761-15/489691231_18502307593016665_4211270943041078968_n.jpg",
"media": [
{
"id": "3608551885977161255",
"type": "video",
"image_url": "https://scontent-iad3-2.cdninstagram.com/v/t51.75761-15/489691231_18502307593016665_4211270943041078968_n.jpg",
"video_url": "https://scontent-iad3-2.cdninstagram.com/o1/v/t2/f2/m367/AQM2-6oN_uCw0SgE8HUo3q4sv10jLjcEAn4vxRTDXHV1NN-RnXYZziIMy6OAS6UtdrP_I7tcxBF8aZlJ8BeGZi579o_9Zz8kYT0WWI…",
"width": 1080,
"height": 1920,
"video_duration": 6.266
}
],
"likes": 84400,
"comments": 492,
"shares": 3665,
"reposts": 336,
"views": 2903849,
"saves": 3076,
"video_duration": 6.266,
"counts_hidden": false
},
{
"id": "3367848142826665088",
"shortcode": "C69AArSpHSA",
"url": "https://www.instagram.com/p/C69AArSpHSA/",
"owner": {
"id": "3421676539",
"username": "wickedmovie"
},
"taken_at": 1715698806,
"taken_at_iso": "2024-05-14T15:00:06.000Z",
"caption": "Pink goes good with green. #WickedMovie trailer tomorrow. 💚💖",
"media_type": "photo",
"pinned": false,
"thumbnail_url": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-15/627055244_18079995698193877_1475830649791345359_n.jpg",
"media": [
{
"id": "3367848142826665088",
"type": "image",
"image_url": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-15/627055244_18079995698193877_1475830649791345359_n.jpg",
"video_url": null,
"width": 1350,
"height": 1687,
"video_duration": null
}
],
"likes": 3288800,
"comments": 8345,
"shares": 2770,
"reposts": 163,
"views": null,
"saves": null,
"video_duration": null,
"counts_hidden": false
}
],
"next_cursor": "c1.ryg6VkAgkE2BcPyGM0q6ADwLG1KAGWvXyxXcleap6rtdnm6USXXD4rRRujLUjticHxS2vixe2jbdlG4LggGvIE1ISp6sYLXI6XWcb66UIrM_RMPDKCUhQylnCgNoMsPrfzM",
"has_more": true
}A real answer, shortened: lists are cut to two items and long texts to 160 characters.
Price and freshness
A call takes 1 request. Free requests are spent first, then your balance. The pricing page has the rates.
Answers are kept for up to 15 minutes. Asking again inside that time returns the same answer and takes 1 request again.
Page size follows Instagram and varies by endpoint.
Errors
A failed call answers with an HTTP status and a body {error, code}. These are the codes this endpoint gives. Errors and what is charged covers all of them.
| Status | Code | When |
|---|---|---|
400 | bad_request | A parameter is missing or wrong, or not exactly one of username or id was sent. fields lists the names. Free. |
401 | unauthorized | The X-Api-Key header is missing or the key is wrong. Free. |
402 | credits_exhausted | The free requests and the balance are used up. Top up in the dashboard. Free. |
403 | telegram_required | The account behind the key is not linked to Telegram. The answer has a link_url to do it. Free. |
403 | private_account | The account is private. Charged like an answer. |
404 | not_found | The account does not exist. Charged like an answer. |
429 | rate_limited | More requests in a second than your level allows. Wait for the Retry-After header. Free. |
500 | internal_error | A fault on our side. Retry shortly. Refunded. |
503 | upstream_unavailable | Our side failed or timed out. Retry shortly. Refunded. |
Questions about this endpoint
What counts as a tagged post?
A post that another account made with this account tagged in it. The account's own posts are in user/posts.
How do I read all the posts an account is tagged in?
Send the next_cursor of the answer back as cursor for the next page, and stop when has_more is false. Each page takes 1 request. A cursor works only on the endpoint that returned it.
What happens with a private account?
The tagged posts of a private account answer private_account (HTTP 403), which is charged like an answer. The profile of that account still works: user/profile.
Your first 100 requests are on us
Sign in with Telegram, create a key, call any endpoint. Top up only when you need more.
