Coding with AI?
Connect your agent to our MCP and let it integrate any endpoint for you in one shot.
Instagram Post Details
Get full details for a single Instagram post, reel, or IGTV video by URL or shortcode. Returns the caption, like / comment / share / view counts, media URLs, carousel slides, audio track info, tagged users, location, and author details.
Endpoint
GET /v1/instagram/post
Price: $0.006 per request Free tier: 50 requests/month
Parameters
Provide exactly one of url or code.
| Parameter | Required | Description |
|---|---|---|
url |
One required | Instagram post, reel, or story URL, e.g. https://www.instagram.com/p/CxYQJO8xuC6/ (max 500 characters). /p/, /reel/, /tv/, and /stories/ URLs are accepted. |
code |
One required | The post’s shortcode from the URL, e.g. CxYQJO8xuC6, or its numeric media ID (max 50 characters) |
get_sentiment |
No | Set to true to add AI emotion analysis (Plutchik’s Wheel) to the post. Adds +$0.001 per request to the cost. Returns emotion scores, dominant emotion, intensity, and polarity. |
Response Fields
| Field | Type | Description |
|---|---|---|
post |
object | Post data |
post.title |
string | Post title (format: @username on Instagram) |
post.url |
string | Direct link to the post |
post.date |
string | Publication date and time |
post.date_timestamp |
integer/null | Unix timestamp of the publication date |
post.author |
string | Instagram username |
post.author_id |
string | Author’s Instagram user ID |
post.source |
string | Platform name (Instagram) |
post.domain |
string | instagram.com |
post.snippet |
string | Post caption text |
post.likes |
integer | Number of likes |
post.comments |
integer | Number of comments |
post.shares |
integer | Number of shares |
post.reposts |
integer | Number of reposts |
post.views |
integer/null | Number of views/plays (null for image posts) |
post.is_video |
boolean | Whether the post is a video |
post.media_type |
string | Post type: feed, clips (reel), or carousel_container |
post.author_verified |
boolean | Whether the author is verified |
post.author_name |
string | Author’s display name |
post.hashtags |
array | Hashtags used in the caption |
post.mentions |
array | Usernames mentioned in the caption |
post.media_id |
string | Instagram media ID |
post.thumbnail_url |
string | URL of the post’s cover image (temporary; valid ~6-24 hours) |
post.video_url |
string | Direct video URL for video posts/reels, empty for images (temporary; valid ~6-24 hours) |
post.video_duration |
number/null | Video length in seconds (null for images) |
post.width |
integer | Media width in pixels |
post.height |
integer | Media height in pixels |
post.carousel_media_count |
integer | Number of items in a carousel post (0 for single-media posts) |
post.is_paid_partnership |
boolean | Whether the post is a paid partnership / branded content |
post.location |
object/null | Geotag with name, city, lat, lng (null when the post has no location) |
post.tagged_users |
array | Users tagged in the post (username, full_name, user_id) |
post.coauthors |
array | Collaborators on the post (username, full_name, user_id, is_verified) |
post.carousel_media |
array | For carousel/album posts: one entry per slide with media_id, is_video, image_url, video_url, width, height (empty for single-media posts) |
post.audio |
object/null | Audio track for reels/videos: type (music or original), title, artist, audio_id, duration_ms (null when the post has no audio) |
post.is_pinned |
boolean | Whether the post is pinned to the top of the author’s profile |
post.accessibility_caption |
string | Auto-generated alt text describing the image (empty when unavailable) |
post.sentiment |
object/null | Emotion analysis results. Only present when get_sentiment=true. Returns null if analysis fails. |
post.sentiment.emotions |
object | Plutchik emotion scores (0-100) for: joy, trust, fear, surprise, sadness, disgust, anger, anticipation. |
post.sentiment.dominant_emotion |
string | The emotion with the highest score. |
post.sentiment.emotional_intensity |
integer | Overall emotional intensity on a scale of 0-10. |
post.sentiment.polarity |
string | Overall sentiment polarity: positive, negative, or neutral. |
If the post does not exist, the endpoint returns a 404 with code: "not_found".
Example Request
cURL
curl "https://apidirect.io/v1/instagram/post?url=https://www.instagram.com/reel/DaTSSukB-Lb/" \
-H "X-API-Key: YOUR_API_KEY"
Python
import requests
response = requests.get(
"https://apidirect.io/v1/instagram/post",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"url": "https://www.instagram.com/reel/DaTSSukB-Lb/"}
)
print(response.json())
You can also pass the post’s shortcode instead of a URL:
curl "https://apidirect.io/v1/instagram/post?code=DaTSSukB-Lb" \
-H "X-API-Key: YOUR_API_KEY"
Example Response
{
"post": {
"title": "@instagram on Instagram",
"url": "https://instagram.com/p/DaTSSukB-Lb",
"date": "2026-07-02 18:58:11",
"date_timestamp": 1783018691,
"author": "instagram",
"author_id": "25025320",
"source": "Instagram",
"domain": "instagram.com",
"snippet": "this glow >>> #InTheMoment Video by @chriswoodlight Music by Amory Reel",
"likes": 167541,
"comments": 2493,
"shares": 13063,
"reposts": 0,
"views": 21786137,
"is_video": true,
"media_type": "clips",
"author_verified": true,
"author_name": "Instagram",
"hashtags": ["#InTheMoment"],
"mentions": ["chriswoodlight"],
"media_id": "3932567351408976603",
"thumbnail_url": "https://scontent.cdninstagram.com/v/t51.82787-15/cover.jpg",
"video_url": "https://scontent.cdninstagram.com/o1/v/t2/video.mp4",
"video_duration": 22.03,
"width": 720,
"height": 1280,
"carousel_media_count": 0,
"is_paid_partnership": false,
"location": null,
"tagged_users": [
{"username": "chriswoodlight", "full_name": "Chris Wood Light Studio", "user_id": "2107151539"}
],
"coauthors": [],
"carousel_media": [],
"audio": {
"type": "music",
"title": "her garden",
"artist": "Amory Reel",
"audio_id": "7115801341882925",
"duration_ms": 89205
},
"is_pinned": false,
"accessibility_caption": ""
}
}
Notes
thumbnail_url,video_url, and carousel media URLs are temporary CDN links that expire after roughly 6-24 hours. Request the post again whenever you need fresh links.- Reels return
media_typeclipsplusviews,video_url,video_duration, and theaudiotrack. Carousel posts returnmedia_typecarousel_containerand onecarousel_mediaentry per slide.