Videos
Delete Video
DELETE /api/videos/:id - Delete a video and all its clips.
DELETE /api/videos/{id}
Permanently deletes the video, all its clips, and all associated files. This cannot be undone.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | The video ID to delete |
Example
curl -X DELETE https://api.scalereach.ai/api/videos/UThwmCZb75JYZi4UP9rOX \
-H "Authorization: Bearer sr_live_YOUR_KEY"Response 200
{
"message": "Video deleted successfully"
}What gets deleted
The call removes everything ScaleReach stored for the video, not just the database row:
- the video record and its transcript
- every clip generated from it, including the rendered files, raw files and thumbnails
- any exports created from those clips
- dubbed audio created for the video
- the stored source video, its extracted audio and its thumbnail
- any processing or clip-generation jobs that are still queued or running
- scheduled posts that were waiting to publish those clips
Because queued jobs are removed too, you can delete a video that is still processing. Scheduled posts that point at this video's clips are removed together with the clips. Posts that were already published on TikTok, Instagram or YouTube stay on those platforms, because ScaleReach cannot take them back.
Errors
| Status | When it happens |
|---|---|
401 | The API key is missing, invalid or expired. |
403 | The video belongs to a workspace you are not a member of. |
404 | No video exists with that ID. This is also what you get when you call delete twice, because the first call already removed it. |
500 | The deletion failed. Retry the request. Files that were already removed stay removed. |
Safe deletion in a script
Deletion cannot be undone, so list first and confirm what you are about to remove:
import requests, os
headers = {"Authorization": f"Bearer {os.environ['SCALEREACH_API_KEY']}"}
base = "https://api.scalereach.ai/api"
video_id = "UThwmCZb75JYZi4UP9rOX"
video = requests.get(f"{base}/videos/{video_id}", headers=headers).json()
print(f'Deleting "{video["title"]}" ({video["status"]})')
r = requests.delete(f"{base}/videos/{video_id}", headers=headers)
print(r.status_code, r.json())Download any clips you want to keep before deleting. The downloadUrl from Get Clip stops working once the file is gone.