pixverse-v6-max
PixVerse V6 Max on reAPI — text to video and image to video from one still, 1–15 second clips at 360p to 1080p with optional native audio, billed per second.
PixVerse V6 Max, the Max tier of PixVerse V6, live on reAPI. One model id,
pixverse-v6-max, covers two jobs: text to video, and image to video from
one still with an optional prompt. Every clip is 1–15 seconds at 360p,
540p, 720p or 1080p, with optional native audio. Sending an image picks
image to video. 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-max",
"prompt": "A vintage red convertible drives along a coastal cliff road at golden hour, low tracking shot, engine hum and crashing waves. No text, no logos.",
"resolution": "720p",
"duration": 5,
"aspect_ratio": "16:9",
"audio": true
}'import requests
response = requests.post(
"https://reapi.ai/api/v1/videos/generations",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"model": "pixverse-v6-max",
"prompt": "A vintage red convertible drives along a coastal cliff road at golden hour, low tracking shot, engine hum and crashing waves. No text, no logos.",
"resolution": "720p",
"duration": 5,
"aspect_ratio": "16:9",
"audio": True,
},
timeout=60,
)
response.raise_for_status()
task_id = response.json()["id"]const response = 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-max',
prompt:
'A vintage red convertible drives along a coastal cliff road at golden hour, low tracking shot, engine hum and crashing waves. No text, no logos.',
resolution: '720p',
duration: 5,
aspect_ratio: '16:9',
audio: true,
}),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const { id: taskId } = await response.json();package main
import (
"encoding/json"
"fmt"
"net/http"
"strings"
"time"
)
func main() {
body := strings.NewReader(`{
"model": "pixverse-v6-max",
"prompt": "A vintage red convertible drives along a coastal cliff road at golden hour, low tracking shot, engine hum and crashing waves. No text, no logos.",
"resolution": "720p",
"duration": 5,
"aspect_ratio": "16:9",
"audio": true
}`)
req, err := http.NewRequest("POST", "https://reapi.ai/api/v1/videos/generations", body)
if err != nil { panic(err) }
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 60 * time.Second}
res, err := client.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
var task struct { ID string `json:"id"` }
if err := json.NewDecoder(res.Body).Decode(&task); err != nil { panic(err) }
fmt.Println(task.ID)
}Authentication
Every call needs a Bearer token. Generate keys at reapi.ai/settings/apikeys.
Authorization: Bearer YOUR_API_KEYEndpoint
POST /api/v1/videos/generations
GET /api/v1/tasks/{id}Submission is async. The POST returns a task id right away; poll the task
endpoint until status is completed or failed. Polling does not consume
credits.
Request body
| Field | Type | Default | Notes |
|---|---|---|---|
model | string | — | pixverse-v6-max. Required. |
prompt | string | — | Describe subject, place, camera move, light and sound. Text to video: required, up to 5,000 characters. With an image: optional, up to 2,048 characters. |
image_urls | string[] | — | Image to video: exactly 1 public HTTP(S) URL. JPG, PNG or WebP, up to 20 MB and 10,000 pixels on each side. Leave it out for text to video. |
resolution | string | 540p | 360p / 540p / 720p / 1080p. Sets the per-second rate. |
quality | string | — | Alias of resolution, same values. Used only when resolution is not sent; resolution wins when both are. |
duration | integer | 5 | 1–15 seconds. |
aspect_ratio | string | 16:9 | 16:9 / 9:16 / 4:3 / 3:4 / 1:1 / 2:3 / 3:2 / 21:9. Text to video only; with an image the clip follows the image's shape. |
audio | boolean | false | true generates native sound and bills at the audio rate. |
seed | integer | — | 0–2147483647. The same request and seed give similar results. |
There is no mode field, and no negative_prompt, watermark,
motion_mode or multi-clip field. First and last frames, reference images
and extend are PixVerse V6 features.
Checked by reAPI before anything is charged:
- every field is in the table above — unknown fields are refused, not ignored
image_urlsholds exactly one public HTTP(S) URL — base64 anddata:URIs are rejected- a request without an image has a
prompt; with an image the prompt is at most 2,048 characters resolution,aspect_ratio,durationandseedare in their ranges, and so isqualitywhen it is used (noresolution)- prompt lengths count characters, so an emoji is one character
The image's format, size and dimensions are checked by the model when the
task starts. A request that breaks one ends as a failed task with code 80007
and the exact reason, and is refunded in full.
Modes
| Mode | How to select it |
|---|---|
| Text to video | No image_urls. prompt is required; aspect_ratio sets the shape. |
| Image to video | One image in image_urls. The clip starts from it and keeps its shape; prompt is optional. |
Image to video
{
"model": "pixverse-v6-max",
"prompt": "The subject slowly turns toward the camera, soft natural light.",
"image_urls": ["https://example.com/start.png"],
"resolution": "1080p",
"duration": 5
}Troubleshooting
| Failure | What it means | What to do |
|---|---|---|
Synchronous 400 (code 20002) | No prompt and no image | Add a prompt for text to video, or one image. Nothing was charged |
Synchronous 400 (codes 20003 / 20005 / 20006) | A field is out of range, unknown, or not a public URL; more than one image | The message names the field. Nothing was charged |
Task fails with code 80007 | The model refused the input, for example an image it cannot read | The message names the reason. Fully refunded |
Task fails with code 80006 | The prompt or image was rejected by content review | Fully refunded. Revise the prompt or image |
402 on submit | Not enough credits for the reserve | Top up, or lower duration or resolution |
Task stays processing | Generation takes a minute or more, longer at higher resolutions | Keep polling; a task that can never finish is failed and refunded automatically |
No data: URIs. reAPI rejects base64 inputs platform-wide — every URL
field must be a public HTTP(S) URL. Upload to your own object storage and pass
the URL.
Response envelope
{
"id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
"model": "pixverse-v6-max",
"status": "completed",
"created_at": 1789689600,
"output": {
"video_urls": ["https://cdn.reapi.ai/media/tasks/.../0.mp4"]
},
"error": null
}Poll GET /api/v1/tasks/{id} (see the Tasks reference)
until status === "completed", then read output.video_urls. A failed task
carries error.code and error.message; see the
errors catalog.
Pricing
PixVerse V6 Max bills per second of video, at a rate set by the resolution and by whether audio is on:
credits = ceil(per_second_rate × duration × 1000) 1 credit = $0.001The resolution is resolution, else quality, else 540p; duration
defaults to 5. Text to video and image to video cost the same. The amount
reserved when the task is accepted is the amount charged, and failed tasks are
refunded in full.
Live per-second rates for every resolution, with and without audio, are on the model page.
Tips
- Describe subject, place, camera move and light; name the sounds you want
when
audiois on. - Draft at
360pfor a second or two, then render the final shot at1080pwith the same request andseed. - For vertical video, send
aspect_ratio: "9:16"with text to video, or a portrait image. - Add
No text, no logos.to keep invented marks out of the frame. - Need a transition between two frames, several references, or a longer continued shot? Use PixVerse V6.