API 參考
個人 API 參考
個人金鑰(tnu_…)可用的每個端點:方法與路徑、可用角色、對應的 MCP 工具、參數、請求本文欄位、範例與錯誤。
網址前綴 https://api.tennnzo.com/api/user/v1,每個請求帶 Authorization: Bearer tnu_…。JSON 進、JSON 出,每個回應都有 X-Request-Id。
機器可讀的 OpenAPI 3.1: /openapi-user.json(兩個 API 合併:/openapi.json)。慣例與錯誤碼見請求慣例。
使用方法:個人 API 使用方法、MCP 連線。
金鑰主人、組織、角色與可見的專案。個人金鑰在組織層級運作,不綁工作區。
可用角色:客戶、Agency、平台管理員。
回應
200身分與組織。
- 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
審稿
審稿佇列、單篇、審稿動作。
等審的貼文。客戶只有「待客戶審」(client_review);Agency 與管理員看全部階段。每篇的 images(圖片與影片,kind 區分)帶 15 分鐘有效的簽名連結;影片連結支援 Range。
可用角色:客戶、Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
stage | string · 查詢 | 只看某個階段(客戶只有 client_review)可用值:draft、internal_review、client_review、approved、scheduled |
limit | integer · 查詢 | 1–100 |
回應
200posts 陣列;每篇的 images[] 有 id、caption、kind、mime_type、duration_ms、thumb_url、url。
{
"posts": [
{
"id": "e6baef30-…",
"images": [
{
"id": "…",
"caption": null,
"thumb_url": "https://api.tennnzo.com/api/user/v1/media/…?k=…&size=thumb&exp=…&sig=…",
"url": "https://…"
}
]
}
]
}- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
單篇貼文與相關脈絡(含簽名圖片連結)。看不到的貼文一律 404。
可用角色:客戶、Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 貼文 id(審稿佇列給的) |
回應
200貼文內容;images[] 同審稿佇列。
- 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
規則和 dashboard 的按鈕一樣。客戶:approve、request_changes、reject、request_rewrite(後三者要 comment),只能在「待客戶審」、專案開著客戶審稿、你有審稿權時。Agency/管理員另有 submit、cancel_rewrite、schedule/reschedule(要未來的 scheduled_for)、unschedule。
可用角色:客戶、Agency、平台管理員(客戶要有審稿權)。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 貼文 id |
請求本文(JSON)
客戶只能用 approve、request_changes、reject、request_rewrite(不收 scheduled_for)。
| 欄位 | 型別 | 說明 |
|---|---|---|
action必填 | string | 可用值:submit、approve、request_changes、reject、request_rewrite、cancel_rewrite、schedule、reschedule、unschedule |
comment | string | 意見(退回、要求修改、要求重寫時必填)最多 2000 字 |
scheduled_for | string | schedule/reschedule 用:發出時間(ISO,帶時區) |
{
"action": "request_changes",
"comment": "開頭太像上一篇,換個角度"
}回應
200移動後的狀態。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 413
payload_too_large:請求內容太大 - 422
rejected:規則不允許(message 是原因) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
已發布與報告
已發布的貼文與報告。
已發布的貼文,新的在前;用 before 分頁。
可用角色:客戶、Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
limit | integer · 查詢 | 1–100 |
before | string · 查詢 | 分頁:這個時間之前發布的 |
persona_id | string · 查詢 |
回應
200posts 陣列。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
客戶只看得到已發給客戶的報告。
可用角色:客戶、Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
limit | integer · 查詢 | 1–100 |
回應
200reports 陣列。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
報告內容。
可用角色:客戶、Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 報告 id |
回應
200報告。
- 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
待裁決
Agency 與管理員:看待裁決、裁決、回答選項題。
預設列未裁決的。
可用角色:Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
status | string · 查詢 | 預設 open(未裁決)可用值:open、resolved、dismissed、decided |
limit | integer · 查詢 | 1–200 |
回應
200items 陣列。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
把待裁決標成已處理,可附備註。
可用角色:Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 待裁決的 id |
請求本文(JSON)
| 欄位 | 型別 | 說明 |
|---|---|---|
note | string | 備註;不處理時必填原因最多 500 字 |
{
"note": "已和客戶確認"
}回應
200裁決後的狀態。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 413
payload_too_large:請求內容太大 - 422
rejected:規則不允許(message 是原因) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
標成不處理,note 必填(原因)。
可用角色:Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 待裁決的 id |
請求本文(JSON)
| 欄位 | 型別 | 說明 |
|---|---|---|
note | string | 備註;不處理時必填原因最多 500 字 |
{
"note": "這張不需要換"
}回應
200裁決後的狀態。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 413
payload_too_large:請求內容太大 - 422
rejected:規則不允許(message 是原因) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
選選項 keys,或都不是時寫 other(兩者不能一起給)。
可用角色:Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 待裁決的 id |
請求本文(JSON)
| 欄位 | 型別 | 說明 |
|---|---|---|
keys | string[] | 選中的選項 key最多 12 個 |
other | string | 都不是:寫下答案(不能和 keys 一起給)最多 500 字 |
{
"keys": [
"tabby"
]
}回應
200裁決後的狀態。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 413
payload_too_large:請求內容太大 - 422
rejected:規則不允許(message 是原因) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
Agent 看板
Agency 與管理員:看板卡、交辦、確認、退回重做。
看板卡;預設進行中的三種(待領取、進行中、待確認)。
可用角色:Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
status | string · 查詢 | 逗號分隔的狀態:open、in_progress、awaiting_confirmation、done、failed、cancelled |
limit | integer · 查詢 | 最多幾張(1–200)1–200 |
回應
200tasks 陣列。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
開一張卡給 Agent(不指定 agent_id=誰先領誰做)。target_type 與 target_id 要一起給。
可用角色:Agency、平台管理員。
請求本文(JSON)
| 欄位 | 型別 | 說明 |
|---|---|---|
agent_id | string | 交給哪個 Agent;不給=誰先領誰做 |
kind必填 | string | 可用值:write_posts、rewrite_post、change_avatar、change_bio、delete_post、pause_account、resume_account、export_data、other |
title必填 | string | 1–200 字 |
detail | string | 最多 4000 字 |
target_type | string | 可用值:slot、persona、post、issue |
target_id | string | |
due_at | string |
{
"kind": "change_bio",
"title": "TW-T014 改 bio",
"detail": "改成「下班後的咖啡地圖」"
}回應
200已存在(重送或同名),沒有新建
201新卡回 201,已有同一張回 200。
{
"task": {
"id": "…"
},
"created": true
}- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 413
payload_too_large:請求內容太大 - 422
rejected:規則不允許(message 是原因) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
確認 Agent 交回來的卡。
可用角色:Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 卡的 id |
請求本文(JSON)
| 欄位 | 型別 | 說明 |
|---|---|---|
note | string | 最多 2000 字 |
{}回應
200更新後的卡。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 413
payload_too_large:請求內容太大 - 422
rejected:規則不允許(message 是原因) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
退回 Agent 重做,note 必填(哪裡不對)。
可用角色:Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 卡的 id |
請求本文(JSON)
| 欄位 | 型別 | 說明 |
|---|---|---|
note | string | 最多 2000 字 |
{
"note": "顏色不對,要偏暖"
}回應
200更新後的卡。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 413
payload_too_large:請求內容太大 - 422
rejected:規則不允許(message 是原因) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
今天需要處理的事與排程概況。
可用角色:Agency、平台管理員。
回應
200今日摘要。
- 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
各帳號的成效數字,可依平台篩選。
可用角色:Agency、平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
platform | string · 查詢 | 可用值:threads、tiktok、x、facebook、instagram、reddit |
limit | integer · 查詢 | 1–500 |
回應
200成效。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
金鑰管理
平台管理員:這個組織所有金鑰、撤銷。
這個組織所有成員與 Agent 的金鑰(只有前綴與使用時間,看不到金鑰本身)。
可用角色:平台管理員。
回應
200金鑰清單。
- 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
撤銷任何成員或 Agent 的金鑰。立即生效、不能恢復。
可用角色:平台管理員。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
kind必填 | string · 路徑 | user 成員的個人金鑰/agent Agent 金鑰可用值:user、agent |
id必填 | string (uuid) · 路徑 | 金鑰 id |
回應
200撤銷結果。
- 401
unauthorized:沒帶金鑰、金鑰錯誤或已撤銷、Agent 金鑰的工作區已封存、還沒完成首次登入設定、已不是組織成員 - 403
forbidden:你的角色不能做這件事 - 404
not_found:找不到,或你看不到(不會說是哪一種) - 422
rejected:規則不允許(message 是原因) - 429
rate_limited:太快了,看 Retry-After 秒數再試 - 500
internal:伺服器錯誤
審稿佇列與單篇回傳的 thumb_url/url。不用帶金鑰,15 分鐘內有效;金鑰撤銷後也立刻失效。照原樣使用,不要自己組。
參數
| 欄位 | 型別 | 說明 |
|---|---|---|
id必填 | string (uuid) · 路徑 | 圖片 id |
k必填 | string · 查詢 | 金鑰 id |
size | string · 查詢 | thumb 縮圖/full 原圖可用值:thumb、full |
exp必填 | integer · 查詢 | 到期時間(Unix 秒) |
sig必填 | string · 查詢 | 簽名 |
回應
200圖檔本身(image/*)。
- 400
invalid_request:參數格式不對(message 會指出哪個欄位) - 404
not_found:找不到,或你看不到(不會說是哪一種) - 500
internal:伺服器錯誤