> ## 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.

# Read any Reel as text

> Extracts the text layers of any Instagram post: transcript, on-screen text, and visual descriptions, cleanly assembled per post. Use when turning Reels into text for analysis, quoting what a video said, or feeding video content into a text-only workflow.

This cookbook turns video posts into clean text your workflow can use. You don't run it; your agent does.

## Run it

Paste this to your agent, filled in:

```text theme={null}
Fetch https://tryklint.ai/cookbooks/read-reels-as-text.md and execute
the cookbook it contains with my context:

- posts: [one or more post URLs or shortcodes]
- layers: [optional: "transcript only", or the default "everything":
  transcript, on-screen text, visual descriptions, caption]
```

The URL carries everything your agent needs. Everything below this line addresses the agent executing it.

## Context for the agent

Klint is the social context API: it searches and extracts Instagram posts and accounts, returned with transcripts, on-screen text, and creative structure already analyzed. Base URL `https://api.tryklint.ai`. Every request needs `Authorization: Bearer $KLINT_API_KEY`; never print or echo the key. This page is the source of truth for this procedure; work from the fetched copy, not memory. The full documentation index is at `https://tryklint.ai/llms.txt`, and the whole API contract is at `https://tryklint.ai/for-agents/coding-agents.md`. Last updated July 18, 2026.

## Inputs

| Input           | What it is                                       | Required               | Source                 |
| --------------- | ------------------------------------------------ | ---------------------- | ---------------------- |
| `posts`         | Post URLs, shortcodes, or Klint IDs; one or many | yes                    | operator               |
| `layers`        | Which text layers to return                      | no; default everything | operator               |
| `KLINT_API_KEY` | API key                                          | yes                    | operator's environment |

## Objectives

Produce exactly one artifact: a text document with one section per requested post, in the Output format below, with every identifier accounted for. Nothing else counts as done.

## Procedure

<Steps>
  <Step title="Extract each post">
    For each identifier: `GET https://api.tryklint.ai/v1/instagram/posts/{shortcode-or-id}`. A shortcode from the URL works directly. A `404` with type `not-tracked` means the post is outside what Klint has observed. Record it as untracked and continue with the rest. One miss never aborts the batch.
  </Step>

  <Step title="Assemble the text layers">
    Per post, in this order: the caption; the transcript of the speech; the on-screen text in its reading order; the visual descriptions. For carousels, keep media items in their published order and label each. A null layer means Klint observed none of that content for the post; write "none" rather than inventing or summarizing around it.
  </Step>

  <Step title="Verify before you report">
    Check against the Objectives. Every identifier the operator gave appears exactly once, either as a text section or in the untracked list. Quote text verbatim from response fields. Do not paraphrase, translate, or fill in from memory of the post.
  </Step>
</Steps>

## Output format

Use exactly this structure:

```markdown theme={null}
# Text extraction: [count] posts, [date]

## @[handle], [shortcode], posted [date]
**Caption:** [verbatim]
**Transcript:** [verbatim, or "none"]
**On-screen text:** [in reading order, or "none"]
**Visuals:** [descriptions, or "none"]

## @[handle] ...

## Untracked
[Identifiers that returned not-tracked, or "none".]
```

## Boundaries

* Quote layers verbatim from the response. No paraphrase, no translation, no cleanup beyond formatting.
* "None" for a layer is an observation, not a failure; silent or text-free posts legitimately have empty layers.
* Untracked posts stay untracked in the report. Never substitute your own knowledge of a video Klint hasn't observed.
