API v2
使用 v2 REST API 進行代理程式管理、串流聊天、對話、意見回饋、來源、聯絡人、潛在客戶與設定。
API v2 是一套結構化的 REST API,用於管理代理程式並建立自訂聊天體驗。它新增了代理程式管理、串流聊天、對話紀錄、訊息意見回饋、聯絡人、潛在客戶、來源、設定與訓練端點。
使用 API 需要 Hobby 方案以上,且帳單狀態為有效。
基礎 URL
https://your-domain.com/api/v2
身分驗證
除了健康檢查端點外,請以你工作區的 API 金鑰作為 Bearer 權杖傳送:
Authorization: Bearer YOUR_API_KEY
在 設定 > API 金鑰 中建立與撤銷 API 金鑰。
回應格式
大多數成功回應會回傳資源物件,或以 data 封裝:
{
"data": []
}
清單端點包含游標分頁:
{
"data": [],
"pagination": {
"cursor": null,
"hasMore": false,
"total": 0
}
}
錯誤會使用結構化的 error 物件:
{
"error": {
"code": "VALIDATION_INVALID_BODY",
"message": "Invalid request body"
}
}
每個 v2 回應都包含 x-request-id 標頭。聯絡支援團隊回報 API 請求問題時,請附上此值。
對話範圍
唯讀對話端點預設使用 source=api_v2。設定 source=widget 可回傳小工具與 Playground 對話;Playground 記錄會以 widget 來源儲存。設定 source=all 可回傳 API v2、小工具與 Playground 對話。結果永遠僅限於已驗證帳戶所擁有的代理程式。無效的 source 值,或帶有一個以上的 source 查詢參數,會回傳 400 VALIDATION_INVALID_BODY。對話延續、重試、意見回饋、訊息列表與依使用者查詢,僅適用於 API v2 對話。
健康檢查
GET /api/v2/health
健康檢查端點不需要身分驗證。
成功:200 OK
{
"status": "ok",
"timestamp": 1784332800
}
timestamp 為目前的 Unix 時間戳記(秒)。
聊天
POST /api/v2/agents/{agentId}/chat
請求:
{
"message": "What plans do you offer?",
"conversationId": "optional-existing-conversation-id",
"userId": "optional-user-id",
"stream": true
}
| 欄位 | 是否必填 | 說明 |
|---|---|---|
message | 是 | 1 到 32,000 字元。 |
conversationId | 否 | 延續一個 API v2 對話。未知的 ID 會回傳 404。 |
userId | 否 | 用於分組 API 對話的穩定終端使用者 ID。允許使用字母、數字、.、_ 與 -。 |
stream | 否 | 預設為 true。設為 false 可取得單一 JSON 回應。 |
串流回應使用 Server-Sent Events。串流內容包含 message-start、text-start、text-delta、text-end、message-metadata、finish 與 [DONE] 等事件。當串流或完成掛鉤(completion hook)失敗時,會發出 error 事件,其 error.code 設為 CHAT_STREAMING_ERROR;這個僅用於 SSE 的協定代碼獨立於結構化的 REST 錯誤目錄。message-metadata 在訊息成功持久化時,會包含助理訊息 ID,並附上對話 ID、使用者 ID、完成原因(finish reason)與用量資訊。當沒有助理訊息被持久化時,其 messageId 為 null。當回覆因用戶端動作而暫停時,串流也會發出帶有 { "id", "name", "arguments" } 的 tool-call 事件;請將結果提交至 tool-result 端點 以繼續對話——該請求的回應會以串流方式傳回後續內容。
非串流回應會回傳:
{
"data": {
"id": "123",
"role": "assistant",
"parts": [{ "type": "text", "text": "..." }],
"pendingToolCall": null,
"metadata": {
"userMessageId": "122",
"conversationId": "abc123",
"userId": "user_123",
"finishReason": "stop",
"usage": { "credits": 1 }
}
}
}
非串流回應中的 data.id 與 metadata.userMessageId 是以字串序列化的數字訊息 ID;若對應的訊息未被持久化,則為 null。metadata.userId 為傳入或已儲存的使用者 ID,若無則為 null。pendingToolCall 為 null,除非回覆在用戶端工具呼叫處暫停;此時它會包含 { "id", "name", "arguments" },供工具結果端點使用。
端點摘要
| 方法 | 端點 | 說明 | 參考文件 |
|---|---|---|---|
| GET | /api/v2/health | 檢查 API 健康狀態。 | 健康檢查 |
| GET | /api/v2/agents | 列出代理程式。 | 代理程式與設定 |
| POST | /api/v2/agents | 建立代理程式。 | 代理程式與設定 |
| GET | /api/v2/agents/{agentId} | 取得一個代理程式。 | 代理程式與設定 |
| PATCH | /api/v2/agents/{agentId} | 更新代理程式名稱或 URL。 | 代理程式與設定 |
| DELETE | /api/v2/agents/{agentId} | 刪除代理程式。 | 代理程式與設定 |
| POST | /api/v2/agents/{agentId}/chat | 傳送一則聊天訊息。 | 聊天 |
| GET | /api/v2/agents/{agentId}/conversations | 依來源列出對話。 | 對話 |
| GET | /api/v2/agents/{agentId}/conversations/export | 匯出對話及其訊息。 | 對話 |
| GET | /api/v2/agents/{agentId}/conversations/{conversationId} | 依來源取得一則對話。 | 對話 |
| GET | /api/v2/agents/{agentId}/conversations/{conversationId}/messages | 列出一個 API v2 對話中的訊息。 | 對話 |
| POST | /api/v2/agents/{agentId}/conversations/{conversationId}/retry | 重試一則 API v2 助理回覆。 | 對話 |
| POST | /api/v2/agents/{agentId}/conversations/{conversationId}/tool-result | 提交用戶端工具結果。 | 對話 |
| PATCH | /api/v2/agents/{agentId}/conversations/{conversationId}/messages/{messageId}/feedback | 設定或清除助理訊息的意見回饋。 | 對話 |
| GET | /api/v2/agents/{agentId}/users/{userId}/conversations | 列出某終端使用者的 API v2 對話。 | 對話 |
| GET | /api/v2/agents/{agentId}/sources | 列出訓練來源。 | 來源與訓練 |
| POST | /api/v2/agents/{agentId}/sources/text | 新增文字來源。 | 來源與訓練 |
| POST | /api/v2/agents/{agentId}/sources/qna | 新增問答(Q&A)來源。 | 來源與訓練 |
| POST | /api/v2/agents/{agentId}/sources/url | 新增或重新訓練一個 URL 來源。 | 來源與訓練 |
| POST | /api/v2/agents/{agentId}/sources/file/upload-url | 為直接檔案上傳建立簽署 URL。 | 來源與訓練 |
| POST | /api/v2/agents/{agentId}/sources/file | 註冊已上傳的檔案並開始處理。 | 來源與訓練 |
| DELETE | /api/v2/agents/{agentId}/sources/{documentId} | 刪除一個來源。 | 來源與訓練 |
| GET | /api/v2/agents/{agentId}/contacts | 列出聯絡人。 | 聯絡人 |
| POST | /api/v2/agents/{agentId}/contacts | 依外部 ID 建立或更新一位聯絡人。 | 聯絡人 |
| POST | /api/v2/agents/{agentId}/contacts/import | 批次更新聯絡人。 | 聯絡人 |
| GET | /api/v2/agents/{agentId}/leads | 列出已擷取的潛在客戶。 | 聯絡人與潛在客戶 |
| GET/PATCH | /api/v2/agents/{agentId}/settings/ai | 讀取或更新 AI 設定。 | 代理程式與設定 |
| GET/PATCH | /api/v2/agents/{agentId}/settings/design | 讀取或更新設計設定。 | 代理程式與設定 |
| GET/PATCH | /api/v2/agents/{agentId}/settings/security | 讀取或更新安全性設定。 | 代理程式與設定 |
| GET/PATCH | /api/v2/agents/{agentId}/settings/notifications | 讀取或更新通知設定。 | 代理程式與設定 |
| GET/PATCH | /api/v2/agents/{agentId}/settings/training | 讀取或更新訓練設定。 | 代理程式與設定 |
| GET | /api/v2/agents/{agentId}/channels/instagram | 取得 Instagram 連線、自動化功能與對話開場白。 | Instagram 頻道 |
| GET/PATCH | /api/v2/agents/{agentId}/channels/instagram/automations/{key} | 讀取或更新一項 Instagram 自動化功能。 | Instagram 頻道 |
| GET/PATCH | /api/v2/agents/{agentId}/channels/instagram/conversation-starters | 讀取或更新 Instagram 對話開場白。 | Instagram 頻道 |
| GET | /api/v2/agents/{agentId}/train | 取得訓練狀態。 | 來源與訓練 |
| POST | /api/v2/agents/{agentId}/train | 開始重新訓練網頁來源。 | 來源與訓練 |
意見回饋
使用意見回饋功能,將 API v2 助理訊息標記為 positive、negative 或 null。請求結構、回應內容與錯誤行為,請見對話、訊息與意見回饋。
分頁
請將游標視為 API 回傳的不透明權杖。在下一次請求時原封不動地帶上 pagination.cursor 的值;請勿自行建構或解析它。
| 查詢參數 | 說明 |
|---|---|
limit | 預設為 20。除非端點另有說明較低上限,否則必須是 1 到 100 之間的整數;對話匯出的上限為 20。 |
cursor | 前一頁回傳的不透明游標。無效的游標會回傳 400 VALIDATION_INVALID_BODY。 |
聯絡人另外接受 search。潛在客戶接受包含邊界的 createdAfter 與 createdBefore ISO 8601 日期時間篩選條件。來源接受 sourceType,可為 web_crawl、file_upload、text_snippet 或 qna_entry。
游標格式屬於內部實作細節。用戶端必須將每個游標都視為不透明權杖,原封不動地重複使用,不得自行建構或解析。
常見錯誤
| 代碼 | 意義 |
|---|---|
AUTH_INVALID_API_KEY | 無法驗證此 Bearer API 金鑰。 |
SUBSCRIPTION_PLAN_REQUIRED | 工作區方案未包含 API 存取權限。 |
AGENT_NOT_FOUND | 該代理程式不存在,或不屬於此 API 金鑰所屬的帳戶。 |
VALIDATION_INVALID_BODY | 請求主體、路徑值、查詢參數、limit 或 cursor 驗證失敗。 |
完整的 27 個已宣告代碼、HTTP 狀態碼、觸發條件與保留代碼,請見完整的 API v2 錯誤目錄。