Instagram API: About is back, 1 credit, named 404s
/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: 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) and not a vendor list (best Instagram data APIs). 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 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 for Advanced Access. | Public handle or post URL, x-api-key |
| What you get | Own-account comments, insights, publishing, DMs. Business Discovery is metadata on other professional accounts you query through your token. No transcripts. Shares and saves 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. For vendors and prices, see the best Instagram data APIs roundup — this post is not that list.
Month-window numbers from 2026-09-07 (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, not three Graph names for a post. A Graph API complaint thread still ranks for this query because Meta's hubs never show a request.
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.
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):
{
"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. 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.
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:
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). 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.
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/"{
"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) — 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.
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.
curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \
"https://www.socialcrawl.dev/v1/instagram/posts"{
"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
}{
"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
}{
"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.
credits_remaining: null on these free 404s means unknown, not a zero balance. Error taxonomy: /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?
- Get one API key. Send it as
x-api-key. New SocialCrawl accounts get 100 credits, no card. - Call About. Print status and
credits_used. A working Instagram API Python snippet:
import os
import requests
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"])- Then the Explorer (see your data before writing a single line), Instagram API docs, the Instagram platform page, and the 2026-09-07 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 are for professional accounts you own or manage — OAuth, often a Facebook Page, App Review 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. For scraper intent, see how to scrape Instagram. The Instagram scraping 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 on other professional accounts through your token | Public handle or post URL |
| Shares / saves | Insights shares / saved 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. 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). 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. Live catalogue: /platforms/instagram. Wrong-path shape: /docs/errors. This post is reliability proof with live JSON, not the reference. The 2026-09-07 Instagram API ship is on the changelog.
Related posts
Google Trends API: Empty Searches Cost 0 Credits
Empty Google Trends API searches now return 404 with 0 credits charged. Live production curls cover Trends empties, News ranks, and app filter refusals.
Google Trends API Python: ~4.6s Typical (Was ~9s)
A Google Trends API Python GET is ~4.6s typical (was ~9s on 22 billed calls). Live interest-over-time and related queries, same 5 credits, 2026-09-08 UTC.
LinkedIn Post History API: Full Archive, 100/Page
LinkedIn post history API: 100/page at 5 credits each. Two no-cache calls matched published_at to the millisecond; limit=100 returned 97 posts and a cursor.
