veo-3.12 provider routesCinematic text/image-to-video, 720p–1080p, optional audio.
Multi-turn dialogue, system prompts.
SSE chunks for incremental output.
Structured arguments via JSON schemas.
Pass images alongside the prompt.
Text and image to short video, async.
Coming soon.
Same canonical model, separate upstream routes. Use the slug from the route you want to call.
This example calls the selected Google AI Studio route with veo-3.1.
// Start a generation
const start = await fetch('https://api.miavo.xyz/v1/videos/generations', {
method: 'POST',
headers: {
authorization: `Bearer ${process.env.MACAW_API_KEY}`,
'content-type': 'application/json',
},
body: JSON.stringify({
model: 'veo-3.1',
prompt: 'A close-up of raindrops on a window, soft focus, slow motion.',
aspect_ratio: '16:9',
duration_seconds: 8,
}),
}).then(r => r.json());
// Poll until done — usually 1–3 minutes
let task = start;
while (task.status === 'pending' || task.status === 'running') {
await new Promise(r => setTimeout(r, 5000));
task = await fetch(`https://api.miavo.xyz/v1/videos/generations/${start.id}`, {
headers: { authorization: `Bearer ${process.env.MACAW_API_KEY}` },
}).then(r => r.json());
}
if (task.status === 'succeeded') {
// Download the file
const video = await fetch(`https://api.miavo.xyz${task.video_url}`, {
headers: { authorization: `Bearer ${process.env.MACAW_API_KEY}` },
});
// → pipe video.body to disk or play in a <video> tag
}