curl --request POST \
--url https://api.domoai.com/v1/video/talking-avatar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "natural talking expression",
"image": {
"bytes_base64_encoded": "/9j/4AAQSkZJRgABAQAAAQABAAD/2w..."
},
"audio": {
"bytes_base64_encoded": "SUQzAgAAAAAPdlRDTQAACABzdW1tZX..."
},
"callback_url": "https://example.com/callback",
"seconds": 5
}
'import requests
url = "https://api.domoai.com/v1/video/talking-avatar"
payload = {
"prompt": "natural talking expression",
"image": { "bytes_base64_encoded": "/9j/4AAQSkZJRgABAQAAAQABAAD/2w..." },
"audio": { "bytes_base64_encoded": "SUQzAgAAAAAPdlRDTQAACABzdW1tZX..." },
"callback_url": "https://example.com/callback",
"seconds": 5
}
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({
prompt: 'natural talking expression',
image: {bytes_base64_encoded: '/9j/4AAQSkZJRgABAQAAAQABAAD/2w...'},
audio: {bytes_base64_encoded: 'SUQzAgAAAAAPdlRDTQAACABzdW1tZX...'},
callback_url: 'https://example.com/callback',
seconds: 5
})
};
fetch('https://api.domoai.com/v1/video/talking-avatar', 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.domoai.com/v1/video/talking-avatar",
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([
'prompt' => 'natural talking expression',
'image' => [
'bytes_base64_encoded' => '/9j/4AAQSkZJRgABAQAAAQABAAD/2w...'
],
'audio' => [
'bytes_base64_encoded' => 'SUQzAgAAAAAPdlRDTQAACABzdW1tZX...'
],
'callback_url' => 'https://example.com/callback',
'seconds' => 5
]),
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.domoai.com/v1/video/talking-avatar"
payload := strings.NewReader("{\n \"prompt\": \"natural talking expression\",\n \"image\": {\n \"bytes_base64_encoded\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/2w...\"\n },\n \"audio\": {\n \"bytes_base64_encoded\": \"SUQzAgAAAAAPdlRDTQAACABzdW1tZX...\"\n },\n \"callback_url\": \"https://example.com/callback\",\n \"seconds\": 5\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.domoai.com/v1/video/talking-avatar")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"natural talking expression\",\n \"image\": {\n \"bytes_base64_encoded\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/2w...\"\n },\n \"audio\": {\n \"bytes_base64_encoded\": \"SUQzAgAAAAAPdlRDTQAACABzdW1tZX...\"\n },\n \"callback_url\": \"https://example.com/callback\",\n \"seconds\": 5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.domoai.com/v1/video/talking-avatar")
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 \"prompt\": \"natural talking expression\",\n \"image\": {\n \"bytes_base64_encoded\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/2w...\"\n },\n \"audio\": {\n \"bytes_base64_encoded\": \"SUQzAgAAAAAPdlRDTQAACABzdW1tZX...\"\n },\n \"callback_url\": \"https://example.com/callback\",\n \"seconds\": 5\n}"
response = http.request(request)
puts response.read_body{
"data": {
"task_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"code": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Create Talking Avatar Task
curl --request POST \
--url https://api.domoai.com/v1/video/talking-avatar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "natural talking expression",
"image": {
"bytes_base64_encoded": "/9j/4AAQSkZJRgABAQAAAQABAAD/2w..."
},
"audio": {
"bytes_base64_encoded": "SUQzAgAAAAAPdlRDTQAACABzdW1tZX..."
},
"callback_url": "https://example.com/callback",
"seconds": 5
}
'import requests
url = "https://api.domoai.com/v1/video/talking-avatar"
payload = {
"prompt": "natural talking expression",
"image": { "bytes_base64_encoded": "/9j/4AAQSkZJRgABAQAAAQABAAD/2w..." },
"audio": { "bytes_base64_encoded": "SUQzAgAAAAAPdlRDTQAACABzdW1tZX..." },
"callback_url": "https://example.com/callback",
"seconds": 5
}
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({
prompt: 'natural talking expression',
image: {bytes_base64_encoded: '/9j/4AAQSkZJRgABAQAAAQABAAD/2w...'},
audio: {bytes_base64_encoded: 'SUQzAgAAAAAPdlRDTQAACABzdW1tZX...'},
callback_url: 'https://example.com/callback',
seconds: 5
})
};
fetch('https://api.domoai.com/v1/video/talking-avatar', 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.domoai.com/v1/video/talking-avatar",
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([
'prompt' => 'natural talking expression',
'image' => [
'bytes_base64_encoded' => '/9j/4AAQSkZJRgABAQAAAQABAAD/2w...'
],
'audio' => [
'bytes_base64_encoded' => 'SUQzAgAAAAAPdlRDTQAACABzdW1tZX...'
],
'callback_url' => 'https://example.com/callback',
'seconds' => 5
]),
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.domoai.com/v1/video/talking-avatar"
payload := strings.NewReader("{\n \"prompt\": \"natural talking expression\",\n \"image\": {\n \"bytes_base64_encoded\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/2w...\"\n },\n \"audio\": {\n \"bytes_base64_encoded\": \"SUQzAgAAAAAPdlRDTQAACABzdW1tZX...\"\n },\n \"callback_url\": \"https://example.com/callback\",\n \"seconds\": 5\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.domoai.com/v1/video/talking-avatar")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"natural talking expression\",\n \"image\": {\n \"bytes_base64_encoded\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/2w...\"\n },\n \"audio\": {\n \"bytes_base64_encoded\": \"SUQzAgAAAAAPdlRDTQAACABzdW1tZX...\"\n },\n \"callback_url\": \"https://example.com/callback\",\n \"seconds\": 5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.domoai.com/v1/video/talking-avatar")
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 \"prompt\": \"natural talking expression\",\n \"image\": {\n \"bytes_base64_encoded\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/2w...\"\n },\n \"audio\": {\n \"bytes_base64_encoded\": \"SUQzAgAAAAAPdlRDTQAACABzdW1tZX...\"\n },\n \"callback_url\": \"https://example.com/callback\",\n \"seconds\": 5\n}"
response = http.request(request)
puts response.read_body{
"data": {
"task_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"code": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
API Key Bearer Token
Body
Input schema for creating a talking avatar task
Input audio to drive the avatar animation. Supports domoai_uri or base64 encoded audio from file upload API.
Show child attributes
Show child attributes
{
"domoai_uri": "domoai://eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmdhbml6YXRpb25faWQiOiIwNjhmZWViMy1hYmVkLTcyYTItODAwMC1hZDM1ZTg0ZGIxNDAiLCJ1cGxvYWRfYnVja2V0IjoiZW50LWFwaS10ZXN0LTEzMzYyODM0MDgiLCJ1cGxvYWRfa2V5IjoiZXBoZW1lcmFsLXVwbG9hZHMvMDY4ZmVlYjMtYWJlZC03MmEyLTgwMDAtYWQzNWU4NGRiMTQwLzI1YjhmOTgwLWM2MzEtNGQ1NC05Y2VhLTU0ZGFiYjhiMjYwNy9maWxlLm1wMyIsInR5cGUiOiJlcGhlbWVyYWwiLCJjb250ZW50X3R5cGUiOiJhdWRpby9tcGVnIiwiZmlsZV9zaXplIjoxMjU2MzIsImlhdCI6MTc2ODM4NzA3MCwiZXhwIjoxNzY4NDczNDcwLCJpc3MiOiJodHRwOi8vemhtLWFwaS5mcnAtZGV2LmRvbW8uY29vbC8ifQ.E60fIHPeDtEE0NmKaPGRYtyQJtaEQI9I0aNEwgtsLrg"
}
{
"bytes_base64_encoded": "SUQzAgAAAAAPdlRDTQAACABzdW1tZX..."
}
Output video duration in seconds.
1 <= x <= 60Callback notification URL for task results. If configured, the server will actively send notifications when the task status changes. The message schema of the notification can be found in the Callback Protocol section.
1 - 2083"https://example.com/callback"
Optional prompt for generation guidance.
2000Input image of the avatar. Supports domoai_uri or base64 encoded image. Either image or video must be provided.
Show child attributes
Show child attributes
{
"domoai_uri": "domoai://eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmdhbml6YXRpb25faWQiOiIwNjhmZWViMy1hYmVkLTcyYTItODAwMC1hZDM1ZTg0ZGIxNDAiLCJ1cGxvYWRfYnVja2V0IjoiZW50LWFwaS10ZXN0LTEzMzYyODM0MDgiLCJ1cGxvYWRfa2V5IjoiZXBoZW1lcmFsLXVwbG9hZHMvMDY4ZmVlYjMtYWJlZC03MmEyLTgwMDAtYWQzNWU4NGRiMTQwLzI1YjhmOTgwLWM2MzEtNGQ1NC05Y2VhLTU0ZGFiYjhiMjYwNy9maWxlLm1wMyIsInR5cGUiOiJlcGhlbWVyYWwiLCJjb250ZW50X3R5cGUiOiJhdWRpby9tcGVnIiwiZmlsZV9zaXplIjoxMjU2MzIsImlhdCI6MTc2ODM4NzA3MCwiZXhwIjoxNzY4NDczNDcwLCJpc3MiOiJodHRwOi8vemhtLWFwaS5mcnAtZGV2LmRvbW8uY29vbC8ifQ.E60fIHPeDtEE0NmKaPGRYtyQJtaEQI9I0aNEwgtsLrg"
}
Input video of the avatar. Supports domoai_uri or base64 encoded video from file upload API. Either image or video must be provided.
Show child attributes
Show child attributes
{
"domoai_uri": "domoai://eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmdhbml6YXRpb25faWQiOiIwNjhmZWViMy1hYmVkLTcyYTItODAwMC1hZDM1ZTg0ZGIxNDAiLCJ1cGxvYWRfYnVja2V0IjoiZW50LWFwaS10ZXN0LTEzMzYyODM0MDgiLCJ1cGxvYWRfa2V5IjoiZXBoZW1lcmFsLXVwbG9hZHMvMDY4ZmVlYjMtYWJlZC03MmEyLTgwMDAtYWQzNWU4NGRiMTQwLzI1YjhmOTgwLWM2MzEtNGQ1NC05Y2VhLTU0ZGFiYjhiMjYwNy9maWxlLm1wMyIsInR5cGUiOiJlcGhlbWVyYWwiLCJjb250ZW50X3R5cGUiOiJhdWRpby9tcGVnIiwiZmlsZV9zaXplIjoxMjU2MzIsImlhdCI6MTc2ODM4NzA3MCwiZXhwIjoxNzY4NDczNDcwLCJpc3MiOiJodHRwOi8vemhtLWFwaS5mcnAtZGV2LmRvbW8uY29vbC8ifQ.E60fIHPeDtEE0NmKaPGRYtyQJtaEQI9I0aNEwgtsLrg"
}
Output video aspect ratio. If null or not provided, the system will automatically detect and use the closest matching ratio based on the input image/video.
16:9, 9:16, 1:1, 4:3, 3:4 "16:9"
Model version to use for generation.
talking-avatar-v1 "talking-avatar-v1"
Callbacks
POST{$request.body.callback_url}task_status_callback
Body
PENDING, QUEUING, PROCESSING, SUCCESS, FAILED, CANCELED TEXT_TO_VIDEO, IMAGE_TO_VIDEO, VIDEO_TO_VIDEO, TEMPLATE_TO_VIDEO, TALKING_AVATAR Show child attributes
Show child attributes
Response
Successful Response
Was this page helpful?