Add text overlay
curl --request POST \
--url https://rawugc.com/api/v1/videos/overlay \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"videoId": "vid_jh7a3b9xq2pn4r8k",
"text": "Check this out!",
"position": "bottom",
"fontSize": 48
}
'import requests
url = "https://rawugc.com/api/v1/videos/overlay"
payload = {
"videoId": "vid_jh7a3b9xq2pn4r8k",
"text": "Check this out!",
"position": "bottom",
"fontSize": 48
}
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({
videoId: 'vid_jh7a3b9xq2pn4r8k',
text: 'Check this out!',
position: 'bottom',
fontSize: 48
})
};
fetch('https://rawugc.com/api/v1/videos/overlay', 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://rawugc.com/api/v1/videos/overlay",
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([
'videoId' => 'vid_jh7a3b9xq2pn4r8k',
'text' => 'Check this out!',
'position' => 'bottom',
'fontSize' => 48
]),
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://rawugc.com/api/v1/videos/overlay"
payload := strings.NewReader("{\n \"videoId\": \"vid_jh7a3b9xq2pn4r8k\",\n \"text\": \"Check this out!\",\n \"position\": \"bottom\",\n \"fontSize\": 48\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://rawugc.com/api/v1/videos/overlay")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"videoId\": \"vid_jh7a3b9xq2pn4r8k\",\n \"text\": \"Check this out!\",\n \"position\": \"bottom\",\n \"fontSize\": 48\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://rawugc.com/api/v1/videos/overlay")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"videoId\": \"vid_jh7a3b9xq2pn4r8k\",\n \"text\": \"Check this out!\",\n \"position\": \"bottom\",\n \"fontSize\": 48\n}"
response = http.request(request)
puts response.read_body{
"videoId": "<string>",
"url": "<string>",
"version": 123,
"operation": "<string>",
"creditsUsed": 123
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"errors": {}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"errors": {}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"errors": {}
}Video Editing
Add text overlay
Add a text overlay to a video. The video is processed with FFmpeg and a public URL for the result is returned.
POST
/
videos
/
overlay
Add text overlay
curl --request POST \
--url https://rawugc.com/api/v1/videos/overlay \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"videoId": "vid_jh7a3b9xq2pn4r8k",
"text": "Check this out!",
"position": "bottom",
"fontSize": 48
}
'import requests
url = "https://rawugc.com/api/v1/videos/overlay"
payload = {
"videoId": "vid_jh7a3b9xq2pn4r8k",
"text": "Check this out!",
"position": "bottom",
"fontSize": 48
}
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({
videoId: 'vid_jh7a3b9xq2pn4r8k',
text: 'Check this out!',
position: 'bottom',
fontSize: 48
})
};
fetch('https://rawugc.com/api/v1/videos/overlay', 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://rawugc.com/api/v1/videos/overlay",
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([
'videoId' => 'vid_jh7a3b9xq2pn4r8k',
'text' => 'Check this out!',
'position' => 'bottom',
'fontSize' => 48
]),
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://rawugc.com/api/v1/videos/overlay"
payload := strings.NewReader("{\n \"videoId\": \"vid_jh7a3b9xq2pn4r8k\",\n \"text\": \"Check this out!\",\n \"position\": \"bottom\",\n \"fontSize\": 48\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://rawugc.com/api/v1/videos/overlay")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"videoId\": \"vid_jh7a3b9xq2pn4r8k\",\n \"text\": \"Check this out!\",\n \"position\": \"bottom\",\n \"fontSize\": 48\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://rawugc.com/api/v1/videos/overlay")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"videoId\": \"vid_jh7a3b9xq2pn4r8k\",\n \"text\": \"Check this out!\",\n \"position\": \"bottom\",\n \"fontSize\": 48\n}"
response = http.request(request)
puts response.read_body{
"videoId": "<string>",
"url": "<string>",
"version": 123,
"operation": "<string>",
"creditsUsed": 123
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"errors": {}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"errors": {}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"errors": {}
}Authorizations
Use your API key from the RawUGC dashboard. Include as: Authorization: Bearer YOUR_API_KEY
Body
application/json
Video identifier (vid_xxx format)
Text to overlay on the video
Required string length:
1 - 500Font size in pixels (default: auto)
Required range:
8 <= x <= 200Vertical position of the text overlay
Available options:
top, center, bottom Margin from top/bottom edge in pixels
Required range:
0 <= x <= 500Text stroke/outline thickness
Required range:
0 <= x <= 10Response
Overlay added successfully
Response from a video editing operation (captions, overlay)
Unique identifier for the new version (vid_xxx format)
URL to download the edited video
Version number of the edit (2 for first edit, etc.)
Operation that was performed (e.g. 'caption', 'overlay')
Credits deducted for this operation
Was this page helpful?

