Talking Actors
Generate Talking Actor
Create a talking actor video using an actor, script, and optional voice settings. The API returns a video ID immediately; poll it for status.
POST
/
v1
/
talking-actors
/
generate
Generate Talking Actor
curl --request POST \
--url https://api.turboads.ai/v1/talking-actors/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"project_id": "j97project123abc456def789",
"actor_id": "j97actor123abc456def789",
"script": "Try TurboAds to create high-performing ad creatives in minutes.",
"voice_id": "j97voice123abc456def789",
"voice_options": {
"speed": 1,
"stability": 0.5,
"similarity": 0.75,
"style": 0
}
}
'import requests
url = "https://api.turboads.ai/v1/talking-actors/generate"
payload = {
"project_id": "j97project123abc456def789",
"actor_id": "j97actor123abc456def789",
"script": "Try TurboAds to create high-performing ad creatives in minutes.",
"voice_id": "j97voice123abc456def789",
"voice_options": {
"speed": 1,
"stability": 0.5,
"similarity": 0.75,
"style": 0
}
}
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({
project_id: 'j97project123abc456def789',
actor_id: 'j97actor123abc456def789',
script: 'Try TurboAds to create high-performing ad creatives in minutes.',
voice_id: 'j97voice123abc456def789',
voice_options: {speed: 1, stability: 0.5, similarity: 0.75, style: 0}
})
};
fetch('https://api.turboads.ai/v1/talking-actors/generate', 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://api.turboads.ai/v1/talking-actors/generate",
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([
'project_id' => 'j97project123abc456def789',
'actor_id' => 'j97actor123abc456def789',
'script' => 'Try TurboAds to create high-performing ad creatives in minutes.',
'voice_id' => 'j97voice123abc456def789',
'voice_options' => [
'speed' => 1,
'stability' => 0.5,
'similarity' => 0.75,
'style' => 0
]
]),
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://api.turboads.ai/v1/talking-actors/generate"
payload := strings.NewReader("{\n \"project_id\": \"j97project123abc456def789\",\n \"actor_id\": \"j97actor123abc456def789\",\n \"script\": \"Try TurboAds to create high-performing ad creatives in minutes.\",\n \"voice_id\": \"j97voice123abc456def789\",\n \"voice_options\": {\n \"speed\": 1,\n \"stability\": 0.5,\n \"similarity\": 0.75,\n \"style\": 0\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://api.turboads.ai/v1/talking-actors/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project_id\": \"j97project123abc456def789\",\n \"actor_id\": \"j97actor123abc456def789\",\n \"script\": \"Try TurboAds to create high-performing ad creatives in minutes.\",\n \"voice_id\": \"j97voice123abc456def789\",\n \"voice_options\": {\n \"speed\": 1,\n \"stability\": 0.5,\n \"similarity\": 0.75,\n \"style\": 0\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.turboads.ai/v1/talking-actors/generate")
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 \"project_id\": \"j97project123abc456def789\",\n \"actor_id\": \"j97actor123abc456def789\",\n \"script\": \"Try TurboAds to create high-performing ad creatives in minutes.\",\n \"voice_id\": \"j97voice123abc456def789\",\n \"voice_options\": {\n \"speed\": 1,\n \"stability\": 0.5,\n \"similarity\": 0.75,\n \"style\": 0\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "j97video123abc456def789",
"voice_id": "j97voice123abc456def789",
"status": "pending"
}
}{
"error": {
"code": "invalid_request",
"message": "Required fields are missing or malformed."
}
}{
"error": {
"code": "unauthorized",
"message": "Missing, invalid, or revoked API key."
}
}{
"error": {
"code": "insufficient_credits",
"message": "Insufficient credits. Required: 8, Available: 2"
}
}{
"error": {
"code": "forbidden",
"message": "Project does not belong to this API key workspace."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
},
"retry_after_ms": 1200
}{
"error": {
"code": "internal_error",
"message": "Something went wrong."
}
}Authorizations
Your TurboAds API key
Body
application/json
Existing project ID in the API key workspace.
Actor ID to render in the generated video.
Script the actor should speak.
Optional voice ID. If omitted, TurboAds uses the actor default when available.
Show child attributes
Show child attributes
Response
Talking actor generation job created
Show child attributes
Show child attributes
Previous
Get Talking Actor StatusGet the current status and metadata for a talking actor video generation job.
Next
⌘I
Generate Talking Actor
curl --request POST \
--url https://api.turboads.ai/v1/talking-actors/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"project_id": "j97project123abc456def789",
"actor_id": "j97actor123abc456def789",
"script": "Try TurboAds to create high-performing ad creatives in minutes.",
"voice_id": "j97voice123abc456def789",
"voice_options": {
"speed": 1,
"stability": 0.5,
"similarity": 0.75,
"style": 0
}
}
'import requests
url = "https://api.turboads.ai/v1/talking-actors/generate"
payload = {
"project_id": "j97project123abc456def789",
"actor_id": "j97actor123abc456def789",
"script": "Try TurboAds to create high-performing ad creatives in minutes.",
"voice_id": "j97voice123abc456def789",
"voice_options": {
"speed": 1,
"stability": 0.5,
"similarity": 0.75,
"style": 0
}
}
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({
project_id: 'j97project123abc456def789',
actor_id: 'j97actor123abc456def789',
script: 'Try TurboAds to create high-performing ad creatives in minutes.',
voice_id: 'j97voice123abc456def789',
voice_options: {speed: 1, stability: 0.5, similarity: 0.75, style: 0}
})
};
fetch('https://api.turboads.ai/v1/talking-actors/generate', 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://api.turboads.ai/v1/talking-actors/generate",
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([
'project_id' => 'j97project123abc456def789',
'actor_id' => 'j97actor123abc456def789',
'script' => 'Try TurboAds to create high-performing ad creatives in minutes.',
'voice_id' => 'j97voice123abc456def789',
'voice_options' => [
'speed' => 1,
'stability' => 0.5,
'similarity' => 0.75,
'style' => 0
]
]),
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://api.turboads.ai/v1/talking-actors/generate"
payload := strings.NewReader("{\n \"project_id\": \"j97project123abc456def789\",\n \"actor_id\": \"j97actor123abc456def789\",\n \"script\": \"Try TurboAds to create high-performing ad creatives in minutes.\",\n \"voice_id\": \"j97voice123abc456def789\",\n \"voice_options\": {\n \"speed\": 1,\n \"stability\": 0.5,\n \"similarity\": 0.75,\n \"style\": 0\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://api.turboads.ai/v1/talking-actors/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project_id\": \"j97project123abc456def789\",\n \"actor_id\": \"j97actor123abc456def789\",\n \"script\": \"Try TurboAds to create high-performing ad creatives in minutes.\",\n \"voice_id\": \"j97voice123abc456def789\",\n \"voice_options\": {\n \"speed\": 1,\n \"stability\": 0.5,\n \"similarity\": 0.75,\n \"style\": 0\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.turboads.ai/v1/talking-actors/generate")
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 \"project_id\": \"j97project123abc456def789\",\n \"actor_id\": \"j97actor123abc456def789\",\n \"script\": \"Try TurboAds to create high-performing ad creatives in minutes.\",\n \"voice_id\": \"j97voice123abc456def789\",\n \"voice_options\": {\n \"speed\": 1,\n \"stability\": 0.5,\n \"similarity\": 0.75,\n \"style\": 0\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "j97video123abc456def789",
"voice_id": "j97voice123abc456def789",
"status": "pending"
}
}{
"error": {
"code": "invalid_request",
"message": "Required fields are missing or malformed."
}
}{
"error": {
"code": "unauthorized",
"message": "Missing, invalid, or revoked API key."
}
}{
"error": {
"code": "insufficient_credits",
"message": "Insufficient credits. Required: 8, Available: 2"
}
}{
"error": {
"code": "forbidden",
"message": "Project does not belong to this API key workspace."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
},
"retry_after_ms": 1200
}{
"error": {
"code": "internal_error",
"message": "Something went wrong."
}
}
