Update Clip
curl --request POST \
--url https://public.reap.video/api/v1/automation/update-clip \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"projectId": "<string>",
"clipId": "<string>",
"title": "<string>",
"caption": "<string>"
}
'import requests
url = "https://public.reap.video/api/v1/automation/update-clip"
payload = {
"projectId": "<string>",
"clipId": "<string>",
"title": "<string>",
"caption": "<string>"
}
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({
projectId: '<string>',
clipId: '<string>',
title: '<string>',
caption: '<string>'
})
};
fetch('https://public.reap.video/api/v1/automation/update-clip', 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://public.reap.video/api/v1/automation/update-clip",
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([
'projectId' => '<string>',
'clipId' => '<string>',
'title' => '<string>',
'caption' => '<string>'
]),
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://public.reap.video/api/v1/automation/update-clip"
payload := strings.NewReader("{\n \"projectId\": \"<string>\",\n \"clipId\": \"<string>\",\n \"title\": \"<string>\",\n \"caption\": \"<string>\"\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://public.reap.video/api/v1/automation/update-clip")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"projectId\": \"<string>\",\n \"clipId\": \"<string>\",\n \"title\": \"<string>\",\n \"caption\": \"<string>\"\n}")
.asString();{
"id": "<string>",
"projectId": "<string>",
"clipUrl": "<string>",
"startTime": 123,
"endTime": 123,
"duration": 123,
"topic": "<string>",
"title": "<string>",
"caption": "<string>",
"language": "<string>",
"translateTranscription": true,
"translationLanguages": [
"<string>"
],
"transcriptionScript": "native",
"viralityScore": 123,
"exportResolution": 123,
"exportOrientation": "landscape",
"captionsPreset": "<string>",
"enableCaptions": true,
"enableEmojis": true,
"enableHighlights": true,
"metadata": {
"width": 123,
"height": 123,
"aspectRatio": "<string>",
"size": 123,
"bitrate": 123,
"fps": 123,
"duration": 123,
"rotation": 123,
"resolution": 123,
"codec": "<string>",
"codecFullName": "<string>",
"codecTag": "<string>",
"format": "<string>",
"formatFullName": "<string>"
},
"createdAt": 123,
"updatedAt": 123
}Manage Projects
Update Clip
Update a clip’s title and caption
POST
/
automation
/
update-clip
Update Clip
curl --request POST \
--url https://public.reap.video/api/v1/automation/update-clip \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"projectId": "<string>",
"clipId": "<string>",
"title": "<string>",
"caption": "<string>"
}
'import requests
url = "https://public.reap.video/api/v1/automation/update-clip"
payload = {
"projectId": "<string>",
"clipId": "<string>",
"title": "<string>",
"caption": "<string>"
}
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({
projectId: '<string>',
clipId: '<string>',
title: '<string>',
caption: '<string>'
})
};
fetch('https://public.reap.video/api/v1/automation/update-clip', 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://public.reap.video/api/v1/automation/update-clip",
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([
'projectId' => '<string>',
'clipId' => '<string>',
'title' => '<string>',
'caption' => '<string>'
]),
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://public.reap.video/api/v1/automation/update-clip"
payload := strings.NewReader("{\n \"projectId\": \"<string>\",\n \"clipId\": \"<string>\",\n \"title\": \"<string>\",\n \"caption\": \"<string>\"\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://public.reap.video/api/v1/automation/update-clip")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"projectId\": \"<string>\",\n \"clipId\": \"<string>\",\n \"title\": \"<string>\",\n \"caption\": \"<string>\"\n}")
.asString();{
"id": "<string>",
"projectId": "<string>",
"clipUrl": "<string>",
"startTime": 123,
"endTime": 123,
"duration": 123,
"topic": "<string>",
"title": "<string>",
"caption": "<string>",
"language": "<string>",
"translateTranscription": true,
"translationLanguages": [
"<string>"
],
"transcriptionScript": "native",
"viralityScore": 123,
"exportResolution": 123,
"exportOrientation": "landscape",
"captionsPreset": "<string>",
"enableCaptions": true,
"enableEmojis": true,
"enableHighlights": true,
"metadata": {
"width": 123,
"height": 123,
"aspectRatio": "<string>",
"size": 123,
"bitrate": 123,
"fps": 123,
"duration": 123,
"rotation": 123,
"resolution": 123,
"codec": "<string>",
"codecFullName": "<string>",
"codecTag": "<string>",
"format": "<string>",
"formatFullName": "<string>"
},
"createdAt": 123,
"updatedAt": 123
}
For AI agents: a documentation index is at /llms.txt. Every page is also available as markdown, just append .md to the URL.
Overview
Update the title and/or caption of an existing clip. Clips that are still processing cannot be updated.Rate Limiting
This endpoint allows 30 requests per minute per API key. Each endpoint has its own budget, so this allowance is not shared with the rest of the API — see Rate limiting.Cannot update clips that are still processing. Title is limited to 80 characters and caption to 400 characters.
Clips belonging to a cancelled project can’t be edited. The API returns
400 — “This project was cancelled and can no longer be modified or published.”Response
string
Unique identifier for the clip
string
ID of the parent project
string
Direct download URL for the final clip (includes captions if enabled)
number
Start time of the clip in the original video (seconds)
number
End time of the clip in the original video (seconds)
number
Duration of the clip in seconds
string
Primary topic or theme of the clip
string
Updated title for the clip
string
Updated caption/description for the clip
string
Language of the clip content
boolean
Whether transcription is translated
array
Array of languages for translation
string
Target dubbing language (for dubbing projects)
string
Script format for transcription (“native” or “roman”)
number
AI-predicted virality score (0-10, higher is better)
integer
Resolution of the exported clip
string
Orientation of the exported clip (“landscape”, “portrait”, “square”)
string
Caption style preset used for this clip
boolean
Whether captions are enabled for this clip
boolean
Whether emojis are added to captions
boolean
Whether keyword highlighting is enabled
object
Clip metadata including technical details
integer
Unix timestamp when the clip was created
integer
Unix timestamp when the clip was last updated
Example Request
curl -X POST "https://public.reap.video/api/v1/automation/update-clip" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
"clipId": "65f1a2b3c4d5e6f7a8b9c0d4",
"title": "Updated Clip Title",
"caption": "A new caption for this clip"
}'
const response = await fetch('https://public.reap.video/api/v1/automation/update-clip', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
projectId: '65f1a2b3c4d5e6f7a8b9c0d2',
clipId: '65f1a2b3c4d5e6f7a8b9c0d4',
title: 'Updated Clip Title',
caption: 'A new caption for this clip'
})
});
const clip = await response.json();
console.log(`Updated: ${clip.title}`);
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
data = {
'projectId': '65f1a2b3c4d5e6f7a8b9c0d2',
'clipId': '65f1a2b3c4d5e6f7a8b9c0d4',
'title': 'Updated Clip Title',
'caption': 'A new caption for this clip'
}
response = requests.post(
'https://public.reap.video/api/v1/automation/update-clip',
headers=headers,
json=data
)
clip = response.json()
print(f"Updated: {clip['title']}")
<?php
$data = [
'projectId' => '65f1a2b3c4d5e6f7a8b9c0d2',
'clipId' => '65f1a2b3c4d5e6f7a8b9c0d4',
'title' => 'Updated Clip Title',
'caption' => 'A new caption for this clip'
];
$ch = curl_init('https://public.reap.video/api/v1/automation/update-clip');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$clip = json_decode($response, true);
echo 'Updated: ' . $clip['title'] . "\n";
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
data := map[string]string{
"projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
"clipId": "65f1a2b3c4d5e6f7a8b9c0d4",
"title": "Updated Clip Title",
"caption": "A new caption for this clip",
}
body, _ := json.Marshal(data)
req, _ := http.NewRequest("POST", "https://public.reap.video/api/v1/automation/update-clip", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
respBody, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(respBody))
}
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class UpdateClipExample {
public static void main(String[] args) throws Exception {
URL url = new URL("https://public.reap.video/api/v1/automation/update-clip");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Bearer YOUR_API_KEY");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
String jsonBody = "{\"projectId\":\"65f1a2b3c4d5e6f7a8b9c0d2\",\"clipId\":\"65f1a2b3c4d5e6f7a8b9c0d4\",\"title\":\"Updated Clip Title\",\"caption\":\"A new caption for this clip\"}";
try (OutputStream os = conn.getOutputStream()) {
os.write(jsonBody.getBytes("utf-8"));
}
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
StringBuilder response = new StringBuilder();
String responseLine;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
System.out.println(response.toString());
}
}
Example Response
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Response
200 - application/json
Successful response
Direct download URL for the final clip (includes captions if enabled)
Available options:
native, roman Available options:
landscape, portrait, square Show child attributes
Show child attributes
Was this page helpful?