Instagram User Embed API
A profile read off Instagram's public embed card, with the embed HTML in raw.html for anyone who wants to render it. Instagram publishes embeds so third parties can display them, which makes this the profile path it has the least reason to gate. The same reasoning puts the post embed on /v1/instagram/post's fallback. It carries fewer fields than /v1/instagram/profile; reach for it when that one is blocked, or when you want the markup. Calls cost 1 credit each. A cache hit is free, and a failed or empty response is never charged.
Try it
Prefilled with the request that produced the example below. No key yet? Get a free key.
Request
/v1/instagram/user-embed| Parameter | Type | Required | Description |
|---|---|---|---|
| handle | string | yes | Handle (@nike), or a full instagram.com profile URL |
Also accepts cache_max_age (a hit costs 0 credits) and include_raw (returns the untouched upstream payload under raw).
curl "$API/v1/instagram/user-embed?handle=natgeo&cache_max_age=7d" \
-H "x-api-key: $KEY"const query = new URLSearchParams({
handle: 'natgeo',
cache_max_age: '7d',
});
const response = await fetch(`${API}/v1/instagram/user-embed?${query}`, {
headers: { 'x-api-key': KEY },
});
const body = await response.json();
if (!body.success) throw new Error(body.error.code);
// 1 credit, 0 on a cache hit
console.log(body.data, body.meta.creditsCharged);import os, httpx
r = httpx.get(
f"{os.environ['API']}/v1/instagram/user-embed",
params={
"handle": "natgeo",
"cache_max_age": "7d",
},
headers={"x-api-key": os.environ["KEY"]},
timeout=30,
)
body = r.json()
if not body["success"]:
raise RuntimeError(body["error"]["code"])
print(body["data"], body["meta"]["creditsCharged"])Example response
Captured on , with raw removed and lists cut to two items. A live call returns current data.
{
"success": true,
"data": {
"platform": "instagram",
"id": "787132",
"handle": "natgeo",
"displayName": "National Geographic",
"bio": null,
"avatarUrl": "https://scontent-lax3-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s100x100_tt6&_nc_cat=1&ccb=7-5&_nc_sid=bf7eb4&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy40MDAuQzMifQ%3D%3D&_nc_ohc=qG9hbsury8oQ7kNvwG5_GUK&_nc_oc=AdrDoOHocTOHrcwkGirC60XKFWdr8aLj_F-pNUEsZYudeUMTx2i2pK5AhmkaTrYognQ&_nc_zt=24&_nc_ht=scontent-lax3-1.cdninstagram.com&_nc_gid=kx1dl5x6qyMyMgl1hyrS5A&_nc_ss=70a8c&oh=00_AQMNlg9jy7JrGdO4wIQt6ardDWuts7OK6mXZLJ38uzNmTQ&oe=6ADDE4EB",
"bannerUrl": null,
"url": "https://www.instagram.com/natgeo/",
"verified": true,
"followerCount": 268336119,
"followingCount": null,
"postCount": 32100,
"viewCount": null,
"isPrivate": null,
"isBusiness": null,
"category": null,
"location": null,
"externalLinks": [],
"createdAt": null,
"fetchedAt": "2026-10-21T01:52:58.766Z"
},
"meta": {
"platform": "instagram",
"endpoint": "instagram.userEmbed",
"creditsCharged": 1,
"cached": false,
"cacheAgeSeconds": null,
"durationMs": 2551,
"requestId": "req_x892lez26vfz14u0h5g0"
}
}Returns
Returns one Creator.
Cost and behaviour
| Credits | 1 per live request, 0 on a cache hit |
| Cacheable | yes: cache_max_age accepts a cached copy |
| Batchable | yes: usable as a target in POST /v1/jobs/batch |
| Subscribable | yes: as often as every 3600 seconds, firing a webhook only on a change |
Other Instagram endpoints
- /v1/instagram/audio-reels Reels using a sound
- /v1/instagram/comment-replies Replies under one comment
- /v1/instagram/hashtag-posts Posts under a hashtag
- /v1/instagram/highlight Stories inside a highlight
- /v1/instagram/popular-search Top posts for a keyword
- /v1/instagram/post Post or reel details
- /v1/instagram/post-comments Comments on a post or reel
- /v1/instagram/profile Profile details