Skip to main content
POST
/
api
/
lipsyncs
/
multi_avatar
/
cURL
curl --request POST \
  --url https://api.creatify.ai/api/lipsyncs/multi_avatar/ \
  --header 'Content-Type: application/json' \
  --header 'X-API-ID: <api-key>' \
  --header 'X-API-KEY: <api-key>' \
  --data '
{
  "video_inputs": [
    {
      "character": {
        "type": "avatar",
        "avatar_id": "<string>",
        "offset": {
          "x": 0,
          "y": 0
        },
        "scale": 1,
        "avatar_style": "normal",
        "hidden": false
      },
      "voice": {
        "input_text": "<string>",
        "voice_id": "<string>",
        "duration": 50.5,
        "volume": 0.8
      },
      "background": {
        "url": "<string>",
        "fit": "crop"
      },
      "caption_setting": {
        "style": "normal-black",
        "offset": {
          "x": 0,
          "y": 0.4
        },
        "font_family": "Montserrat",
        "font_size": 70,
        "font_style": null,
        "background_color": null,
        "text_color": null,
        "highlight_text_color": null,
        "max_width": null,
        "line_height": null,
        "text_shadow": null,
        "hidden": false,
        "override_visual_style": false
      },
      "transition_effect": {
        "transition_in": null,
        "transition_out": null
      },
      "cta": {
        "cta_background_blur": false,
        "transition_effect": {
          "transition_in": null,
          "transition_out": null
        }
      }
    }
  ],
  "aspect_ratio": "9x16",
  "background_music": {
    "url": "<string>",
    "volume": 0.2
  },
  "webhook_url": "<string>",
  "name": "<string>",
  "model_version": "standard"
}
'
import requests

url = "https://api.creatify.ai/api/lipsyncs/multi_avatar/"

payload = {
"video_inputs": [
{
"character": {
"type": "avatar",
"avatar_id": "<string>",
"offset": {
"x": 0,
"y": 0
},
"scale": 1,
"avatar_style": "normal",
"hidden": False
},
"voice": {
"input_text": "<string>",
"voice_id": "<string>",
"duration": 50.5,
"volume": 0.8
},
"background": {
"url": "<string>",
"fit": "crop"
},
"caption_setting": {
"style": "normal-black",
"offset": {
"x": 0,
"y": 0.4
},
"font_family": "Montserrat",
"font_size": 70,
"font_style": None,
"background_color": None,
"text_color": None,
"highlight_text_color": None,
"max_width": None,
"line_height": None,
"text_shadow": None,
"hidden": False,
"override_visual_style": False
},
"transition_effect": {
"transition_in": None,
"transition_out": None
},
"cta": {
"cta_background_blur": False,
"transition_effect": {
"transition_in": None,
"transition_out": None
}
}
}
],
"aspect_ratio": "9x16",
"background_music": {
"url": "<string>",
"volume": 0.2
},
"webhook_url": "<string>",
"name": "<string>",
"model_version": "standard"
}
headers = {
"X-API-ID": "<api-key>",
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {
'X-API-ID': '<api-key>',
'X-API-KEY': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
video_inputs: [
{
character: {
type: 'avatar',
avatar_id: '<string>',
offset: {x: 0, y: 0},
scale: 1,
avatar_style: 'normal',
hidden: false
},
voice: {input_text: '<string>', voice_id: '<string>', duration: 50.5, volume: 0.8},
background: {url: '<string>', fit: 'crop'},
caption_setting: {
style: 'normal-black',
offset: {x: 0, y: 0.4},
font_family: 'Montserrat',
font_size: 70,
font_style: null,
background_color: null,
text_color: null,
highlight_text_color: null,
max_width: null,
line_height: null,
text_shadow: null,
hidden: false,
override_visual_style: false
},
transition_effect: {transition_in: null, transition_out: null},
cta: {
cta_background_blur: false,
transition_effect: {transition_in: null, transition_out: null}
}
}
],
aspect_ratio: '9x16',
background_music: {url: '<string>', volume: 0.2},
webhook_url: '<string>',
name: '<string>',
model_version: 'standard'
})
};

