REST API

Broadcasts

Table of Contents


GET /api/v1/broadcasts (Broadcast List)

Description

Query the broadcast list owned by the current API Key holder (excluding revoked channels), with pagination support.

Authentication

Header: X-API-Key (see Authentication)

Request Parameters

ParameterTypeRequiredDescription
per_pageintegerNoItems per page (default 20)
pageintegerNoPage number (default 1)

Request Example

curl -X GET "https://vas-poc.vurbo.ai/api/v1/broadcasts?per_page=10&page=1" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW"

Success Response (HTTP 200)

{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "token": "a3f9",
      "name": "My Broadcast Channel",
      "share_url": "https://vas-poc.vurbo.ai/broadcast/a3f9",
      "transcription_language": "zh-TW",
      "translation_languages": ["en-US", "ja-JP"],
      "tts_config": null,
      "speaker_diarization": false,
      "summary_template": null,
      "summary_language": null,
      "max_viewers": 100,
      "access_type": "public",
      "pass_code": null,
      "status": "pending",
      "is_live": false,
      "session_id": null,
      "current_recording_id": null,
      "recordings_count": 0,
      "peak_viewers": 0,
      "total_viewers": 0,
      "duration_ms": 0,
      "duration_formatted": "00:00",
      "started_at": null,
      "ended_at": null,
      "revoked_at": null,
      "created_at": "2026-01-03T10:00:00.000Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 5,
    "per_page": 10,
    "total": 50
  }
}

For response field descriptions, see the response field table under Create Broadcast.

Specific Error Codes

Error CodeHTTP StatusDescriptionRecommended Action
auth_missing_api_key401API Key not providedMake sure the header includes the API Key
auth_invalid_api_key401Invalid API KeyVerify the API Key is correct

POST /api/v1/broadcasts (Create Broadcast)

Description

Create a new broadcast session for real-time subtitle streaming. After creation, a share link is generated (with a 4-character short-code token from the character set a-z0-9). Viewers can use this link to receive real-time subtitles and translations.

Authentication

Header: X-API-Key (see Authentication)

Request Parameters

ParameterTypeRequiredDescription
transcription_languagestringYesTranscription language code (e.g. zh-TW)
translation_languagesstringNoArray of translation language codes
namestringNoChannel name (max 100 characters)
access_typestringNoAccess type: public (default) or password
pass_codestringConditionalPassword (required when access_type is password, 4-12 characters)
max_viewersintegerNoMaximum number of viewers (defaults to the plan limit)
speaker_diarizationbooleanNoSpeaker diarization (default false)
tts_configobjectNoTTS default settings (key is the language code)
tts_config.*.voicestringNoTTS voice name (uses the default voice if not specified)
tts_config.*.speaking_ratenumberNoTTS speaking rate (0.5 ~ 2.0, default 1.0)
summary_templatestringNoSummary template slug (max 50 characters; must be an enabled summary category template, which can be queried via the Summary Templates API)
summary_languagestringNoSummary output language (defaults to transcription_language if not specified)
callback_urlstringNoWebhook callback URL (notifies when broadcast recording processing completes/fails, max 2048 characters)

Webhook Notification: After setting callback_url, you receive a recording.completed event when broadcast recording processing completes, and a recording.failed event when it fails. See the Webhook Guide.

Request Example

curl -X POST "https://vas-poc.vurbo.ai/api/v1/broadcasts" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW" \
  -H "Content-Type: application/json" \
  -d '{
    "transcription_language": "zh-TW",
    "translation_languages": ["en-US", "ja-JP"],
    "name": "My Broadcast Channel",
    "access_type": "public",
    "max_viewers": 50,
    "tts_config": {
      "en-US": {"voice": "en-US-JennyNeural", "speaking_rate": 1.0},
      "ja-JP": {"voice": "ja-JP-NanamiNeural", "speaking_rate": 1.0}
    },
    "summary_template": "meeting",
    "summary_language": "zh-TW",
    "callback_url": "https://your-server.com/webhooks/vas"
  }'

Success Response (HTTP 201)

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "token": "a3f9",
    "name": "My Broadcast Channel",
    "share_url": "https://vas-poc.vurbo.ai/broadcast/a3f9",
    "transcription_language": "zh-TW",
    "translation_languages": ["en-US", "ja-JP"],
    "tts_config": {
      "en-US": {"voice": "en-US-JennyNeural", "speaking_rate": 1.0},
      "ja-JP": {"voice": "ja-JP-NanamiNeural", "speaking_rate": 1.0}
    },
    "speaker_diarization": false,
    "summary_template": "meeting",
    "summary_language": "zh-TW",
    "max_viewers": 50,
    "access_type": "public",
    "pass_code": null,
    "status": "pending",
    "is_live": false,
    "session_id": null,
    "current_recording_id": null,
    "recordings_count": 0,
    "peak_viewers": 0,
    "total_viewers": 0,
    "duration_ms": 0,
    "duration_formatted": "0:00",
    "started_at": null,
    "ended_at": null,
    "revoked_at": null,
    "created_at": "2026-01-03T10:00:00.000Z"
  }
}

