帳戶授權
建立渠道授權會話
為 auth_mode=qrcode 嘅 WhatsApp 帳號建立短期託管授權會話。請喺用戶瀏覽器開 authorize_url,並將完整 URL 當成敏感憑證,唔好記錄或者分享。
https://api.unifyport.ai/v1/accounts/{account_id}/auth-sessions支援渠道
呼叫前準備
在伺服器端使用資源所屬工作區的 X-Api-Key,執行範例前替換所有預留位置。
參數從哪裡取得
- account_id
- 從建立或查詢帳號的回應取得 data.id。帳號屬於 X-Api-Key 對應的工作區。 攞帳號
請求參數
請求標頭
X-Api-Key工作區 API Key,工作區會由呢個標頭解析得出嚟。
路徑參數
account_id用嚟識別嗰條 authentication 路由嘅 ID。
請求內容
呢個介面唔需要 JSON 請求內容。
如何理解結果
依本次授權動作讀取 status/auth_status 和實際回傳的 auth_payload。需要使用者操作時依管道指南繼續;authorized 表示授權完成,傳送前仍須檢查 runtime_status。
回應 201 Created
{
"request_id": "<REQUEST_ID>",
"data": {
"account_id": "acc_example",
"provider": "whatsapp",
"auth_mode": "qrcode",
"status": "passkey_required",
"auth_payload": {
"type": "passkey",
"public_key": {
"challenge": "<BASE64URL_CHALLENGE>"
}
},
"authorize_url": "https://auth.example.com/authorize/whatsapp/<SESSION_TOKEN>",
"expires_at": "2026-08-12T08:10:00Z",
"switchable": false,
"available_auth_modes": [
"qrcode"
]
}
}
回應內容
account_id呢個回應所指嘅渠道帳號。
provider管道識別碼。呼叫其他介面時原樣使用 API 回傳的值;此介面的回傳範圍請看下方列舉。
enum: whatsapp
auth_mode呢個授權會話嘅認證模式;目前係 qrcode。
status目前授權流程狀態,例如 pending_auth、awaiting_qr_scan、awaiting_code、pending、passkey_required、passkey_pending、passkey_confirmation、passkey_confirmation_sent、authorized 或 failed。
auth_payload目前步驟所需嘅標準載荷。普通 QR 用 qr_code;驗證碼步驟用 type=code;Passkey 可能回傳 type=passkey 同 public_key,或者回傳 type=passkey_confirmation 及確認提示。互斥步驟嘅載荷唔會同時出現。TikTok session 需要互動時可能回傳 QR 或驗證碼提示;HTTP 200 唔代表授權成功。
authorize_url包含不透明憑證嘅短期託管授權 URL,唔好記錄或者分享完整值。
format: uri
expires_atRFC3339 時間戳,過咗呢個時間之後而家個 auth_payload 就唔再有效。
format: date-time
switchable託管授權會話係咪允許用戶切換認證模式。
available_auth_modes[]託管授權會話入面可用嘅認證模式。
回應
201201 Created
請求成功,回應內容嘅例子如上。
400請求錯誤
請求內容、路徑或者參數無效。
401未授權
X-Api-Key 請求標頭缺少或者無效。
403禁止存取
請求已識別,但唔允許執行呢個操作。
404搵唔到資源
搵唔到請求嘅資源;請結合 error.code 同目前操作核對。
409衝突
目前操作同現有嘅渠道帳號或者資源衝突。
500伺服器錯誤
服務遇到咗未預期嘅錯誤。
503服務不可用
所需嘅後端服務暫時不可用。
失敗後如何處理
檢查 HTTP 狀態和 error.code/numeric_code,保留 request_id。依原因修正參數、繼續授權或檢查狀態。重試傳送及寫入前確認上次結果,避免重複操作。 錯誤碼參考
請按目前操作一併讀取 HTTP 狀態、error.code 同 error.numeric_code。數字碼以字串處理。保留 request_id 排查;佢唔係冪等鍵或任務識別碼。
- invalid_request · 10000 · 400
檢查 JSON 請求內容與必填欄位。
觸發條件: 適用於請求內容非空,但 Content-Type 唔係 application/json 嘅請求。
處理與重試: 按目前操作同渠道條件修正參數後再請求。重複提交相同嘅無效請求唔會解決錯誤。
示意 JSON;message 會隨實際原因變化 · 400 · 10000
{ "request_id": "req_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Content-Type must be application/json" } }- invalid_target_workspace · 11003 · 400
工作區覆寫目標為空或格式無效。請移除覆寫請求標頭,改用目標工作區所屬嘅 API Key。
觸發條件: 適用於帶有 X-Workspace-Id 工作區覆寫請求標頭嘅請求。
處理與重試: 按目前操作同渠道條件修正參數後再請求。重複提交相同嘅無效請求唔會解決錯誤。
示意 JSON;message 會隨實際原因變化 · 400 · 11003
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }- unsupported_provider_auth_mode · 20018 · 400
請使用此渠道支援的 auth_mode。
處理與重試: 選擇文件列為支援嘅渠道同動作。重複請求唔會增加能力或開通內測權限。
示意 JSON;message 會隨實際原因變化 · 400 · 20018
{ "request_id": "req_example", "error": { "code": "unsupported_provider_auth_mode", "numeric_code": "20018", "message": "Auth mode not supported by this provider" } }- invalid_api_key · 11001 · 401
檢查 API Key 是否正確且已啟用。
處理與重試: 保留 request_id 同結構化錯誤碼,先排查目前操作,再決定下一步。
示意 JSON;message 會隨實際原因變化 · 401 · 11001
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }- missing_api_key · 11000 · 401
請加入 X-Api-Key 請求標頭。
處理與重試: 保留 request_id 同結構化錯誤碼,先排查目前操作,再決定下一步。
範例 · 401 · 11000
{ "request_id": "req_xxx", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }- workspace_override_forbidden · 11002 · 403
請求嘗試使用呢個 API Key 無權使用嘅工作區覆寫。請移除覆寫請求標頭,改用目標工作區所屬嘅 API Key。
觸發條件: 適用於帶有 X-Workspace-Id 工作區覆寫請求標頭嘅請求。
處理與重試: 保留 request_id 同結構化錯誤碼,先排查目前操作,再決定下一步。
示意 JSON;message 會隨實際原因變化 · 403 · 11002
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }- target_workspace_not_found · 11004 · 404
覆寫指定嘅工作區不存在或不可用。請核對工作區歸屬,移除覆寫請求標頭並使用目標工作區 API Key;重複請求唔會增加存取權限。
觸發條件: 適用於帶有 X-Workspace-Id 工作區覆寫請求標頭嘅請求。
處理與重試: 核對目標識別碼、資源歸屬同目前工作區。唔好將已確認缺少或無法存取嘅目標當成暫時服務故障自動重試。
示意 JSON;message 會隨實際原因變化 · 404 · 11004
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }- egress_configuration_pending · 20032 · 409
暫時無法確認或讀取平台預設網絡設定;唔代表帳號已登出。
觸發條件: 呢個操作使用平台分配嘅網絡容量或帳號固定嘅預設網絡設定。
處理與重試: 保留 request_id,再次寫入前核對帳號或建立結果。等容量或設定恢復,或聯絡支援;唔好自動反覆建立帳號、更換網絡或重啟帳號。
示意 JSON;message 會隨實際原因變化 · 409 · 20032
{ "request_id": "req_example", "error": { "code": "egress_configuration_pending", "numeric_code": "20032", "message": "Account network configuration is pending verification" } }- provider_not_ready · 30009 · 409
連線尚未就緒,請檢查授權及 runtime_status 後再決定是否重試。
處理與重試: 查詢授權及運行狀態,再按目標狀態同渠道支援選擇刷新、啟動或重連。連線問題本身唔證明已登出;執行依賴連線嘅業務操作前確認 running。
示意 JSON;message 會隨實際原因變化 · 409 · 30009
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30009", "message": "Provider client is not ready" } }- run_auth_action_failed · 20010 · 500
執行授權動作:授權動作失敗,需要檢查已有流程,唔代表必須重新授權。
處理與重試: 查詢目前授權流程,確認係咪需要用戶操作。唔好單憑本次失敗重新發起授權,亦唔好向已過期或已結束嘅會話重複提交。
示意 JSON;message 會隨實際原因變化 · 500 · 20010
{ "request_id": "req_example", "error": { "code": "run_auth_action_failed", "numeric_code": "20010", "message": "Failed to run auth action" } }- run_auth_action_failed · 20020 · 500
核對 account_id,並使用帳號所屬工作區的 X-Api-Key。此工作區下未找到的帳號無法使用目前 Key 存取。
觸發條件: 適用於帳號不存在嘅情況;保留原 HTTP 狀態同操作 code,透過 numeric_code 細分帳號缺失。
處理與重試: 核對目標識別碼、資源歸屬同目前工作區。唔好將已確認缺少或無法存取嘅目標當成暫時服務故障自動重試。
示意 JSON;message 會隨實際原因變化 · 500 · 20020
{ "request_id": "req_example", "error": { "code": "run_auth_action_failed", "numeric_code": "20020", "message": "Account not found" } }- internal_auth_not_configured · 11006 · 503
今次請求所需嘅授權會話服務暫時不可用或未設定。請聯絡服務方檢查授權會話服務。
處理與重試: 保留 request_id 同結構化錯誤碼,先排查目前操作,再決定下一步。
示意 JSON;message 會隨實際原因變化 · 503 · 11006
{ "request_id": "req_example", "error": { "code": "internal_auth_not_configured", "numeric_code": "11006", "message": "Internal endpoint authentication is not configured" } }