pixverse-v6
Pixverse v6 — async video generation on one endpoint that auto-routes text-to-video, image-to-video, first/last-frame transitions, multi-reference fusion, and video extend. One model id; mode is implicit in the fields you send.
Pixverse v6 — async video generation. One model id (pixverse-v6) and
one endpoint cover five modes: text-to-video, image-to-video,
first/last-frame transition, multi-reference fusion, and video
extend. Mode is implicit — the fields you send pick it. 1–15 second
outputs at 360p / 540p / 720p / 1080p, optional generated audio. See current
pricing on the model page.
Quick example
curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "pixverse-v6",
"prompt": "A neon-lit Tokyo alley at night, light rain, anamorphic flare",
"size": "21:9",
"resolution": "720p",
"duration": 8
}'import requests
resp = requests.post(
"https://reapi.ai/api/v1/videos/generations",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"model": "pixverse-v6",
"prompt": "A neon-lit Tokyo alley at night, light rain, anamorphic flare",
"size": "21:9",
"resolution": "720p",
"duration": 8,
},
timeout=30,
)
print(resp.json())const r = await fetch("https://reapi.ai/api/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "pixverse-v6",
prompt: "A neon-lit Tokyo alley at night, light rain, anamorphic flare",
size: "21:9",
resolution: "720p",
duration: 8,
}),
});
console.log(await r.json());package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]any{
"model": "pixverse-v6",
"prompt": "A neon-lit Tokyo alley at night, light rain, anamorphic flare",
"size": "21:9",
"resolution": "720p",
"duration": 8,
})
req, _ := http.NewRequest("POST",
"https://reapi.ai/api/v1/videos/generations", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}Submit response
{
"id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
"model": "pixverse-v6",
"status": "processing",
"created_at": 1735000000
}Poll GET /api/v1/tasks/{id} (see the Tasks reference) until
status === "completed". The completed payload's output.video_urls
holds the generated MP4 URL, valid for 7 days.
Authentication
Every call needs a Bearer token. Generate keys at reapi.ai/settings/apikeys.
Authorization: Bearer YOUR_API_KEYKeys carry the active workspace's billing scope — there is no separate project header.
Endpoint
POST /api/v1/videos/generations
GET /api/v1/tasks/{id}Submission is async. The POST returns immediately with a task_id; the
task endpoint returns the same envelope until completion. Polling does
not consume credits.
Mode routing
pixverse-v6 picks its mode from which fields you send — there is no
mode parameter. Matching is by priority; the first satisfied condition wins:
| Send | Mode | What it does |
|---|---|---|
prompt only | Text-to-video | Generate from text. size applies. |
image_urls | Image-to-video | Animate from a single starting frame (first used). |
first_frame_image + last_frame_image | First/Last-frame | Interpolate a transition between two frames. |
img_references | Multi-reference | Fuse 1–7 reference images into one clip. size applies. |
extend_from_task_id | Video extend | Continue a completed pixverse-v6 clip. |
Field rules.
promptis required in every mode.first_frame_imageandlast_frame_imagemust be sent together.img_referencesaccepts 1 to 7 entries.- First/Last-frame mode accepts only 5 or 8 second
duration. sizeis honored only in text-to-video and multi-reference fusion.
Request body
model — required
string. Always "pixverse-v6".
prompt — string, required
Up to 5,000 characters. Required in every mode. Empty / whitespace-only prompts are treated as missing.
resolution — string, default "540p"
One of 360p / 540p / 720p / 1080p. Drives pricing.
duration — integer, default 5
Output length in seconds. Any integer in [1, 15]. First/Last-frame mode
accepts only 5 or 8. Drives pricing linearly:
ceil(per_second_usd × duration × 1000) credits (1 credit = $0.001).
size — string, default "16:9"
Output aspect ratio. Honored in text-to-video and multi-reference fusion only (other modes derive the ratio from the source media). One of:
| Value | Shape |
|---|---|
16:9 | Landscape |
4:3 | Landscape 4:3 |
1:1 | Square |
3:4 | Portrait 3:4 |
9:16 | Portrait |
2:3 | Portrait 2:3 |
3:2 | Landscape 3:2 |
21:9 | Cinematic wide |
seed — integer, default 0
Reproducibility hint. Range [0, 2147483647]. Same prompt plus seed returns
a similar (not bit-for-bit identical) result.
negative_prompt — string
Up to 2,048 characters. Describes content to keep out of the frame.
audio — boolean, default false
When true, the model synthesizes a soundtrack alongside the video. Audio
raises the per-second rate (see Pricing). Default false is silent.
watermark — boolean, default false
When true, adds a watermark to the bottom-right corner.
motion_mode — string
pixverse-v6 supports only "normal". Other values are rejected upstream.
generate_multi_clip_switch — boolean, default false
When true, generates a multi-segment continuous video. Supported in
text-to-video and image-to-video only.
image_urls — string[] (image-to-video)
Public HTTP(S) URL array. The model uses the first entry as the starting frame.
first_frame_image / last_frame_image — string (first/last-frame)
Public HTTP(S) URLs. Must be sent as a pair; the model interpolates motion from the first frame to the last over a 5 or 8 second clip.
img_references — string[] (multi-reference fusion)
1 to 7 public HTTP(S) URLs. The model fuses subjects from each reference into one clip.
extend_from_task_id — string (video extend)
The reAPI task id (task_...) of one of your own completed pixverse-v6
videos. Do not pass the upstream provider task id — reAPI resolves that
internally before sending the extend request. The model continues the scene
from where that clip ended.
No data: URIs. reAPI rejects base64 inputs platform-wide — every URL
field on this endpoint must be a public HTTP(S) URL. Upload to your own object
storage (S3, R2, OSS, …) and pass the URL.
Response envelope
Submit and poll share the same shape — only status and output fill in
over time.
{
"id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
"model": "pixverse-v6",
"status": "completed",
"created_at": 1735000000,
"output": {
"video_urls": ["https://cdn.reapi.ai/media/tasks/018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e/0.mp4"]
},
"error": null
}| Field | Type | Notes |
|---|---|---|
id | string | Task identifier — keep it for polling and audit |
model | string | Echo of the submitted model |
status | string | processing / completed / failed |
created_at | integer | Submission unix timestamp |
output | object | null | null until completion. output.video_urls holds MP4s |
error | object | null | Populated on failed — { code, message } |
output.video_urls URLs are valid for 7 days. Re-host to your own
storage if you need them longer. To extend a clip later, keep the task id —
pass it as extend_from_task_id.
Validation errors
All cases below return HTTP 400. Pattern-match on code, not message —
message strings carry request-specific context (field names, observed values)
and are not a stable contract.
| Trigger | Code | Message (illustrative) |
|---|---|---|
prompt missing / empty | 20002 | prompt is required |
prompt longer than 5,000 chars | 20007 | prompt exceeds 5000 characters (got N) |
Unknown resolution | 20003 | invalid resolution "X" (allowed: 360p / 540p / 720p / 1080p) |
duration outside [1, 15] | 20003 | duration must be 1-15 seconds, got N |
duration not 5/8 in first/last-frame mode | 20003 | first-last-frame transition supports only 5 or 8 second duration |
Only one of first_frame_image / last_frame_image | 20003 | first_frame_image and last_frame_image must be provided together |
img_references length > 7 | 20003 | img_references supports at most 7 images, got N |
motion_mode not normal | 20003 | motion_mode must be "normal" |
A URL field carrying a data: URI or non-http(s) | 20003 | image_urls entries must be public http(s) URLs |
The full envelope is { "error": { "code", "message", "request_id" } } —
see Errors catalog for the wire format and request_id
correlation tips.
Recipes
Text-to-video — minimum request
{
"model": "pixverse-v6",
"prompt": "A corgi running through a sunflower field at golden hour"
}Text-to-video — full parameters
{
"model": "pixverse-v6",
"prompt": "A neon-lit Tokyo alley at night, light rain, anamorphic lens flare",
"size": "21:9",
"resolution": "720p",
"duration": 8,
"seed": 42,
"audio": true
}Image-to-video — animate a single frame
{
"model": "pixverse-v6",
"prompt": "Camera slowly zooms in, gentle wind moves the leaves",
"image_urls": ["https://your-cdn.com/first_frame.jpg"],
"resolution": "540p",
"duration": 5
}First/Last-frame transition
{
"model": "pixverse-v6",
"prompt": "Transform smoothly from a puppy to a cat",
"first_frame_image": "https://your-cdn.com/puppy.jpg",
"last_frame_image": "https://your-cdn.com/cat.jpg",
"resolution": "540p",
"duration": 5
}Multi-reference fusion
{
"model": "pixverse-v6",
"prompt": "A girl wearing the outfit from image 2, holding the cat from image 3",
"img_references": [
"https://your-cdn.com/character.jpg",
"https://your-cdn.com/outfit.jpg",
"https://your-cdn.com/cat.jpg"
],
"size": "9:16",
"resolution": "720p",
"duration": 5
}Video extend
{
"model": "pixverse-v6",
"prompt": "The character now walks into a forest",
"extend_from_task_id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
"resolution": "540p",
"duration": 5
}Choosing a mode
| Need | Send |
|---|---|
| Generate from text | prompt only — size applies |
| Animate a still | prompt + image_urls |
| Smooth transition between two frames | first_frame_image + last_frame_image (duration 5/8) |
| Combine subjects from several images | prompt + img_references (1–7) |
| Continue an existing clip | prompt + extend_from_task_id |
| Cut spend | Drop resolution, shorten duration, leave audio off |
Polling pattern
The task endpoint behaves identically to other video tasks — the completed
output carries video_urls. A pragmatic schedule:
0–5 minutes: poll every 5s
5 min – 1 h: back off gradually toward 1 min
≥ 1 h: cap at 3 min between pollsA typical task completes in a few minutes.
Pricing
Per-second × resolution. Turning audio on raises the per-second rate at every tier; every other parameter is free. See current rates on the Pixverse v6 model page.
Bill formula (1 credit = $0.001):
credits = ceil(per_second_usd × duration × 1000)Failed jobs refund automatically.
Tips
- Prompt motion, not just scene. "Slow push-in, warm tones, shallow depth of field" outperforms a pure noun-list of what's on screen.
- Keep references on-topic. Multi-reference fusion works best when each image contributes a distinct, clearly-framed subject (a face, an outfit, a prop) rather than overlapping whole scenes.
- Two frames need to make sense as endpoints. First/Last interpolation is smoothest when the two frames share enough subject and composition.
- Chain extends one beat at a time. Build a longer sequence by extending the latest clip's task id repeatedly instead of asking for one long shot.
- Audio is opt-in here. Leave
audiooff unless you need a soundtrack — it raises the per-second rate.