rreAPI Docs
rreAPI Docs
HomeWelcome

Image

nano-banana-2-litemidjourney-v8flux-2z-imageqwen-image-2midjourney-v7wan-2-7-imagegpt-image-2gpt-image-2-officialgemini-2.5-flash-image-previewgemini-3-pro-image-previewgemini-3.1-flash-image-previewSeedream 5.0 Prodoubao-seedream-5-0-liteimagen-4-0

Audio

Mureka V9 Song APIVocal Remover APIMusic Extractor APIVoice Cleaner APIMultistem Splitter APIVoice Changer API

Video

topaz-video-upscalerkling-3-0-turbokling-3-0music-video-1-0wan-2-7-videokling-motion-controlpixverse-v6Seedance 2.5doubao-seedance-2.0seedance-2-0-minihappyhorse-1-1happyhorse-1.0happyhorse-1.0-officialviduq3grok-imagine-video-1.5-betagrok-imagine-video-1.5-officialgrok-imagine-1.0-videoVeo 3.1gemini-omni

Chat

claude-fable-5minimax-m3deepseek-v4gpt-5.5gpt-5.4claude-opus-4-8claude-opus-4-7claude-sonnet-4-6

Text

ai-essay-writerhumanizeai-text-detector

Tools

enhance-video-1.0
X (Twitter)

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_KEY

Keys 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:

SendModeWhat it does
prompt onlyText-to-videoGenerate from text. size applies.
image_urlsImage-to-videoAnimate from a single starting frame (first used).
first_frame_image + last_frame_imageFirst/Last-frameInterpolate a transition between two frames.
img_referencesMulti-referenceFuse 1–7 reference images into one clip. size applies.
extend_from_task_idVideo extendContinue a completed pixverse-v6 clip.

Field rules.

  • prompt is required in every mode.
  • first_frame_image and last_frame_image must be sent together.
  • img_references accepts 1 to 7 entries.
  • First/Last-frame mode accepts only 5 or 8 second duration.
  • size is 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:

ValueShape
16:9Landscape
4:3Landscape 4:3
1:1Square
3:4Portrait 3:4
9:16Portrait
2:3Portrait 2:3
3:2Landscape 3:2
21:9Cinematic 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
}
FieldTypeNotes
idstringTask identifier — keep it for polling and audit
modelstringEcho of the submitted model
statusstringprocessing / completed / failed
created_atintegerSubmission unix timestamp
outputobject | nullnull until completion. output.video_urls holds MP4s
errorobject | nullPopulated 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.

TriggerCodeMessage (illustrative)
prompt missing / empty20002prompt is required
prompt longer than 5,000 chars20007prompt exceeds 5000 characters (got N)
Unknown resolution20003invalid resolution "X" (allowed: 360p / 540p / 720p / 1080p)
duration outside [1, 15]20003duration must be 1-15 seconds, got N
duration not 5/8 in first/last-frame mode20003first-last-frame transition supports only 5 or 8 second duration
Only one of first_frame_image / last_frame_image20003first_frame_image and last_frame_image must be provided together
img_references length > 720003img_references supports at most 7 images, got N
motion_mode not normal20003motion_mode must be "normal"
A URL field carrying a data: URI or non-http(s)20003image_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

NeedSend
Generate from textprompt only — size applies
Animate a stillprompt + image_urls
Smooth transition between two framesfirst_frame_image + last_frame_image (duration 5/8)
Combine subjects from several imagesprompt + img_references (1–7)
Continue an existing clipprompt + extend_from_task_id
Cut spendDrop 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 polls

A 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 audio off unless you need a soundtrack — it raises the per-second rate.

Related

  • Errors catalog
  • Authentication
  • Quickstart

Table of Contents

Quick example
Submit response
Authentication
Endpoint
Mode routing
Request body
model — required
prompt — string, required
resolution — string, default "540p"
duration — integer, default 5
size — string, default "16:9"
seed — integer, default 0
negative_prompt — string
audio — boolean, default false
watermark — boolean, default false
motion_mode — string
generate_multi_clip_switch — boolean, default false
image_urls — string[] (image-to-video)
first_frame_image / last_frame_image — string (first/last-frame)
img_references — string[] (multi-reference fusion)
extend_from_task_id — string (video extend)
Response envelope
Validation errors
Recipes
Text-to-video — minimum request
Text-to-video — full parameters
Image-to-video — animate a single frame
First/Last-frame transition
Multi-reference fusion
Video extend
Choosing a mode
Polling pattern
Pricing
Tips
Related