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 Token | 1 小時 | 開發測試用,Token Generator 直接產生 |
| Long-lived Token | 60 天 | 正式使用,用 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###
- 前往 Meta Developer Portal
- 點擊 My Apps → Create App
- 選擇 App 類型為 Business
- 建立完成後,在 App Dashboard 中加入 Threads API 產品
Step 2:設定 Test User###
在 App 審核通過前,只能用 test user 測試:
- 進入 App Dashboard → App Roles → Roles
- 將你的 Threads 帳號加入為 Threads Tester
- 用該帳號登入 Threads,前往 Settings → Account → Website Permissions 接受邀請
Warning
忘記在 Threads 端接受邀請是最常見的設定錯誤。即使在 Meta Developer Portal 加入了 test user,你仍需要在 Threads App 中手動接受。
Step 3:取得 Access Token###
取得 Short-lived Token:
在 App Dashboard → Threads API → Threads 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 request | Container 還沒處理完就嘗試 publish | 延長等待時間至 30 秒以上 |
Invalid user id | User ID 不正確或 test user 未設定 | 確認已在 Threads 端接受 tester 邀請 |
The access token is invalid | Token 過期或 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 的差異###
| 項目 | Threads | |
|---|---|---|
| 發布流程 | 單步 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)
登入後即可留言