Update Project
curl --request POST \
--url https://public.reap.video/api/v1/automation/update-project \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"projectId": "<string>",
"title": "<string>"
}
'import requests
url = "https://public.reap.video/api/v1/automation/update-project"
payload = {
"projectId": "<string>",
"title": "<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>', title: '<string>'})
};
fetch('https://public.reap.video/api/v1/automation/update-project', 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-project",
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>',
'title' => '<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-project"
payload := strings.NewReader("{\n \"projectId\": \"<string>\",\n \"title\": \"<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-project")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"projectId\": \"<string>\",\n \"title\": \"<string>\"\n}")
.asString();{
"id": "<string>",
"title": "<string>",
"thumbnail": "<string>",
"billedDuration": 123,
"status": "queued",
"projectType": "clipping",
"source": "Upload",
"genre": "talking",
"topics": [
"<string>"
],
"clipDurations": [
[
123
]
],
"selectedStart": 123,
"selectedEnd": 123,
"exportResolution": 123,
"exportOrientation": "landscape",
"captionsPreset": "<string>",
"enableCaptions": true,
"enableEmojis": true,
"enableHighlights": true,
"language": "<string>",
"dubbingLanguage": "<string>",
"translateTranscription": true,
"translationLanguages": [
"<string>"
],
"transcriptionScript": "native",
"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>"
},
"urls": {
"videoFile": "<string>",
"audioFile": "<string>",
"transcription": "<string>",
"transcription_srt": "<string>",
"transcription_vtt": "<string>",
"transcription_csv": "<string>",
"transcription_txt": "<string>"
},
"createdAt": 123,
"updatedAt": 123
}Manage Projects
Update Project
Update a project’s title
POST
/
automation
/
update-project
Update Project
curl --request POST \
--url https://public.reap.video/api/v1/automation/update-project \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"projectId": "<string>",
"title": "<string>"
}
'import requests
url = "https://public.reap.video/api/v1/automation/update-project"
payload = {
"projectId": "<string>",
"title": "<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>', title: '<string>'})
};
fetch('https://public.reap.video/api/v1/automation/update-project', 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-project",
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>',
'title' => '<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-project"
payload := strings.NewReader("{\n \"projectId\": \"<string>\",\n \"title\": \"<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-project")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"projectId\": \"<string>\",\n \"title\": \"<string>\"\n}")
.asString();{
"id": "<string>",
"title": "<string>",
"thumbnail": "<string>",
"billedDuration": 123,
"status": "queued",
"projectType": "clipping",
"source": "Upload",
"genre": "talking",
"topics": [
"<string>"
],
"clipDurations": [
[
123
]
],
"selectedStart": 123,
"selectedEnd": 123,
"exportResolution": 123,
"exportOrientation": "landscape",
"captionsPreset": "<string>",
"enableCaptions": true,
"enableEmojis": true,
"enableHighlights": true,
"language": "<string>",
"dubbingLanguage": "<string>",
"translateTranscription": true,
"translationLanguages": [
"<string>"
],
"transcriptionScript": "native",
"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>"
},
"urls": {
"videoFile": "<string>",
"audioFile": "<string>",
"transcription": "<string>",
"transcription_srt": "<string>",
"transcription_vtt": "<string>",
"transcription_csv": "<string>",
"transcription_txt": "<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 of an existing project. Projects 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 projects that are still processing. Wait for the project to reach
completed or failed status before updating.A cancelled project can’t be renamed. The API returns
400 — “This project was cancelled and can no longer be modified or published.”Response
string
Unique project identifier
string
Updated project title
string
Thumbnail URL for the project
number
Duration in seconds that was billed for this project
string
Current processing status
string
Type of project
string
Source of the video content
string
Video genre used for AI analysis
array
Array of identified topics in the video
array
Array of clip duration preferences
number
Start time in seconds for processing (null if entire video)
number
End time in seconds for processing (null if entire video)
integer
Output resolution for the project
string
Output orientation
string
Caption style preset ID (null if captions disabled)
boolean
Whether captions are enabled
boolean
Whether emojis are added to captions
boolean
Whether keyword highlighting is enabled
string
Primary language of the video content
string
Target dubbing language (null if not applicable)
boolean
Whether transcription is translated
array
Array of languages for translation
string
Script format for transcription (“native” or “roman”)
object
Video file metadata including duration, resolution, format, etc.
object
Project URLs and assets
integer
Unix timestamp when the project was created
integer
Unix timestamp when the project was last updated
Example Request
curl -X POST "https://public.reap.video/api/v1/automation/update-project" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
"title": "My Updated Title"
}'
const response = await fetch('https://public.reap.video/api/v1/automation/update-project', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
projectId: '65f1a2b3c4d5e6f7a8b9c0d2',
title: 'My Updated Title'
})
});
const project = await response.json();
console.log(`Updated: ${project.title}`);
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
data = {
'projectId': '65f1a2b3c4d5e6f7a8b9c0d2',
'title': 'My Updated Title'
}
response = requests.post(
'https://public.reap.video/api/v1/automation/update-project',
headers=headers,
json=data
)
project = response.json()
print(f"Updated: {project['title']}")
<?php
$data = [
'projectId' => '65f1a2b3c4d5e6f7a8b9c0d2',
'title' => 'My Updated Title'
];
$ch = curl_init('https://public.reap.video/api/v1/automation/update-project');
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);
$project = json_decode($response, true);
echo 'Updated: ' . $project['title'] . "\n";
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
data := map[string]string{
"projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
"title": "My Updated Title",
}
body, _ := json.Marshal(data)
req, _ := http.NewRequest("POST", "https://public.reap.video/api/v1/automation/update-project", 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 UpdateProjectExample {
public static void main(String[] args) throws Exception {
URL url = new URL("https://public.reap.video/api/v1/automation/update-project");
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\",\"title\":\"My Updated Title\"}";
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
Available options:
queued, prepped, draft, processing, finalizing, completed, invalid, expired, failed, error Available options:
clipping, captions, reframe, dubbing, transcription Available options:
Upload, Youtube, Vimeo, TwitchVod, Twitter, RumbleEmbed, Generic Available options:
talking, screenshare, gaming Available options:
landscape, portrait, square Available options:
native, roman Show child attributes
Show child attributes
Presigned URLs for the project's assets. URLs expire — always use the most recent API response. The transcription_* subtitle/text exports are only present on transcription projects.
Show child attributes
Show child attributes
Was this page helpful?