# Instagram API: About is back, 1 credit, named 404s (https://www.socialcrawl.dev/blog/instagram-api-reliability) > /v1/instagram/profile/about is back: United States, February 2012, 1 credit. Wrong Instagram API paths return did_you_mean at 0 credits. Checked 2026-09-08. On 2026-09-08, `GET /v1/instagram/profile/about?handle=instagram` returned country **United States**, joined **February 2012**, public email and phone **null**, and billed **1 credit**. Same hour, three wrong paths returned `details.did_you_mean` and **0 credits**. That is the Instagram API after the [2026-09-07 reliability ship](/changelog): About answering again, a second source behind reels, stats, and transcript, and 404s that name the real path. This is not a scrape tutorial ([how to scrape Instagram](/blog/how-to-scrape-instagram-2026)) and not a vendor list ([best Instagram data APIs](/blog/best-instagram-data-apis-2026)). Captured JSON from public handles. Five 200s billed **18 credits**; the three 404s billed 0. **Stack:** curl + Python `requests` · `GET https://www.socialcrawl.dev/v1/instagram/…` · header `x-api-key`. Failover is silent on success. The 200s below do not prove a second source ran. ## What does this Instagram API return on a public handle? A handle or a post URL, plus `x-api-key`. No Facebook Page, no app review, no user token. This Instagram API is a public-handle read. [Instagram Platform / Graph](https://developers.facebook.com/docs/instagram-platform/overview) is the official path for a professional account you own or manage. Four paths called this run, with this-run prices. Unknown paths are free. | Path | Credits this run | What came back | | --- | ---: | --- | | `GET /v1/instagram/profile/about` | 1 | Country, join month, contact fields (null when unpublished) | | `GET /v1/instagram/profile/reels` | 1 | 11 reels, shares null on every row | | `GET /v1/instagram/post/stats` | 5 | Same reel, `engagement.shares = 55,849`, saves still null | | `GET /v1/instagram/media/transcript` | 10 | 134-character transcript, one call | | Unknown path (`ENDPOINT_NOT_FOUND`) | 0 | `details.did_you_mean` | | | Graph / Instagram Platform | This post's calls | | --- | --- | --- | | Who | Professional account you own or manage. Facebook Login variant needs a Page. [App Review](https://developers.facebook.com/docs/instagram-platform/overview) for Advanced Access. | Public handle or post URL, `x-api-key` | | What you get | Own-account comments, insights, publishing, DMs. [Business Discovery](https://developers.facebook.com/docs/instagram-api/guides/business-discovery) is metadata on other *professional* accounts you query through *your* token. No transcripts. [Shares and saves insights](https://developers.facebook.com/docs/instagram-api/guides/insights) are owner-only. | Country + join month on About; reels list; `engagement.shares` on a single-post read; a reel transcript. `engagement.saves` stays null. | Live catalogue: [`/platforms/instagram`](/platforms/instagram). For vendors and prices, see the [best Instagram data APIs](/blog/best-instagram-data-apis-2026) roundup — this post is not that list. Month-window numbers from **2026-09-07** ([changelog](/changelog)), not this smoke: Instagram overall **1.43%** server errors (9,916); `profile/about` **9.4%** across the month and 100% erroring from 15:14 that day; reels **5.6%** (2,333 calls / 30 days / 640 accounts); `post/stats` **5.6%** (846). Transcript had no backup. Each of those four lanes now has a second source that runs **only when the first fails**, same price, same canonical fields. Prices did not change. One credit is still one call. Every response is a versioned object (`dev.socialcrawl.post.v1` / `author.v1`) with `success`, `data`, `credits_used`, `request_id`, and `cached` — [the unified schema](/unified-schema), not three Graph names for a post. A [Graph API complaint thread](https://www.reddit.com/r/webdev/comments/1c46ipb/why_instagram_graph_api_is_so_complicated/) still ranks for this query because Meta's hubs never show a request. A rounded photo-grid tile beside a clay-amber card showing a globe and a calendar, the country and join-month details an Instagram API About call now returns. ## Does the Instagram profile API return country and join month again? Yes. On 2026-09-08 the official `@instagram` account returned `author.ext.country = "United States"` and `author.ext.account_created = "February 2012"` for 1 credit. Public email and phone were null — the account does not publish them. This is the Instagram profile API path that had been answering nothing since 15:14 on 07/09. ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/instagram/profile/about?handle=instagram" ``` Trimmed body (`req-qKlwmNdPCg2ZkTVi`, `credits_used: 1`, `cached: false`): ```json { "success": true, "platform": "instagram", "endpoint": "/v1/instagram/profile/about", "credits_used": 1, "cached": false, "request_id": "req-qKlwmNdPCg2ZkTVi", "data": { "author": { "id": "25025320", "username": "instagram", "display_name": "Instagram", "verified": true, "followers": 686452333, "following": 286, "posts_count": 8579, "private": false, "ext": { "account_created": "February 2012", "country": "United States", "public_email": null, "public_phone": null } }, "computed": { "engagement_rate": null, "language": "de" } } } ``` Country and join month are real `author.ext.*` leaves. Null contact stays null — never guessed. `@instagram` is verified, public, 686,452,333 followers, bio `Discover what's new on Instagram`. This handle has no public email on About — that job is [Instagram email finder](/blog/instagram-email-finder). Honest coverage, not a failed restore. Same-minute `GET /v1/instagram/profile?handle=instagram` (`req-X1X9Fn9RTXZsl9S9`) matched followers **686,452,333** and did **not** match `posts_count`: profile **12**, About **8,579**. Two endpoints, two numbers — do not pick a winner. Profile `joined_at` was null. About is the one that carries join month. `computed.language = "de"` on a bio that is English. That is the detector output. It is not a claim that the account is German. `computed.engagement_rate` is null here because `likes_count` is null. Do not invent one. A second source now sits behind this Instagram profile API path so one supplier running out cannot take About down again. This 200 does not prove it ran. ## What does one Instagram Reels API call return — and where are the shares? `GET /v1/instagram/profile/reels?handle=mrbeast` returned **11** reels, `dropped: 0`, `has_more: true`, **1 credit** (2026-09-08). First reel `https://www.instagram.com/reel/DAbrtxjSqfx/` had **186,809,592** views and **6,147,472** likes. `engagement.shares` and `engagement.saves` were **null on every row**. Share counts are not on this Instagram Reels API list. ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/instagram/profile/reels?handle=mrbeast" ``` Page (`req-vW7IwrxkYMBht3tB`): **11** items, `page_size` 11, views **669,882,200**, likes **23,935,710**, comments **535,808**, shares non-null **0/11**, saves non-null **0/11**, views populated 11/11. `has_more: true` means another page exists; this smoke stopped at page one. | # | URL | Duration (s) | Views | Likes | Shares | Saves | | ---: | --- | ---: | ---: | ---: | --- | --- | | 0 | https://www.instagram.com/reel/DAbrtxjSqfx/ | 16.647 | 186,809,592 | 6,147,472 | **null** | **null** | | 1 | https://www.instagram.com/reel/C7mTbnJsX2u/ | 27.4 | 243,730,247 | 9,161,415 | **null** | **null** | | 6 | https://www.instagram.com/reel/Db_gMNjskgO/ | **9.8** | 23,720,491 | 644,120 | **null** | **null** | Row 0 is pinned (`Go watch video on YouTube of 100 twins competing!`). Row 6 (`It was my best video ever`) is the reel transcribed below. If you need play counts on a public handle, the 1-credit Instagram Reels API list is the call. If you need the paper-plane share count, it is not. Shares live on a single-post read. Instagram post stats on that first reel: ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/instagram/post/stats?url=https://www.instagram.com/reel/DAbrtxjSqfx/" ``` | Field | Reels list (row 0, 00:14:36Z) | post/stats (00:15:21Z) | | --- | --- | --- | | `post.id` | 3466556599773603825 | 3466556599773603825 | | `engagement.views` | 186,809,592 | **186,809,601** | | `engagement.likes` | 6,147,472 | **6,147,474** | | `engagement.comments` | 86,612 | 86,612 | | `engagement.shares` | **null** | **55,849** | | `engagement.saves` | **null** | **null** | | `author.display_name` | MrBeast | **null** | | `computed.engagement_rate` | — | **0.03367** | | `computed.estimated_reach` | — | **224,171,521** | | `computed.language` | — | en | | `credits_used` | 1 (the list) | **5** | | `request_id` | `req-vW7IwrxkYMBht3tB` | `req-HqMqNb12RYppbZ9Y` | The paper-plane share count is a real integer on Instagram post stats only (and the `/full` composites, **not smoked this run**). The 1-credit list did not grow a shares column. Saves stay null. Never estimate. A builder who needs shares spends 5 credits on this path. A builder who does not, stays on the 1-credit list. Arithmetic: `(6,147,474 + 86,612 + 55,849) / 186,809,601 = 0.03367`. Saves were not in the numerator. Reach is `round(views * 1.2) = 224,171,521`. Views and likes drifted 9 views and 2 likes in about 45 seconds. Two live reads, not a contradiction. `author.display_name` is null on this stats endpoint and populated (`MrBeast`) on the list — same canonical field, different surfaces. This lane was **5.6%** errors (2,333 calls / 30 days) before the 07/09 ship ([changelog](/changelog)). Reels and stats now have a second source that runs only when the first fails. This 200 does not prove it ran. ## Can you pull an Instagram transcript via API? Yes. `GET /v1/instagram/media/transcript` on MrBeast reel `https://www.instagram.com/reel/Db_gMNjskgO/` (9.8s, row 6 of the same reels page) returned a **134**-character transcript for **10 credits**, one call, not retried (2026-09-08, `req-zAhwXqBfIOnVnHNo`). Graph has no transcript capability on a public handle. This Instagram transcript API is the only 10-credit Instagram call. ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/instagram/media/transcript?url=https://www.instagram.com/reel/Db_gMNjskgO/" ``` ```json { "success": true, "platform": "instagram", "endpoint": "/v1/instagram/media/transcript", "credits_used": 10, "cached": false, "request_id": "req-zAhwXqBfIOnVnHNo", "data": { "transcripts": [ { "id": "3963027773788932110", "shortcode": "Db_gMNjskgO", "text": "Ugh, what just happened? Oh my gosh. Oh my God, give it! Oh my God, I'm okay! What is Wait, did you record all that? What is going on?" } ] } } ``` `text` is 134 characters of spoken words. The caption on that reel was `It was my best video ever` — a different field, already on the 1-credit list. You pay 10 credits for the speech, not the caption. Before 07/09 this was the Instagram API lane with no backup ([changelog](/changelog)) — a first-source miss burned 10 credits for nothing. A second source is there now. This particular 200 does **not** prove it ran. Transcript was called **once**; there was no retry. A 4xx/5xx would have been auto-refunded; this one billed 10 because it returned data. Do not read five 200s as a published error rate. A blank street sign pointing toward a clay-amber path, the named-route hint an Instagram API 404 now returns as did_you_mean. ## What if you hit the wrong Instagram API path? An unknown path has always been free (`ENDPOINT_NOT_FOUND`, 404, not charged). It used to name nothing. On 2026-09-08, `GET /v1/instagram/posts`, `GET /v1/instagram/user/reels`, and `GET /v1/x/profile` each returned `details.did_you_mean` and `credits_used: 0`. The Instagram API path you wanted is in the array. ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/instagram/posts" ``` ```json { "success": false, "error": { "type": "ENDPOINT_NOT_FOUND", "message": "Unknown endpoint: /v1/instagram/posts. Did you mean: profile/posts, location/posts, profile/posts/full? GET /v1/utility/endpoints returns the full catalog.", "status": 404, "doc_url": "https://www.socialcrawl.dev/docs/errors#endpoint-not-found", "details": { "did_you_mean": [ "/v1/instagram/profile/posts", "/v1/instagram/location/posts", "/v1/instagram/profile/posts/full" ] } }, "credits_used": 0, "request_id": "req-7XnH7UadsbB0jv7b", "credits_remaining": null } ``` ```json { "success": false, "error": { "type": "ENDPOINT_NOT_FOUND", "message": "Unknown endpoint: /v1/instagram/user/reels. Did you mean: profile/reels, profile/reels/full, audio/reels? GET /v1/utility/endpoints returns the full catalog.", "status": 404, "doc_url": "https://www.socialcrawl.dev/docs/errors#endpoint-not-found", "details": { "did_you_mean": [ "/v1/instagram/profile/reels", "/v1/instagram/profile/reels/full", "/v1/instagram/audio/reels" ] } }, "credits_used": 0, "request_id": "req-6VIHM5y4lZvbDNKy", "credits_remaining": null } ``` ```json { "success": false, "error": { "type": "ENDPOINT_NOT_FOUND", "message": "Unknown endpoint: /v1/x/profile. Did you mean: /v1/twitter/profile, /v1/twitter/user/media, /v1/twitter/profile/full? GET /v1/utility/endpoints returns the full catalog.", "status": 404, "doc_url": "https://www.socialcrawl.dev/docs/errors#endpoint-not-found", "details": { "did_you_mean": [ "/v1/twitter/profile", "/v1/twitter/user/media", "/v1/twitter/profile/full" ], "did_you_mean_platform": "twitter" } }, "credits_used": 0, "request_id": "req-OKzmv3AoeDRX1BTK", "credits_remaining": null } ``` `did_you_mean` is a client-parseable field, not just a prose hint. A client can read the array, pick the first path, and retry without a human opening docs. Type, 404, and zero charge are unchanged. Suggestions only when a real match scores well enough. The `/v1/x/profile` miss matters: the surface is registered as `twitter`, not `x`. If you type `/v1/x/...`, you were never billed, and you were never told why, until this field. From the 07/09 ship record, not this smoke: Instagram alone **1,170** wrong paths across **98** spellings from **67** accounts in 30 days; `/v1/x/...` was **84,017** requests from **28** accounts, none billed, none told why. The ship itself is on the [changelog](/changelog). `credits_remaining: null` on these free 404s means unknown, not a zero balance. Error taxonomy: [`/docs/errors`](/docs/errors). The message names `GET /v1/utility/endpoints` for the full catalog — mentioned, not smoked this run. ## How do you start using this Instagram API? 1. Get **one API key**. Send it as `x-api-key`. New SocialCrawl accounts get [100 credits, no card](/pricing). 2. Call About. Print status and `credits_used`. A working Instagram API Python snippet: ```python r = requests.get( "https://www.socialcrawl.dev/v1/instagram/profile/about", params={"handle": "instagram"}, headers={"x-api-key": os.environ["SOCIALCRAWL_API_KEY"]}, timeout=30, ) body = r.json() print(r.status_code, body.get("credits_used"), body["data"]["author"]["ext"]["country"]) ``` 3. Then the [Explorer](/explorer) (see your data before writing a single line), [Instagram API docs](/docs/instagram), the [Instagram platform page](/platforms/instagram), and the [2026-09-07 changelog](/changelog) for the ship. Reproduce the rest of this Instagram API smoke against `https://www.socialcrawl.dev`: reels `handle=mrbeast` (1 cr), `post/stats` on `https://www.instagram.com/reel/DAbrtxjSqfx/` (5 cr), transcript on `https://www.instagram.com/reel/Db_gMNjskgO/` (**once**, 10 cr), and the three free 404s. Counts will move. Envelope, null saves, `did_you_mean` arrays, and prices should not. This-run spend was **18 credits**. ## Frequently asked questions ### Does Instagram have a public API? Official [Instagram Platform / Graph APIs](https://developers.facebook.com/docs/instagram-platform/overview) are for professional accounts you own or manage — OAuth, often a Facebook Page, [App Review](https://developers.facebook.com/docs/instagram-platform/overview) for Advanced Access. Reading an arbitrary public handle is a data-API problem. The worked examples above (`profile/about`, reels, stats, transcript) take a handle or post URL and `x-api-key`. That is a public Instagram API, not Graph. Instagram Basic Display, the last official consumer-app path, [shut down 4 December 2024](https://developers.facebook.com/blog/post/2024/09/04/update-on-instagram-basic-display-api/). For scraper intent, see [how to scrape Instagram](/blog/how-to-scrape-instagram-2026). The [Instagram scraping](/blog/instagram-scraping-2026) post is the options map; this one is the live Instagram API surface. ### Instagram Graph API vs a data API — what's the difference? | | Instagram Graph API | This post's calls | | --- | --- | --- | | Auth | OAuth on an account you own or manage; Facebook Login variant needs a Page | `x-api-key`, no user token | | Other accounts | [Business Discovery](https://developers.facebook.com/docs/instagram-api/guides/business-discovery) on other *professional* accounts through *your* token | Public handle or post URL | | Shares / saves | [Insights `shares` / `saved`](https://developers.facebook.com/docs/instagram-api/guides/insights) are owner-only | Shares on `post/stats` (55,849 on this reel). Saves stay null. | | Transcripts | Not an Instagram Platform capability | `media/transcript`, 10 credits | Graph remains the owned-account product. The calls in this post are the public-handle read. ### What is the Instagram API rate limit? Do not take an unofficial "200 calls an hour" figure as Graph's cap — that number is unsourced in the pages that repeat it. On the SocialCrawl API, [one credit is still one call](/docs/credits). Cache hits cost 0. A 5xx is refunded. Prices on these four paths stayed **1 / 1 / 5 / 10** after 2026-09-07. This post is not a Graph quota explainer. ### How do I get Instagram post data? `GET /v1/instagram/post/stats?url=…`. The captured MrBeast reel `https://www.instagram.com/reel/DAbrtxjSqfx/` returned views **186,809,601**, likes **6,147,474**, comments **86,612**, shares **55,849**, saves **null**, 5 credits (`req-HqMqNb12RYppbZ9Y`). The 1-credit reels list returns the same post without shares. That is Instagram post stats, not a scrape walkthrough. ### How do I get an Instagram API key? Create an account, copy the key, send it as `x-api-key`. The free tier is **100 credits, no card** ([pricing](/pricing)). How to get an Instagram API key for Graph is a different ritual (app, review, often a Page) — see Meta's overview linked above. ### Where is the Instagram API documentation? The reference is [`/docs/instagram`](/docs/instagram). Live catalogue: [`/platforms/instagram`](/platforms/instagram). Wrong-path shape: [`/docs/errors`](/docs/errors). This post is reliability proof with live JSON, not the reference. The 2026-09-07 Instagram API ship is on the [changelog](/changelog).