REST API

Imports

端點總覽

方法端點說明
POST/api/v1/imports/check-quota檢查預算
POST/api/v1/imports上傳音檔
GET/api/v1/imports/{importId}查詢匯入狀態
GET/api/v1/imports取得匯入列表

POST /api/v1/imports/check-quota

功能說明

檢查使用者月度預算是否足夠上傳指定時長的音檔。建議在上傳前先呼叫此 API 進行預檢查,避免上傳大檔案後才發現預算不足。

認證方式

Header:X-API-Key(詳見 認證機制

請求參數

參數位置類型必填說明
duration_msbodyinteger音檔時長(毫秒,1 秒 ~ 10 小時)

請求範例

curl -X POST "https://vas-poc.vurbo.ai/api/v1/imports/check-quota" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW" \
  -H "Content-Type: application/json" \
  -d '{"duration_ms": 3600000}'

成功回應

HTTP 200

{
  "data": {
    "allowed": true,
    "remaining_budget": 48.48,
    "is_unlimited": false,
    "duration_minutes": 25,
    "estimated_cost": 0.4236,
    "remaining_minutes": 2864
  }
}

回應欄位說明

欄位類型說明
data.allowedboolean是否允許上傳(預算未超額時為 true
data.remaining_budgetfloat | null剩餘月度預算(USD),無預算限制時為 null
data.is_unlimitedboolean是否為無預算限制
data.duration_minutesinteger音檔預估時長(分鐘,無條件進位)
data.estimated_costfloat預估 STT 處理費用(USD)
data.remaining_minutesinteger | null剩餘預算可用的等效 STT 分鐘數,無預算限制時為 null

特有錯誤碼

此端點無特有錯誤碼,僅可能回傳通用認證錯誤。


POST /api/v1/imports

功能說明

上傳音檔進行語音辨識與翻譯處理。上傳成功後會在背景處理,可透過 查詢匯入狀態 API 追蹤進度。

認證方式

Header:X-API-Key(詳見 認證機制

請求參數(multipart/form-data)

參數類型必填說明
filefile音檔(mp3/wav/m4a,最大 500MB)
transcription_languagesstring轉錄語言(JSON 陣列字串,如 '["zh-TW"]'
translation_languagesstring翻譯語言(JSON 陣列字串,如 '["en-US"]'
recognition_modestring辨識模式:single(單人)/ multi_speaker(多人)
summary_templatestring摘要模板識別碼(最大 50 字元,須為已啟用的 summary 類別 slug)
terminologystring術語庫(JSON 物件字串,格式見下方)
fuzzy_correctionstring模糊詞校正規則(JSON 物件字串,格式見下方)
translation_dictstring翻譯字典(JSON 陣列字串,格式見下方)
callback_urlstringWebhook 回呼 URL(處理完成/失敗時通知,最大 2048 字元)

Webhook 通知:設定 callback_url 後,匯入完成時會收到 import.completed 事件,失敗時會收到 import.failed 事件。詳見 Webhook 指南

文字處理參數格式

術語庫 (terminology):提升特定詞彙的辨識準確度

{
  "zh-TW": [
    { "term": "語者分離", "boost": 1.5 },
    { "term": "即時轉錄", "boost": 1.5 }
  ]
}
  • 以語言代碼為 key,術語陣列為 value
  • term:術語文字(必填,最大 100 字元)
  • boost:權重(選填,預設 1.0)
  • 每種語言最多 500 個術語

模糊詞校正 (fuzzy_correction):自動修正常見的辨識錯誤

{
  "zh-TW": [
    { "correct": "語者分離", "incorrect": ["語這分離", "語者分力"] }
  ]
}
  • 以語言代碼為 key,校正規則陣列為 value
  • correct:正確詞彙(必填,最大 200 字元)
  • incorrect:錯誤變體列表(必填,每項最大 200 字元)

翻譯字典 (translation_dict):指定專有名詞的翻譯方式

[
  { "source": "語者分離", "translations": { "en-US": "Speaker Diarization" } }
]
  • source:原文詞彙(必填,最大 200 字元)
  • translations:各語言對應翻譯(以語言代碼為 key,每項翻譯文字最大 200 字元)
  • 最多 50 個條目

請求範例

基本請求

curl -X POST "https://vas-poc.vurbo.ai/api/v1/imports" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW" \
  -F "file=@meeting.mp3" \
  -F 'transcription_languages=["zh-TW"]' \
  -F 'translation_languages=["en-US"]' \
  -F "recognition_mode=multi_speaker"

含文字處理設定的請求

curl -X POST "https://vas-poc.vurbo.ai/api/v1/imports" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW" \
  -F "file=@meeting.mp3" \
  -F 'transcription_languages=["zh-TW"]' \
  -F 'translation_languages=["en-US"]' \
  -F "recognition_mode=multi_speaker" \
  -F 'terminology={"zh-TW": [{"term": "語者分離", "boost": 1.5}]}' \
  -F 'fuzzy_correction={"zh-TW": [{"correct": "語者分離", "incorrect": ["語這分離"]}]}' \
  -F 'translation_dict=[{"source": "語者分離", "translations": {"en-US": "Speaker Diarization"}}]'

含 Webhook 回呼的請求

curl -X POST "https://vas-poc.vurbo.ai/api/v1/imports" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW" \
  -F "file=@meeting.mp3" \
  -F 'transcription_languages=["zh-TW"]' \
  -F 'translation_languages=["en-US"]' \
  -F "recognition_mode=multi_speaker" \
  -F "callback_url=https://your-server.com/webhooks/vas"

成功回應

HTTP 202

{
  "data": {
    "import_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "pending",
    "stage": null,
    "progress": 0,
    "message": null,
    "original_filename": "meeting.mp3",
    "file_size": "15.2 MB",
    "task_id": null,
    "error_code": null,
    "error_message": null,
    "created_at": "2026-02-23T10:00:00.000Z",
    "updated_at": "2026-02-23T10:00:00.000Z"
  }
}

回應欄位說明

欄位類型說明
data.import_idstring匯入 ID(UUID)
data.statusstring狀態:pending
data.stagestring | null處理階段(初始為 null
data.progressinteger進度百分比(初始為 0
data.messagestring | null處理訊息
data.original_filenamestring原始檔案名稱
data.file_sizestring檔案大小(格式化)
data.task_idstring | null任務 ID(處理完成後才有值)
data.error_codestring | null錯誤碼(失敗時才有值)
data.error_messagestring | null錯誤訊息(失敗時才有值)
data.created_atstring建立時間(ISO 8601)
data.updated_atstring最後更新時間(ISO 8601)

特有錯誤碼

錯誤碼HTTP 狀態碼說明處理建議
import_file_too_large413檔案大小超過 500MB 限制壓縮或分割檔案
import_invalid_format415不支援的音檔格式使用 mp3/wav/m4a 格式
stt_quota_exceeded402STT 配額已超限等待下月配額重置或調整方案

GET /api/v1/imports/{importId}

功能說明

查詢指定匯入任務的處理狀態與進度。

認證方式

Header:X-API-Key(詳見 認證機制

請求參數

參數位置類型必填說明
importIdpathstring匯入 ID(UUID)

請求範例

curl -X GET "https://vas-poc.vurbo.ai/api/v1/imports/550e8400-e29b-41d4-a716-446655440000" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW"

成功回應

HTTP 200

{
  "data": {
    "import_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "processing",
    "stage": "transcribing",
    "progress": 45,
    "message": "正在辨識語音...",
    "original_filename": "meeting.mp3",
    "file_size": "15.2 MB",
    "task_id": null,
    "error_code": null,
    "error_message": null,
    "created_at": "2026-02-23T10:00:00.000Z",
    "updated_at": "2026-02-23T10:05:00.000Z"
  }
}

回應欄位說明

欄位類型說明
data.statusstring狀態:pending / processing / completed / failed
data.stagestring | null處理階段:converting / transcribing / translating / summarizing
data.progressinteger進度百分比(0-100)
data.task_idstring | null處理完成後的任務 ID(可用於 Tasks API)
data.error_codestring | null失敗時的錯誤碼
data.error_messagestring | null失敗時的錯誤訊息

其餘欄位與 POST /api/v1/imports 回應相同。

status 狀態流轉

pending → processing → completed
                    → failed

stage 處理階段

階段說明
converting音檔格式轉換中
transcribing語音辨識中
translating翻譯處理中
summarizing摘要生成中

completed 狀態的邊界情境(v1.3.5)

當音檔因靜音、音量過小、雜訊或辨識語言與音檔不符而辨識不出任何語音內容時,系統仍會以 completed 結束(不是 failed),task_id 正常產出,但對應任務的逐字稿 entries 為空陣列。客戶端應透過 GET /api/v1/sse/history/transcribe/{taskId} 載入後再依句子數判斷是否顯示空狀態。詳見 音檔匯入指南 – 音檔無法辨識時的行為

特有錯誤碼

錯誤碼HTTP 狀態碼說明處理建議
import_not_found404找不到匯入任務確認 importId 正確

GET /api/v1/imports

功能說明

取得使用者的匯入任務列表(分頁)。

認證方式

Header:X-API-Key(詳見 認證機制

請求參數

參數位置類型必填說明
per_pagequeryinteger每頁筆數(預設 20)

請求範例

curl -X GET "https://vas-poc.vurbo.ai/api/v1/imports?per_page=20" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW"

成功回應

HTTP 200

{
  "data": [
    {
      "import_id": "550e8400-e29b-41d4-a716-446655440000",
      "status": "completed",
      "stage": null,
      "progress": 100,
      "message": null,
      "original_filename": "meeting.mp3",
      "file_size": "15.2 MB",
      "task_id": "660f9500-f30c-52e5-b827-557766550000",
      "error_code": null,
      "error_message": null,
      "created_at": "2026-02-23T10:00:00.000Z",
      "updated_at": "2026-02-23T10:15:00.000Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 3,
    "per_page": 20,
    "total": 55
  }
}

回應欄位說明

欄位類型說明
dataarray匯入任務列表(各欄位同 查詢匯入狀態 回應)
meta.current_pageinteger目前頁碼
meta.last_pageinteger最後一頁頁碼
meta.per_pageinteger每頁筆數
meta.totalinteger總筆數

特有錯誤碼

此端點無特有錯誤碼,僅可能回傳通用認證錯誤。


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

Copyright © 2026