Docs · v1

Content Library

Generate videos from pre-built templates. List templates to discover required fields, start a job, then poll by db_id.

GET/content-library/templates

Parameters

Name In Required Description
category query No Filter by category. Default all.

200 response

JSON json
{
  "status": true,
  "message": "Templates retrieved successfully",
  "data": [
    {
      "id": "template_uuid",
      "title": "Template title",
      "credit": "1",
      "category": ["hook", "ugc"],
      "require_fields": {
        "product_name": { "type": "input", "label": "Product name" },
        "product_image": { "type": "image", "label": "Product image" },
        "script": { "type": "textarea", "label": "Script", "max": 400 }
      }
    }
  ]
}

GET/content-library/categories

200 response

JSON json
{
  "status": true,
  "message": "Categories retrieved successfully",
  "data": [
    { "label": "All", "value": "all" },
    { "label": "hook", "value": "hook" }
  ]
}

POST/content-library/generate

Dynamic body fields must match require_fields. Credits follow the template credit value.

Parameters

Name Required Description
template_id Yes Template UUID from list templates
project_id No Auto-creates a project if omitted
webhook_url No HTTPS URL for terminal job callbacks
cURL bash
curl -X POST "https://app.makeugc.ai/api/platform/content-library/generate" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template_id": "template_uuid",
    "product_name": "Glow Serum",
    "product_image": "https://cdn.example.com/product.png",
    "script": "This serum changed my morning routine."
  }'
JavaScript javascript
const response = await fetch("https://app.makeugc.ai/api/platform/content-library/generate", {
  method: "POST",
  headers: {
    "X-Api-Key": process.env.MAKEUGC_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    template_id: "template_uuid",
    product_name: "Glow Serum",
    product_image: "https://cdn.example.com/product.png",
    script: "This serum changed my morning routine.",
  }),
});
Python python
import os
import requests

response = requests.post(
    "https://app.makeugc.ai/api/platform/content-library/generate",
    headers={"X-Api-Key": os.environ["MAKEUGC_API_KEY"]},
    json={
        "template_id": "template_uuid",
        "product_name": "Glow Serum",
        "product_image": "https://cdn.example.com/product.png",
        "script": "This serum changed my morning routine.",
    },
)

200 response

JSON json
{
  "status": true,
  "message": "Video generation started",
  "data": { "db_id": "uuid" }
}

Webhook callback

When webhook_url is set, MakeUGC POSTs application/json at a terminal state. video_id matches the generate db_id.

Completed callback

JSON json
{
  "event": "video2video.job.terminal",
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "video_id": "660e8400-e29b-41d4-a716-446655440001",
  "status": "completed",
  "template_id": "tpl_789",
  "video_url": "https://s3.amazonaws.com/.../final.mp4",
  "thumbnail_url": "https://s3.amazonaws.com/.../thumb.jpg",
  "error": null,
  "completed_at": "2026-05-28T12:34:56.789123+00:00"
}

GET/content-library/status

Parameters

Name In Required
id query Yes — the generate db_id

Completed response

JSON json
{
  "status": true,
  "message": "Video is completed",
  "data": {
    "db_id": "uuid",
    "status": "completed",
    "url": "https://signed-url.mp4"
  }
}

Questions

How do I know which body fields a template needs?

GET /content-library/templates returns require_fields for each template. Every listed key is required on generate. Image fields must be public http(s) URLs — this route does not accept file uploads.

Should I poll or wait for the webhook?

If webhook_url is set, MakeUGC POSTs a JSON callback on a terminal state. Poll GET /content-library/status?id={db_id} as well; webhooks are not a guaranteed delivery channel.