Skip to main content
POST
/
api
/
clip-projects
cURL
curl --request POST \
  --url https://api.opus.pro/api/clip-projects \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "videoUrl": "https://www.youtube.com/watch?v=LXvv6CbGg8A",
  "conclusionActions": [
    {
      "type": "EMAIL",
      "notifyFailure": true,
      "email": "opusclip@opus.pro"
    }
  ],
  "curationPref": {
    "range": {
      "startSec": 28,
      "endSec": 636
    },
    "topicKeywords": [
      "OpusClip"
    ],
    "genre": "Auto"
  },
  "importPref": {
    "sourceLang": "auto"
  },
  "brandTemplateId": "preset-fancy-Karaoke"
}
'
import requests

url = "https://api.opus.pro/api/clip-projects"

payload = {
"videoUrl": "https://www.youtube.com/watch?v=LXvv6CbGg8A",
"conclusionActions": [
{
"type": "EMAIL",
"notifyFailure": True,
"email": "opusclip@opus.pro"
}
],
"curationPref": {
"range": {
"startSec": 28,
"endSec": 636
},
"topicKeywords": ["OpusClip"],
"genre": "Auto"
},
"importPref": { "sourceLang": "auto" },
"brandTemplateId": "preset-fancy-Karaoke"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
videoUrl: 'https://www.youtube.com/watch?v=LXvv6CbGg8A',
conclusionActions: [{type: 'EMAIL', notifyFailure: true, email: 'opusclip@opus.pro'}],
curationPref: {range: {startSec: 28, endSec: 636}, topicKeywords: ['OpusClip'], genre: 'Auto'},
importPref: {sourceLang: 'auto'},
brandTemplateId: 'preset-fancy-Karaoke'
})
};

fetch('https://api.opus.pro/api/clip-projects', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.opus.pro/api/clip-projects",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'videoUrl' => 'https://www.youtube.com/watch?v=LXvv6CbGg8A',
'conclusionActions' => [
[
'type' => 'EMAIL',
'notifyFailure' => true,
'email' => 'opusclip@opus.pro'
]
],
'curationPref' => [
'range' => [
'startSec' => 28,
'endSec' => 636
],
'topicKeywords' => [
'OpusClip'
],
'genre' => 'Auto'
],
'importPref' => [
'sourceLang' => 'auto'
],
'brandTemplateId' => 'preset-fancy-Karaoke'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.opus.pro/api/clip-projects"

payload := strings.NewReader("{\n \"videoUrl\": \"https://www.youtube.com/watch?v=LXvv6CbGg8A\",\n \"conclusionActions\": [\n {\n \"type\": \"EMAIL\",\n \"notifyFailure\": true,\n \"email\": \"opusclip@opus.pro\"\n }\n ],\n \"curationPref\": {\n \"range\": {\n \"startSec\": 28,\n \"endSec\": 636\n },\n \"topicKeywords\": [\n \"OpusClip\"\n ],\n \"genre\": \"Auto\"\n },\n \"importPref\": {\n \"sourceLang\": \"auto\"\n },\n \"brandTemplateId\": \"preset-fancy-Karaoke\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.opus.pro/api/clip-projects")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"videoUrl\": \"https://www.youtube.com/watch?v=LXvv6CbGg8A\",\n \"conclusionActions\": [\n {\n \"type\": \"EMAIL\",\n \"notifyFailure\": true,\n \"email\": \"opusclip@opus.pro\"\n }\n ],\n \"curationPref\": {\n \"range\": {\n \"startSec\": 28,\n \"endSec\": 636\n },\n \"topicKeywords\": [\n \"OpusClip\"\n ],\n \"genre\": \"Auto\"\n },\n \"importPref\": {\n \"sourceLang\": \"auto\"\n },\n \"brandTemplateId\": \"preset-fancy-Karaoke\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.opus.pro/api/clip-projects")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"videoUrl\": \"https://www.youtube.com/watch?v=LXvv6CbGg8A\",\n \"conclusionActions\": [\n {\n \"type\": \"EMAIL\",\n \"notifyFailure\": true,\n \"email\": \"opusclip@opus.pro\"\n }\n ],\n \"curationPref\": {\n \"range\": {\n \"startSec\": 28,\n \"endSec\": 636\n },\n \"topicKeywords\": [\n \"OpusClip\"\n ],\n \"genre\": \"Auto\"\n },\n \"importPref\": {\n \"sourceLang\": \"auto\"\n },\n \"brandTemplateId\": \"preset-fancy-Karaoke\"\n}"

