MAKEUGC PLATFORM API · DOCS V2
Shopify video templates
Create product videos from Shopify-compatible templates and organize results in a project for each store.
Workflow
- List Shopify templates and their input requirements.
- Supply a product image and either project_id or project_name.
- Submit generation and save data.db_id.
- Poll the Shopify status endpoint; do not use the general Content Library status endpoint.
Example IDs and media URLs are placeholders. Replace them with values from your account and accessible media files.
List templates #
/content-library/shopify/templates
Discover template IDs, credit costs and require_fields. credit is a numeric string or null. Template field types include input, textarea, image and select; honor max, options and required: false when present. Returned values vary by template; this example is illustrative.
Parameters
| Parameter | Description |
|---|---|
category
string · query
Optional
|
Category value from the categories endpoint.
Default: |
Request example
curl --fail-with-body --max-time 120 -X GET "https://app.makeugc.ai/api/platform/content-library/shopify/templates" \
-H "X-Api-Key: $MAKEUGC_API_KEY"
// Run on your server with Node.js 20+.
const apiKey = process.env.MAKEUGC_API_KEY;
if (!apiKey) throw new Error("Set MAKEUGC_API_KEY first");
const response = await fetch("https://app.makeugc.ai/api/platform/content-library/shopify/templates", {
method: "GET",
headers: {
"X-Api-Key": apiKey,
},
signal: AbortSignal.timeout(120000),
});
const text = await response.text();
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${text} (request ${response.headers.get("x-request-id")})`);
}
const result = JSON.parse(text);
console.log(result);
# Install the requests package before running.
import os
import requests
response = requests.get(
"https://app.makeugc.ai/api/platform/content-library/shopify/templates",
headers={"X-Api-Key": os.environ["MAKEUGC_API_KEY"]},
timeout=120,
)
if not response.ok:
raise RuntimeError(f"HTTP {response.status_code}: {response.text} "
f"(request {response.headers.get('x-request-id')})")
print(response.json())
200 response example
{
"status": true,
"message": "Templates retrieved successfully",
"data": [
{
"id": "template_123",
"title": "Product introduction",
"description": "Introduce a product with a short script.",
"preview_url": "https://your-cdn.example/template-preview.mp4",
"credit": "1",
"category": [
"product"
],
"require_fields": {
"product_image": {
"type": "image",
"label": "Product image"
},
"product_name": {
"type": "input",
"label": "Product name"
},
"script": {
"type": "textarea",
"label": "Script",
"max": 400
}
},
"placeholders": [
"product_name",
"script"
],
"product_image_required": true,
"allowed_models": [
"seedance-2.0-fast",
"seedance-2.0",
"seedance-2.5"
],
"default_model": "seedance-2.0-fast"
}
]
}
All requests require X-Api-Key. See
errors & retries for unsuccessful
responses.
List categories #
/content-library/shopify/categories
Use a returned value to filter templates.
Parameters
No request parameters.
Request example
curl --fail-with-body --max-time 120 -X GET "https://app.makeugc.ai/api/platform/content-library/shopify/categories" \
-H "X-Api-Key: $MAKEUGC_API_KEY"
// Run on your server with Node.js 20+.
const apiKey = process.env.MAKEUGC_API_KEY;
if (!apiKey) throw new Error("Set MAKEUGC_API_KEY first");
const response = await fetch("https://app.makeugc.ai/api/platform/content-library/shopify/categories", {
method: "GET",
headers: {
"X-Api-Key": apiKey,
},
signal: AbortSignal.timeout(120000),
});
const text = await response.text();
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${text} (request ${response.headers.get("x-request-id")})`);
}
const result = JSON.parse(text);
console.log(result);
# Install the requests package before running.
import os
import requests
response = requests.get(
"https://app.makeugc.ai/api/platform/content-library/shopify/categories",
headers={"X-Api-Key": os.environ["MAKEUGC_API_KEY"]},
timeout=120,
)
if not response.ok:
raise RuntimeError(f"HTTP {response.status_code}: {response.text} "
f"(request {response.headers.get('x-request-id')})")
print(response.json())
200 response example
{
"status": true,
"message": "Categories retrieved successfully",
"data": [
{
"label": "All",
"value": "all"
}
]
}
All requests require X-Api-Key. See
errors & retries for unsuccessful
responses.
Generate a Shopify product video #
/content-library/shopify/generate
The generation response can also include job_id, feature, model, credits_used and raw_status.
Request body
| Parameter | Description |
|---|---|
template_id
string
Required
|
Shopify template ID. |
product_image
string
Required
|
Public HTTP(S) product image URL; at most 2,000 characters. |
actor_image
string | null
Optional
|
Public HTTP(S) actor image URL. |
project_id
string
Optional
|
Existing project ID. Required unless project_name is provided. |
project_name
string
Optional
|
Store project name. Required unless project_id is provided.
Allowed: |
duration
string | number
Optional
|
Video duration.
Allowed: |
aspect_ratio
string
Optional
|
Video aspect ratio.
Allowed: |
model
string
Optional
|
Video model.
Allowed: |
generate_audio
boolean
Optional
|
Generate audio. |
add_watermark
boolean
Optional
|
Add a watermark. |
voice_id
string
Optional
|
Use the id returned by GET /video/voices, not its voiceId field. |
voiceId
string
Optional
|
Alias for voice_id. Prefer voice_id; it takes precedence. |
webhook_url
string
Optional
|
Public HTTP(S) callback URL. Use status polling as a fallback. |
<template fields>
dynamic
Optional
|
Additional fields required by the chosen template. |
Request example
curl --fail-with-body --max-time 120 -X POST "https://app.makeugc.ai/api/platform/content-library/shopify/generate" \
-H "X-Api-Key: $MAKEUGC_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"template_id": "TEMPLATE_ID",
"product_image": "https://your-cdn.example/product.jpg",
"project_name": "store.myshopify.com",
"model": "seedance-2.0-fast",
"duration": 10
}'
// Run on your server with Node.js 20+.
const apiKey = process.env.MAKEUGC_API_KEY;
if (!apiKey) throw new Error("Set MAKEUGC_API_KEY first");
const response = await fetch("https://app.makeugc.ai/api/platform/content-library/shopify/generate", {
method: "POST",
headers: {
"X-Api-Key": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify({
"template_id": "TEMPLATE_ID",
"product_image": "https://your-cdn.example/product.jpg",
"project_name": "store.myshopify.com",
"model": "seedance-2.0-fast",
"duration": 10
}),
signal: AbortSignal.timeout(120000),
});
const text = await response.text();
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${text} (request ${response.headers.get("x-request-id")})`);
}
const result = JSON.parse(text);
console.log(result);
# Install the requests package before running.
import os
import requests
payload = {
"template_id": "TEMPLATE_ID",
"product_image": "https://your-cdn.example/product.jpg",
"project_name": "store.myshopify.com",
"model": "seedance-2.0-fast",
"duration": 10
}
response = requests.post(
"https://app.makeugc.ai/api/platform/content-library/shopify/generate",
headers={"X-Api-Key": os.environ["MAKEUGC_API_KEY"]},
json=payload,
timeout=120,
)
if not response.ok:
raise RuntimeError(f"HTTP {response.status_code}: {response.text} "
f"(request {response.headers.get('x-request-id')})")
print(response.json())
200 response example
{
"status": true,
"message": "Video generation started",
"data": {
"db_id": "video_123",
"job_id": "job_123",
"feature": "v2v_shopify",
"model": "seedance-2.0-fast",
"raw_status": "0"
}
}
All requests require X-Api-Key. See
errors & retries for unsuccessful
responses.
Get video status #
/content-library/shopify/status
Poll every 5–10 seconds. Stop on failed, or completed with a non-empty URL. The outer status boolean describes the API request; data.status describes the job.
Parameters
| Parameter | Description |
|---|---|
id
string · query
Required
|
Job ID returned by the matching generation endpoint. |
Request example
curl --fail-with-body --max-time 120 -X GET "https://app.makeugc.ai/api/platform/content-library/shopify/status?id=ID" \
-H "X-Api-Key: $MAKEUGC_API_KEY"
// Run on your server with Node.js 20+.
const apiKey = process.env.MAKEUGC_API_KEY;
if (!apiKey) throw new Error("Set MAKEUGC_API_KEY first");
const response = await fetch("https://app.makeugc.ai/api/platform/content-library/shopify/status?id=ID", {
method: "GET",
headers: {
"X-Api-Key": apiKey,
},
signal: AbortSignal.timeout(120000),
});
const text = await response.text();
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${text} (request ${response.headers.get("x-request-id")})`);
}
const result = JSON.parse(text);
console.log(result);
# Install the requests package before running.
import os
import requests
response = requests.get(
"https://app.makeugc.ai/api/platform/content-library/shopify/status?id=ID",
headers={"X-Api-Key": os.environ["MAKEUGC_API_KEY"]},
timeout=120,
)
if not response.ok:
raise RuntimeError(f"HTTP {response.status_code}: {response.text} "
f"(request {response.headers.get('x-request-id')})")
print(response.json())
200 response example
{
"status": true,
"message": "Video is completed",
"data": {
"db_id": "video_123",
"raw_status": "1",
"feature": "v2v_shopify",
"status": "completed",
"url": "https://your-cdn.example/result.mp4"
}
}
All requests require X-Api-Key. See
errors & retries for unsuccessful
responses.