EasyRouterEasyRouter
User GuideAPI DocsConnect Agent Tools
AI Model APIVideos

PixVerse Video Generation

Use EasyRouter's unified API to call all PixVerse video models (C1 / V6 / V5.6 / V5.5 / V5 / V4.5 / V4 / V3.5) with support for text-to-video and image-to-video.

PixVerse is a high-quality AI video generation platform. EasyRouter integrates with PixVerse OpenAPI v2 and exposes it via the OpenAI-compatible /v1/videos endpoint. All 8 PixVerse model versions are supported for text-to-video and image-to-video.

PixVerse uses an async task-based API: submit a request, receive a task_id, poll for status, then download the video via the proxy endpoint.


1. Supported Models

In the model field, always use the PixVerse/<version> form, e.g. PixVerse/v5.6.

ModelHighlightsDurationAudio
PixVerse/c1Flagship, per-second billing, most flexible1~15s (per-second)
PixVerse/v6Latest generation, per-second billing1~15s (per-second)
PixVerse/v5.6Single-clip mode, stable quality5 / 8 / 10s
PixVerse/v5.5Supports Multi-Clip stitching5 / 8 / 10s
PixVerse/v5Generation 5 baseline5 / 8s
PixVerse/v4.5Generation 4.5, supports Fast Motion5 / 8s
PixVerse/v4Generation 4, supports Fast Motion5 / 8s
PixVerse/v3.5Generation 3.5, supports Fast Motion5 / 8s

The PixVerse/ prefix is case-sensitive. Use exactly PixVerse/v5.6. The version suffix (v5.6, c1) is case-insensitive but lowercase is recommended.


2. Common Endpoints

All PixVerse models use the OpenAI-compatible /v1/videos endpoint.

2.1 Submit Task

POST /v1/videos

Request Headers

HeaderRequiredDescription
AuthorizationBearer sk-YourApiKey
Content-Typeapplication/json

Request Body Fields

FieldTypeRequiredDescription
modelstringPixVerse model name (see table above)
promptstringText prompt, up to 2048 characters
imagestringReference image for image-to-video (URL or base64 data URI). Auto-switches to image-to-video mode
imagesstring[]Array variant of image (use one or the other)
durationintDuration in seconds, default 5. Supported values depend on model
resolutionstringResolution tier (same as size; recommended, aligns with other models): 720P / 1080P
sizestringResolution: 360p, 540p, 720p, 1080p, or pixel form like 1920x1080. resolution takes precedence when both are provided
metadataobjectContainer for PixVerse-specific parameters (see Section 3)

Response

{
  "id": "task_xxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxx",
  "object": "video",
  "model": "PixVerse/v5.6",
  "status": "queued",
  "progress": 0,
  "created_at": 1730000000
}

The id / task_id is a public ID generated by EasyRouter (prefixed with task_). Use this value for subsequent queries — it's not the same as PixVerse's upstream video_id.

2.2 Query Task Status

GET /v1/videos/{task_id}

Response (in progress)

{
  "id": "task_xxxxxxxxxxxxx",
  "status": "in_progress",
  "progress": 30,
  "created_at": 1730000000
}

Response (completed)

{
  "id": "task_xxxxxxxxxxxxx",
  "status": "completed",
  "progress": 100,
  "created_at": 1730000000,
  "completed_at": 1730000060,
  "size": "1280x720",
  "metadata": {
    "url": "https://media.pixverse.ai/xxx.mp4"
  }
}

Status Enum

StatusDescription
queuedSubmitted, queued
in_progressGenerating
completedFinished, metadata.url is the video URL
failedFailed, see error.message

2.3 Download Video Content

GET /v1/videos/{task_id}/content

Returns raw video bytes (Content-Type: video/mp4). EasyRouter proxies the PixVerse temporary URL so your client never sees the upstream URL, and you don't have to worry about URL expiration.

Strongly recommended: use the /content proxy endpoint to download videos, not the raw metadata.url. The raw URL is a temporary link (usually valid for a few hours); the proxy endpoint never expires as long as the task record exists.


3. PixVerse-Specific Parameters (metadata)

All PixVerse-specific fields are passed via the metadata object in the request body.

3.1 Common Fields

FieldTypeApplies toDescription
qualitystringAllResolution (overrides top-level size): 360p / 540p / 720p / 1080p
aspect_ratiostringText-to-videoAspect ratio: 16:9, 9:16, 1:1, 4:3, 3:4, 2:3, 3:2, 21:9
motion_modestringV4.5 / V4 / V3.5normal (default) or fast (×2 pricing, only 5s at 360p/540p/720p)
camera_movementstringAllCamera movement: zoom_in, zoom_out, pan_left, pan_right, etc.
seedintAllRandom seed, 0 ~ 2147483647
template_idintAllTemplate ID
stylestringAllStyle, e.g., anime
water_markboolAllAdd watermark
negative_promptstringAllNegative prompt