response = http.request(request)
puts response.read_body
{
  "id": "P0000000demo",
  "userId": "google-oauth2|100000000000000000001",
  "orgId": "org_Example00000001",
  "isDeleted": false,
  "isPurged": false,
  "projectId": "P0000000demo",
  "sourcePlatform": "YOUTUBE",
  "sourceId": "YT_tEXaoozFRes",
  "labels": [],
  "productTier": "PRO",
  "stage": "QUEUED",
  "storageSize": 0,
  "storageStatus": "TEMPORARY",
  "storageExpireAt": "2024-12-19T08:17:42.832Z",
  "createdAt": "2024-11-19T08:17:42.832Z",
  "updatedAt": "2024-11-19T08:17:42.860Z",
  "clusterJobId": "FP.P0000000demo:20241119081742853.FP",
  "cluster": "gold",
  "visibility": "DEFAULT",
  "permissions": [
    "PROJECT_SHARE",
    "PROJECT_EDIT",
    "PROJECT_VIEW"
  ],
  "promptRecommendations": [
    "Foo",
    "Boo"
  ],
  "sourceUri": null,
  "model": "ClipBasic",
  "error": null,
  "stallCount": null,
  "workerUrl": null,
  "curationPref": {
    "range": {
      "startSec": 28,
      "endSec": 636
    },
    "clipDurations": [
      [
        0,
        90
      ]
    ],
    "topicKeywords": [
      "OpusClip"
    ],
    "genre": "Auto"
  },
  "renderPref": {
    "enableSplitLayout": true,
    "enableFitLayout": false,
    "enableFillLayout": false,
    "enableScreenLayout": true,
    "enableThreeLayout": true,
    "enableFourLayout": true,
    "enableAutoLayout": false,
    "fitLayoutCropRatio": "4:3",
    "enableCrop": true,
    "layoutAspectRatio": "portrait",
    "enableVisualHook": false,
    "enableCaption": true,
    "enableHighlight": true,
    "enableEmoji": true,
    "enableUppercase": true,
    "highlightColor": {
      "primary": "#04f827",
      "secondary": "#FFFD03"
    },
    "font": {
      "id": null,
      "type": null,
      "name": null,
      "path": null,
      "size": "Large",
      "numericalSize": 50,
      "color": "#ffffff",
      "style": [
        "900"
      ],
      "textDecoration": "",
      "family": "Komika-axis",
      "stroke": {
        "enabled": true,
        "color": "#000000FF",
        "width": 16
      },
      "shadow": {
        "enabled": true,
        "color": "#FFFFFFFF",
        "x": 2,
        "y": 2,
        "blur": 16,
        "useWordHighlightColor": false
      }
    },
    "enableBroll": null,
    "enableWatermark": false
  },
  "refundStatus": null,
  "importPref": {
    "sourceLang": "en"
  }
}
👆Use above tools to generate API request code snippets.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
videoUrl
string
required

This parameter defines the url of the long-form video. OpusClip can import public videos from the following platforms:

  • YouTube, Google Drive, Vimeo, Zoom, Rumble, Twitch, Facebook, LinkedIn, X, Dropbox, Riverside, Loom, Frame.io, StreamYard
  • Any public video s3 link of an mp4 file (up to 10GB per video)
Example:

"https://www.youtube.com/watch?v=LXvv6CbGg8A"

conclusionActions
object[]

Actions to be taken upon project conclusion, such as sending an email or triggering a webhook.

Example:
[
{
"type": "EMAIL",
"notifyFailure": true,
"email": "opusclip@opus.pro"
}
]
curationPref
object

Preferences for advanced curation of the video.

Example:
{
"range": { "startSec": 28, "endSec": 636 },
"topicKeywords": ["OpusClip"],
"genre": "Auto"
}
importPref
object

Preferences for importing the video, such as source language.

Example:
{ "sourceLang": "auto" }
brandTemplateId
string

ID of the brand template to be used for the project.

Example:

"preset-fancy-Karaoke"

Response

201 - application/json
id
string
required

The unique identifier of the project.

Example:

"P0000000demo"

