Skip to content
Developers
API docs / Features

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

  1. List Shopify templates and their input requirements.
  2. Supply a product image and either project_id or project_name.
  3. Submit generation and save data.db_id.
  4. Poll the Shopify status endpoint; do not use the general Content Library status endpoint.
project_name can be your shop domain, such as store.myshopify.com. It finds or creates a project for that shop. If both project fields are sent, project_id takes priority.
Use live template metadata to determine which additional fields are required.

Example IDs and media URLs are placeholders. Replace them with values from your account and accessible media files.

List templates #

GET /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: all

Request example

cURL
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"
JavaScript
// 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);
Python
# 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

JSON response
{
  "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 #

GET /content-library/shopify/categories

Use a returned value to filter templates.

Parameters

No request parameters.

Request example

cURL
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"
JavaScript
// 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);
Python
# 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

JSON response
{
  "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 #

POST /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: 1–256 characters

duration
string | number
Optional
Video duration.

Allowed: 10 | 15 | 10s | 15s

aspect_ratio
string
Optional
Video aspect ratio.

Allowed: 21:9 | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | adaptive

model
string
Optional
Video model.

Allowed: seedance-2.0-fast | seedance-2.0 | seedance-2.5

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
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
}'
JavaScript
// 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);
Python
# 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

JSON response
{
  "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 #

GET /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.

While processing, data.status is processing and url is absent. On failure, data.status is failed; a reason may be included. Save output files if you need permanent access.

Parameters

Parameter Description
id
string · query
Required
Job ID returned by the matching generation endpoint.

Request example

cURL
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"
JavaScript
// 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);
Python
# 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

JSON response
{
  "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.