Update Post
curl --request POST \
--url https://public.reap.video/api/v1/automation/update-post \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"postId": "<string>",
"title": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"scheduleDate": 123,
"platformSettings": {
"youtube": {
"privacy": "public",
"embeddable": true,
"publicStats": true,
"madeForKids": false
},
"tiktok": {
"privacy": "public",
"disableComments": false,
"disableDuet": false,
"disableStitch": false,
"brandContent": false,
"brandOrganic": false
},
"instagram": {
"shareToFeed": false
},
"linkedin": {
"privacy": "public"
}
}
}
'import requests
url = "https://public.reap.video/api/v1/automation/update-post"
payload = {
"postId": "<string>",
"title": "<string>",
"description": "<string>",
"tags": ["<string>"],
"scheduleDate": 123,
"platformSettings": {
"youtube": {
"privacy": "public",
"embeddable": True,
"publicStats": True,
"madeForKids": False
},
"tiktok": {
"privacy": "public",
"disableComments": False,
"disableDuet": False,
"disableStitch": False,
"brandContent": False,
"brandOrganic": False
},
"instagram": { "shareToFeed": False },
"linkedin": { "privacy": "public" }
}
}
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({
postId: '<string>',
title: '<string>',
description: '<string>',
tags: ['<string>'],
scheduleDate: 123,
platformSettings: {
youtube: {privacy: 'public', embeddable: true, publicStats: true, madeForKids: false},
tiktok: {
privacy: 'public',
disableComments: false,
disableDuet: false,
disableStitch: false,
brandContent: false,
brandOrganic: false
},
instagram: {shareToFeed: false},
linkedin: {privacy: 'public'}
}
})
};
fetch('https://public.reap.video/api/v1/automation/update-post', 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-post",
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([
'postId' => '<string>',
'title' => '<string>',
'description' => '<string>',
'tags' => [
'<string>'
],
'scheduleDate' => 123,
'platformSettings' => [
'youtube' => [
'privacy' => 'public',
'embeddable' => true,
'publicStats' => true,
'madeForKids' => false
],
'tiktok' => [
'privacy' => 'public',
'disableComments' => false,
'disableDuet' => false,
'disableStitch' => false,
'brandContent' => false,
'brandOrganic' => false
],
'instagram' => [
'shareToFeed' => false
],
'linkedin' => [
'privacy' => 'public'
]
]
]),
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-post"
payload := strings.NewReader("{\n \"postId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scheduleDate\": 123,\n \"platformSettings\": {\n \"youtube\": {\n \"privacy\": \"public\",\n \"embeddable\": true,\n \"publicStats\": true,\n \"madeForKids\": false\n },\n \"tiktok\": {\n \"privacy\": \"public\",\n \"disableComments\": false,\n \"disableDuet\": false,\n \"disableStitch\": false,\n \"brandContent\": false,\n \"brandOrganic\": false\n },\n \"instagram\": {\n \"shareToFeed\": false\n },\n \"linkedin\": {\n \"privacy\": \"public\"\n }\n }\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-post")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"postId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scheduleDate\": 123,\n \"platformSettings\": {\n \"youtube\": {\n \"privacy\": \"public\",\n \"embeddable\": true,\n \"publicStats\": true,\n \"madeForKids\": false\n },\n \"tiktok\": {\n \"privacy\": \"public\",\n \"disableComments\": false,\n \"disableDuet\": false,\n \"disableStitch\": false,\n \"brandContent\": false,\n \"brandOrganic\": false\n },\n \"instagram\": {\n \"shareToFeed\": false\n },\n \"linkedin\": {\n \"privacy\": \"public\"\n }\n }\n}")
.asString();{
"id": "<string>",
"projectId": "<string>",
"clipId": "<string>",
"platforms": [
"<string>"
],
"successPlatforms": [
"<string>"
],
"failedPlatforms": [
"<string>"
],
"integrations": [
"<string>"
],
"title": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"scheduleDate": 123,
"publishDate": 123,
"urls": {},
"platformSettings": {
"youtube": {
"privacy": "public",
"embeddable": true,
"publicStats": true,
"madeForKids": false
},
"tiktok": {
"privacy": "public",
"disableComments": false,
"disableDuet": false,
"disableStitch": false,
"brandContent": false,
"brandOrganic": false
},
"instagram": {
"shareToFeed": false
},
"linkedin": {
"privacy": "public"
}
},
"createdAt": 123,
"updatedAt": 123
}Publishing
Update Post
Update a scheduled or draft post
POST
/
automation
/
update-post
Update Post
curl --request POST \
--url https://public.reap.video/api/v1/automation/update-post \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"postId": "<string>",
"title": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"scheduleDate": 123,
"platformSettings": {
"youtube": {
"privacy": "public",
"embeddable": true,
"publicStats": true,
"madeForKids": false
},
"tiktok": {
"privacy": "public",
"disableComments": false,
"disableDuet": false,
"disableStitch": false,
"brandContent": false,
"brandOrganic": false
},
"instagram": {
"shareToFeed": false
},
"linkedin": {
"privacy": "public"
}
}
}
'import requests
url = "https://public.reap.video/api/v1/automation/update-post"
payload = {
"postId": "<string>",
"title": "<string>",
"description": "<string>",
"tags": ["<string>"],
"scheduleDate": 123,
"platformSettings": {
"youtube": {
"privacy": "public",
"embeddable": True,
"publicStats": True,
"madeForKids": False
},
"tiktok": {
"privacy": "public",
"disableComments": False,
"disableDuet": False,
"disableStitch": False,
"brandContent": False,
"brandOrganic": False
},
"instagram": { "shareToFeed": False },
"linkedin": { "privacy": "public" }
}
}
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({
postId: '<string>',
title: '<string>',
description: '<string>',
tags: ['<string>'],
scheduleDate: 123,
platformSettings: {
youtube: {privacy: 'public', embeddable: true, publicStats: true, madeForKids: false},
tiktok: {
privacy: 'public',
disableComments: false,
disableDuet: false,
disableStitch: false,
brandContent: false,
brandOrganic: false
},
instagram: {shareToFeed: false},
linkedin: {privacy: 'public'}
}
})
};
fetch('https://public.reap.video/api/v1/automation/update-post', 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-post",
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([
'postId' => '<string>',
'title' => '<string>',
'description' => '<string>',
'tags' => [
'<string>'
],
'scheduleDate' => 123,
'platformSettings' => [
'youtube' => [
'privacy' => 'public',
'embeddable' => true,
'publicStats' => true,
'madeForKids' => false
],
'tiktok' => [
'privacy' => 'public',
'disableComments' => false,
'disableDuet' => false,
'disableStitch' => false,
'brandContent' => false,
'brandOrganic' => false
],
'instagram' => [
'shareToFeed' => false
],
'linkedin' => [
'privacy' => 'public'
]
]
]),
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-post"
payload := strings.NewReader("{\n \"postId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scheduleDate\": 123,\n \"platformSettings\": {\n \"youtube\": {\n \"privacy\": \"public\",\n \"embeddable\": true,\n \"publicStats\": true,\n \"madeForKids\": false\n },\n \"tiktok\": {\n \"privacy\": \"public\",\n \"disableComments\": false,\n \"disableDuet\": false,\n \"disableStitch\": false,\n \"brandContent\": false,\n \"brandOrganic\": false\n },\n \"instagram\": {\n \"shareToFeed\": false\n },\n \"linkedin\": {\n \"privacy\": \"public\"\n }\n }\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-post")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"postId\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scheduleDate\": 123,\n \"platformSettings\": {\n \"youtube\": {\n \"privacy\": \"public\",\n \"embeddable\": true,\n \"publicStats\": true,\n \"madeForKids\": false\n },\n \"tiktok\": {\n \"privacy\": \"public\",\n \"disableComments\": false,\n \"disableDuet\": false,\n \"disableStitch\": false,\n \"brandContent\": false,\n \"brandOrganic\": false\n },\n \"instagram\": {\n \"shareToFeed\": false\n },\n \"linkedin\": {\n \"privacy\": \"public\"\n }\n }\n}")
.asString();{
"id": "<string>",
"projectId": "<string>",
"clipId": "<string>",
"platforms": [
"<string>"
],
"successPlatforms": [
"<string>"
],
"failedPlatforms": [
"<string>"
],
"integrations": [
"<string>"
],
"title": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"scheduleDate": 123,
"publishDate": 123,
"urls": {},
"platformSettings": {
"youtube": {
"privacy": "public",
"embeddable": true,
"publicStats": true,
"madeForKids": false
},
"tiktok": {
"privacy": "public",
"disableComments": false,
"disableDuet": false,
"disableStitch": false,
"brandContent": false,
"brandOrganic": false
},
"instagram": {
"shareToFeed": false
},
"linkedin": {
"privacy": "public"
}
},
"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 details of a scheduled or draft post. You can modify the title, description, tags, schedule date, and platform settings. Only the fields you provide will be updated; other fields remain unchanged.Rate Limiting
This endpoint is rate limited to 10 requests per minute per API key.Cannot update posts that are already completed or currently processing. Schedule date must be at least 50 minutes in the future. Only fields you provide will be updated; other fields remain unchanged.
Posts tied to a cancelled project can’t be updated. The API returns
400 — “This project was cancelled, so its posts can no longer be updated.”Response
Unique post identifier
ID of the parent project
ID of the published clip
Array of target platform names
Platforms where publishing succeeded
Platforms where publishing failed
Array of integration IDs used for publishing
Post title
Post description
Array of tags applied to the post
Current post status
Type of scheduling (
immediate or scheduled)Scheduled publish date as Unix timestamp
Actual publish date as Unix timestamp (null if not yet published)
Published URLs per platform
Per-platform configuration
Show Platform Settings
Show Platform Settings
YouTube-specific settings
TikTok-specific settings
Show TikTok Settings
Show TikTok Settings
Video privacy:
public, friends, or privateDisable comments on the video
Disable duets for the video
Disable stitches for the video
Mark as paid partnership / brand content
Mark as organic brand content
Instagram-specific settings
Show Instagram Settings
Show Instagram Settings
Whether to share Reels to the main feed
Unix timestamp when the post was created
Unix timestamp when the post was last updated
Example Request
curl -X POST "https://public.reap.video/api/v1/automation/update-post" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"postId": "67b1c2d3e4f5a6b7c8d9e0f1",
"title": "Updated: The Future of AI",
"scheduleDate": 1710200000,
"platformSettings": {
"youtube": {
"privacy": "unlisted"
}
}
}'
const response = await fetch('https://public.reap.video/api/v1/automation/update-post', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
postId: '67b1c2d3e4f5a6b7c8d9e0f1',
title: 'Updated: The Future of AI',
scheduleDate: 1710200000,
platformSettings: {
youtube: { privacy: 'unlisted' }
}
})
});
const post = await response.json();
console.log('Updated post:', post.id, 'New schedule:', post.scheduleDate);
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
data = {
'postId': '67b1c2d3e4f5a6b7c8d9e0f1',
'title': 'Updated: The Future of AI',
'scheduleDate': 1710200000,
'platformSettings': {
'youtube': {'privacy': 'unlisted'}
}
}
response = requests.post(
'https://public.reap.video/api/v1/automation/update-post',
headers=headers,
json=data
)
post = response.json()
print(f"Updated post: {post['id']} New schedule: {post['scheduleDate']}")
<?php
$data = [
'postId' => '67b1c2d3e4f5a6b7c8d9e0f1',
'title' => 'Updated: The Future of AI',
'scheduleDate' => 1710200000,
'platformSettings' => [
'youtube' => ['privacy' => 'unlisted']
]
];
$ch = curl_init('https://public.reap.video/api/v1/automation/update-post');
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);
$post = json_decode($response, true);
echo 'Updated post: ' . $post['id'] . "\n";
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
data := map[string]interface{}{
"postId": "67b1c2d3e4f5a6b7c8d9e0f1",
"title": "Updated: The Future of AI",
"scheduleDate": 1710200000,
"platformSettings": map[string]interface{}{
"youtube": map[string]interface{}{"privacy": "unlisted"},
},
}
jsonData, _ := json.Marshal(data)
req, _ := http.NewRequest("POST", "https://public.reap.video/api/v1/automation/update-post", bytes.NewBuffer(jsonData))
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()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class UpdatePostExample {
public static void main(String[] args) throws Exception {
URL url = new URL("https://public.reap.video/api/v1/automation/update-post");
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 = """
{
"postId": "67b1c2d3e4f5a6b7c8d9e0f1",
"title": "Updated: The Future of AI",
"scheduleDate": 1710200000,
"platformSettings": {
"youtube": { "privacy": "unlisted" }
}
}""";
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 post to update
New post title (max 250 characters)
New post description (max 1000 characters)
New post tags (max 10)
New schedule date (Unix timestamp, min 50 min in future)
Updated platform settings
Show child attributes
Show child attributes
Response
200 - application/json
Successful response
Available options:
processing, draft, completed, failed, cancelled, unresolved Available options:
scheduled, immediate Social media URLs keyed by integration ID
Show child attributes
Show child attributes
Was this page helpful?
⌘I