userId
string
required

The unique identifier of the user.

Example:

"google-oauth2|100000000000000000001"

orgId
string
required

The unique identifier of the organization.

Example:

"org_Example00000001"

isDeleted
boolean
required

Indicates whether the project is deleted.

Example:

false

isPurged
boolean
required

Indicates whether the project is purged.

Example:

false

projectId
string
required

The unique identifier of the project.

Example:

"P0000000demo"

sourcePlatform
enum<string>
required

The platform from which the video is sourced.

Available options:
YOUTUBE,
UPLOADED,
YTDLP_LINK,
GDRIVE,
ZOOM,
STREAM_YARD
Example:

"YOUTUBE"

sourceId
string
required

The unique identifier for the video on the source platform.

Example:

"YT_tEXaoozFRes"

labels
string[]
required

Labels associated with the project.

Example:
[]
productTier
string
required

The product tier of the project.

Example:

"PRO"

stage
enum<string>
required

The current stage of the project.

Available options:
PENDING,
QUEUED,
IMPORT,
CURATE,
REFINE,
RENDER,
UPLOAD,
COMPLETE,
STALLED
Example:

"QUEUED"

storageSize
number
required

The total size of the project in bytes.

Example:

0

storageStatus
string
required

The storage status of the project.

Example:

"TEMPORARY"

storageExpireAt
string
required

The expiration date of the project storage.

Example:

"2024-12-19T08:17:42.832Z"

createdAt
string<date-time>
required

The date and time when the project was created.

Example:

"2024-11-19T08:17:42.832Z"

updatedAt
string<date-time>
required

The date and time when the project was last updated.

Example:

"2024-11-19T08:17:42.860Z"

clusterJobId
string
required

The unique identifier of the cluster job processing the project.

Example:

"FP.P0000000demo:20241119081742853.FP"

cluster
string
required

The cluster on which the project is running.

Example:

"gold"

visibility
enum<string>
required

The visibility of the project.

Available options:
DEFAULT,
PUBLIC,
PUBLIC_VIEW
Example:

"DEFAULT"

permissions
string[]
required

Permissions associated with the project.

Example:
[
"PROJECT_SHARE",
"PROJECT_EDIT",
"PROJECT_VIEW"
]
promptRecommendations
string[]
required

Recommendations for project prompts.

Example:
["Foo", "Boo"]
sourceUri
string

The URI of the source video.

Example:

null

model
enum<string>

The AI clipping model used for the project.

Available options:
ClipAnything,
ClipBasic
Example:

"ClipBasic"

error
string

Error message, if any.

Example:

null

stallCount
number

The number of times the project has stalled.

Example:

null

workerUrl
string

The URL of the worker processing the project.

Example:

null

curationPref
object

Preferences for advanced curation of the video.

Example:
{
"range": { "startSec": 28, "endSec": 636 },
"clipDurations": [[0, 90]],
"topicKeywords": ["OpusClip"],
"genre": "Auto"
}
renderPref
object

Preferences for rendering the video, including layout and overlay options.

Example:
{
"enableSplitLayout": true,
"enableFitLayout": false,
"enableFillLayout": false,
"enableScreenLayout": true,
"enableThreeLayout": true,
"enableFourLayout": true,
"enableAutoLayout": false,
"fitLayoutCropRatio": "4:3",
"enableCrop": true,
"layoutAspectRatio": "portrait",
"enableVisualHook": false,
"enableCaption": true,
"enableHighlight": true,
"enableEmoji": true,
"enableUppercase": true,
"highlightColor": {
"primary": "#04f827",
"secondary": "#FFFD03"
},
"font": {
"id": null,
"type": null,
"name": null,
"path": null,
"size": "Large",
"numericalSize": 50,
"color": "#ffffff",
"style": ["900"],
"textDecoration": "",
"family": "Komika-axis",
"stroke": {
"enabled": true,
"color": "#000000FF",
"width": 16
},
"shadow": {
"enabled": true,
"color": "#FFFFFFFF",
"x": 2,
"y": 2,
"blur": 16,
"useWordHighlightColor": false
}
},
"enableBroll": null,
"enableWatermark": false
}
refundStatus
string

The refund status of the project.

Example:

null

importPref
object

Preferences for importing the video, such as source language.

Example:
{ "sourceLang": "en" }