fetch('https://api.creatify.ai/api/lipsyncs/multi_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.creatify.ai/api/lipsyncs/multi_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([
'video_inputs' => [
[
'character' => [
'type' => 'avatar',
'avatar_id' => '<string>',
'offset' => [
'x' => 0,
'y' => 0
],
'scale' => 1,
'avatar_style' => 'normal',
'hidden' => false
],
'voice' => [
'input_text' => '<string>',
'voice_id' => '<string>',
'duration' => 50.5,
'volume' => 0.8
],
'background' => [
'url' => '<string>',
'fit' => 'crop'
],
'caption_setting' => [
'style' => 'normal-black',
'offset' => [
'x' => 0,
'y' => 0.4
],
'font_family' => 'Montserrat',
'font_size' => 70,
'font_style' => null,
'background_color' => null,
'text_color' => null,
'highlight_text_color' => null,
'max_width' => null,
'line_height' => null,
'text_shadow' => null,
'hidden' => false,
'override_visual_style' => false
],
'transition_effect' => [
'transition_in' => null,
'transition_out' => null
],
'cta' => [
'cta_background_blur' => false,
'transition_effect' => [
'transition_in' => null,
'transition_out' => null
]
]
]
],
'aspect_ratio' => '9x16',
'background_music' => [
'url' => '<string>',
'volume' => 0.2
],
'webhook_url' => '<string>',
'name' => '<string>',
'model_version' => 'standard'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-ID: <api-key>",
"X-API-KEY: <api-key>"
],
]);

$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.creatify.ai/api/lipsyncs/multi_avatar/"

payload := strings.NewReader("{\n \"video_inputs\": [\n {\n \"character\": {\n \"type\": \"avatar\",\n \"avatar_id\": \"<string>\",\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"scale\": 1,\n \"avatar_style\": \"normal\",\n \"hidden\": false\n },\n \"voice\": {\n \"input_text\": \"<string>\",\n \"voice_id\": \"<string>\",\n \"duration\": 50.5,\n \"volume\": 0.8\n },\n \"background\": {\n \"url\": \"<string>\",\n \"fit\": \"crop\"\n },\n \"caption_setting\": {\n \"style\": \"normal-black\",\n \"offset\": {\n \"x\": 0,\n \"y\": 0.4\n },\n \"font_family\": \"Montserrat\",\n \"font_size\": 70,\n \"font_style\": null,\n \"background_color\": null,\n \"text_color\": null,\n \"highlight_text_color\": null,\n \"max_width\": null,\n \"line_height\": null,\n \"text_shadow\": null,\n \"hidden\": false,\n \"override_visual_style\": false\n },\n \"transition_effect\": {\n \"transition_in\": null,\n \"transition_out\": null\n },\n \"cta\": {\n \"cta_background_blur\": false,\n \"transition_effect\": {\n \"transition_in\": null,\n \"transition_out\": null\n }\n }\n }\n ],\n \"aspect_ratio\": \"9x16\",\n \"background_music\": {\n \"url\": \"<string>\",\n \"volume\": 0.2\n },\n \"webhook_url\": \"<string>\",\n \"name\": \"<string>\",\n \"model_version\": \"standard\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("X-API-ID", "<api-key>")
req.Header.Add("X-API-KEY", "<api-key>")
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.creatify.ai/api/lipsyncs/multi_avatar/")
.header("X-API-ID", "<api-key>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"video_inputs\": [\n {\n \"character\": {\n \"type\": \"avatar\",\n \"avatar_id\": \"<string>\",\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"scale\": 1,\n \"avatar_style\": \"normal\",\n \"hidden\": false\n },\n \"voice\": {\n \"input_text\": \"<string>\",\n \"voice_id\": \"<string>\",\n \"duration\": 50.5,\n \"volume\": 0.8\n },\n \"background\": {\n \"url\": \"<string>\",\n \"fit\": \"crop\"\n },\n \"caption_setting\": {\n \"style\": \"normal-black\",\n \"offset\": {\n \"x\": 0,\n \"y\": 0.4\n },\n \"font_family\": \"Montserrat\",\n \"font_size\": 70,\n \"font_style\": null,\n \"background_color\": null,\n \"text_color\": null,\n \"highlight_text_color\": null,\n \"max_width\": null,\n \"line_height\": null,\n \"text_shadow\": null,\n \"hidden\": false,\n \"override_visual_style\": false\n },\n \"transition_effect\": {\n \"transition_in\": null,\n \"transition_out\": null\n },\n \"cta\": {\n \"cta_background_blur\": false,\n \"transition_effect\": {\n \"transition_in\": null,\n \"transition_out\": null\n }\n }\n }\n ],\n \"aspect_ratio\": \"9x16\",\n \"background_music\": {\n \"url\": \"<string>\",\n \"volume\": 0.2\n },\n \"webhook_url\": \"<string>\",\n \"name\": \"<string>\",\n \"model_version\": \"standard\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.creatify.ai/api/lipsyncs/multi_avatar/")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-API-ID"] = '<api-key>'
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"video_inputs\": [\n {\n \"character\": {\n \"type\": \"avatar\",\n \"avatar_id\": \"<string>\",\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"scale\": 1,\n \"avatar_style\": \"normal\",\n \"hidden\": false\n },\n \"voice\": {\n \"input_text\": \"<string>\",\n \"voice_id\": \"<string>\",\n \"duration\": 50.5,\n \"volume\": 0.8\n },\n \"background\": {\n \"url\": \"<string>\",\n \"fit\": \"crop\"\n },\n \"caption_setting\": {\n \"style\": \"normal-black\",\n \"offset\": {\n \"x\": 0,\n \"y\": 0.4\n },\n \"font_family\": \"Montserrat\",\n \"font_size\": 70,\n \"font_style\": null,\n \"background_color\": null,\n \"text_color\": null,\n \"highlight_text_color\": null,\n \"max_width\": null,\n \"line_height\": null,\n \"text_shadow\": null,\n \"hidden\": false,\n \"override_visual_style\": false\n },\n \"transition_effect\": {\n \"transition_in\": null,\n \"transition_out\": null\n },\n \"cta\": {\n \"cta_background_blur\": false,\n \"transition_effect\": {\n \"transition_in\": null,\n \"transition_out\": null\n }\n }\n }\n ],\n \"aspect_ratio\": \"9x16\",\n \"background_music\": {\n \"url\": \"<string>\",\n \"volume\": 0.2\n },\n \"webhook_url\": \"<string>\",\n \"name\": \"<string>\",\n \"model_version\": \"standard\"\n}"

response = http.request(request)
puts response.read_body
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "output": "<string>",
  "video_thumbnail": "<string>",
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z",
  "credits_used": 123,
  "duration": 123,
  "progress": "<string>",
  "failed_reason": "<string>",
  "status": "<string>",
  "preview": "<string>",
  "editor_url": "<string>",
  "video_inputs": [
    "<unknown>"
  ],
  "name": "<string>",
  "media_job": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "webhook_url": "<string>"
}

