UGCLabUGCLab

Quick Start

Get started with the UGCLab API in minutes

Welcome to the UGCLab API documentation. Generate AI-powered UGC videos and images programmatically.

API access requires a Pro, Business, or Enterprise plan.

Getting Started

Get your API Key

Create an API key in your Dashboard Settings. API keys start with ugc_ prefix.

Get your Project ID

Every request requires a projectId. Get your project IDs via the API:

curl https://api.ugclab.app/api/v1/projects \
  -H "Authorization: Bearer ugc_your_api_key"
const response = await fetch('https://api.ugclab.app/api/v1/projects', {
  headers: { 'Authorization': 'Bearer ugc_your_api_key' }
});
const { data } = await response.json();
console.log(data.projects);
import requests

response = requests.get(
    'https://api.ugclab.app/api/v1/projects',
    headers={'Authorization': 'Bearer ugc_your_api_key'}
)
print(response.json()['data']['projects'])

Create your first UGC

Generate a Talking Actor video with UGCL 2.0:

curl -X POST https://api.ugclab.app/api/v1/ugc/talking-actor \
  -H "Authorization: Bearer ugc_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "projectId": "your_project_id",
    "workflowType": "ugcl-2.0",
    "actorId": "actor_id",
    "script": "Hello! Welcome to UGCLab, the best platform for AI-generated content.",
    "duration": "10s",
    "tier": "standard"
  }'
const response = await fetch('https://api.ugclab.app/api/v1/ugc/talking-actor', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ugc_your_api_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    projectId: 'your_project_id',
    workflowType: 'ugcl-2.0',
    actorId: 'actor_id',
    script: 'Hello! Welcome to UGCLab.',
    duration: '10s',
    tier: 'standard',
  }),
});

const { data } = await response.json();
console.log('Job created:', data.jobs[0].ugcId);
import requests

response = requests.post(
    'https://api.ugclab.app/api/v1/ugc/talking-actor',
    headers={
        'Authorization': 'Bearer ugc_your_api_key',
        'Content-Type': 'application/json',
    },
    json={
        'projectId': 'your_project_id',
        'workflowType': 'ugcl-2.0',
        'actorId': 'actor_id',
        'script': 'Hello! Welcome to UGCLab.',
        'duration': '10s',
        'tier': 'standard',
    }
)

data = response.json()
print(f"Job created: {data['data']['jobs'][0]['ugcId']}")

Check job status

Poll the job status until it's complete:

curl https://api.ugclab.app/api/v1/ugc/YOUR_UGC_ID \
  -H "Authorization: Bearer ugc_your_api_key"
const checkStatus = async (ugcId: string) => {
  const response = await fetch(`https://api.ugclab.app/api/v1/ugc/${ugcId}`, {
    headers: { 'Authorization': 'Bearer ugc_your_api_key' }
  });
  const { data } = await response.json();

  if (data.status === 'COMPLETED') {
    console.log('Video ready:', data.videoUrl);
  } else if (data.status === 'FAILED') {
    console.error('Generation failed');
  } else {
    // Poll again after delay
    setTimeout(() => checkStatus(ugcId), 5000);
  }
};
import time

def check_status(ugc_id):
    response = requests.get(
        f'https://api.ugclab.app/api/v1/ugc/{ugc_id}',
        headers={'Authorization': 'Bearer ugc_your_api_key'}
    )
    data = response.json()['data']

    if data['status'] == 'COMPLETED':
        print(f"Video ready: {data['videoUrl']}")
    elif data['status'] == 'FAILED':
        print("Generation failed")
    else:
        time.sleep(5)
        check_status(ugc_id)

Base URL

All API requests should be made to:

https://api.ugclab.app/api/v1

Authentication

Include your API key in the Authorization header:

Authorization: Bearer ugc_your_api_key_here

What's Next?

On this page