Publish Clip
curl --request POST \
--url https://public.reap.video/api/v1/automation/publish-clip \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"projectId": "<string>",
"clipId": "<string>",
"integrations": [
"<string>"
],
"title": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"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/publish-clip"
payload = {
"projectId": "<string>",
"clipId": "<string>",
"integrations": ["<string>"],
"title": "<string>",
"description": "<string>",
"tags": ["<string>"],
"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({
projectId: '<string>',
clipId: '<string>',
integrations: ['<string>'],
title: '<string>',
description: '<string>',
tags: ['<string>'],
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/publish-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/publish-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>',
'integrations' => [
'<string>'
],
'title' => '<string>',
'description' => '<string>',
'tags' => [
'<string>'
],
'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/publish-clip"
payload := strings.NewReader("{\n \"projectId\": \"<string>\",\n \"clipId\": \"<string>\",\n \"integrations\": [\n \"<string>\"\n ],\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\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/publish-clip")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"projectId\": \"<string>\",\n \"clipId\": \"<string>\",\n \"integrations\": [\n \"<string>\"\n ],\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\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
Publish Clip
Immediately publish a completed clip to social media platforms
POST
/
automation
/
publish-clip
Publish Clip
curl --request POST \
--url https://public.reap.video/api/v1/automation/publish-clip \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"projectId": "<string>",
"clipId": "<string>",
"integrations": [
"<string>"
],
"title": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"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/publish-clip"
payload = {
"projectId": "<string>",
"clipId": "<string>",
"integrations": ["<string>"],
"title": "<string>",
"description": "<string>",
"tags": ["<string>"],
"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({
projectId: '<string>',
clipId: '<string>',
integrations: ['<string>'],
title: '<string>',
description: '<string>',
tags: ['<string>'],
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/publish-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/publish-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>',
'integrations' => [
'<string>'
],
'title' => '<string>',
'description' => '<string>',
'tags' => [
'<string>'
],
'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/publish-clip"
payload := strings.NewReader("{\n \"projectId\": \"<string>\",\n \"clipId\": \"<string>\",\n \"integrations\": [\n \"<string>\"\n ],\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\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/publish-clip")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"projectId\": \"<string>\",\n \"clipId\": \"<string>\",\n \"integrations\": [\n \"<string>\"\n ],\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\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
Publish a completed clip directly to one or more social media platforms. The clip must have acompleted status before it can be published. Use Get Integrations to retrieve your available integration IDs.
Rate Limiting
This endpoint is rate limited to 10 requests per minute per API key.Only completed clips can be published. Get integration IDs from the Get Integrations endpoint. The
platformSettings object lets you configure per-platform settings. Only include platforms you’re publishing to.Clips belonging to a cancelled project can’t be published. The API returns
400 — “This project was cancelled and can no longer be modified or published.”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
processing- Post is being publishedcompleted- Published successfully to all platformsfailed- Publishing failed on all platformsunresolved- Partial success (some platforms failed)
Type of scheduling (
immediate or scheduled)Scheduled publish date as Unix timestamp (null for immediate)
Actual publish date as Unix timestamp
Published URLs per platform (populated after successful publishing)
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/publish-clip" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
"clipId": "65f1a2b3c4d5e6f7a8b9c0d4",
"integrations": ["66a1b2c3d4e5f6a7b8c9d0e1"],
"title": "The Future of AI",
"description": "Exploring how AI will transform our daily lives",
"tags": ["ai", "technology", "future"],
"platformSettings": {
"youtube": {
"privacy": "private",
"embeddable": true,
"publicStats": true,
"madeForKids": false
}
}
}'
const response = await fetch('https://public.reap.video/api/v1/automation/publish-clip', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
projectId: '65f1a2b3c4d5e6f7a8b9c0d2',
clipId: '65f1a2b3c4d5e6f7a8b9c0d4',
integrations: ['66a1b2c3d4e5f6a7b8c9d0e1'],
title: 'The Future of AI',
description: 'Exploring how AI will transform our daily lives',
tags: ['ai', 'technology', 'future'],
platformSettings: {
youtube: {
privacy: 'private',
embeddable: true,
publicStats: true,
madeForKids: false
}
}
})
});
const post = await response.json();
console.log('Post created:', post.id, 'Status:', post.status);
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
data = {
'projectId': '65f1a2b3c4d5e6f7a8b9c0d2',
'clipId': '65f1a2b3c4d5e6f7a8b9c0d4',
'integrations': ['66a1b2c3d4e5f6a7b8c9d0e1'],
'title': 'The Future of AI',
'description': 'Exploring how AI will transform our daily lives',
'tags': ['ai', 'technology', 'future'],
'platformSettings': {
'youtube': {
'privacy': 'private',
'embeddable': True,
'publicStats': True,
'madeForKids': False
}
}
}
response = requests.post(
'https://public.reap.video/api/v1/automation/publish-clip',
headers=headers,
json=data
)
post = response.json()
print(f"Post created: {post['id']} Status: {post['status']}")
<?php
$data = [
'projectId' => '65f1a2b3c4d5e6f7a8b9c0d2',
'clipId' => '65f1a2b3c4d5e6f7a8b9c0d4',
'integrations' => ['66a1b2c3d4e5f6a7b8c9d0e1'],
'title' => 'The Future of AI',
'description' => 'Exploring how AI will transform our daily lives',
'tags' => ['ai', 'technology', 'future'],
'platformSettings' => [
'youtube' => [
'privacy' => 'private',
'embeddable' => true,
'publicStats' => true,
'madeForKids' => false
]
]
];
$ch = curl_init('https://public.reap.video/api/v1/automation/publish-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);
$post = json_decode($response, true);
echo 'Post created: ' . $post['id'] . ' Status: ' . $post['status'] . "\n";
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
data := map[string]interface{}{
"projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
"clipId": "65f1a2b3c4d5e6f7a8b9c0d4",
"integrations": []string{"66a1b2c3d4e5f6a7b8c9d0e1"},
"title": "The Future of AI",
"description": "Exploring how AI will transform our daily lives",
"tags": []string{"ai", "technology", "future"},
"platformSettings": map[string]interface{}{
"youtube": map[string]interface{}{
"privacy": "private",
"embeddable": true,
"publicStats": true,
"madeForKids": false,
},
},
}
jsonData, _ := json.Marshal(data)
req, _ := http.NewRequest("POST", "https://public.reap.video/api/v1/automation/publish-clip", 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 PublishClipExample {
public static void main(String[] args) throws Exception {
URL url = new URL("https://public.reap.video/api/v1/automation/publish-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",
"integrations": ["66a1b2c3d4e5f6a7b8c9d0e1"],
"title": "The Future of AI",
"description": "Exploring how AI will transform our daily lives",
"tags": ["ai", "technology", "future"],
"platformSettings": {
"youtube": {
"privacy": "private",
"embeddable": true,
"publicStats": true,
"madeForKids": false
}
}
}""";
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 containing the clip
ID of the clip to publish
List of integration IDs to publish to
Post title (defaults to clip title)
Post description
Post tags (max 10)
Per-platform publishing 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