Generate Video from Product
curl --request POST \
--url https://api.jogg.ai/v2/create_video_from_product \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"product_id": "NTIzMzc0NjI5",
"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"
},
"visual_style": "Simple Product Switch",
"override_script": "<string>",
"webhook_url": "https://example.com/webhook"
}
'import requests
url = "https://api.jogg.ai/v2/create_video_from_product"
payload = {
"product_id": "NTIzMzc0NjI5",
"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"
},
"visual_style": "Simple Product Switch",
"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',
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'},
visual_style: 'Simple Product Switch',
override_script: '<string>',
webhook_url: 'https://example.com/webhook'
})
};
fetch('https://api.jogg.ai/v2/create_video_from_product', 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",
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',
'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'
],
'visual_style' => 'Simple Product Switch',
'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"
payload := strings.NewReader("{\n \"product_id\": \"NTIzMzc0NjI5\",\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 \"language\": \"english\"\n },\n \"visual_style\": \"Simple Product Switch\",\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")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"product_id\": \"NTIzMzc0NjI5\",\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 \"language\": \"english\"\n },\n \"visual_style\": \"Simple Product Switch\",\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")
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 \"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 \"language\": \"english\"\n },\n \"visual_style\": \"Simple Product Switch\",\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": {
"video_id": "video_789",
"status": "processing"
}
}Video
Create Video from Product
Create a video from product information with customizable visual style, avatar, voice, and script. This is the final step after creating a product to generate the actual video.
POST
/
v2
/
create_video_from_product
Generate Video from Product
curl --request POST \
--url https://api.jogg.ai/v2/create_video_from_product \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"product_id": "NTIzMzc0NjI5",
"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"
},
"visual_style": "Simple Product Switch",
"override_script": "<string>",
"webhook_url": "https://example.com/webhook"
}
'import requests
url = "https://api.jogg.ai/v2/create_video_from_product"
payload = {
"product_id": "NTIzMzc0NjI5",
"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"
},
"visual_style": "Simple Product Switch",
"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',
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'},
visual_style: 'Simple Product Switch',
override_script: '<string>',
webhook_url: 'https://example.com/webhook'
})
};
fetch('https://api.jogg.ai/v2/create_video_from_product', 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",
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',
'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'
],
'visual_style' => 'Simple Product Switch',
'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"
payload := strings.NewReader("{\n \"product_id\": \"NTIzMzc0NjI5\",\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 \"language\": \"english\"\n },\n \"visual_style\": \"Simple Product Switch\",\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")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"product_id\": \"NTIzMzc0NjI5\",\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 \"language\": \"english\"\n },\n \"visual_style\": \"Simple Product Switch\",\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")
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 \"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 \"language\": \"english\"\n },\n \"visual_style\": \"Simple Product Switch\",\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": {
"video_id": "video_789",
"status": "processing"
}
}Generate a product marketing video from product information. This endpoint creates videos with AI-generated scripts based on your product details.
Example Usage
curl -X POST 'https://api.jogg.ai/v2/create_video_from_product' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"product_id": "prod_abc123",
"avatar_id": 127,
"voice_id": "en-US-ChristopherNeural",
"aspect_ratio": 1
}'
Related Guides
URL to Video Guide
Learn the complete product video workflow
Create Product
First create a product from URL
Authorizations
API key for authentication. Obtain your key from the JoggAI dashboard.
Body
application/json
Product ID from product creation
Example:
"NTIzMzc0NjI5"
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
Visual style name from visual list
Example:
"Simple Product Switch"
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

