Video-on-demand asset management via Mux and Cloudflare Stream. Upload, process, and manage recorded video content.
| Method | Path | Summary |
|---|---|---|
GET | /vod/assets | List VOD assets |
POST | /vod/upload | Upload a video |
POST | /vod/cloudflare/upload | Upload via Cloudflare Stream |
POST | /vod/clips | Create a clip from VOD asset |
{% api-endpoint method=“GET” path=“/vod/assets” /%}
List VOD assets
Operation ID: listVodAssets
| Name | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Default: 25. Max: 100 |
page | integer | No | Default: 1 |
assetId | string | No | Get a single asset by Mux ID |
Paginated list of VOD assets or single asset details
| Field | Type | Required | Description |
|---|---|---|---|
data | object[] | No | - |
pagination | object | No | - |
{% tabs %} {% tab label=“cURL” %}
curl -X GET 'https://api.wave.online/api/v1/vod/assets?limit=25&page=1' \
-H 'Authorization: Bearer YOUR_API_KEY'
{% /tab %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const assets = await client.vod.listAssets({ limit: 25, page: 1 });
console.log(assets);
{% /tab %} {% tab label=“Python” %}
from wave_sdk import WaveClient
client = WaveClient(api_key="your-api-key")
assets = client.vod.list_assets(limit=25, page=1)
print(assets)
{% /tab %} {% /tabs %}
{% api-endpoint method=“POST” path=“/vod/upload” /%}
Upload a video for VOD processing
Operation ID: uploadVod
Content-Type: application/json
| Required
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Source video URL |
title | string | No | Video title |
description | string | No | Video description |
passthrough | string | No | Passthrough metadata |
Upload initiated
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Asset ID |
status | string | Yes | Values: preparing, ready, errored |
playbackId | string | No | Mux playback ID |
createdAt | string (date-time) | No | - |
{% tabs %} {% tab label=“cURL” %}
curl -X POST 'https://api.wave.online/api/v1/vod/upload' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://storage.example.com/video.mp4",
"title": "Product Launch Recording"
}'
{% /tab %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const asset = await client.vod.upload({
url: "https://storage.example.com/video.mp4",
title: "Product Launch Recording",
});
console.log(asset);
{% /tab %} {% /tabs %}
{% api-endpoint method=“POST” path=“/vod/cloudflare/upload” /%}
Upload video via Cloudflare Stream
Operation ID: uploadVodCloudflare
Content-Type: application/json
| Required
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Source video URL |
title | string | No | Video title |
meta | object | No | Additional metadata |
Cloudflare upload initiated
| Field | Type | Required | Description |
|---|---|---|---|
uid | string | Yes | Cloudflare Stream UID |
status | string | Yes | Upload status |
{% tabs %} {% tab label=“cURL” %}
curl -X POST 'https://api.wave.online/api/v1/vod/cloudflare/upload' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://storage.example.com/video.mp4",
"title": "Conference Keynote"
}'
{% /tab %} {% /tabs %}
{% api-endpoint method=“POST” path=“/vod/clips” /%}
Create a clip from a VOD asset
Operation ID: createVodClip
Content-Type: application/json
| Required
| Field | Type | Required | Description |
|---|---|---|---|
assetId | string | Yes | Source VOD asset ID |
startTime | number | Yes | Clip start time in seconds |
endTime | number | Yes | Clip end time in seconds |
title | string | No | Clip title |
Clip created
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Clip asset ID |
status | string | Yes | Values: preparing, ready |
playbackId | string | No | Mux playback ID for the clip |
createdAt | string (date-time) | No | - |
{% tabs %} {% tab label=“cURL” %}
curl -X POST 'https://api.wave.online/api/v1/vod/clips' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"assetId": "asset_abc123",
"startTime": 120,
"endTime": 180,
"title": "Highlight Reel"
}'
{% /tab %} {% /tabs %}