motion_mode: fast has strict limits: only V4.5 / V4 / V3.5 models, at 5s duration, and at 360p/540p/720p resolution. Illegal combinations (e.g., 1080p + fast or 8s + fast) will return a 400 error with no charge.

3.2 Audio Generation (C1 / V6 / V5.6 / V5.5)

FieldTypeApplies toDescription
generate_audio_switchboolC1 / V6 / V5.6 / V5.5Switch to "with audio" billing tier (upstream synthesizes audio alongside video)

V5 / V4.5 / V4 / V3.5 do not support audio generation. Passing generate_audio_switch: true on these models returns a 400 error.

3.3 Image-to-Video Advanced Fields

PixVerse image-to-video requires uploading an image first to get an img_id. EasyRouter automates the upload step:

  • Pass image: "https://..." or image: "data:image/png;base64,..." in the request body
  • EasyRouter uploads to PixVerse and forwards the img_id automatically

If you already have an img_id (advanced use case), you can pass it directly:

FieldTypeDescription
img_idintPre-uploaded image ID, takes priority over auto-upload

4. Full Examples

# Step 1: Submit the task
curl -X POST https://easyrouter.io/v1/videos \
  -H "Authorization: Bearer sk-YourApiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "PixVerse/v5.6",
    "prompt": "A cat walking on the moon with a starry background",
    "duration": 5,
    "size": "720p",
    "metadata": {
      "aspect_ratio": "16:9",
      "seed": 42
    }
  }'

# Response:
# {
#   "id": "task_abc123...",
#   "task_id": "task_abc123...",
#   "status": "queued",
#   ...
# }

# Step 2: Poll for status (every 3~5 seconds is recommended)
curl https://easyrouter.io/v1/videos/task_abc123... \
  -H "Authorization: Bearer sk-YourApiKey"

# Step 3: Once status is "completed", download the video
curl https://easyrouter.io/v1/videos/task_abc123.../content \
  -H "Authorization: Bearer sk-YourApiKey" \
  -o cat_on_moon.mp4
curl -X POST https://easyrouter.io/v1/videos \
  -H "Authorization: Bearer sk-YourApiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "PixVerse/v5.6",
    "prompt": "Make the cat jump",
    "image": "https://example.com/cat.jpg",
    "duration": 5,
    "size": "720p"
  }'
# Encode image as a data URI
IMG_BASE64=$(base64 -i cat.jpg)

curl -X POST https://easyrouter.io/v1/videos \
  -H "Authorization: Bearer sk-YourApiKey" \
  -H "Content-Type: application/json" \
  -d "{
    \"model\": \"PixVerse/v5.6\",
    \"prompt\": \"Make the cat jump\",
    \"image\": \"data:image/jpeg;base64,${IMG_BASE64}\",
    \"duration\": 5,
    \"size\": \"720p\"
  }"
# C1 / 720p / 5s with upstream-synthesized audio
curl -X POST https://easyrouter.io/v1/videos \
  -H "Authorization: Bearer sk-YourApiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "PixVerse/c1",
    "prompt": "Ocean waves crashing on the shore, seagulls circling above",
    "duration": 5,
    "size": "720p",
    "metadata": {
      "generate_audio_switch": true,
      "aspect_ratio": "16:9"
    }
  }'

5. Error Handling

5.1 HTTP 400 Invalid Parameters (intercepted pre-submit, no charge)

EasyRouter strictly validates parameter combinations before forwarding upstream. The following illegal combinations return 400 Bad Request:

ScenarioError message
V5 / V4.5 / V4 / V3.5 with generate_audio_switch: truemodel "v5" does not support audio generation
V4.5 / V4 / V3.5 fast mode + 1080pV4/V4.5/V3.5 fast motion only supports 360p/540p/720p at 5s
V4.5 / V4 / V3.5 fast mode + 8ssame as above
V5.6 / V5.5 / V5 with unsupported quality × durationcombination 1080p / 10s not supported
Unknown model nameunknown model: "v999"

5.2 HTTP 401 / 403 Auth Errors

  • 401 Unauthorized: API Key invalid or expired
  • 403 Forbidden: API Key not authorized for this model (check token model whitelist)

5.3 HTTP 402 Insufficient Balance

Returns insufficient user quota. Please top up in the EasyRouter console.

5.4 Task failed Status

Task was accepted but generation failed. Common reasons:

ReasonDescriptionSuggestion
content moderation failedContent rejected by moderationRevise prompt to avoid sensitive content
generation failedUpstream generation failedRetry, or lower resolution/duration
upstream timeoutUpstream timeoutRetry later

When a task ends with failed, EasyRouter automatically refunds the charge to your account. Refund records are visible in the console logs page.


6. FAQ