curl --request POST \
--url https://api.acedata.cloud/maestro/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "用 20 秒讲清楚什么是向量数据库,适合零基础观众,结尾给一句记忆点"
}
'import requests
url = "https://api.acedata.cloud/maestro/videos"
payload = { "prompt": "用 20 秒讲清楚什么是向量数据库,适合零基础观众,结尾给一句记忆点" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({prompt: '用 20 秒讲清楚什么是向量数据库,适合零基础观众,结尾给一句记忆点'})
};
fetch('https://api.acedata.cloud/maestro/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"task_id": "35c6159f-f94e-4b39-82b8-a3d77009bc1d",
"trace_id": "trace_7f8c2b1a"
}{
"detail": "missing field: prompt"
}{
"error": {
"code": "invalid_token",
"message": "The token is invalid."
},
"trace_id": "trace_7f8c2b1a"
}{
"error": {
"code": "used_up",
"message": "The available balance is insufficient for this request."
},
"trace_id": "trace_7f8c2b1a"
}{
"error": {
"code": "too_many_requests",
"message": "Too many requests. Try again later."
},
"trace_id": "trace_7f8c2b1a"
}{
"error": {
"code": "api_error",
"message": "The service is temporarily unavailable."
},
"trace_id": "trace_7f8c2b1a"
}Maestro Videos
Maestro is an agent-native video producer: describe the video you want in prompt (optionally attaching reference images/videos/audio via file_urls) and a headless creative director plans, generates the assets (images, voiceover, music, clips), composes and renders a finished, captioned video. This is an async job — it returns a task_id immediately; poll POST /maestro/tasks for the result, or supply callback_url. Use action: remix / edit / extend with ref_task_id to iterate on a previous video.
curl --request POST \
--url https://api.acedata.cloud/maestro/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "用 20 秒讲清楚什么是向量数据库,适合零基础观众,结尾给一句记忆点"
}
'import requests
url = "https://api.acedata.cloud/maestro/videos"
payload = { "prompt": "用 20 秒讲清楚什么是向量数据库,适合零基础观众,结尾给一句记忆点" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({prompt: '用 20 秒讲清楚什么是向量数据库,适合零基础观众,结尾给一句记忆点'})
};
fetch('https://api.acedata.cloud/maestro/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"task_id": "35c6159f-f94e-4b39-82b8-a3d77009bc1d",
"trace_id": "trace_7f8c2b1a"
}{
"detail": "missing field: prompt"
}{
"error": {
"code": "invalid_token",
"message": "The token is invalid."
},
"trace_id": "trace_7f8c2b1a"
}{
"error": {
"code": "used_up",
"message": "The available balance is insufficient for this request."
},
"trace_id": "trace_7f8c2b1a"
}{
"error": {
"code": "too_many_requests",
"message": "Too many requests. Try again later."
},
"trace_id": "trace_7f8c2b1a"
}{
"error": {
"code": "api_error",
"message": "The service is temporarily unavailable."
},
"trace_id": "trace_7f8c2b1a"
}Authorizations
API token from https://platform.acedata.cloud
Body
Natural-language brief describing the video to produce (the topic, what to show, tone, audience). The agent decides the script, visuals, voiceover and edit.
"用 20 秒讲清楚什么是向量数据库,适合零基础观众,结尾给一句记忆点"
Production action. generate creates a new video; remix/edit/extend require ref_task_id.
generate, remix, edit, extend Required when action is remix / edit / extend: the task_id of the previous video to start from.
Optional reference media (image / video / audio URLs) the agent can use — e.g. a product shot or logo to feature, footage to caption.
20Output languages, up to 4. The first is primary; each additional delivered language is billed +6 credits.
4Required output aspect ratio. All videos render at 1080p/30fps.
9:16, 16:9, 1:1 Target video length in seconds, from 5 to 300. Successful jobs are billed by actual delivered duration, never above the requested duration.
5 <= x <= 300Production route: auto, narrated, captions, avatar, or drama. captions requires source video in file_urls; avatar requires a portrait. avatar bills at 1.15× and drama at 1.35×.
auto, narrated, captions, avatar, drama Optional visual-style preset — expressed through typography, palette, motion, image treatment and pacing. Orthogonal to scenario (it does NOT change routing). auto (default) lets the director pick; every other value adopts a real named look: cinematic = dark film-noir (black + blood-red, Oswald); glass = Apple / iOS-26 frosted liquid glass; luxury = timeless near-black + indigo, huge whitespace; swiss = precise grid + electric blue + oversized numerals; modern = clean light SaaS; editorial = cream magazine + serif; warm = intimate cream + amber; vibrant = festive folk colour; neon = electric neon glow; mono = grayscale, type-led; pastel = soft candy pastels; bold = huge poster type; industrial = raw glitch + rust; futuristic = particle glow. A freeform string is also accepted as a soft hint.
auto, cinematic, glass, luxury, swiss, modern, editorial, warm, vibrant, neon, mono, pastel, bold, industrial, futuristic, retro Optional narration voice — the timbre of the voiceover, independent of language. auto (default) lets the director pick a fitting voice. Every preset is cross-lingual: the same voice speaks whatever language(s) you set in langs, so choose purely by character — warm-female, bright-female, anchor-female, clean-female, calm-male, deep-male, documentary-male, energetic-male, storyteller-male. Advanced: a raw 32-character Fish reference_id is also accepted. For drama / avatar this sets the primary / narrator timbre; distinct characters may still get their own.
auto, warm-female, bright-female, anchor-female, clean-female, calm-male, deep-male, documentary-male, energetic-male, storyteller-male Optional. Fired with the result when the task reaches a terminal state (succeeded / failed).
Was this page helpful?

