Submit Preview List
curl --request POST \
--url https://api.jogg.ai/v2/create_video_from_product/preview_list \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"product_id": "NTIzMzc0NjI5",
"visual_styles": [
"Simple Product Switch",
"Dynamic Showcase"
],
"video_spec": {
"length": "30",
"aspect_ratio": "landscape",
"caption": true,
"name": "My Product Video"
},
"avatar": {
"id": 1,
"type": 0
},
"voice": {
"id": "en-US-ChristopherNeural"
},
"audio": {
"music_id": 13
},
"script": {
"style": "Storytime"
},
"language": "english",
"override_script": "<string>",
"webhook_url": "https://example.com/webhook"
}
'import requests
url = "https://api.jogg.ai/v2/create_video_from_product/preview_list"
payload = {
"product_id": "NTIzMzc0NjI5",
"visual_styles": ["Simple Product Switch", "Dynamic Showcase"],
"video_spec": {
"length": "30",
"aspect_ratio": "landscape",
"caption": True,
"name": "My Product Video"
},
"avatar": {
"id": 1,
"type": 0
},
"voice": { "id": "en-US-ChristopherNeural" },
"audio": { "music_id": 13 },
"script": { "style": "Storytime" },
"language": "english",
"override_script": "<string>",
"webhook_url": "https://example.com/webhook"
}
headers = {
"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-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
product_id: 'NTIzMzc0NjI5',
visual_styles: ['Simple Product Switch', 'Dynamic Showcase'],
video_spec: {
length: '30',
aspect_ratio: 'landscape',
caption: true,
name: 'My Product Video'
},
avatar: {id: 1, type: 0},
voice: {id: 'en-US-ChristopherNeural'},
audio: {music_id: 13},
script: {style: 'Storytime'},
language: 'english',
override_script: '<string>',
webhook_url: 'https://example.com/webhook'
})
};
fetch('https://api.jogg.ai/v2/create_video_from_product/preview_list', 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.jogg.ai/v2/create_video_from_product/preview_list",
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([
'product_id' => 'NTIzMzc0NjI5',
'visual_styles' => [
'Simple Product Switch',
'Dynamic Showcase'
],
'video_spec' => [
'length' => '30',
'aspect_ratio' => 'landscape',
'caption' => true,
'name' => 'My Product Video'
],
'avatar' => [
'id' => 1,
'type' => 0
],
'voice' => [
'id' => 'en-US-ChristopherNeural'
],
'audio' => [
'music_id' => 13
],
'script' => [
'style' => 'Storytime'
],
'language' => 'english',
'override_script' => '<string>',
'webhook_url' => 'https://example.com/webhook'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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.jogg.ai/v2/create_video_from_product/preview_list"
payload := strings.NewReader("{\n \"product_id\": \"NTIzMzc0NjI5\",\n \"visual_styles\": [\n \"Simple Product Switch\",\n \"Dynamic Showcase\"\n ],\n \"video_spec\": {\n \"length\": \"30\",\n \"aspect_ratio\": \"landscape\",\n \"caption\": true,\n \"name\": \"My Product Video\"\n },\n \"avatar\": {\n \"id\": 1,\n \"type\": 0\n },\n \"voice\": {\n \"id\": \"en-US-ChristopherNeural\"\n },\n \"audio\": {\n \"music_id\": 13\n },\n \"script\": {\n \"style\": \"Storytime\"\n },\n \"language\": \"english\",\n \"override_script\": \"<string>\",\n \"webhook_url\": \"https://example.com/webhook\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.jogg.ai/v2/create_video_from_product/preview_list")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"product_id\": \"NTIzMzc0NjI5\",\n \"visual_styles\": [\n \"Simple Product Switch\",\n \"Dynamic Showcase\"\n ],\n \"video_spec\": {\n \"length\": \"30\",\n \"aspect_ratio\": \"landscape\",\n \"caption\": true,\n \"name\": \"My Product Video\"\n },\n \"avatar\": {\n \"id\": 1,\n \"type\": 0\n },\n \"voice\": {\n \"id\": \"en-US-ChristopherNeural\"\n },\n \"audio\": {\n \"music_id\": 13\n },\n \"script\": {\n \"style\": \"Storytime\"\n },\n \"language\": \"english\",\n \"override_script\": \"<string>\",\n \"webhook_url\": \"https://example.com/webhook\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jogg.ai/v2/create_video_from_product/preview_list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"product_id\": \"NTIzMzc0NjI5\",\n \"visual_styles\": [\n \"Simple Product Switch\",\n \"Dynamic Showcase\"\n ],\n \"video_spec\": {\n \"length\": \"30\",\n \"aspect_ratio\": \"landscape\",\n \"caption\": true,\n \"name\": \"My Product Video\"\n },\n \"avatar\": {\n \"id\": 1,\n \"type\": 0\n },\n \"voice\": {\n \"id\": \"en-US-ChristopherNeural\"\n },\n \"audio\": {\n \"music_id\": 13\n },\n \"script\": {\n \"style\": \"Storytime\"\n },\n \"language\": \"english\",\n \"override_script\": \"<string>\",\n \"webhook_url\": \"https://example.com/webhook\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"previews": [
{
"visual_style": "Simple Product Switch",
"preview_id": "preview_456",
"err_msg": "Generation failed due to invalid parameters"
}
]
}
}Video
Submit Preview List
Submit multiple visual styles for preview generation from a product. This allows you to generate multiple preview videos with different styles simultaneously.
POST
/
v2
/
create_video_from_product
/
preview_list
Submit Preview List
curl --request POST \
--url https://api.jogg.ai/v2/create_video_from_product/preview_list \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"product_id": "NTIzMzc0NjI5",
"visual_styles": [
"Simple Product Switch",
"Dynamic Showcase"
],
"video_spec": {
"length": "30",
"aspect_ratio": "landscape",
"caption": true,
"name": "My Product Video"
},
"avatar": {
"id": 1,
"type": 0
},
"voice": {
"id": "en-US-ChristopherNeural"
},
"audio": {
"music_id": 13
},
"script": {
"style": "Storytime"
},
"language": "english",
"override_script": "<string>",
"webhook_url": "https://example.com/webhook"
}
'import requests
url = "https://api.jogg.ai/v2/create_video_from_product/preview_list"
payload = {
"product_id": "NTIzMzc0NjI5",
"visual_styles": ["Simple Product Switch", "Dynamic Showcase"],
"video_spec": {
"length": "30",
"aspect_ratio": "landscape",
"caption": True,
"name": "My Product Video"
},
"avatar": {
"id": 1,
"type": 0
},
"voice": { "id": "en-US-ChristopherNeural" },
"audio": { "music_id": 13 },
"script": { "style": "Storytime" },
"language": "english",
"override_script": "<string>",
"webhook_url": "https://example.com/webhook"
}
headers = {
"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-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
product_id: 'NTIzMzc0NjI5',
visual_styles: ['Simple Product Switch', 'Dynamic Showcase'],
video_spec: {
length: '30',
aspect_ratio: 'landscape',
caption: true,
name: 'My Product Video'
},
avatar: {id: 1, type: 0},
voice: {id: 'en-US-ChristopherNeural'},
audio: {music_id: 13},
script: {style: 'Storytime'},
language: 'english',
override_script: '<string>',
webhook_url: 'https://example.com/webhook'
})
};
fetch('https://api.jogg.ai/v2/create_video_from_product/preview_list', 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.jogg.ai/v2/create_video_from_product/preview_list",
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([
'product_id' => 'NTIzMzc0NjI5',
'visual_styles' => [
'Simple Product Switch',
'Dynamic Showcase'
],
'video_spec' => [
'length' => '30',
'aspect_ratio' => 'landscape',
'caption' => true,
'name' => 'My Product Video'
],
'avatar' => [
'id' => 1,
'type' => 0
],
'voice' => [
'id' => 'en-US-ChristopherNeural'
],
'audio' => [
'music_id' => 13
],
'script' => [
'style' => 'Storytime'
],
'language' => 'english',
'override_script' => '<string>',
'webhook_url' => 'https://example.com/webhook'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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.jogg.ai/v2/create_video_from_product/preview_list"
payload := strings.NewReader("{\n \"product_id\": \"NTIzMzc0NjI5\",\n \"visual_styles\": [\n \"Simple Product Switch\",\n \"Dynamic Showcase\"\n ],\n \"video_spec\": {\n \"length\": \"30\",\n \"aspect_ratio\": \"landscape\",\n \"caption\": true,\n \"name\": \"My Product Video\"\n },\n \"avatar\": {\n \"id\": 1,\n \"type\": 0\n },\n \"voice\": {\n \"id\": \"en-US-ChristopherNeural\"\n },\n \"audio\": {\n \"music_id\": 13\n },\n \"script\": {\n \"style\": \"Storytime\"\n },\n \"language\": \"english\",\n \"override_script\": \"<string>\",\n \"webhook_url\": \"https://example.com/webhook\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.jogg.ai/v2/create_video_from_product/preview_list")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"product_id\": \"NTIzMzc0NjI5\",\n \"visual_styles\": [\n \"Simple Product Switch\",\n \"Dynamic Showcase\"\n ],\n \"video_spec\": {\n \"length\": \"30\",\n \"aspect_ratio\": \"landscape\",\n \"caption\": true,\n \"name\": \"My Product Video\"\n },\n \"avatar\": {\n \"id\": 1,\n \"type\": 0\n },\n \"voice\": {\n \"id\": \"en-US-ChristopherNeural\"\n },\n \"audio\": {\n \"music_id\": 13\n },\n \"script\": {\n \"style\": \"Storytime\"\n },\n \"language\": \"english\",\n \"override_script\": \"<string>\",\n \"webhook_url\": \"https://example.com/webhook\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jogg.ai/v2/create_video_from_product/preview_list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"product_id\": \"NTIzMzc0NjI5\",\n \"visual_styles\": [\n \"Simple Product Switch\",\n \"Dynamic Showcase\"\n ],\n \"video_spec\": {\n \"length\": \"30\",\n \"aspect_ratio\": \"landscape\",\n \"caption\": true,\n \"name\": \"My Product Video\"\n },\n \"avatar\": {\n \"id\": 1,\n \"type\": 0\n },\n \"voice\": {\n \"id\": \"en-US-ChristopherNeural\"\n },\n \"audio\": {\n \"music_id\": 13\n },\n \"script\": {\n \"style\": \"Storytime\"\n },\n \"language\": \"english\",\n \"override_script\": \"<string>\",\n \"webhook_url\": \"https://example.com/webhook\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"previews": [
{
"visual_style": "Simple Product Switch",
"preview_id": "preview_456",
"err_msg": "Generation failed due to invalid parameters"
}
]
}
}Submit multiple visual styles for preview generation from a product. This allows you to generate multiple preview videos with different styles simultaneously.
Example Usage
curl --request POST \
--url 'https://api.jogg.ai/v2/create_video_from_product/preview_list' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"product_id": "NTIzMzc0NjI5",
"visual_styles": ["Simple Product Switch", "Dynamic Showcase"],
"video_spec": {
"aspect_ratio": "landscape",
"length": "30",
"caption": true
},
"avatar": {
"id": 1,
"type": 0
},
"voice": {
"id": "en-US-ChristopherNeural"
},
"audio": {},
"script": {
"style": "Storytime",
"language": "english"
}
}'
Related Guides
Product Videos
Complete product video workflow
Render Preview
Render final video from preview
Authorizations
API key for authentication. Obtain your key from the JoggAI dashboard.
Body
application/json
Product ID
Example:
"NTIzMzc0NjI5"
List of visual style names to generate previews
Example:
["Simple Product Switch", "Dynamic Showcase"]Video specification settings
Show child attributes
Show child attributes
Avatar configuration
Show child attributes
Show child attributes
Voice configuration
Show child attributes
Show child attributes
Audio configuration
Show child attributes
Show child attributes
Script configuration
Show child attributes
Show child attributes
Script generation language
Example:
"english"
Override the auto-generated script
Webhook URL for status notifications
Example:
"https://example.com/webhook"
Response
200 - application/json
Success
Business status code:
- 0 - Success
- 10104 - Record not found
- 10105 - Invalid API key
- 18020 - Insufficient credit
- 18025 - No permission to call APIs
- 40000 - Parameter error
- 50000 - System error
Example:
0
Response message
Example:
"Success"
Show child attributes
Show child attributes
⌘I

