The Own Lab The Own Lab

Threads API 發文指南

從零開始用 Meta Threads API 發布貼文與串文的完整實作指南

Why##

如果你已經在用 LinkedIn API 自動發文,把 Threads 加入發布流程是自然的下一步。Threads 的使用者偏好短文、口語化內容,適合用來觸及不同族群。

透過 Threads API,你可以:

  • 從 CLI 或 MCP Server 自動發文,省去手動操作
  • 將長文拆成串文(thread),每則 500 字以內
  • 與 LinkedIn API 整合,一次發布到多個平台

Note

Threads API 與 LinkedIn API 最大的差異是兩步驟發布流程 — 先建立 container,等待處理後再發布。

What##

兩步驟發布流程###

Threads 的發文不是一步 POST 就完成。Meta 採用 container 機制:

sequenceDiagram
    autonumber
    participant App
    participant Threads as Threads API
    App->>Threads: 1. Create media container
    Threads-->>App: Return container ID
    Note over App: Wait 30 seconds
    App->>Threads: 2. Publish container
    Threads-->>App: Return post ID

為什麼需要等待? 即使是純文字,Meta 後端也需要時間進行內容處理和審核。你可以把 container 想成餐廳的號碼牌 — 先點餐拿號碼(container ID),等候處理後再取餐(publish)。

Media Types###

類型media_type說明
純文字TEXT文字內容,URL 自動產生預覽卡片
圖片IMAGE需提供公開可存取的圖片 URL
影片VIDEO需提供公開可存取的影片 URL
輪播CAROUSEL最多 20 張圖片/影片混合,三步驟流程

串文機制###

Threads 沒有「長文」概念,每則貼文上限 500 字元(UTF-8 計算)。長內容需要拆成多則,用 reply_to_id 串接:

flowchart TD
    A["Post 1: Hook"] -->|publish| B["Get post_id_1"]
    B --> C["Post 2: create with reply_to_id=post_id_1"]
    C -->|publish| D["Get post_id_2"]
    D --> E["Post 3: create with reply_to_id=post_id_2"]
    E -->|publish| F["Thread complete"]

每一則都要走完整的兩步驟流程(create → wait → publish),然後用前一則的 post ID 作為 reply_to_id

Token 生命週期###

類型有效期用途
Short-lived Token1 小時開發測試用,Token Generator 直接產生
Long-lived Token60 天正式使用,用 short-lived token 換取

Tip

為什麼沒有永久 Token?基於安全性考量 — token 洩漏(log 檔、截圖、錯誤的 git commit)是必然會發生的事。有時效的 token 洩漏後會自然失效,將損害降到最低。

OAuth Scopes###

Scope用途
threads_basic讀取個人資料、取得 User ID
threads_content_publish發布貼文
threads_manage_replies管理回覆、控制回覆對象

How##

Step 1:建立 Meta Developer App###

  1. 前往 Meta Developer Portal
  2. 點擊 My AppsCreate App
  3. 選擇 App 類型為 Business
  4. 建立完成後,在 App Dashboard 中加入 Threads API 產品

Step 2:設定 Test User###

在 App 審核通過前,只能用 test user 測試:

  1. 進入 App Dashboard → App RolesRoles
  2. 將你的 Threads 帳號加入為 Threads Tester
  3. 用該帳號登入 Threads,前往 Settings → Account → Website Permissions 接受邀請

Warning

忘記在 Threads 端接受邀請是最常見的設定錯誤。即使在 Meta Developer Portal 加入了 test user,你仍需要在 Threads App 中手動接受。

Step 3:取得 Access Token###

取得 Short-lived Token:

在 App Dashboard → Threads APIThreads Token Generator,選擇你的帳號,點擊 Generate Token

換成 Long-lived Token(有效 60 天):

curl -s -X GET \
  "https://graph.threads.net/access_token?\
grant_type=th_exchange_token&\
client_secret=YOUR_APP_SECRET&\
access_token=YOUR_SHORT_LIVED_TOKEN"

回傳:

