# solari fetch instagram posts

> Collect an Instagram account's posts, reels, or tagged posts live.

- **CLI**: `solari fetch instagram posts`
- **MCP tool**: `solari_fetch_instagram_posts`
- **Access**: `solari:read`
- **Plans**: Free Trial · Plus · Pro · Enterprise
- **Credit**: 1

Collect one tab of an Instagram account live and get its posts back in the same call, in tab order, with views, likes, and comments. type picks the tab: posts (the profile grid), reels, or tagged_posts (other accounts' posts that tag this account).

**When to use it** — When you need an account's latest posts or current reel views, or catalog account posts looks sparse or stale.

**What comes back** — The collected posts, in the same item shape as catalog account posts, and what the collection did.

## Parameters

- `username` (string, required, ≤ 64 chars) — Instagram username.
- `type` (enum, optional, default "posts") — posts (profile grid), reels (reels tab), or tagged_posts (other accounts' posts that tag this account). Values: `posts`, `reels`, `tagged_posts`.
- `pages` (integer, optional, default 1, 1–3) — Pages of the tab to collect, roughly 12 posts each.
- `cursor` (string, optional, ≤ 8192 chars) — collection.next_cursor from the previous call, to continue further back.

## Response

### `Response`

- `found` (boolean) — false if Instagram has no account under that handle. items is empty then.
- `account_id` (uuid) — The account.
- `username` (string) — Resolved handle.
- `type` (string) — Tab that was collected.
- `collection` (object) — What the collection did.
- `total` (integer) — Posts in items.
- `items` (object[]) — The collected posts, in tab order.
- `note` (string) — Only when there is something to say: private account, tab unavailable, posts still being stored, or more pages available.
- `next` (string) — Only when the tab goes further back: the same call with cursor=next_cursor to continue.

### `collection`

- `type / pages` (string / integer) — Tab and pages read.
- `fetched_count` (integer) — Posts Instagram returned.
- `stored_count` (integer) — Posts stored or updated in the catalog by this call.
- `has_more` (boolean) — true if the tab goes further back than the pages read. Continue with cursor=next_cursor.
- `truncated` (boolean) — true if the collection stopped before every requested page was read.
- `pending_count` (integer) — Posts still being stored. Their items carry only post_id, slug, url, and posted_at for now.
- `skipped_reason` (string | null) — Why nothing was collected. private means the account is private.
- `unavailable_reason` (string | null) — Why Instagram did not return the tab.

### `items[]`

- `post_id` (uuid) — SOLARI post id.
- `slug` (string) — Instagram shortcode.
- `url` (string) — Public permalink.
- `post_type` (string) — reel, video, photo, or carousel.
- `posted_at` (timestamp) — Published at (UTC).
- `text` (string) — Caption.
- `like_count / comment_count` (integer) — Engagement.
- `play_count` (integer | null) — Views. null when Instagram gave no view count, as for most photos.
- `media_count` (integer) — Number of media items.
- `is_paid_partnership` (boolean | null) — Instagram paid-partnership label.
- `medias` (object[]) — Every media in carousel order.
- `assets` (object[]) — Media files in order. Each has a direct-download asset_url, media_type, and video_duration.
- `thumbnail_url` (string) — Thumbnail.
- `author_username / author_account_id` (string / uuid) — tagged_posts only: the account that posted it.

## Example

```console
$ solari fetch instagram posts username=innisfreeofficial type=reels
```

_Long strings and repeated array entries are trimmed for readability._

```json
{
  "found": true,
  "account_id": "018cabce-14cc-7544-8890-7811ec33ef74",
  "username": "innisfreeofficial",
  "type": "reels",
  "collection": {
    "type": "reels",
    "pages": 1,
    "fetched_count": 12,
    "stored_count": 12,
    "has_more": true,
    "truncated": false,
    "next_cursor": "eyJhIjoiMDE4Y2FiY2UiLCJ0IjoicmVlbHMiLCJjIjoiUUZEIn0",
    "pending_count": 0,
    "skipped_reason": null,
    "unavailable_reason": null
  },
  "total": 12,
  "items": [
    {
      "post_id": "01a06275-d974-7fda-98ee-dd3ee15b4dcf",
      "slug": "DcyMAmUh6FZ",
      "url": "https://www.instagram.com/p/DcyMAmUh6FZ/",
      "post_type": "reel",
      "posted_at": "2026-09-02T12:00:06+00:00",
      "text": "Deeply hydrated skin—NO OFF HOURS. 💚\nwherever the day takes MINGYU (@min9yu_k)—his hydration stays SUPERCHARGED ⚡️\n\nGreen Tea Ceramide Milk: Lightweight milky toner that won‘t clog your pores\nGreen Tea Ceramide Mist: Tou …",
      "like_count": 3224,
      "comment_count": 57,
      "play_count": 22467,
      "media_count": 1,
      "is_paid_partnership": false,
      "medias": [
        {
          "media_type": "video",
          "media_url": "https://smr-images-b.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.mp4",
          "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=0ms/https://smr-images.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.m …",
          "video_duration": 23.868000030517578,
          "tags": []
        }
      ],
      "assets": [
        {
          "asset_url": "https://smr-images-b.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.mp4",
          "media_type": "video",
          "video_duration": 23.868000030517578
        }
      ],
      "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=0ms/https://smr-images.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.m …"
    },
    "… 11 more"
  ],
  "note": "The tab has more posts: request up to 3 pages to collect further back.",
  "next": "solari fetch instagram posts username=innisfreeofficial type=reels pages=3 cursor=eyJhIjoiMDE4Y2FiY2UiLCJ0IjoicmVlbHMiLCJjIjoiUUZEIn0"
}
```

## As an MCP call

```json
{
  "name": "solari_fetch_instagram_posts",
  "arguments": {
    "username": "innisfreeofficial",
    "type": "reels"
  }
}
```

## Notes

- Use type=reels for view counts. On the profile grid, photos come back with play_count null.
- Prefer this over catalog instagram account posts when you need every recent post or current views. The stored catalog can be sparse or stale.
- A call usually takes 5 to 45 seconds. Everything collected is also stored in the catalog.
- A private account returns no items and collection.skipped_reason=private. An unknown handle is collected first; found=false means Instagram has no such account.
- When likes_hidden is true, do not use like_count. The author hid likes, so it is null or may not be the real count.

## Related tools

- [`solari_catalog_instagram_account_posts`](https://clip-pub.bzine.co/docs/tools/catalog-instagram-account-posts.md)
- [`solari_fetch_instagram_account`](https://clip-pub.bzine.co/docs/tools/fetch-instagram-account.md)
- [`solari_fetch_instagram_post`](https://clip-pub.bzine.co/docs/tools/fetch-instagram-post.md)
- [`solari_fetch_instagram_hashtag_posts`](https://clip-pub.bzine.co/docs/tools/fetch-instagram-hashtag-posts.md)
