MuAPI
MuAPI serves 126 video models on LLM API from ByteDance, Kuaishou, Alibaba and 14 other labs.
Models and prices
Prices when MuAPI serves the request.
No MuAPI model matches your search.
Video 126
Price per second of video; a range covers its resolutions
Send requests to MuAPI
Use the model ID as it is: video, audio and embedding requests take no provider prefix.
Example: Veo 3.1 Fast Text-to-Video
POST /v1/videosVideo jobs run in the background: create one, poll it, then download the file.Videos docs
import os
import time
from openai import OpenAI
client = OpenAI(
base_url="https://api.llmapi.ai/v1",
api_key=os.environ["LLMAPI_KEY"],
)
video = client.videos.create(
model="veo3.1-fast-t2v",
prompt="A paper boat drifting down a rainy street",
)
while video.status in ("queued", "in_progress"):
time.sleep(10)
video = client.videos.retrieve(video.id)
if video.status == "failed":
raise RuntimeError(video.error)
client.videos.download_content(video.id).write_to_file("video.mp4")import fs from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.llmapi.ai/v1",
apiKey: process.env.LLMAPI_KEY,
});
let video = await client.videos.create({
model: "veo3.1-fast-t2v",
prompt: "A paper boat drifting down a rainy street",
});
while (video.status === "queued" || video.status === "in_progress") {
await new Promise((r) => setTimeout(r, 10_000));
video = await client.videos.retrieve(video.id);
}
if (video.status === "failed") throw new Error(video.error?.message);
const content = await client.videos.downloadContent(video.id);
fs.writeFileSync("video.mp4", Buffer.from(await content.arrayBuffer()));curl https://api.llmapi.ai/v1/videos \
-H "Authorization: Bearer $LLMAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo3.1-fast-t2v",
"prompt": "A paper boat drifting down a rainy street"
}'
# Poll GET https://api.llmapi.ai/v1/videos/{id} until "completed",
# then download GET https://api.llmapi.ai/v1/videos/{id}/contentPrices synced October 27, 2026.