參考資料
REST API
從你自己的程式碼建立、排程和發布貼文、上傳媒體和讀取成效。API 遵守和 SPREVA 本身相同的規則和驗證。
你的第一個請求
- 1
在 SPREVA 的開發人員中,於 API 金鑰建立一組 API 金鑰。這個範例只需要「唯讀」金鑰;發布則需要具備「發布」存取權的金鑰。
- 2
列出你的社群帳號:
終端機 curl https://app.spreva.ai/api/v1/social-accounts \ -H "Authorization: Bearer spreva_sk_..." - 3
讀取回覆。結果會放在
data中,為某個帳號建立貼文時,要把該帳號的id當作connectionId傳送。範例已經縮短:實際的物件有更多欄位。JSON { "data": [ { "id": "e81b3f52-0000-4000-8000-000000000005", "provider": "instagram", "displayName": "Acme Studio", "username": "acme", "status": "ACTIVE", "needsReconnect": false } ] }
基本資訊
所有端點都在這個位址下。以 JSON 傳送,並以 Authorization: Bearer 加上金鑰的形式提供金鑰。
https://app.spreva.ai/api/v1- 一組金鑰屬於一個工作空間,而且只能看到那個工作空間。
- 上限:在一個工作空間中,每個人每分鐘 120 個請求,由他建立的所有金鑰共用。超過之後,回覆會是
429,訊息中會說明需要等待幾秒。 - 錯誤會以請求的
Accept-Language標頭所指定的語言回傳;錯誤的code永遠不變。 - 從已登入 SPREVA 的瀏覽器呼叫時,請傳送包含工作空間 ID 的
x-workspace-id,而不是金鑰。
金鑰和權限
金鑰會代表建立它的人執行動作,而且絕不能超出那個人的角色所允許的範圍。金鑰由擁有者和管理員在包含 API 存取權的方案中建立,完整的金鑰只會顯示一次。每組金鑰都有建立時所授予的權限:
posts:read- 查看貼文、貼文狀態、結果和佇列
media:read- 查看媒體庫
accounts:read- 查看已連結的社群帳號
analytics:read- 查看數據分析
posts:write- 建立、編輯、排程、發布和刪除貼文,以及管理佇列
media:write- 上傳、重新命名和刪除媒體
webhooks:write- 查看和新增 Webhook 端點
ai:write- 使用 AI。文案和主題標籤還需要 posts:write;替代文字和圖片還需要 media:write
唯讀提供四項讀取權限。發布另外加上 posts:write、media:write 和 ai:write,足以用於自動化流程或 AI 代理程式。403 表示金鑰缺少該權限,或建立者的角色已不再允許。
金鑰和代理程式都絕對無法核准貼文:在需要核准的工作空間中,只有人能在 SPREVA 中核准。
錯誤
每個錯誤的結構都相同。依 code 判斷處理方式,並顯示 message。
{
"error": {
"code": "FORBIDDEN",
"message": "API key needs the posts:write scope for posts:create"
}
}- 400
INVALID_REQUEST, INVALID_JSON, WORKSPACE_REQUIRED本文或查詢參數與端點不符。details 會列出每個錯誤的欄位。沒有 x-workspace-id 的瀏覽器呼叫會收到 WORKSPACE_REQUIRED。
- 401
UNAUTHENTICATED金鑰缺少、輸入錯誤、已撤銷或已過期。請傳送「Authorization: Bearer <key>」。
- 402
ENTITLEMENT_EXCEEDED, AI_LIMIT_REACHED工作空間沒有生效中的方案、AI 點數已用完,或方案不包含這項功能。擁有者可以在「設定」>「帳單」中選擇方案或購買點數。
- 403
FORBIDDEN金鑰沒有這個請求所需的權限,或你的角色不允許。請建立存取權更多的金鑰。
- 404
NOT_FOUND這個工作空間中沒有這個物件。金鑰只能看到建立它的工作空間。
- 409
CONCURRENT_MODIFICATION, INVALID_STATE_TRANSITION, CONFLICT, AI_NOT_CONFIGURED, REVIEW_REQUIRED你讀取貼文後它已有變更、它的狀態不允許這個動作(例如發布已發布的貼文)、你要刪除的檔案仍被貼文使用,或這個安裝版本尚未設定 AI。請重新取得後再試一次。REVIEW_REQUIRED 不同:工作空間要求貼文發布前先經過核准,所以請用 POST /posts/{id}/review 送出審核,而不是重試。
- 422
VALIDATION_FAILED, PROVIDER_VALIDATION_FAILED, AI_REFUSED內容不符合要發布的帳號,或 AI 請求遭到拒絕。GET /providers 會列出每個社群平台的規則。
- 429
RATE_LIMITED, AI_BUSY你在這個工作空間中一分鐘內的請求超過 120 個,或同時有太多 AI 請求。RATE_LIMITED 的訊息會說明需要等待幾秒;AI_BUSY 則稍候片刻即可。
- 500
INTERNAL處理請求時,SPREVA 或社群平台發生錯誤。稍後再試一次。
- 503
AI_UNAVAILABLEAI 供應商目前無法使用。稍後再試一次。
端點
路徑是相對於基礎網址的路徑。OpenAPI 文件描述了每個本文和參數,你也可以用它產生用戶端:
https://app.spreva.ai/api/openapi.json社群帳號和社群平台
get /social-accounts已連結的社群帳號。get /providers每個社群平台的規則:格式、版位和上限。
貼文
get /posts貼文,可依狀態、日期、帳號、社群平台或行銷活動篩選。post /posts為一個或多個帳號建立草稿貼文。get /posts/{id}一則貼文,包含它的帳號、驗證結果和媒體。patch /posts/{id}變更貼文。傳送你讀取的version;如果之後有變更,回覆會是409。delete /posts/{id}刪除貼文。post /posts/{id}/publish立即發布。回覆是202:追蹤貼文或 Webhook 以取得結果。post /posts/{id}/schedule排程在指定時間,並附上時區。post /posts/{id}/queue加入佇列的下一個空時段。post /posts/{id}/review附上時間或佇列送出審核;核准後就會發布。post /posts/{id}/retry重試發布失敗的帳號。
媒體
get /media媒體庫,可搜尋和篩選。post /media/uploads開始上傳:回覆會說明要把檔案傳送到哪裡。post /media/uploads/{id}/complete完成上傳。接著會檢查和處理檔案。get /media/{id}一個檔案,包含它的狀態和已知的資訊。delete /media/{id}刪除檔案。仍被貼文使用的檔案會回覆409。put /media/{id}/alt-text儲存或清除檔案的替代文字。post /media/{id}/alt-text/suggestion用 AI 建議替代文字,但不儲存。
數據分析
get /analytics一段期間的成效。get /analytics/export以 CSV 檔案提供相同的成效。
佇列
get /queues發布佇列。post /queues建立含每週時段的佇列。patch /queues/{id}變更佇列。delete /queues/{id}刪除佇列。
Webhook
get /webhooksWebhook 端點。post /webhooks新增端點。回覆會附上它的密鑰,只有這一次。
AI
get /aiAI 是否可用、剩餘的點數,以及每個動作的費用。post /ai/captions建議改寫文案、翻譯或主題標籤,但不儲存。post /ai/images生成圖片。持續查詢GET /media/{id},直到圖片完成。