Create video

March 24, 2025 (May 12, 2026)

Table of contents

  1. Request Headers
  2. Request Body
    1. Parameters
    2. Input image paths and templates
  3. Responses
  4. Model
  5. Examples
  6. Try It

This endpoint supports both text-to-video (t2v) and image-to-video (i2v) modes.

Supported models (see Model Capabilities for per-model constraints):

  • Native PixVerse: v6 (default), v5.6, v5.5, v5, v5-fast, pixverse-c1
  • Third-party: seedance-2.0, seedance-2.0-fast, kling-o3, kling-v3, grok-imagine, veo-3.1-lite, veo-3.1-standard, veo-3.1-fast, sora-2, sora-2-pro, happyhorse-1.0

For dedicated image generation, see POST images/create.

To upload prompt image use POST files.

https://api.useapi.net/v2/pixverse/videos/create

Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
Request Body
  • {
        "model": "v6",
        "prompt": "A red panda eating bamboo in a misty forest",
        "duration": 5,
        "quality": "720p",
        "aspect_ratio": "16:9"
    }
    
  • {
        "model": "v6",
        "prompt": "The subject turns and smiles at camera",
        "first_frame_path": "upload/eb20c63d-…png",
        "duration": 5,
        "quality": "720p"
    }
    
  • {
        "template_id": 326733946317888,
        "first_frame_path": "upload/a-…jpeg",
        "last_frame_path": "upload/b-…jpeg"
    }
    
  • {
        "template_id": 384628677917440,
        "prompt": "A warm family reunion in a sunlit backyard.",
        "frame_1_path": "upload/a-…jpeg",
        "frame_2_path": "upload/b-…jpeg",
        "frame_3_path": "upload/c-…jpeg",
        "frame_4_path": "upload/d-…jpeg",
        "frame_5_path": "upload/e-…jpeg"
    }
    
Parameters
  • email is optional, if not specified API will randomly select account from available accounts.

  • model is optional. Default: v6. Supported values — native PixVerse: v6, v5.6, v5.5, v5, v5-fast, pixverse-c1. Third-party: seedance-2.0, seedance-2.0-fast, kling-o3, kling-v3, grok-imagine, veo-3.1-lite, veo-3.1-standard, veo-3.1-fast, sora-2, sora-2-pro, happyhorse-1.0. See Model Capabilities for per-model quality, duration, and aspect-ratio constraints. Ignored when template_id is set — see notes.

  • prompt is optional, describe your video.
    Maximum length 5,000 characters.

  • first_frame_path, last_frame_path, frame_1_path, frame_2_path, frame_3_path, frame_4_path, frame_5_path are optional input image paths. Upload images via POST /files first and use the returned path value. Two interchangeable forms exist for providing image paths and the count rules depend on effect_type — see notes for full rules.

  • template_id is optional, effect template id from GET videos/effects. When set, the template controls model/duration/quality — see notes.

  • duration is optional. Video duration in seconds — accepted values depend on the model. See Model Capabilities. Default: 5. Ignored when template_id is set.

  • quality is optional. Video quality — accepted values depend on the model. See Model Capabilities. For kling-o3 and kling-v3, quality: 720p routes to the Standard upstream tier and quality: 1080p routes to the Pro tier. When template_id is set, must be one of the template’s qualities (see GET videos/effects); defaults to the first entry if omitted.

  • aspect_ratio is optional, required for t2v (no image), not accepted for i2v (derived from input image). See Model Capabilities for per-model supported values.

  • auto_sound is optional. Set to true to generate videos with sound or false to explicitly remove the default effect sound.
    Supported values: not specified (default), false, true.

  • sound_effect_prompt is optional, describe the sound eg “the sound of waves hitting the shore”.

  • lip_sync_tts_prompt is optional, enter character lines.
    Maximum length 140 characters.

  • lip_sync_tts_speaker_id is optional, specify desired lipsync voice see GET videos/voices.

  • audio is optional. Supported values: false (default), true. Behavior depends on the model:

    Behavior Models What it means
    Toggle v5.5, v5.6, v6, pixverse-c1, seedance-2.0, seedance-2.0-fast, kling-o3, kling-v3 true or false accepted; enables integrated audio generation
    Always on veo-3.1-standard, veo-3.1-fast, happyhorse-1.0 Audio generated automatically; setting false is rejected
    Not supported grok-imagine, veo-3.1-lite, sora-2, sora-2-pro Passing any value is rejected
  • multi_shot is optional. v6 only. Set to true to enable multi-shot storytelling — the AI generates videos with multiple camera angles and scene cuts rather than a single continuous shot. Supported values: false (default), true.

  • preview_mode is optional. Only supported for native PixVerse models (v5, v5.5, v5.6, v5-fast, v6, pixverse-c1) — third-party models reject this flag. Set to true to generate a fast preview at lower quality at 20% off credits. Use POST videos/upscale to upscale the preview to full quality. Supported values: false (default), true.

  • seed is optional. Only supported for native PixVerse models (v5, v5.5, v5.6, v5-fast, v6, pixverse-c1) — third-party models reject this flag. Valid range 1…2147483647.

  • off_peak_mode is optional. Set to true to generate videos during low-demand periods at a reduced credit cost. Only supported for native PixVerse models (v5, v5.5, v5.6, v5-fast, v6, pixverse-c1) — third-party models reject this flag. Discount varies by subscription plan: Pro 30% off, Premium 50% off, Ultra unlimited free. Results are usually delivered within 24 hours. Off-Peak generations are not tracked by the scheduler, don’t count toward concurrent-job limits, and the replyUrl webhook is not called — use GET videos to retrieve results.
    Supported values: false (default), true.

  • replyUrl is optional, place here your callback URL. This is the preferred and most optimal way to receive results quickly — the API polls every 10 seconds and will call the provided replyUrl once the PixVerse video is completed or failed. We recommend using sites like webhook.site to test callback URL functionality. Maximum length 1024 characters.

  • replyRef is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result.
    Maximum length 1024 characters.

  • maxJobs is optional, if not specified value from selected accounts/email will be used. It should not exceed the number of concurrent generations supported by your account subscription plan.
    Valid range: 1…8