About Request Data Structure of Webhook

When the ‘create an AI Avatar task’ interface is requested, if the ‘webhook_url’ is passed in the parameters, the program will initiate a POST request to this network address when the task succeeds or fails, with the following content:
{
    'id': 'string',
    'status': 'string',
    'failed_reason': 'string',
    'output': 'string',
}
Arguments:
  • id (string): The unique identifier of the job
  • status (string): The status of the job. Possible values are pending, in_queue, running, failed, done
  • failed_reason (string): The reason of the failure if the job failed
  • output (string): The URL of the video if the job is done

Authorizations

X-API-ID
string
header
required

API ID, from your settings page.

X-API-KEY
string
header
required

API Key, from your settings page.

Body

video_inputs
object[]
required
aspect_ratio
enum<string>
default:9x16
  • 9x16 - 9X16
  • 16x9 - 16X9
  • 1x1 - 1X1
Available options:
9x16,
16x9,
1x1
background_music
object

Background music settings.

cta_end
object

Call To Action setting to the end of video.

webhook_url
string<uri>
name
string

The name of the lipsync request.

Maximum string length: 255
model_version
enum<string>
default:standard

Model version for the avatar, 'standard', 'aurora_v1' or 'aurora_v1_fast'. Default is 'standard'. Standard model costs 5 credits per 30 seconds video, Aurora_v1 model costs 1 credit per second, and Aurora_v1_fast renders faster with lower quality for 0.5 credits per second.

  • standard - Standard
  • aurora_v1 - Aurora v1
  • aurora_v1_fast - Aurora v1 Fast
Available options:
standard,
aurora_v1,
aurora_v1_fast

Response

200 - application/json
id
string<uuid>
required
read-only
output
string | null
required
read-only

Output video

video_thumbnail
string<uri>
required
read-only

Generated Video Thumbnail URL

created_at
string<date-time>
required
read-only
updated_at
string<date-time>
required
read-only
credits_used
number
required
read-only

Credits used in this API call

duration
integer
required
read-only

Duration of the video in seconds

progress
string
required
read-only
failed_reason
string | null
required
read-only

The reason for failure, if the lipsync request failed

status
string
required
read-only

Status of the lipsync request

preview
string | null
required
read-only

Preview video

editor_url
string | null
required
read-only

Editor URL for the video. Expires in 24 hours. Available only if your API account has API editor access enabled.

aspect_ratio
enum<string>
required

The aspect ratio of the video

  • 16x9 - Ratio 16 9
  • 1x1 - Ratio 1 1
  • 9x16 - Ratio 9 16
Available options:
16x9,
1x1,
9x16
video_inputs
any[]
required
read-only
name
string | null

The name of the lipsync request.

Maximum string length: 255
media_job
string<uuid> | null

The media job associated with the lipsync request.

webhook_url
string<uri> | null

The webhook URL to be called upon completion of the lipsync request

Maximum string length: 200
model_version
enum<string>

Model version for the avatar, 'standard', 'aurora_v1' or 'aurora_v1_fast'. Default is 'standard'. Standard model costs 5 credits per 30 seconds video, Aurora_v1 model costs 1 credit per second, and Aurora_v1_fast renders faster with lower quality for 0.5 credits per second.

  • standard - Standard
  • aurora_v1 - Aurora v1
  • aurora_v1_fast - Aurora v1 Fast
Available options:
standard,
aurora_v1,
aurora_v1_fast