Get a post
curl --request GET \
--url https://api.tryklint.ai/v1/instagram/posts/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tryklint.ai/v1/instagram/posts/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tryklint.ai/v1/instagram/posts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tryklint.ai/v1/instagram/posts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tryklint.ai/v1/instagram/posts/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tryklint.ai/v1/instagram/posts/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tryklint.ai/v1/instagram/posts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyPosts
Get a post
Read one full post including ordered media items, transcripts, visible text, and visual descriptions.
GET
/
v1
/
instagram
/
posts
/
{id}
Get a post
curl --request GET \
--url https://api.tryklint.ai/v1/instagram/posts/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tryklint.ai/v1/instagram/posts/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tryklint.ai/v1/instagram/posts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tryklint.ai/v1/instagram/posts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tryklint.ai/v1/instagram/posts/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tryklint.ai/v1/instagram/posts/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tryklint.ai/v1/instagram/posts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyReturns the full post: every post summary field at identical paths, plus the ordered
media[] array with per-item transcript, visible_text, and visual_description.
| Parameter | Notes |
|---|---|
id | Klint post ID (ig_post_…, e.g. from a search result) or the Instagram shortcode from the post’s web_url. Both resolve against what Klint has observed. See Extract. |
curl "https://api.tryklint.ai/v1/instagram/posts/ig_post_8f3k2" \
-H "Authorization: Bearer $KLINT_API_KEY"
200 — reel (single video item)
200 — reel (single video item)
{
"id": "ig_post_8f3k2",
"shortcode": "DLm2XwYv4Qk",
"web_url": "https://www.instagram.com/reel/DLm2XwYv4Qk/",
"posted_at": "2026-07-06T14:02:00Z",
"observed_at": "2026-07-14T16:10:00Z",
"format": "reel",
"primary_language": "en",
"caption": "The brush that finally fixed our shedding problem 🐕 One week of daily passes and the couch is fur-free. Grab 20% off with code GROOM20 — link in bio. #doggrooming",
"hashtags": [
"doggrooming"
],
"caption_mentions": [],
"audio": {
"id": "ig_audio_7m4q",
"instagram_id": "587784541076604",
"type": "music",
"title": "Birthday Wish",
"attribution": {
"display_name": "Shuba",
"account": null
},
"duration_seconds": 153.76,
"web_url": "https://www.instagram.com/reels/audio/587784541076604/"
},
"content_summary": "A creator demonstrates a deshedding brush on a dog, describes a less-messy grooming routine, shows the result, and directs viewers to a discount in the Account bio.",
"topics": [
"dog_grooming",
"at_home_pet_care"
],
"creative_formats": [
"talking_head",
"product_demonstration",
"creator_testimonial"
],
"hook": {
"construction": "The creator holds the brush beside a visibly shedding dog, states that it changed the grooming routine, and displays a seven-day result claim.",
"devices": [
"problem_callout",
"direct_promise"
],
"modalities": [
"visual",
"spoken",
"on_screen_text"
]
},
"key_messages": [
{
"summary": "The brush is presented as making at-home shedding cleanup easier.",
"roles": [
"claim",
"benefit",
"use_case"
],
"presentation": "asserted"
}
],
"proofs": [
{
"summary": "The creator demonstrates brushing the dog and shows the collected hair.",
"mechanisms": [
"live_product_demonstration",
"result_reveal"
],
"cited_source_types": []
}
],
"offers": [
{
"summary": "20% off with a stated promo code.",
"types": [
"discount",
"promo_code"
],
"stated_terms": [
"20% off",
"GROOM20"
]
}
],
"calls_to_action": [
{
"summary": "Use the link in the Account bio.",
"actions": [
"visit_profile_link"
],
"stages": [
"closing"
],
"modalities": [
"spoken",
"on_screen_text",
"caption"
]
}
],
"narrative_structure": {
"description": "Problem framing, product demonstration, result reveal, then offer and CTA.",
"patterns": [
"problem_solution",
"demonstration_to_result",
"offer_close"
]
},
"has_paid_partnership_label": false,
"paid_partners": [],
"commercial_contexts": [
"promo_code",
"seller_behavior"
],
"comments_enabled": true,
"views": 412000,
"likes": 28600,
"comments": 354,
"engagement_rate_by_views": 0.0703,
"view_ratio_to_account_baseline": 6.2,
"author": {
"id": "ig_account_2j1x",
"handle": "dogmomdaily",
"display_name": "Dog Mom Daily",
"web_url": "https://www.instagram.com/dogmomdaily/",
"avatar_url": "https://media.tryklint.ai/accounts/ig_account_2j1x/avatar",
"followers_count": 21400,
"is_verified": false
},
"coauthors": [],
"media": [
{
"id": "ig_media_01",
"type": "video",
"width": 1080,
"height": 1920,
"media_url": "https://media.tryklint.ai/media/ig_media_01/content",
"duration_seconds": 31.4,
"thumbnail_url": "https://media.tryklint.ai/media/ig_media_01/thumbnail",
"transcript": "This brush changed our grooming routine. Luna used to leave fur on everything. One week of daily passes, and look at this — the couch is finally clean. Here's how we use it: short strokes with the coat, once a day. If you want one, we've got twenty percent off with code GROOM20 in our bio.",
"visible_text": [
{
"text": "LESS SHEDDING IN 7 DAYS",
"start_seconds": 0.2,
"end_seconds": 2.4
},
{
"text": "LINK IN BIO",
"start_seconds": 25.8,
"end_seconds": 30.9
}
],
"visual_description": "A creator demonstrates a deshedding brush on a golden retriever and displays the collected hair."
}
]
}
200 — mixed carousel (image + video items)
200 — mixed carousel (image + video items)
{
"id": "ig_post_4h9s",
"shortcode": "DKm3PtYv8Qz",
"web_url": "https://www.instagram.com/p/DKm3PtYv8Qz/",
"posted_at": "2026-05-12T16:20:00Z",
"observed_at": "2026-07-13T08:50:00Z",
"format": "carousel",
"primary_language": "en",
"caption": "5 ways to support kids' gut health 🥣 Save this for your next grocery run!\n\n1. Add more plant variety\n2. Try fermented foods\n3. Keep breakfast simple\n\nFull list in the slides. #kidsguthealth #familywellness",
"hashtags": [
"kidsguthealth",
"familywellness"
],
"caption_mentions": [],
"audio": null,
"content_summary": "An educational carousel walks through five practical ways to support children's gut health, pairing designed tip slides with a short breakfast demonstration.",
"topics": [
"kids_gut_health",
"family_nutrition"
],
"creative_formats": [
"tutorial"
],
"hook": {
"construction": "A designed title slide promises five concrete ways to support kids' gut health.",
"devices": [
"list_preview"
],
"modalities": [
"visual",
"on_screen_text"
]
},
"key_messages": [
{
"summary": "Plant variety is presented as the foundation of children's gut health.",
"roles": [
"claim"
],
"presentation": "asserted"
}
],
"proofs": [],
"offers": [],
"calls_to_action": [
{
"summary": "Save this Post for the next grocery run.",
"actions": [
"save_post"
],
"stages": [
"opening"
],
"modalities": [
"caption"
]
}
],
"narrative_structure": null,
"has_paid_partnership_label": false,
"paid_partners": [],
"commercial_contexts": [],
"comments_enabled": true,
"views": null,
"likes": 1980,
"comments": 76,
"engagement_rate_by_views": null,
"view_ratio_to_account_baseline": null,
"author": {
"id": "ig_account_01j2k9m4q7",
"handle": "mayamoveswell",
"display_name": "Maya | Family Wellness",
"web_url": "https://www.instagram.com/mayamoveswell/",
"avatar_url": "https://media.tryklint.ai/accounts/ig_account_01j2k9m4q7/avatar",
"followers_count": 24300,
"is_verified": false
},
"coauthors": [],
"media": [
{
"id": "ig_media_7c1a",
"type": "image",
"width": 1080,
"height": 1350,
"media_url": "https://media.tryklint.ai/media/ig_media_7c1a/content",
"visible_text": [
{
"text": "5 WAYS TO SUPPORT KIDS' GUT HEALTH"
},
{
"text": "1. ADD MORE PLANT VARIETY"
}
],
"visual_description": "A designed educational slide introducing five tips for supporting children's gut health."
},
{
"id": "ig_media_7c1b",
"type": "video",
"width": 1080,
"height": 1350,
"media_url": "https://media.tryklint.ai/media/ig_media_7c1b/content",
"duration_seconds": 8.2,
"thumbnail_url": "https://media.tryklint.ai/media/ig_media_7c1b/thumbnail",
"transcript": null,
"visible_text": [
{
"text": "TRY THIS AT BREAKFAST",
"start_seconds": 0.4,
"end_seconds": 2.8
}
],
"visual_description": "A breakfast bowl is assembled while the tip appears on screen."
}
]
}
200 — freshly observed, enrichment pending
200 — freshly observed, enrichment pending
{
"id": "ig_post_6k2v",
"shortcode": "DNq8VwZk3Tf",
"web_url": "https://www.instagram.com/reel/DNq8VwZk3Tf/",
"posted_at": "2026-07-16T13:45:00Z",
"observed_at": "2026-07-17T02:10:00Z",
"format": "reel",
"primary_language": null,
"caption": "Pumpkin + oat treats your pup will lose it for 🎃🐶 Recipe below!\n\n1 cup pumpkin purée\n2 cups oat flour\n1 egg\n\n#dogtreats #pawfectpantry",
"hashtags": [
"dogtreats",
"pawfectpantry"
],
"caption_mentions": [],
"audio": null,
"content_summary": null,
"topics": null,
"creative_formats": null,
"hook": null,
"key_messages": null,
"proofs": null,
"offers": null,
"calls_to_action": null,
"narrative_structure": null,
"has_paid_partnership_label": null,
"paid_partners": null,
"commercial_contexts": null,
"comments_enabled": true,
"views": 1840,
"likes": 212,
"comments": 9,
"engagement_rate_by_views": 0.1201,
"view_ratio_to_account_baseline": null,
"author": {
"id": "ig_account_5r8n",
"handle": "thepawfectpantry",
"display_name": "The Pawfect Pantry",
"web_url": "https://www.instagram.com/thepawfectpantry/",
"avatar_url": null,
"followers_count": 9700,
"is_verified": false
},
"coauthors": [],
"media": [
{
"id": "ig_media_9d3f",
"type": "video",
"width": 1080,
"height": 1920,
"media_url": "https://media.tryklint.ai/media/ig_media_9d3f/content",
"duration_seconds": 22.6,
"thumbnail_url": "https://media.tryklint.ai/media/ig_media_9d3f/thumbnail",
"transcript": null,
"visible_text": null,
"visual_description": null
}
]
}
Media items
media[] is required, complete, and in Instagram publication order. The type field discriminates items. Image items omit the video-only fields (duration_seconds, thumbnail_url, transcript). Video items carry them, with null when a value is unavailable. Delivery URLs are Klint-controlled routes. Standard HTTP semantics govern caching and redirects. A URL is not a retention promise. Full rules: reading the results.
Errors
An unknown or currently unavailable post returns a problem object. There are no partial posts or tombstones:{
"type": "https://api.tryklint.ai/problems/not-tracked",
"status": 404,
"request_id": "req_example_51",
"detail": "ig_post_7q9zz is a valid Post key but is not in what Klint tracks. This does not claim the post is absent from Instagram."
}
not-tracked does not mean the post is absent from Instagram. Full catalog: Errors.⌘I