# solari fetch threads posts

> Threads アカウントの最近の投稿をライブで読みます。

- **CLI**: `solari fetch threads posts`
- **MCP ツール**: `solari_fetch_threads_posts`
- **アクセス権**: `solari:read` — トライアルを含むすべての SOLARI プランで利用できます。成功した呼び出し 1 回につき 1 クレジットです。
- **対象プラン**: 有料プランまたはトライアル
- **クレジット**: 1

正確なユーザー名で Threads アカウントの最新のトップレベル投稿を、プロフィールと一緒に読みます。投稿ごとに本文、ハッシュタグ、メンション、リンク、いいね・返信・リポスト・引用・シェアの数、引用した投稿、そして直接ダウンロードできる asset_url 付きの assets が返ります。SOLARI では Threads は fetch 専用なので、catalog の手順はなく、この呼び出しがそのまま投稿一覧です。SOLARI が初めて見るハンドルはその場で収集し(5〜30 秒)、1 時間以内の再呼び出しは保存済みのコピーを使い回します。refresh=true で新しく収集します。

**どんなときに使うか** — 正確な Threads ハンドルがあり、最近何を投稿したか知りたいときに使います。

**返される内容** — プロフィール、新しい順のトップレベル投稿を最大 limit 件、そして最新の投稿を返信付きで開く fetch コマンドです。

## パラメータ

- `username` (string, 必須, ≤ 64 chars) — Threads のユーザー名。@ はあってもなくても構いません。
- `limit` (integer, 任意, ≥ 1) — 何件まで。新しい順です。
- `refresh` (boolean, 任意) — 直近 1 時間のコピーがあっても収集し直します。

## レスポンス

### `Response`

- `account` (object) — プロフィール。
- `posts` (object[]) — トップレベルの投稿。新しい順。
- `total` (integer) — 返った投稿の数。
- `collected_at` (timestamp | null) — このコピーを収集した時刻。
- `fetched_on_demand` (boolean) — この呼び出しがライブで収集したら true。
- `stale` (boolean) — ライブ収集に失敗して古いコピーが返ったら true。collected_at がその古さを示します。
- `note` (string | null) — 注意点があるときだけ入ります。たとえば非公開アカウント。
- `next` (string) — 最新の投稿を返信付きで開く fetch コマンド。投稿があるときだけ。

### `account`

- `account_id` (uuid) — Threads のアカウント id。Instagram や TikTok の id とは互換しません。
- `username` (string) — ハンドル。小文字で、@ なし。
- `full_name` (string | null) — 表示名。
- `biography` (string | null) — 自己紹介(bio)の文章。
- `follower_count` (integer | null) — 収集時点のフォロワー数。
- `is_verified` (boolean | null) — 認証バッジ。
- `is_private` (boolean | null) — 非公開アカウント。投稿は空で返ります。
- `bio_links` (string[]) — bio に載っているリンク。
- `profile_pic_url` (string | null) — プロフィール画像の URL。最大サイズ。
- `url` (string | null) — 公開プロフィールの URL。

### `posts[]`

- `post_id` (uuid) — Threads の投稿 id。Instagram や TikTok の id とは互換しません。
- `code` (string | null) — パーマリンクのコード。URL の /post/ の後ろの部分。
- `url` (string | null) — 公開パーマリンク。
- `account_id` (uuid | null) — 投稿者の account_id。
- `username` (string | null) — 投稿者のハンドル。
- `text` (string | null) — 投稿の本文。
- `posted_at` (timestamp | null) — 投稿日時(UTC)。
- `like_count` (integer | null) — いいね数。
- `reply_count` (integer | null) — Threads 上の返信数。返った返信より多いことがあります。
- `repost_count` (integer | null) — リポスト数。
- `quote_count` (integer | null) — 引用数。
- `reshare_count` (integer | null) — シェア数。
- `counts_hidden` (boolean | null) — 投稿者がエンゲージメント数を隠していたら true。
- `hashtags` (string[]) — ハッシュタグ。# なし。
- `mentions` (string[]) — メンションされたハンドル。@ なし。
- `link_urls` (string[]) — 投稿に付いたリンク。
- `is_reply` (boolean | null) — 別の投稿への返信なら true。
- `reply_to_username` (string | null) — この投稿が返信した相手のハンドル。トップレベルの投稿なら null。
- `is_paid_partnership` (boolean | null) — 有料パートナーシップのラベル。
- `topic` (string | null) — Threads が付けたトピックタグ。あるときだけ。
- `language` (string | null) — 本文の言語コード。
- `quoted_post` (object | null) — 引用した投稿。username、text、like_count、posted_at、url があります。引用投稿でなければ null。
- `assets` (object[]) — 投稿のメディアファイルです。順番どおりに並び、それぞれ asset_url、media_type、video_duration があります
- `assets[].asset_url` (string | null) — 元のサイズの画像や動画を直接ダウンロードできるリンクです。保存されたファイルがない場合は null です

