AI-powered highlight detection and clip management
| Method | Path | Summary |
|---|---|---|
GET | /clips | List clips |
POST | /clips | Create a clip |
GET | /clips/{clipId} | Get a clip |
PATCH | /clips/{clipId} | Update a clip |
DELETE | /clips/{clipId} | Delete a clip |
POST | /clips/detect | Start AI clip detection |
{% api-endpoint method=“GET” path=“/clips” /%}
List clips
Operation ID: listClips
| Name | Type | Required | Description |
| ---------- | ---------- | ------------ | ------------- | -------- | ------------ | --- | ------------------------------------------------------------------- |
| page | integer | No | Default: 1 |
| perPage | integer | No | Default: 20 |
| videoId | string | No | - |
| status | "pending" | "processing" | "completed" | "failed" | "cancelled" | No | Values: pending, processing, completed, failed, cancelled |
| category | string | No | - |
Paginated list of clips
| Field | Type | Required | Description |
|---|---|---|---|
data | object[] | No | - |
pagination | object | No | - |
{% tabs %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const result = await client.clips.listClips({
page: 1,
perPage: 1,
videoId: "abc-123",
status: "example-value",
category: "example-value",
});
console.log(result);
{% /tab %} {% tab label=“Python” %}
from wave_sdk import WaveClient
client = WaveClient(api_key="your-api-key")
result = client.clips.list_clips(
page=1,
per_page=1,
video_id="abc-123",
status="example-value",
category="example-value"
)
print(result)
{% /tab %} {% tab label=“cURL” %}
curl -X GET 'https://api.wave.online/clips?page=1&perPage=1&videoId=abc-123&status=example-value&category=example-value' \
-H 'Authorization: Bearer YOUR_API_KEY'
{% /tab %} {% /tabs %}
{% api-endpoint method=“POST” path=“/clips” /%}
Create a clip
Operation ID: createClip
Content-Type: application/json
| Required
| Field | Type | Required | Description |
|---|---|---|---|
videoId | string | Yes | - |
startTime | number | Yes | - |
endTime | number | Yes | - |
title | string | No | - |
description | string | No | - |
category | string | No | - |
Clip created
| Field | Type | Required | Description |
|---|---|---|---|
id | string | No | - |
videoId | string | No | - |
startTime | number | No | - |
endTime | number | No | - |
duration | number | No | - |
title | string | No | - |
description | string | No | - |
score | number | No | - |
category | string | No | - |
thumbnailUrl | string (uri) | No | - |
previewUrl | string (uri) | No | - |
status | string | No | Values: pending, processing, completed, failed, cancelled |
organizationId | string | No | - |
createdAt | string (date-time) | No | - |
updatedAt | string (date-time) | No | - |
Validation error
| Field | Type | Required | Description |
|---|---|---|---|
message | string | Yes | - |
code | string | No | - |
errors | object[] | No | - |
{% tabs %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const result = await client.clips.createClip({
videoId: "abc-123",
startTime: 1,
endTime: 1,
title: "example-value",
description: "example-value",
category: "example-value",
});
console.log(result);
{% /tab %} {% tab label=“Python” %}
from wave_sdk import WaveClient
client = WaveClient(api_key="your-api-key")
result = client.clips.create_clip(
video_id="abc-123",
start_time=1,
end_time=1,
title="example-value",
description="example-value",
category="example-value"
)
print(result)
{% /tab %} {% tab label=“cURL” %}
curl -X POST 'https://api.wave.online/clips' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"videoId": "abc-123",
"startTime": 1,
"endTime": 1,
"title": "example-value",
"description": "example-value",
"category": "example-value"
}'
{% /tab %} {% /tabs %}
{% api-endpoint method=“GET” path=“/clips/{clipId}” /%}
Get a clip
Operation ID: getClip
| Name | Type | Required | Description |
|---|---|---|---|
clipId | string | Yes | - |
Clip details
| Field | Type | Required | Description |
|---|---|---|---|
id | string | No | - |
videoId | string | No | - |
startTime | number | No | - |
endTime | number | No | - |
duration | number | No | - |
title | string | No | - |
description | string | No | - |
score | number | No | - |
category | string | No | - |
thumbnailUrl | string (uri) | No | - |
previewUrl | string (uri) | No | - |
status | string | No | Values: pending, processing, completed, failed, cancelled |
organizationId | string | No | - |
createdAt | string (date-time) | No | - |
updatedAt | string (date-time) | No | - |
Resource not found
| Field | Type | Required | Description |
|---|---|---|---|
message | string | Yes | - |
code | string | No | - |
errors | object[] | No | - |
{% tabs %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const result = await client.clips.getClip("abc-123");
console.log(result);
{% /tab %} {% tab label=“Python” %}
from wave_sdk import WaveClient
client = WaveClient(api_key="your-api-key")
result = client.clips.get_clip(
clip_id="abc-123"
)
print(result)
{% /tab %} {% tab label=“cURL” %}
curl -X GET 'https://api.wave.online/clips/abc-123' \
-H 'Authorization: Bearer YOUR_API_KEY'
{% /tab %} {% /tabs %}
{% api-endpoint method=“PATCH” path=“/clips/{clipId}” /%}
Update a clip
Operation ID: updateClip
| Name | Type | Required | Description |
|---|---|---|---|
clipId | string | Yes | - |
Content-Type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
title | string | No | - |
description | string | No | - |
startTime | number | No | - |
endTime | number | No | - |
Clip updated
| Field | Type | Required | Description |
|---|---|---|---|
id | string | No | - |
videoId | string | No | - |
startTime | number | No | - |
endTime | number | No | - |
duration | number | No | - |
title | string | No | - |
description | string | No | - |
score | number | No | - |
category | string | No | - |
thumbnailUrl | string (uri) | No | - |
previewUrl | string (uri) | No | - |
status | string | No | Values: pending, processing, completed, failed, cancelled |
organizationId | string | No | - |
createdAt | string (date-time) | No | - |
updatedAt | string (date-time) | No | - |
{% tabs %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const result = await client.clips.updateClip("abc-123", {
title: "example-value",
description: "example-value",
startTime: 1,
endTime: 1,
});
console.log(result);
{% /tab %} {% tab label=“Python” %}
from wave_sdk import WaveClient
client = WaveClient(api_key="your-api-key")
result = client.clips.update_clip(
clip_id="abc-123",
title="example-value",
description="example-value",
start_time=1,
end_time=1
)
print(result)
{% /tab %} {% tab label=“cURL” %}
curl -X PATCH 'https://api.wave.online/clips/abc-123' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"title": "example-value",
"description": "example-value",
"startTime": 1,
"endTime": 1
}'
{% /tab %} {% /tabs %}
{% api-endpoint method=“DELETE” path=“/clips/{clipId}” /%}
Delete a clip
Operation ID: deleteClip
| Name | Type | Required | Description |
|---|---|---|---|
clipId | string | Yes | - |
Clip deleted
{% tabs %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const result = await client.clips.deleteClip("abc-123");
console.log(result);
{% /tab %} {% tab label=“Python” %}
from wave_sdk import WaveClient
client = WaveClient(api_key="your-api-key")
result = client.clips.delete_clip(
clip_id="abc-123"
)
print(result)
{% /tab %} {% tab label=“cURL” %}
curl -X DELETE 'https://api.wave.online/clips/abc-123' \
-H 'Authorization: Bearer YOUR_API_KEY'
{% /tab %} {% /tabs %}
{% api-endpoint method=“POST” path=“/clips/detect” /%}
Start AI clip detection
Operation ID: detectClips
Content-Type: application/json
| Required
| Field | Type | Required | Description |
|---|---|---|---|
videoId | string | Yes | - |
minDuration | number | No | Default: 5 |
maxDuration | number | No | Default: 60 |
categories | string[] | No | - |
sensitivity | number | No | Default: 0.5 |
maxClips | integer | No | - |
Detection job started
| Field | Type | Required | Description |
|---|---|---|---|
id | string | No | - |
status | string | No | Values: pending, processing, completed, failed, cancelled |
progress | integer | No | - |
createdAt | string (date-time) | No | - |
{% tabs %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const result = await client.clips.detectClips({
videoId: "abc-123",
minDuration: 5,
maxDuration: 60,
categories: [],
sensitivity: 0.5,
maxClips: 1,
});
console.log(result);
{% /tab %} {% tab label=“Python” %}
from wave_sdk import WaveClient
client = WaveClient(api_key="your-api-key")
result = client.clips.detect_clips(
video_id="abc-123",
min_duration=1,
max_duration=1,
categories=[],
sensitivity=1,
max_clips=1
)
print(result)
{% /tab %} {% tab label=“cURL” %}
curl -X POST 'https://api.wave.online/clips/detect' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"videoId": "abc-123",
"minDuration": 5,
"maxDuration": 60,
"categories": [],
"sensitivity": 0.5,
"maxClips": 1
}'
{% /tab %} {% /tabs %}