Input image paths and templates
effect_type Input count Form to use
(no template_id) 0 or 1 first_frame_path (or frame_1_path) — omit for text-to-video
"1" exactly 1 first_frame_path (or frame_1_path)
"2" exactly 2 first_frame_path + last_frame_path (or frame_1_path + frame_2_path)
"3" 2 to 3 frame_1_path … up to frame_3_path
"4" 2 to 4 frame_1_path … up to frame_4_path
"5" 2 to 5 frame_1_path … up to frame_5_path

Never mix first_frame_path/last_frame_path with frame_N_path. In the numbered form, fill slots in order — no frame_3_path without frame_2_path.

When template_id is set, the template controls model, duration, and quality — skip those parameters. Anything you pass for model or duration is ignored, and quality (if set) must be one the template allows. Image templates (template_type: 2) produce a 1-second still — the response carries image_id instead of video_id.

Responses
  • 200 OK

    Use the returned video_id or image_id to retrieve video status and results using GET videos. Locate the video in the response array and check if the field video_status_final is true or video_status_name is COMPLETED. The field url will contain the generated video link.

    If you specify the optional parameter replyUrl, the API will call the provided replyUrl with video progress updates until the video is complete or fails.

    {
        "video_id": "user:<userid>-pixverse:<email>-video:<number>"
    }
    
  • 400 Bad Request

    {
      "error": "<Error message>"
    }
    
  • 401 Unauthorized

    {
      "error": "Unauthorized"
    }
    
  • 412 Insufficient credits

    Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits.

    {
      "error": "All Credits have been used up. Please upgrade your membership or purchase credits."
    }
    
  • 422 Unprocessable Content

    Moderated message.

    {
      "error": "Your prompt has triggered our AI moderator, please re-enter your prompt"
    }
    
  • 429 Too Many Requests

    Wait in a loop for at least 10..30 seconds and retry again.

    There are two possible cases for API response 429:

    1. API query is full and can not accept new videos/create requests. Size of query defined by maxJobs optional parameter.
      {
       "error": 
         "Account <email> is busy executing <maxJobs> tasks."
         "All configured accounts are running at maximum capacity."
      }
      
    2. The API received an HTTP response status 429 from PixVerse. Please refer to your subscription plan for the maximum allowed tasks in the queue.
      {
        "error": "Reached the limit for concurrent generations."
      }
      
  • 596 Pending mod message

    Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing POST accounts/email before making any new API calls.

    {
      "error": 
        "Your PixVerse account has pending error." 
        "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls."
    }
    
Model
{ // TypeScript, all fields are optional
    video_id: string
    image_id: string // When image template_id is used (template_type: 2)
    error: string
}
Examples
  • curl -H "Accept: application/json" \
         -H "Content-Type: application/json" \
         -H "Authorization: Bearer …" \
         -X POST "https://api.useapi.net/v2/pixverse/videos/create" \
         -d '{"prompt": "…"}'
    
  • const prompt = "text prompt";      
    const apiUrl = `https://api.useapi.net/v2/pixverse/videos/create`; 
    const token = "API token";
    const data = { 
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json' }
    };
    data.body = JSON.stringify({ 
      prompt
    });
    const response = await fetch(apiUrl, data);
    const result = await response.json();
    console.log("response", {response, result});
    
  • import requests
    prompt = "text prompt"      
    apiUrl = f"https://api.useapi.net/v2/pixverse/videos/create" 
    token = "API token"
    headers = {
        "Content-Type": "application/json", 
        "Authorization" : f"Bearer {token}"
    }
    body = {
        "prompt": f"{prompt}"
    }
    response = requests.post(apiUrl, headers=headers, json=body)
    print(response, response.json())
    
Try It