Response Field Descriptions

FieldTypeDescription
idstringBroadcast ID (UUID)
tokenstringShare token (4-character short code, character set a-z0-9)
namestringBroadcast name
share_urlstringShare link
transcription_languagestringTranscription language
translation_languagesarrayList of translation languages
tts_configobjectTTS default settings (key is the language code)
speaker_diarizationbooleanSpeaker diarization toggle
summary_templatestringSummary template slug (null means not set)
summary_languagestringSummary output language (defaults to transcription_language when null)
max_viewersintegerMaximum number of viewers
access_typestringAccess type: public or password
pass_codestringPlaintext password (has a value when access_type is password, otherwise null)
statusstringStatus (see description below)
is_livebooleanWhether currently live (true when in active or paused status)
session_idstringWebSocket Session ID
current_recording_idstringCurrent recording UUID (only has a value while live)
recordings_countintegerNumber of historical recordings
peak_viewersintegerHighest historical viewer count
total_viewersintegerCumulative viewer count
duration_msintegerBroadcast duration (milliseconds)
duration_formattedstringFormatted duration (min:sec)
started_atstringStart time (ISO 8601)
ended_atstringEnd time (ISO 8601)
revoked_atstringRevocation time (ISO 8601)
created_atstringCreation time (ISO 8601)

Broadcast Status Descriptions

StatusDescription
pendingCreated, not yet started
activeIn progress
pausedPaused
endedEnded
revokedRevoked

Specific Error Codes

Error CodeHTTP StatusDescriptionRecommended Action
validation_failed422Parameter validation failedVerify the parameter format is correct

GET /api/v1/broadcasts/{id} (Query Broadcast Status)

Description

Query the detailed information and current status of a specified broadcast.

Authentication

Header: X-API-Key (see Authentication)

Request Parameters

ParameterTypeRequiredDescription
idstringYesBroadcast ID (UUID, path parameter)

Request Example

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

Success Response (HTTP 200)

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "token": "a3f9",
    "name": "My Broadcast Channel",
    "share_url": "https://vas-poc.vurbo.ai/broadcast/a3f9",
    "transcription_language": "zh-TW",
    "translation_languages": ["en-US", "ja-JP"],
    "tts_config": {
      "en-US": {"voice": "en-US-JennyNeural", "speaking_rate": 1.0},
      "ja-JP": {"voice": "ja-JP-NanamiNeural", "speaking_rate": 1.0}
    },
    "speaker_diarization": true,
    "summary_template": "meeting",
    "summary_language": "zh-TW",
    "max_viewers": 100,
    "access_type": "public",
    "pass_code": null,
    "status": "active",
    "is_live": true,
    "session_id": "ws_session_xyz",
    "current_recording_id": "660e8400-e29b-41d4-a716-446655440001",
    "recordings_count": 1,
    "peak_viewers": 25,
    "total_viewers": 30,
    "duration_ms": 1800000,
    "duration_formatted": "30:00",
    "started_at": "2026-01-03T10:00:00.000Z",
    "ended_at": null,
    "revoked_at": null,
    "created_at": "2026-01-03T09:55:00.000Z"
  }
}

For response field descriptions, see the response field table under Create Broadcast.

Specific Error Codes

Error CodeHTTP StatusDescriptionRecommended Action
broadcast_session_not_found404Specified broadcast not foundVerify the broadcast ID is correct

PATCH /api/v1/broadcasts/{id} (Update Broadcast Settings)

Description

Dynamically update the broadcast settings. This API can be called while the broadcast is in progress (active or paused status) to adjust settings in real time.

Authentication

Header: X-API-Key (see Authentication)

Request Parameters

ParameterTypeRequiredDescription
idstringYesBroadcast ID (UUID, path parameter)
transcription_languagestringNoTranscription language code (e.g. zh-TW)
translation_languagesstringNoArray of translation language codes
max_viewersintegerNoMaximum number of viewers (1 ~ system limit)
access_typestringNoAccess type: public or password
pass_codestringConditionalPassword (4-12 characters, required when access_type is password)
tts_configobjectNoTTS default settings (overwrites existing settings, null means clear)
speaker_diarizationbooleanNoSpeaker diarization toggle
summary_templatestringNoSummary template slug (max 50 characters, empty string "" means clear)
summary_languagestringNoSummary output language (empty string "" means clear)

Note: At least one updatable field must be provided. Passing an empty string "" for summary_template and summary_language clears the setting; passing null for tts_config clears the setting; omitting a field leaves it unchanged.

