REST API

浮動字幕 Token API

POST /api/v1/auth/tasks/{taskId}/subtitle-feed-token

功能說明

換取浮動字幕 feed 的短效存取 Token。浮動字幕 SSE(浮動字幕 SSE)以獨立、唯讀的連線訂閱進行中錄音的逐字稿;由於瀏覽器原生 EventSource 不支援自訂 HTTP Header,採用 Token 機制:先以 API Key 換取綁定該錄音的 feed_token,再以該 Token 連線 SSE。

認證方式

Header:X-API-Key(詳見 認證機制)。僅該錄音的擁有者可換取。

請求參數

參數位置類型必填說明
taskIdpathstring是錄音 ID(必須為進行中、且屬於呼叫者的錄音)

請求範例

curl -X POST "https://vas-poc.vurbo.ai/api/v1/auth/tasks/3f9a.../subtitle-feed-token" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW"

成功回應

HTTP 200

{
  "token": "aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789abcdefghijkl",
  "expires_in": 900
}

回應欄位說明

欄位類型說明
tokenstring浮動字幕存取 Token(48 字元隨機字串)
expires_ininteger有效期(秒),固定為 900

Token 特性

特性說明
有效期15 分鐘;SSE 連線每次驗證成功會自動延長(滑動有效期)
綁定範圍綁定該錄音
使用方式以 Query Parameter feed_token 傳遞給 GET /tasks/{task_id}/subtitle

競態處理

剛開始錄音時,後端可能尚未完成錄音建立。此時換取會回 425 Too Early,前端應短延遲後重試。

特有錯誤碼

注意:這三支端點的錯誤回應是 {"error": "<錯誤碼>"},欄位名為 error,與其他端點的 data.error_code 不同。

錯誤碼HTTP 狀態碼說明處理建議
recording_not_ready425錄音尚未就緒(建立中)短延遲後重試
recording_ended410錄音已結束不再重試
-401API Key 無效確認 API Key
plan_feature_not_allowed403吃到飽方案不含浮動字幕(v1.9.0)升級方案;可用 GET /api/v1/me/plan 查方案內容

觀眾分享

除錄音擁有者本人外,浮動字幕也可分享給現場其他觀眾共同觀看。擁有者開啟分享後取得一組分享密鑰(share secret),放入分享連結或 QR Code;觀眾以該密鑰換取唯讀的觀眾 Token,即可連線浮動字幕 SSE。

  • 觀眾為唯讀,不需登入、不需 API Key,且不另計費。
  • 同一場錄音的觀眾人數有上限(以伺服器設定為準,預設 10 人,不含擁有者本人);目前人數與上限可由浮動字幕 SSE 的 viewers 事件取得(詳見 浮動字幕 SSE)。請以該事件的 max 欄位為準,勿寫死數值。
  • 分享於錄音結束時自動失效。

POST /api/v1/auth/tasks/{taskId}/subtitle-share

開啟(或重置)觀眾分享,回傳分享密鑰。僅該錄音的擁有者可呼叫。

認證方式:Header X-API-Key。

參數位置類型必填說明
taskIdpathstring是錄音 ID(必須為進行中、且屬於呼叫者的錄音)

成功回應(HTTP 200)

{
  "share_secret": "aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789abcdefghijkl",
  "expires_in": 43200
}
欄位類型說明
share_secretstring分享密鑰;放入分享連結/QR Code 提供給觀眾。重新開啟會重置密鑰、舊連結即失效
expires_ininteger分享密鑰有效期(秒)

share_secret 僅在開啟當下回傳一次,請妥善保存於分享連結中。

錯誤碼HTTP 狀態碼說明處理建議
recording_not_ready425錄音尚未就緒(建立中)短延遲後重試
recording_ended410錄音已結束不再重試
plan_feature_not_allowed403吃到飽方案不含浮動字幕(v1.9.0)升級方案;可用 GET /api/v1/me/plan 查方案內容

DELETE /api/v1/auth/tasks/{taskId}/subtitle-share

停止分享,使分享連結失效。停止後不再放行新觀眾;既有觀眾連線最長於其 Token 有效期屆滿或錄音結束時結束。僅該錄音的擁有者可呼叫。

認證方式:Header X-API-Key。

成功回應(HTTP 200)

{ "revoked": true }
欄位類型說明
revokedbooleantrue=已停止分享;false=該錄音不存在或非本人

POST /api/v1/public/tasks/{taskId}/subtitle-feed-token

觀眾以分享密鑰換取唯讀的觀眾 Token,再以該 Token 連線浮動字幕 SSE。免登入、免 API Key。

參數位置類型必填說明
taskIdpathstring是錄音 ID
share_secretbodystring是擁有者提供的分享密鑰

請求範例

curl -X POST "https://vas-poc.vurbo.ai/api/v1/public/tasks/3f9a.../subtitle-feed-token" \
  -H "Content-Type: application/json" \
  -d '{"share_secret":"aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789abcdefghijkl"}'

成功回應(HTTP 200)

{
  "token": "aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789abcdefghijkl",
  "expires_in": 900
}

回應欄位與上方擁有者 Token 相同;換得的 Token 同樣以 Query Parameter feed_token 連線浮動字幕 SSE。若觀眾人數已達上限,連線時會回 429(詳見 浮動字幕 SSE)。

頻率限制

  • 同一場錄音每分鐘最多 30 次(所有觀眾合計,含分享連結無效的請求)。
  • 超過限制時回 HTTP 429,並帶 Retry-After 標頭(需要等待的秒數)。這個錯誤採用一般錯誤格式(data.error_code 為 too_many_requests),與本端點其他錯誤的 {"error": ...} 格式不同。
錯誤碼HTTP 狀態碼說明處理建議
invalid_share403分享連結無效或已失效向擁有者索取新的分享連結
recording_not_ready425錄音尚未就緒(建立中)短延遲後重試
recording_ended410錄音已結束不再重試
too_many_requests429請求過於頻繁(見上方頻率限制;錯誤碼位於 data.error_code)依 Retry-After 的秒數等待後再試

版本:V1.24.1 最後更新:2026-10-05

Copyright © 2026