## 例

```console
$ solari fetch threads posts username=zuck limit=2
```

_読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_

```json
{
  "account": {
    "account_id": "019f3a5c-2b7e-7c41-9d0e-5a1f2c3b4d5e",
    "username": "zuck",
    "full_name": "Mark Zuckerberg",
    "biography": "Mostly superintelligence and MMA takes",
    "follower_count": 5745085,
    "is_verified": true,
    "is_private": false,
    "bio_links": [],
    "profile_pic_url": "https://scontent-gmp1-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?…",
    "url": "https://www.threads.com/@zuck"
  },
  "posts": [
    {
      "post_id": "019f3a5c-2b7e-7c41-9d0e-5a1f2c3b4d60",
      "code": "Ddt7cL5EfUG",
      "url": "https://www.threads.com/@zuck/post/Ddt7cL5EfUG",
      "account_id": "019f3a5c-2b7e-7c41-9d0e-5a1f2c3b4d5e",
      "username": "zuck",
      "text": "Agrippa said it's time to get back to work 😎",
      "posted_at": "2026-09-25T16:50:21.000Z",
      "like_count": 4964,
      "reply_count": 477,
      "repost_count": 254,
      "quote_count": 45,
      "reshare_count": 136,
      "counts_hidden": false,
      "hashtags": [],
      "mentions": [],
      "link_urls": [],
      "is_reply": false,
      "reply_to_username": null,
      "is_paid_partnership": false,
      "topic": null,
      "language": null,
      "quoted_post": null,
      "assets": [
        {
          "asset_url": "https://smr-images.bzine.co/threads/…",
          "media_type": "image",
          "video_duration": null
        },
        {
          "asset_url": "https://smr-images.bzine.co/threads/…",
          "media_type": "image",
          "video_duration": null
        }
      ]
    },
    {
      "post_id": "019f3a5c-2b7e-7c41-9d0e-5a1f2c3b4d61",
      "code": "Ddpj4YZkd3P",
      "url": "https://www.threads.com/@zuck/post/Ddpj4YZkd3P",
      "account_id": "019f3a5c-2b7e-7c41-9d0e-5a1f2c3b4d5e",
      "username": "zuck",
      "text": "Here's everything I announced at Meta Connect today 👇",
      "posted_at": "2026-09-24T00:07:31.000Z",
      "like_count": 2680,
      "reply_count": 612,
      "repost_count": 164,
      "quote_count": 34,
      "reshare_count": 138,
      "counts_hidden": false,
      "hashtags": [],
      "mentions": [],
      "link_urls": [],
      "is_reply": false,
      "reply_to_username": null,
      "is_paid_partnership": false,
      "topic": null,
      "language": null,
      "quoted_post": null,
      "assets": []
    }
  ],
  "total": 2,
  "collected_at": "2026-09-28T09:13:55Z",
  "fetched_on_demand": true,
  "stale": false,
  "note": null,
  "next": "solari fetch threads post url=https://www.threads.com/@zuck/post/Ddt7cL5EfUG"
}
```

## MCP で呼び出す場合

```json
{
  "name": "solari_fetch_threads_posts",
  "arguments": {
    "username": "zuck",
    "limit": 2
  }
}
```

## 注意点

- Threads は fetch 専用です。catalog の手順はないので、このレスポンスから投稿を読みます。
- トップレベルの投稿だけを新しい順に並べます。アカウント自身の返信は含みません。fetch threads post が投稿 1 件を返信付きで読みます。
- 初回の収集は 5〜30 秒かかります(fetched_on_demand=true)。1 時間以内の再呼び出しは保存済みのコピーを返し、refresh=true なら新しく収集します。
- stale=true は、ライブ収集に失敗して古いコピーが返ったという意味です。collected_at がその古さを示します。
- 非公開アカウントはプロフィールだけが返り、posts は空です。収集直後のメディア URL は一時的な場合があるので、すぐに読んでください。
- Threads プロフィールのないハンドルは、空の結果ではなくエラーです。失敗した呼び出しはクレジットを消費しません。

## 関連ツール

- [`solari_fetch_threads_account`](https://pub.brandazine.ai/docs/tools/fetch-threads-account.md?lang=ja)
- [`solari_fetch_threads_account_search`](https://pub.brandazine.ai/docs/tools/fetch-threads-account-search.md?lang=ja)
- [`solari_fetch_threads_post`](https://pub.brandazine.ai/docs/tools/fetch-threads-post.md?lang=ja)
