Fetch a post
Fetch one Instagram post or reel by shortcode, with a fully structured payload and all engagement metrics we can find — including play/view counts for reels.
GET /v1/instagram/post/{post_id}
Path parameter
| Parameter | Description |
|---|---|
post_id | The post shortcode (e.g. DcghxSFtjRB) or a full post URL (/p/…, /reel/…, /tv/…). |
Example
curl "$LISTENX_BASE/v1/instagram/post/DcghxSFtjRB" \
-H "X-API-Key: $LISTENX_KEY"
Response
{
"id": "3972323393553183809",
"shortcode": "DcghxSFtjRB",
"url": "https://www.instagram.com/p/DcghxSFtjRB/",
"type": "reel",
"product_type": "clips",
"is_video": true,
"taken_at": "2025-06-12T15:25:12+00:00",
"caption": "…",
"hashtags": ["lebenmitkindern", "familytime", "mamaglück"],
"mentions": [],
"accessibility_caption": "Video by … May be an image of baby, sling and text.",
"author": {
"id": "15904929129",
"username": "jasmin_momlife",
"full_name": "Jasmin | Mama Alltag & Family Bloggerin",
"is_verified": false,
"is_private": false,
"profile_pic_url": "https://…",
"follower_count": 48210
},
"coauthors": [],
"location": { "id": "…", "name": "…", "lat": null, "lng": null },
"music": {
"title": "Original audio",
"artist": "jasmin_momlife",
"is_original_audio": true
},
"engagement": {
"like_count": 4045,
"comment_count": 238,
"play_count": 185300,
"ig_play_count": 185300,
"view_count": 185300,
"views": 185300,
"reshare_count": 512,
"share_count": 512,
"save_count": 1290,
"fb_like_count": 12,
"top_likers": ["someuser"],
"like_and_view_counts_disabled": false,
"comments_disabled": false
},
"media": {
"image": { "url": "https://…", "width": 1219, "height": 2160 },
"video": { "url": "https://…", "width": 720, "height": 1280 },
"video_duration": 16.0,
"width": 1440,
"height": 2560,
"carousel_count": null,
"carousel": []
},
"tagged_users": [],
"billing": {
"endpoint": "instagram.post",
"units": 1,
"unit_price": "0.020000",
"amount": "0.020000",
"balance_after": "97.320000",
"request_id": "…"
}
}
Engagement metrics
Every metric Instagram exposes is surfaced. The most relevant:
| Field | Description |
|---|---|
like_count | Likes. |
comment_count | Comments. |
play_count / ig_play_count | Reel/video plays. |
view_count / views | View count (normalised views = best available). |
reshare_count / share_count | Shares / reshares. |
save_count | Saves (when available). |
fb_like_count, fb_play_count | Cross-posted Facebook counts (when available). |
like_and_view_counts_disabled | Whether the creator hid counts. |
Why some fields are
nullInstagram does not return every metric for every post (e.g. an image post has no
play_count; some creators disable counts). Fields that Instagram omits are
returned as null rather than dropped, so your schema stays stable.
Media
- Images / reels:
media.image(cover) andmedia.videogive the highest- resolution URL, width, and height. - Carousels:
media.carouselis an array of child items, each with its own image/video and type.
Billing
Billed per request (units = 1), regardless of media type. See
Billing.
Errors
| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_post_id | Not a valid shortcode/URL. |
| 404 | post_not_found | Private, deleted, or nonexistent. |
| 429 | upstream_rate_limited | Retry with backoff. |