muse-video
Muse Video on reAPI — Meta's video model. A prompt plus up to 9 reference images in, a clip of about 10 seconds at 720p with sound out, one flat price per clip.
Muse Video, the video model from Meta Superintelligence Labs, live on reAPI.
One model id, muse-video, makes a clip of about 10 seconds at 720p with
sound, from a prompt or from a prompt plus up to 9 reference images, in one
of seven aspect ratios. Every clip costs the same flat price. 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": "muse-video",
"prompt": "A golden retriever shakes off water on a sunny dock, droplets flying in slow motion, the camera pushing in gently, splashes and a happy bark. No text.",
"aspect_ratio": "16:9"
}'import requests
response = requests.post(
"https://reapi.ai/api/v1/videos/generations",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"model": "muse-video",
"prompt": "A golden retriever shakes off water on a sunny dock, droplets flying in slow motion, the camera pushing in gently, splashes and a happy bark. No text.",
"aspect_ratio": "16:9",
},
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: 'muse-video',
prompt:
'A golden retriever shakes off water on a sunny dock, droplets flying in slow motion, the camera pushing in gently, splashes and a happy bark. No text.',
aspect_ratio: '16:9',
}),
});
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": "muse-video",
"prompt": "A golden retriever shakes off water on a sunny dock, droplets flying in slow motion, the camera pushing in gently, splashes and a happy bark. No text.",
"aspect_ratio": "16:9"
}`)
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 | — | muse-video. Required. |
prompt | string | — | Required, also with references. Must not be empty after trimming. Describe subject, action, camera move and light, and name the sounds you want. |
image_urls | string[] | — | 0–9 public HTTP(S) image URLs used as references. PNG, JPEG or WebP, 11 MB in total. Leave it out for text to video. |
aspect_ratio | string | auto | 1:1 / 16:9 / 9:16 / 4:3 / 3:4 / 3:2 / 2:3. Leave it out for auto: 16:9 for text only, the references' shape otherwise. Do not send "auto". |
size | string | — | Alias of aspect_ratio: one of the ratios above, or auto. aspect_ratio wins when both are sent. |
duration | integer or string | 10 | Only 10, "10" or "10s". The clip runs about 10 seconds. |
resolution | string | 720p | Only 720p. |
audio | boolean | true | Only true; every clip has sound. false is refused. |
n | integer | 1 | Only 1. Each request returns one clip. |
There are no first or last frame, reference video, reference audio, extend, seed or negative prompt fields. Fields outside this table are not refused: they are passed through to the model, which currently ignores them.
Checked by reAPI before anything is charged:
promptis present and not blankimage_urlsholds at most 9 public HTTP(S) URLs — base64 anddata:URIs are rejectedaspect_ratio,size,duration,resolution,audioandnhold one of their listed values
The reference files' format and total size are checked when the task starts. A request that breaks one ends as a failed task with the exact reason, and is refunded in full.
Modes
| Mode | How to select it |
|---|---|
| Text to video | No image_urls. Without aspect_ratio the clip is 16:9. |
| With references | 1–9 images in image_urls. Without aspect_ratio the clip follows their shape. |
With references
{
"model": "muse-video",
"prompt": "The fox slowly lifts its head, wind moving through its fur, the camera pushing in gently, soft forest ambience.",
"image_urls": ["https://example.com/fox.png"]
}The clip stays close to the references, but its first frame is not an exact copy of an image.
Troubleshooting
| Failure | What it means | What to do |
|---|---|---|
Synchronous 400 (code 20002) | No prompt | Add a prompt. Nothing was charged |
Synchronous 400 (codes 20003 / 20005) | A blank prompt, more than 9 references, a non-URL reference, or a value outside a field's list (for example audio: false) | The message names the field. Nothing was charged |
Task fails with code 80007 | The model refused the input, for example references over 11 MB in total | Fully refunded. Fix the input and send it again |
Task fails with code 80006 | The prompt or an image was rejected by content review | Fully refunded. Revise the prompt or images |
402 on submit | Not enough credits for the reserve | Top up |
Task stays processing | Generation usually takes a few minutes | 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": "muse-video",
"status": "completed",
"created_at": 1789689600,
"output": {
"video_urls": ["https://cdn.reapi.ai/media/tasks/018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e/0.mp4"]
},
"error": null
}Poll GET /api/v1/tasks/{id} (see the Tasks reference)
until status === "completed", then read output.video_urls. The clip is an
MP4 with an audio track. A failed task carries error.code and
error.message; see the errors catalog.
Pricing
Muse Video bills one flat price per clip:
credits = ceil(per_clip_rate × 1 × 1000) 1 credit = $0.001The price is not multiplied by seconds. Text-only and reference requests, and every aspect ratio, cost the same. The amount reserved when the task is accepted is the amount charged, and failed tasks are refunded in full.
The live per-clip rate is on the model page.
Tips
- Describe subject, action, camera move and light, and name the sounds; the audio is generated together with the picture.
- Make a still with Muse Image, then pass its URL here to set it in motion.
- For vertical video, send
aspect_ratio: "9:16", or a portrait reference. - Add
No text.to keep invented captions out. - Need a longer clip, a higher resolution, or video and audio references? Use Seedance 2.0.