{
  "access_token": "THQV...",
  "token_type": "bearer",
  "expires_in": 5184000
}

Step 4:取得 User ID###

curl -s "https://graph.threads.net/v1.0/me?access_token=YOUR_TOKEN"

回傳:

{
  "id": "1234567890"
}

這個 id 就是你在後續 API 呼叫中使用的 THREADS_USER_ID

Step 5:發布單則貼文###

Step 5a — 建立 container:

curl -X POST "https://graph.threads.net/v1.0/YOUR_USER_ID/threads" \
  -d "media_type=TEXT" \
  -d "text=Hello from Threads API!" \
  -d "access_token=YOUR_TOKEN"

回傳:

{
  "id": "CONTAINER_ID"
}

Step 5b — 等待 30 秒後發布:

sleep 30

curl -X POST "https://graph.threads.net/v1.0/YOUR_USER_ID/threads_publish" \
  -d "creation_id=CONTAINER_ID" \
  -d "access_token=YOUR_TOKEN"

回傳:

{
  "id": "POST_ID"
}

Step 6:發布串文###

串文就是多次重複 Step 5 的流程,每次用前一則的 POST_ID 作為 reply_to_id

第一則(正常發布):

# Create container
curl -X POST "https://graph.threads.net/v1.0/YOUR_USER_ID/threads" \
  -d "media_type=TEXT" \
  -d "text=1/ Threads API 最特別的設計是兩步驟發布..." \
  -d "access_token=YOUR_TOKEN"
# → { "id": "CONTAINER_1" }

sleep 30

# Publish
curl -X POST "https://graph.threads.net/v1.0/YOUR_USER_ID/threads_publish" \
  -d "creation_id=CONTAINER_1" \
  -d "access_token=YOUR_TOKEN"
# → { "id": "POST_1" }

第二則(用 reply_to_id 串接):

curl -X POST "https://graph.threads.net/v1.0/YOUR_USER_ID/threads" \
  -d "media_type=TEXT" \
  -d "text=2/ 這個設計的原因是 Meta 需要時間處理媒體內容..." \
  -d "reply_to_id=POST_1" \
  -d "access_token=YOUR_TOKEN"
# → { "id": "CONTAINER_2" }

sleep 30

curl -X POST "https://graph.threads.net/v1.0/YOUR_USER_ID/threads_publish" \
  -d "creation_id=CONTAINER_2" \
  -d "access_token=YOUR_TOKEN"
# → { "id": "POST_2" }

以此類推,每一則都串接前一則的 post ID。

常見錯誤###

錯誤原因解法
Unsupported post requestContainer 還沒處理完就嘗試 publish延長等待時間至 30 秒以上
Invalid user idUser ID 不正確或 test user 未設定確認已在 Threads 端接受 tester 邀請
The access token is invalidToken 過期或 scope 不足重新取得 token,確認含 threads_content_publish
Rate limit reached超過發文頻率限制查詢 /threads_publishing_limit 確認剩餘額度

查詢 Rate Limit:

curl -s "https://graph.threads.net/v1.0/YOUR_USER_ID/threads_publishing_limit\
?fields=quota_usage,config&access_token=YOUR_TOKEN"

與 LinkedIn API 的差異###

項目LinkedInThreads
發布流程單步 POST兩步(create → 等 30s → publish)
串文不支援reply_to_id 串接
媒體上傳需先上傳取得 asset URN給公開 URL 即可
文字限制~3000 字元~500 字元/則
Token 有效期60 天1 小時(需換 60 天 long-lived)
格式支援純文字純文字(URL 自動預覽)

Summary##

  • Threads API 採用兩步驟發布:先建立 container,等待 30 秒後再 publish
  • 長文需拆成串文,每則 ≤500 字元,用 reply_to_id 串接
  • Token 有兩種:short-lived(1 小時)用於測試,long-lived(60 天)用於正式環境
  • App 審核前只能用 test user 測試,記得在 Threads 端接受邀請
  • 所有社群平台都不支援 Markdown,發文內容需要改寫為純文字格式

留言 (0)

登入後即可留言