開始使用

Authentication

API Key

格式

Vurbo.ai API Key 格式為 vas_ + 32 位隨機字串:

vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW

取得方式

  1. 登入 Vurbo.ai Dashboard:https://vas-poc.vurbo.ai/dashboard
  2. 前往「API Keys」頁面
  3. 點擊「建立新 Key」
  4. 複製並妥善保存 API Key

注意:API Key 只會顯示一次,請務必保存好。


認證方式總覽

VAS API 根據不同的 API 類型使用不同的認證方式:

API 類型認證方式說明
REST APIX-API-Key Header直接使用 API Key
SSE APIX-API-Key Header 或 ?api_key= Query支援兩種方式
WebSocketTicket 機制以 API Key 換取一次性 Ticket
觀眾端 APIToken / 無認證透過分享 Token 識別

方式一:X-API-Key Header

適用於 REST APISSE API

將 API Key 放入 HTTP Header:

X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW

REST API 範例

curl -X GET "https://vas-poc.vurbo.ai/api/v1/tasks" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW"

SSE API 範例

SSE API 支援兩種認證方式:

方式 A:Header(需使用 fetch API,瀏覽器原生 EventSource 不支援自訂 Header):

const response = await fetch(
  'https://vas-poc.vurbo.ai/api/v1/sse/history/transcribe/{taskId}',
  {
    headers: { 'X-API-Key': 'vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW' }
  }
);

const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  const text = decoder.decode(value);
  // 解析 SSE 事件...
}

方式 B:Query Parameter(可搭配瀏覽器原生 EventSource 使用):

const eventSource = new EventSource(
  'https://vas-poc.vurbo.ai/api/v1/sse/history/transcribe/{taskId}?api_key=vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW'
);

eventSource.addEventListener('init_metadata', (e) => {
  const data = JSON.parse(e.data);
  console.log(data);
});

注意:Query Parameter 方式會將 API Key 暴露在 URL 中,建議僅在無法使用 Header 的場景(如瀏覽器原生 EventSource)使用。


方式二:Ticket 機制(WebSocket 專用)

WebSocket 連線使用 Ticket 機制進行認證,避免在連線 URL 中暴露 API Key。

流程

1. REST API 換取 Ticket  →  POST /api/v1/auth/ticket(使用 X-API-Key)
2. 使用 Ticket 連線      →  WebSocket Sec-WebSocket-Protocol: ticket.{TICKET}

步驟 1:取得 Ticket

curl -X POST "https://vas-poc.vurbo.ai/api/v1/auth/ticket" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW"

回應:

{
  "ticket": "aBcDeFgHiJkLmNoPqRsTuVwXyZ012345",
  "expires_in": 60
}
欄位類型說明
ticketstring一次性 Ticket(32 字元)
expires_inint有效期(秒)

步驟 2:使用 Ticket 連線 WebSocket

將 Ticket 放入 Sec-WebSocket-Protocol,格式為 ticket.{TICKET_VALUE}

const ws = new WebSocket('wss://vas-poc.vurbo.ai/ws', [`ticket.${ticket}`]);

ws.onopen = () => {
  console.log('Connected! Protocol:', ws.protocol);
};

Node.js 範例:

const WebSocket = require('ws');
const ws = new WebSocket('wss://vas-poc.vurbo.ai/ws', [`ticket.${ticket}`]);

Ticket 特性

特性說明
有效期60 秒
使用次數僅能使用一次(使用後立即刪除)
安全性API Key 不會暴露在 WebSocket 連線中

Ticket 錯誤碼

錯誤碼說明
ticket_invalidTicket 無效或已過期
ticket_expiredTicket 已過期
ticket_already_usedTicket 已被使用
ticket_validation_failedTicket 驗證失敗

完整 API 規格請參考 Auth Ticket API


方式三:Token 認證(觀眾端)

廣播觀眾端 API 不需要 API Key,透過廣播分享 Token 進行識別。

觀眾 SSE 連線

// 公開廣播
const eventSource = new EventSource(
  'https://vas-poc.vurbo.ai/broadcast/{token}/text'
);

// 密碼保護廣播(需先透過密碼驗證取得 viewer_access_token)
const eventSource = new EventSource(
  'https://vas-poc.vurbo.ai/broadcast/{token}/text?viewer_access_token={token}'
);

詳細說明請參考 Viewer API廣播觀眾 SSE


認證錯誤

錯誤碼HTTP說明處理建議
auth_missing_api_key401缺少 API Key確認請求包含 X-API-Key Header
auth_invalid_api_key401API Key 無效確認 API Key 正確
auth_invalid_key_format401API Key 格式錯誤確認格式為 vas_ 開頭 + 32 位字串
auth_key_expired401API Key 已過期重新申請 API Key
auth_key_disabled401API Key 已停用聯繫技術支援
auth_user_disabled403帳戶已停用聯繫技術支援
auth_budget_exceeded402月度預算已超額等待下月預算重置或調整預算

錯誤回應範例

{
  "type": "error",
  "data": {
    "error_code": "auth_invalid_api_key",
    "severity": "fatal",
    "message": "API Key 無效",
    "context": "auth",
    "request_id": "req_abc123xyz789",
    "timestamp": "2026-01-15T10:30:45.123Z"
  }
}

完整錯誤碼列表請參考 錯誤碼參考


預算與限制

項目說明
月度預算依方案設定 monthly_budget_usd,超額時回傳 HTTP 402
並行連線數依方案而定

安全性建議

  • 不要將 API Key 寫死在前端程式碼中
  • 不要將 API Key 提交至版本控制系統
  • 使用環境變數或密鑰管理服務儲存 API Key
  • 定期輪換 API Key
  • WebSocket 連線請使用 Ticket 機制,避免在 URL 中暴露 API Key

版本:V1.5.7 最後更新:2026-05-20

Copyright © 2026