Cancel Project
curl --request POST \
--url https://public.reap.video/api/v1/automation/cancel-project \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"projectId": "<string>"
}
'import requests
url = "https://public.reap.video/api/v1/automation/cancel-project"
payload = { "projectId": "<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>'})
};
fetch('https://public.reap.video/api/v1/automation/cancel-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/cancel-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>'
]),
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/cancel-project"
payload := strings.NewReader("{\n \"projectId\": \"<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/cancel-project")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"projectId\": \"<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
Cancel Project
Cancel a project that is still processing and refund its credits
POST
/
automation
/
cancel-project
Cancel Project
curl --request POST \
--url https://public.reap.video/api/v1/automation/cancel-project \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"projectId": "<string>"
}
'import requests
url = "https://public.reap.video/api/v1/automation/cancel-project"
payload = { "projectId": "<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>'})
};
fetch('https://public.reap.video/api/v1/automation/cancel-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/cancel-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>'
]),
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/cancel-project"
payload := strings.NewReader("{\n \"projectId\": \"<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/cancel-project")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"projectId\": \"<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
Cancel a project that is still processing. On cancel, the project moves to acancelled status and its credits are refunded automatically — there’s no separate call to make. A cancelled project stays in your workspace and remains fully readable, but it can no longer be edited, published, or scheduled.
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.When a project can be cancelled
You can cancel a project only while it’s still processing, in either of these cases:- Just after you start it — while Reap is still preparing your video, before any clips or outputs have been generated.
- If it looks stuck — it’s been processing for more than ~8 hours without finishing.
completed or failed) — or has already been cancelled — it can’t be cancelled again, and the API responds with 400.
Cancelling refunds the project’s credits automatically. There’s no separate call to make, and credits are refunded only once.
After cancelling
A cancelled project stays in your workspace and remains fully readable, but it’s locked for edits. Still available- View or list the project and its clips — Get Project Details, Get Project Status, Get All Projects, Get Project Clips
- Delete the project
400)
- Rename the project — Update Project
- Edit a clip — Update Clip
- Publish a clip — Publish Clip
- Update a post — Update Post
- Schedule clips — in Schedule Clips, a cancelled project’s clips come back in the
failedarray instead of failing the whole request.
Response
string
Unique project identifier
string
Project title
string
Thumbnail URL for the project
number
Duration in seconds that was billed for this project
string
Current processing status. After a successful cancel, this is
cancelled.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/cancel-project" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "65f1a2b3c4d5e6f7a8b9c0d2"
}'
const response = await fetch('https://public.reap.video/api/v1/automation/cancel-project', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
projectId: '65f1a2b3c4d5e6f7a8b9c0d2'
})
});
const project = await response.json();
console.log(`Status: ${project.status}`);
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
data = {
'projectId': '65f1a2b3c4d5e6f7a8b9c0d2'
}
response = requests.post(
'https://public.reap.video/api/v1/automation/cancel-project',
headers=headers,
json=data
)
project = response.json()
print(f"Status: {project['status']}")
<?php
$data = [
'projectId' => '65f1a2b3c4d5e6f7a8b9c0d2'
];
$ch = curl_init('https://public.reap.video/api/v1/automation/cancel-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 'Status: ' . $project['status'] . "\n";
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
data := map[string]string{
"projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
}
body, _ := json.Marshal(data)
req, _ := http.NewRequest("POST", "https://public.reap.video/api/v1/automation/cancel-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 CancelProjectExample {
public static void main(String[] args) throws Exception {
URL url = new URL("https://public.reap.video/api/v1/automation/cancel-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\"}";
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
ID of the project to cancel
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?