Instagram link resolver API
Turns an Instagram link into what it points at: a post or reel link, or a share link to a post, story, highlight or profile. The answer says which (type) and carries that item. A post, reel or IGTV link costs 1 request; a share link (/s/ or /share/) costs 2 requests.
GEThttps://storiesfly.com/api/v1/resolve- Price 1 request, or 2 for a share link
- Answers up to 5 minutes old
Parameters
All parameters go in the query string.
| Name | Type | Sent | Description |
|---|---|---|---|
url | string | required | An Instagram post, reel or IGTV link, or a share link (/s/ or /share/). |
Example request
Put your own key in the header.
curl "https://storiesfly.com/api/v1/resolve?url=https%3A%2F%2Fwww.instagram.com%2Fs%2FaGlnaGxpZ2h0OjE4MTQ2MjE2Njk4MDIyMTc0" \
-H "X-Api-Key: sf_live_your_key"const res = await fetch(
"https://storiesfly.com/api/v1/resolve?url=https%3A%2F%2Fwww.instagram.com%2Fs%2FaGlnaGxpZ2h0OjE4MTQ2MjE2Njk4MDIyMTc0",
{ 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/resolve",
params={"url": "https://www.instagram.com/s/aGlnaGxpZ2h0OjE4MTQ2MjE2Njk4MDIyMTc0"},
headers={"X-Api-Key": os.environ["STORIESFLY_KEY"]},
)
data = r.json()Example response
{
"type": "highlight",
"id": "18103599704256781",
"title": "。˚ ♡",
"cover_url": "https://scontent-iad3-1.cdninstagram.com/v/t51.71878-15/809450273_1103403688775264_8171408473185393758_n.jpg",
"items_count": 82,
"created_at": 1789616670,
"created_at_iso": "2026-09-17T03:44:30.000Z",
"user": {
"id": "7719696",
"username": "arianagrande"
},
"stories": [
{
"id": "3987461624755717505",
"url": "https://www.instagram.com/stories/arianagrande/3987461624755717505/",
"taken_at": 1789562478,
"taken_at_iso": "2026-09-16T12:41:18.000Z",
"media_type": "video",
"media_url": "https://scontent-iad3-2.cdninstagram.com/o1/v/t2/f2/m78/AQOztCQ_1G5kGYFooZsrACEQGloAwaemY1bdccNs7a5dMFT6PV2y3F7utCG2-mrfX_4sPPHdWpDh4XpfWXBCSfuAp_6-JpWK-mIFI9c…",
"thumbnail_url": "https://scontent-iad3-1.cdninstagram.com/v/t51.71878-15/813715219_1125534599803896_6521198656794297674_n.jpg",
"video_duration": 28.866
},
{
"id": "3987462196355524663",
"url": "https://www.instagram.com/stories/arianagrande/3987462196355524663/",
"taken_at": 1789562555,
"taken_at_iso": "2026-09-16T12:42:35.000Z",
"media_type": "video",
"media_url": "https://scontent-iad3-2.cdninstagram.com/o1/v/t2/f2/m78/AQMZwmKqL-JUTpMdUpJ4F3j35SbK5wlaEBfI1NLMPmimpjB_mAW30HBK86yblEs7iBS62nrYJfJjHNrAGFQjrkcYxTUNHPgUdXsYTcc…",
"thumbnail_url": "https://scontent-iad6-1.cdninstagram.com/v/t51.71878-15/809767015_4519435528321827_7980976440616415635_n.jpg",
"video_duration": 13.633
}
]
}A real answer, shortened: lists are cut to two items and long texts to 160 characters.
Price and freshness
A call takes 1 request, or 2 for a share link. Free requests are spent first, then your balance. The pricing page has the rates.
Answers are kept for up to 5 minutes. Asking again inside that time returns the same answer and takes 1 request, or 2 for a share link again.
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. 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. |
404 | not_found | The link points at something that 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
Which links can I send?
A post, reel or IGTV link, or a share link (/s/ or /share/) to a post, story, highlight or profile. A link of another site is refused with bad_request.
Why does a share link cost more?
A share link is looked up first, and then the item it points at is read, so it takes 2 requests. A post, reel or IGTV link takes 1.
How do I know what the link pointed at?
type says it: post, story, highlight or user. The rest of the answer has the fields of that kind of item.
Your first 100 requests are on us
Sign in with Telegram, create a key, call any endpoint. Top up only when you need more.
