Docs · v1

Video

List avatars and voices, start a talking-actor generation job, then poll until the MP4 URL is ready.

GET/video/avatars

Retrieve template and custom avatars available to the authenticated account.

Parameters

Name In Required Description
gender query No Male or Female
cURL bash
curl -X GET "https://app.makeugc.ai/api/platform/video/avatars" \
  -H "X-Api-Key: YOUR_API_KEY"
JavaScript javascript
const response = await fetch("https://app.makeugc.ai/api/platform/video/avatars", {
  headers: { "X-Api-Key": "YOUR_API_KEY" },
});
const payload = await response.json();
Python python
import requests

response = requests.get(
    "https://app.makeugc.ai/api/platform/video/avatars",
    headers={"X-Api-Key": "YOUR_API_KEY"},
)
print(response.json())

200 response

JSON json
{
  "status": true,
  "message": "Avatars fetched",
  "data": [
    {
      "id": "avatar_123",
      "name": "Avatar Name",
      "thumbnail": "https://...",
      "gender": "Male"
    }
  ]
}

GET/video/voices

Retrieve template voices and the current user’s custom voices.

Parameters

Name In Required Description
language query No Filter by language name
gender query No For example Male or Female

200 response

JSON json
{
  "status": true,
  "message": "Voices fetched",
  "data": [
    {
      "id": "voice_123",
      "name": "Voice Name",
      "language": "English",
      "gender": "Female",
      "templateUrl": "https://...",
      "thumbnail": "https://...",
      "voiceId": "internal_tts_voice_id",
      "accent": "US",
      "country": "United States",
      "isCustom": false
    }
  ]
}

POST/video/generate

Create a talking-actor video. Keep scripts concise; max 1,500 characters.

Parameters

Name Required Description
avatar_id Yes Avatar to render
voice_script Yes Spoken script, max 1,500 characters
video_name No Defaults to “API Generated Video”
voice_url No Existing audio URL; skips TTS; max 120s
voice_id No Voice actor; otherwise the avatar default
voice_settings No stability, similarity_boost, style (0–1), use_speaker_boost
webhook_url No HTTPS callback for status updates

Request body

JSON json
{
  "avatar_id": "string",
  "voice_script": "string",
  "video_name": "string",
  "voice_url": "string",
  "voice_id": "string",
  "voice_settings": {
    "stability": 0.75,
    "similarity_boost": 0.4,
    "style": 0,
    "use_speaker_boost": true
  },
  "webhook_url": "string"
}
cURL bash
curl -X POST "https://app.makeugc.ai/api/platform/video/generate" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "avatar_id": "avatar_123",
    "voice_script": "Here is a 15-second product hook.",
    "voice_id": "voice_123",
    "webhook_url": "https://example.com/webhooks/makeugc"
  }'
JavaScript javascript
const response = await fetch("https://app.makeugc.ai/api/platform/video/generate", {
  method: "POST",
  headers: {
    "X-Api-Key": process.env.MAKEUGC_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    avatar_id: "avatar_123",
    voice_script: "Here is a 15-second product hook.",
    voice_id: "voice_123",
  }),
});
Python python
import os
import requests

response = requests.post(
    "https://app.makeugc.ai/api/platform/video/generate",
    headers={"X-Api-Key": os.environ["MAKEUGC_API_KEY"]},
    json={
        "avatar_id": "avatar_123",
        "voice_script": "Here is a 15-second product hook.",
        "voice_id": "voice_123",
    },
)

200 response

JSON json
{
  "status": true,
  "message": "Video generation started",
  "data": {
    "id": "video_123"
  }
}

Status codes

  • 200 Success
  • 400 Missing required fields or invalid input
  • 401 Not authenticated
  • 404 Avatar or voice not found
  • 500 Server error

GET/video/status

Check a generation job. url is present when status is completed.

Parameters

Name In Required Description
id query Yes Video id returned from generate

200 response

JSON json
{
  "status": true,
  "message": "Video is processing",
  "data": {
    "status": "processing",
    "url": "https://..."
  }
}

Questions

Which audio source does generate use?

Priority is voice_url, then voice_id, then the avatar’s default voice. An inaccessible voice_url or audio longer than 120 seconds is rejected.

How do I know when a video is ready?

POST /video/generate returns a job id. Poll GET /video/status?id={id} every 5–10 seconds until data.status is completed (url present) or failed.