# 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초), 한 시간 안의 재호출은 저장된 사본을 다시 씁니다. refresh=true면 새로 수집합니다.

**언제 쓰나요** — 정확한 Threads 핸들이 있고 최근에 무엇을 올렸는지 보고 싶을 때 쓰세요.

**돌려주는 값** — 프로필, 최신순 상위 게시물 최대 limit개, 그리고 가장 최신 게시물을 답글과 함께 여는 fetch 명령입니다.

## 파라미터

- `username` (string, 필수, ≤ 64 chars) — Threads 사용자명. @는 있어도 없어도 됩니다
- `limit` (integer, 선택, ≥ 1) — 몇 개까지. 최신순입니다
- `refresh` (boolean, 선택) — 최근 한 시간 안의 사본이 있어도 다시 수집합니다

## 응답

### `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가 게시물 하나를 답글과 함께 읽습니다.
- 첫 수집은 5~30초 걸립니다(fetched_on_demand=true). 한 시간 안의 재호출은 저장된 사본을 돌려주고, refresh=true면 새로 수집합니다.
- stale=true는 라이브 수집이 실패해서 예전 사본이 왔다는 뜻입니다. collected_at이 얼마나 오래됐는지 알려 줍니다.
- 비공개 계정은 프로필만 오고 posts는 비어 있습니다. 수집 직후의 미디어 URL은 임시일 수 있으니 바로 읽어 두세요.
- Threads 프로필이 없는 핸들은 빈 결과가 아니라 에러입니다. 실패한 호출은 크레딧을 쓰지 않습니다.

## 관련 도구

- [`solari_fetch_threads_account`](https://finder-dev-pub.bzine.co/docs/tools/fetch-threads-account.md?lang=ko)
- [`solari_fetch_threads_account_search`](https://finder-dev-pub.bzine.co/docs/tools/fetch-threads-account-search.md?lang=ko)
- [`solari_fetch_threads_post`](https://finder-dev-pub.bzine.co/docs/tools/fetch-threads-post.md?lang=ko)
