UGCLabUGCLab

Hook Cloner

Create viral hook-style UGC videos with attention-grabbing openings

Create viral hook-style UGC videos featuring AI actors showcasing your product with attention-grabbing hooks. Choose between two powerful workflows: UGCL 2.0 for maximum customization or UGCL 1.0 for extended duration support.

Create Hook Cloner Video

Generate viral hook-style videos with AI actors presenting your product.

POST /ugc/hook-cloner

Request Headers

HeaderRequiredDescription
AuthorizationYesBearer token with your API key
Content-TypeYesapplication/json

Workflows

UGCL 2.0 Workflow

Request Body (UGCL 2.0)

{
  "projectId": "clxxx...",
  "workflowType": "ugcl-2.0",
  "actorIds": ["clyyy..."],
  "productImageUrl": "https://example.com/product.jpg",
  "script": "Stop scrolling! You need to see this...",
  "actions": "Looking surprised, pointing at product, energetic gestures",
  "duration": "15s",
  "tier": "standard",
  "variants": 1,
  "refineScript": true,
  "refineActions": true
}

UGCL 2.0 Parameters

ParameterTypeRequiredDefaultDescription
projectIdstringYes-Your project ID (CUID format)
workflowTypestringYes-Must be "ugcl-2.0"
actorIdsstring[]Conditional[]Array of actor IDs (max 20). Required if no customActors
customActorsobject[]Conditional[]Array of custom actor definitions (max 20). Required if no actorIds
productImageUrlstringYes-HTTPS URL to your product image
scriptstringYes-The hook script for the actor to speak (10-500 characters)
actionsstringYes-Actor actions with product (10-1000 characters)
durationstringYes-Video duration: "10s", "15s", or "25s" (storyboard)
tierstringNo"standard"Quality tier: "standard" or "pro"
variantsnumberNo1Number of video variants per actor (1-8)
refineScriptbooleanNotrueAI-enhance the script
refineActionsbooleanNotrueAI-enhance the actions

UGCL 2.0 Pricing

DurationStandard TierPro Tier
10s63 credits88 credits
15s75 credits125 credits
25s (storyboard)113 credits113 credits

UGCL 1.0 Workflow

Request Body (UGCL 1.0)

{
  "projectId": "clxxx...",
  "workflowType": "ugcl-1.0",
  "ugclabActorIds": ["clzzz..."],
  "productImageUrl": "https://example.com/product.jpg",
  "script": "Wait, you guys haven't tried this yet? Let me show you why everyone is talking about it...",
  "actions": "Holding product dramatically, showing features",
  "ugclabMode": "pro",
  "veoDuration": "15s",
  "variants": 1
}

UGCL 1.0 Parameters

ParameterTypeRequiredDefaultDescription
projectIdstringYes-Your project ID (CUID format)
workflowTypestringYes-Must be "ugcl-1.0"
ugclabActorIdsstring[]Yes-Array of UGCLab actor IDs (1-20 required)
productImageUrlstringYes-HTTPS URL to your product image
scriptstringYes-The hook script for the actor to speak (10-500 characters)
actionsstringNo""Actor actions with product (max 1000 characters)
ugclabModestringNo"pro"Quality mode: "std" or "pro"
veoDurationstringNo"8s"Video duration: "8s", "15s", "22s", "30s"
variantsnumberNo1Number of video variants per actor (1-8)

UGCL 1.0 Pricing

DurationStandard ModePro Mode
8s32 credits93 credits
15s60 credits133 credits
22s88 credits200 credits
30s120 credits267 credits

Response

Success Response (202 Accepted)

{
  "data": {
    "jobs": [
      {
        "ugcId": "clxxx...",
        "actorId": "clyyy...",
        "variantIndex": 0,
        "status": "PENDING",
        "creditsCharged": 75
      }
    ],
    "totalCreditsCharged": 75,
    "remainingCredits": 4925
  },
  "meta": {
    "requestId": "req_abc123def456",
    "timestamp": "2025-01-15T10:30:00.000Z"
  }
}

Examples

curl -X POST https://api.ugclab.app/api/v1/ugc/hook-cloner \
  -H "Authorization: Bearer ugc_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "projectId": "clxyz123...",
    "workflowType": "ugcl-2.0",
    "actorIds": ["clactor123..."],
    "productImageUrl": "https://example.com/my-product.jpg",
    "script": "Stop scrolling! This product changed everything for me!",
    "actions": "Looking surprised, dramatic pause, holding product up",
    "duration": "15s",
    "tier": "standard"
  }'
const response = await fetch('https://api.ugclab.app/api/v1/ugc/hook-cloner', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ugc_your_api_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    projectId: 'clxyz123...',
    workflowType: 'ugcl-2.0',
    actorIds: ['clactor123...'],
    productImageUrl: 'https://example.com/my-product.jpg',
    script: 'Stop scrolling! This changed my life!',
    actions: 'Excited expression, pointing at product',
    duration: '15s',
    tier: 'standard',
    variants: 1,
  }),
});

const data = await response.json();

if (response.ok) {
  console.log('Jobs created:', data.data.jobs);
} else {
  console.error('Error:', data.error.message);
}
import requests

response = requests.post(
    'https://api.ugclab.app/api/v1/ugc/hook-cloner',
    headers={
        'Authorization': 'Bearer ugc_your_api_key',
        'Content-Type': 'application/json',
    },
    json={
        'projectId': 'clxyz123...',
        'workflowType': 'ugcl-2.0',
        'actorIds': ['clactor123...'],
        'productImageUrl': 'https://example.com/my-product.jpg',
        'script': 'Stop scrolling! This changed my life!',
        'actions': 'Excited expression, pointing at product',
        'duration': '15s',
        'tier': 'standard',
        'variants': 1,
    }
)

data = response.json()

if response.ok:
    print(f"Jobs created: {len(data['data']['jobs'])}")
else:
    print(f"Error: {data['error']['message']}")

Error Codes

CodeHTTP StatusDescription
VALIDATION_ERROR400Invalid request parameters
INVALID_ACTOR_IDS400One or more actor IDs are invalid
INVALID_UGCLAB_ACTOR_IDS400One or more UGCLab actor IDs are invalid
ACTOR_MISSING_IMAGE400Some actors are missing image configuration
INSUFFICIENT_CREDITS402Not enough credits in workspace
PROJECT_NOT_FOUND404Project not found in workspace
IP_RATE_LIMITED429Too many authentication attempts
RATE_LIMIT_EXCEEDED429API rate limit exceeded
INTERNAL_ERROR500Internal server error

Best Practices

Start with attention-grabbing phrases like "Stop scrolling!", "Wait...", or "POV:" for maximum engagement.

  1. Attention-grabbing hooks: Start with phrases like "Stop scrolling!", "Wait...", or "POV:" for maximum engagement.
  2. Authentic scripts: Write scripts that sound natural and conversational, like real UGC content.
  3. High-quality product images: Use clear, well-lit product photos for best results.
  4. Descriptive actions: Be specific about emotions and movements for more engaging videos.
  5. Test with Standard tier: Use tier: "standard" for testing to save credits.
  6. Use webhooks: Configure webhooks for real-time status updates instead of polling.

On this page