Request Example

curl -X PATCH "https://vas-poc.vurbo.ai/api/v1/broadcasts/550e8400-e29b-41d4-a716-446655440000" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW" \
  -H "Content-Type: application/json" \
  -d '{
    "translation_languages": ["en-US", "ja-JP", "ko-KR"],
    "max_viewers": 200
  }'

Success Response (HTTP 200)

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "token": "a3f9",
    "name": "Tech Talk Live",
    "share_url": "https://vas-poc.vurbo.ai/broadcast/a3f9",
    "transcription_language": "zh-TW",
    "translation_languages": ["en-US", "ja-JP", "ko-KR"],
    "tts_config": {
      "en-US": {"voice": "en-US-JennyNeural", "speaking_rate": 1.0},
      "ja-JP": {"voice": "ja-JP-NanamiNeural", "speaking_rate": 1.0}
    },
    "speaker_diarization": true,
    "summary_template": "meeting",
    "summary_language": "zh-TW",
    "max_viewers": 200,
    "access_type": "public",
    "pass_code": null,
    "status": "active",
    "is_live": true,
    "session_id": "ws_session_xyz",
    "current_recording_id": "660e8400-e29b-41d4-a716-446655440001",
    "recordings_count": 1,
    "peak_viewers": 25,
    "total_viewers": 30,
    "duration_ms": 1800000,
    "duration_formatted": "30:00",
    "started_at": "2026-01-03T10:00:00.000Z",
    "ended_at": null,
    "revoked_at": null,
    "created_at": "2026-01-03T09:55:00.000Z"
  }
}

For response field descriptions, see the response field table under Create Broadcast.

Specific Error Codes

Error CodeHTTP StatusDescriptionRecommended Action
broadcast_session_not_found404Specified broadcast not foundVerify the broadcast ID is correct
broadcast_cannot_update422Only pending/active/paused can be updatedCheck the current broadcast status
validation_failed422Parameter validation failedVerify the parameter format is correct

DELETE /api/v1/broadcasts/{id} (Revoke Broadcast)

Description

Revoke a broadcast that has not yet started. Only broadcasts in pending status can be revoked. After revocation, the status becomes revoked.

Authentication

Header: X-API-Key (see Authentication)

Request Parameters

ParameterTypeRequiredDescription
idstringYesBroadcast ID (UUID, path parameter)

Request Example

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

Success Response (HTTP 200)

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "token": "a3f9",
    "name": "My Broadcast Channel",
    "share_url": "https://vas-poc.vurbo.ai/broadcast/a3f9",
    "transcription_language": "zh-TW",
    "translation_languages": ["en-US", "ja-JP"],
    "tts_config": null,
    "speaker_diarization": false,
    "summary_template": null,
    "summary_language": null,
    "max_viewers": 100,
    "access_type": "public",
    "pass_code": null,
    "status": "revoked",
    "is_live": false,
    "session_id": null,
    "current_recording_id": null,
    "recordings_count": 0,
    "peak_viewers": 0,
    "total_viewers": 0,
    "duration_ms": 0,
    "duration_formatted": "0:00",
    "started_at": null,
    "ended_at": null,
    "revoked_at": "2026-01-03T10:05:00.000Z",
    "created_at": "2026-01-03T10:00:00.000Z"
  }
}

For response field descriptions, see the response field table under Create Broadcast.

Specific Error Codes

Error CodeHTTP StatusDescriptionRecommended Action
broadcast_session_not_found404Specified broadcast not foundVerify the broadcast ID is correct
broadcast_cannot_revoke422Only pending status can be revokedCheck the current broadcast status

DELETE /api/v1/broadcasts/batch (Batch Revoke Broadcasts)

Description

Batch revoke multiple broadcasts. Only broadcasts in pending status are revoked; IDs in other statuses are ignored. A single request can operate on up to 100 entries.

Authentication

Header: X-API-Key (see Authentication)

Request Parameters

ParameterLocationTypeRequiredDescription
idsbodyarrayYesArray of broadcast IDs (each element is a UUID, max 100 entries)

Request Example

curl -X DELETE "https://vas-poc.vurbo.ai/api/v1/broadcasts/batch" \
  -H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": [
      "550e8400-e29b-41d4-a716-446655440000",
      "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
    ]
  }'

Success Response

HTTP 200

{
  "data": {
    "affected_count": 2
  }
}

Response Field Descriptions

FieldTypeDescription
data.affected_countnumberNumber of broadcasts actually revoked (counts only pending status)

Specific Error Codes

Error CodeHTTP StatusDescriptionRecommended Action
validation_failed422Parameter validation failedVerify ids is a UUID array with no more than 100 entries

Version: V1.5.7 Last Updated: 2026-05-20

Copyright © 2026