# solari catalog instagram content history

> Instagram post engagement over time.

- **CLI**: `solari catalog instagram content history`
- **MCP tool**: `solari_catalog_instagram_content_history`
- **Access**: `solari:read` — Available on any SOLARI plan, including the trial. One credit per successful call.
- **Plans**: Any paid plan or trial
- **Credit**: 1

Likes, comments, plays, and reshares of Instagram posts over time, as SOLARI recorded them. Pick posts directly, or trace an account's newest posts.

**When to use it** — When you want to see how a post's numbers grew, or compare posts' growth curves.

**What comes back** — One entry per post, each with recorded values, oldest first.

## Parameters

- `post_ids` (uuid[], optional, ≤ 50 items, uuid) — post_ids to trace. Up to 50 together with slugs and urls.
- `slugs` (string[], optional, ≤ 50 items) — Instagram shortcodes to trace.
- `urls` (string[], optional, ≤ 50 items) — Public Instagram post URLs to trace.
- `account_id` (string, optional, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — Trace this account's newest posts. Pass account_id or username.
- `username` (string, optional, ≤ 64 chars) — Instagram username to trace. Ignored when account_id is set.
- `posted_since` (string, optional, pattern ^\d{4}-\d{2}-\d{2}$) — Account mode: only posts published on or after this UTC date (YYYY-MM-DD).
- `posted_until` (string, optional, pattern ^\d{4}-\d{2}-\d{2}$) — Account mode: only posts published on or before this UTC date (YYYY-MM-DD).
- `limit` (integer, optional, ≥ 1) — Account mode: how many of the newest posts to trace.
- `since` (string, optional, pattern ^\d{4}-\d{2}-\d{2}$) — Only values recorded on or after this UTC date (YYYY-MM-DD).
- `until` (string, optional, pattern ^\d{4}-\d{2}-\d{2}$) — Only values recorded on or before this UTC date (YYYY-MM-DD).
- `granularity` (enum, optional, default "day") — day keeps one point per post per UTC day. all keeps every point. Values: `day`, `all`.

## Response

### `Response`

- `found` (boolean) — Account mode: false if the account is not in the catalog. Post mode: false if none of the posts are.
- `account_id / username` (string | null) — Account mode: the resolved account.
- `granularity` (string) — day or all, as applied.
- `items` (object[]) — One entry per post. Request order for posts, newest first for an account.
- `missing` (string[]) — Post mode: the post_ids or shortcodes that are not in the catalog.

### `items[]`

- `post_id` (uuid) — SOLARI post id.
- `slug` (string) — Instagram shortcode.
- `url` (string) — Public permalink.
- `posted_at` (timestamp) — Published at (UTC).
- `account_id / username` (string) — Authoring account.
- `points` (object[]) — Recorded values, oldest first.
- `truncated` (boolean) — true if older points were dropped. Narrow since to see them.

### `items[].points[]`

- `captured_at` (timestamp) — When SOLARI recorded these values (UTC).
- `like_count / comment_count` (integer | null) — Likes and comments at that moment.
- `play_count` (integer | null) — Video plays at that moment. Null for images.
- `reshare_count` (integer | null) — Reshares at that moment, when Instagram shows them.
- `likes_hidden` (boolean | null) — The author hid like and view counts. like_count is usually still there.
- `deleted` (boolean) — true if the post had been deleted by then.

## Example

```console
$ solari catalog instagram content history username=innisfreeofficial posted_since=2026-09-20 posted_until=2026-09-23 limit=2
```

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

```json
{
  "found": true,
  "account_id": "018cabce-14cc-7544-8890-7811ec33ef74",
  "username": "innisfreeofficial",
  "granularity": "day",
  "items": [
    {
      "post_id": "01a0caef-bf57-7996-83af-d75cd21ab215",
      "slug": "DdlXQy8I10z",
      "url": "https://www.instagram.com/p/DdlXQy8I10z/",
      "posted_at": "2026-09-22T09:00:12Z",
      "account_id": "018cabce-14cc-7544-8890-7811ec33ef74",
      "username": "innisfreeofficial",
      "points": [
        {
          "captured_at": "2026-09-22T21:05:04.820000Z",
          "like_count": 80,
          "comment_count": 2,
          "play_count": null,
          "reshare_count": null,
          "likes_hidden": false,
          "deleted": false
        },
        {
          "captured_at": "2026-09-23T21:30:43.016000Z",
          "like_count": 112,
          "comment_count": 3,
          "play_count": null,
          "reshare_count": null,
          "likes_hidden": false,
          "deleted": false
        },
        "… 1 more"
      ],
      "truncated": false
    },
    {
      "post_id": "01a0c433-73cd-7141-a458-e2eeb1441dba",
      "slug": "DdiychFo_91",
      "url": "https://www.instagram.com/p/DdiychFo_91/",
      "posted_at": "2026-09-21T09:00:07Z",
      "account_id": "018cabce-14cc-7544-8890-7811ec33ef74",
      "username": "innisfreeofficial",
      "points": [
        {
          "captured_at": "2026-09-21T20:00:23.541000Z",
          "like_count": 94,
          "comment_count": 5,
          "play_count": null,
          "reshare_count": null,
          "likes_hidden": false,
          "deleted": false
        },
        {
          "captured_at": "2026-09-22T21:05:05.524000Z",
          "like_count": 114,
          "comment_count": 6,
          "play_count": null,
          "reshare_count": null,
          "likes_hidden": false,
          "deleted": false
        },
        "… 2 more"
      ],
      "truncated": false
    }
  ],
  "missing": []
}
```

## As an MCP call

```json
{
  "name": "solari_catalog_instagram_content_history",
  "arguments": {
    "username": "innisfreeofficial",
    "posted_since": "2026-09-20",
    "posted_until": "2026-09-23",
    "limit": 2
  }
}
```

## Notes

- Pass posts (post_ids, slugs, urls) or an account (account_id or username), not both.
- since and until filter the recorded values. posted_since and posted_until pick which of the account's posts to trace.
- Posts are re-collected mostly in their first days, so older posts have few points and gaps are normal.
- likes_hidden=true does not mean like_count is missing. It is usually still there, so keep those posts in comparisons.
- This reads the catalog only. For a missing post, call solari fetch instagram post url=… first. Recording starts from then; past values cannot be filled in.

## Related tools

- [`solari_catalog_instagram_content_detail`](https://solari.sh/docs/tools/catalog-instagram-content-detail.md)
- [`solari_catalog_instagram_account_posts`](https://solari.sh/docs/tools/catalog-instagram-account-posts.md)
- [`solari_catalog_instagram_account_history`](https://solari.sh/docs/tools/catalog-instagram-account-history.md)
- [`solari_fetch_instagram_post`](https://solari.sh/docs/tools/fetch-instagram-post.md)
