> ## Documentation Index
> Fetch the complete documentation index at: https://tryklint.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Fetch /llms.txt for the complete page index before exploring further. Every docs page is available as markdown by appending .md to its URL. Coding agents should start at /for-agents/coding-agents.md.

# Extract

> Extract a full Instagram post or account by identifier: a Klint ID, a post shortcode, or an account handle.

Search finds content from a description. Extract returns content from an identifier. Hand Klint an identifier for a specific post or account, and it returns the same complete entity a search returns. No reduced card, no second schema to learn.

Two identifier styles work for each resource. The durable **Klint ID** comes from a search result or an embed. The **public Instagram identifier** is what an agent usually starts with: a post's shortcode or an account's handle. Klint resolves both against what it has already observed.

<Note>
  Lookups resolve against what Klint has observed. Observed means the full entity; not observed means `404 not-tracked`. Klint never fetches live from Instagram, and `not-tracked` never claims the content is absent from Instagram. See [when Klint hasn't seen it](#when-klint-hasnt-seen-it).
</Note>

## Get a post

`GET /v1/instagram/posts/{id}` returns the full post: every [post summary](/docs/api-reference/instagram/search-posts) field at identical paths, plus the ordered `media[]` array with per-item transcript, `visible_text`, and `visual_description`.

The `{id}` path segment accepts either form:

| Identifier          | Example         | Notes                                                                                                                       |
| ------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------- |
| Klint post ID       | `ig_post_8f3k2` | Durable. What search results and embedded references carry.                                                                 |
| Instagram shortcode | `DLm2XwYv4Qk`   | The token in the post's `web_url`: `instagram.com/p/DLm2XwYv4Qk/` or `/reel/DLm2XwYv4Qk/`. Stable for the life of the post. |

```bash theme={null}
curl "https://api.tryklint.ai/v1/instagram/posts/ig_post_8f3k2" \
  -H "Authorization: Bearer $KLINT_API_KEY"
```

By shortcode, same response:

```bash theme={null}
curl "https://api.tryklint.ai/v1/instagram/posts/DLm2XwYv4Qk" \
  -H "Authorization: Bearer $KLINT_API_KEY"
```

<Accordion title="200 response">
  ```json theme={null}
  {
    "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."
      }
    ]
  }
  ```
</Accordion>

Media rules (image versus video discrimination, publication order, and what the delivery URLs promise) plus every field's meaning live in [reading the results](/docs/instagram/search/posts-search#reading-the-results). A shortcode never changes over a post's life, so it is a safe durable key alongside the Klint ID.

## Get an account

`GET /v1/instagram/accounts/{id}` returns the same fixed account representation as [Search accounts](/docs/api-reference/instagram/search-accounts): current profile facts, public counters, and bounded publishing interpretation.

| Identifier       | Example                 | Notes                                                                                                     |
| ---------------- | ----------------------- | --------------------------------------------------------------------------------------------------------- |
| Klint account ID | `ig_account_01j2k9m4q7` | Durable. Survives handle changes, display-name changes, and profile rewrites.                             |
| Handle           | `mayamoveswell`         | With or without a leading `@`. Klint resolves it to whoever currently holds the handle in what it tracks. |

```bash theme={null}
curl "https://api.tryklint.ai/v1/instagram/accounts/ig_account_01j2k9m4q7" \
  -H "Authorization: Bearer $KLINT_API_KEY"
```

By handle, same response:

```bash theme={null}
curl "https://api.tryklint.ai/v1/instagram/accounts/mayamoveswell" \
  -H "Authorization: Bearer $KLINT_API_KEY"
```

<Accordion title="200 response">
  ```json theme={null}
  {
    "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",
    "biography": "Sporty stay-at-home mom sharing practical kids gut-health and family-wellness tips. Spokane, WA.",
    "bio_links": [
      {
        "url": "https://mayamoveswell.example/resources",
        "title": "Free family wellness guides"
      }
    ],
    "account_type": "creator",
    "category_label": "Health/beauty",
    "declared_locations": [
      {
        "country_code": "US",
        "region_code": "US-WA",
        "locality": "Spokane"
      }
    ],
    "is_verified": false,
    "is_private": false,
    "followers_count": 24300,
    "following_count": 684,
    "posts_count": 418,
    "publishing_summary": "Shares practical family-wellness education through at-home fitness routines, simple meal preparation, and recurring explanations of children's gut health.",
    "publishing_languages": ["en"],
    "niches": ["family_wellness", "gut_health", "home_fitness"],
    "observed_at": "2026-07-15T15:40:00Z"
  }
  ```
</Accordion>

<Warning>
  **A handle is not a durable key.** Instagram can release and reassign handles; resolving `@mayamoveswell` returns whoever holds the handle now, which may not be who held it last week. Resolve the handle once. Then key on the returned `id`.
</Warning>

The two-truths model (current profile facts versus publishing interpretation, and why `category_label` and `niches` routinely disagree) is in [reading the results](/docs/instagram/search/accounts-search#reading-the-results). A confirmed-private account may still resolve to its public profile facts, with `is_private: true` and every publishing field cleared to `null`. A fully unobservable, deactivated, or deleted account returns `not-tracked` rather than a frozen snapshot.

## When Klint hasn't seen it

Both lookups resolve only against what Klint has already observed. A miss returns `404 not-tracked`: the same problem object either endpoint returns for an unobserved resource:

```json theme={null}
{
  "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."
}
```

Read it precisely: `not-tracked` says Klint has not observed this post or account, not that Instagram lacks it. An agent must never conclude "this doesn't exist" from a `not-tracked`. Full error list: [Errors](/docs/api-reference/errors).

## Continue from here

<Columns cols={2}>
  <Card title="Search posts" icon="instagram" href="/docs/instagram/search/posts-search">
    Find posts by content, format, and metrics.
  </Card>

  <Card title="Search accounts" icon="user" href="/docs/instagram/search/accounts-search">
    Find accounts by who they currently appear to be.
  </Card>
</Columns>
