Loading...
Loading...
Async music / audio-track generation via Venice. Covers the /audio/quote + /audio/queue + /audio/retrieve + /audio/complete lifecycle, lyrics vs instrumental, voice selection, duration, language, speed, model capability probing, and webhook-free polling.
npx skill4agent add veniceai/skills venice-audio-musicPOST /api/v1/audio/quote → price in USD
POST /api/v1/audio/queue → { queue_id } (funds reserved)
POST /api/v1/audio/retrieve → status or binary audio
POST /api/v1/audio/complete → finalize & delete mediavenice-audio-speechPOST /audio/quotecurl https://api.venice.ai/api/v1/audio/quote \
-H "Authorization: Bearer $VENICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "elevenlabs-music",
"duration_seconds": 60
}'{"quote": 0.48}| Field | Notes |
|---|---|
| Required. Music/audio model from |
| Integer or numeric string. Only if the model reports duration metadata. |
| Required for models with |
POST /audio/queuecurl https://api.venice.ai/api/v1/audio/queue \
-H "Authorization: Bearer $VENICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "elevenlabs-music",
"prompt": "Uplifting indie-folk acoustic track, 120 BPM, major key.",
"lyrics_prompt": "Verse 1: Walking through the city lights...\nChorus: We are the dreamers...",
"duration_seconds": 60,
"voice": "Aria",
"language_code": "en",
"speed": 1.0,
"force_instrumental": false,
"lyrics_optimizer": false
}'{ "model": "...", "queue_id": "uuid" }| Field | Notes |
|---|---|
| Required. |
| Required. Describe genre, mood, tempo, instruments. Length caps in |
| Lyrics. Required when |
| Integer or string. Model-dependent. |
| Only when |
| Auto-generate lyrics from |
| For voice-enabled models. See |
| ISO 639-1. Requires |
| Requires |
POST /audio/retrievecurl https://api.venice.ai/api/v1/audio/retrieve \
-H "Authorization: Bearer $VENICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"elevenlabs-music","queue_id":"..."}' \
--output track.mp3{"status":"PROCESSING","average_execution_time":...,"execution_duration":...}audio/mpegdelete_media_on_completion: trueaverage_execution_timePOST /audio/completecurl https://api.venice.ai/api/v1/audio/complete \
-H "Authorization: Bearer $VENICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"elevenlabs-music","queue_id":"..."}'delete_media_on_completion: trueconst base = 'https://api.venice.ai/api/v1'
const headers = {
Authorization: `Bearer ${process.env.VENICE_API_KEY}`,
'Content-Type': 'application/json',
}
async function generateTrack() {
// 1. Quote
const quote = await fetch(`${base}/audio/quote`, {
method: 'POST', headers,
body: JSON.stringify({ model: 'elevenlabs-music', duration_seconds: 60 }),
}).then(r => r.json())
console.log('price:', quote.quote)
// 2. Queue
const { queue_id, model } = await fetch(`${base}/audio/queue`, {
method: 'POST', headers,
body: JSON.stringify({
model: 'elevenlabs-music',
prompt: 'Uplifting indie-folk acoustic track, 120 BPM.',
duration_seconds: 60,
force_instrumental: true,
}),
}).then(r => r.json())
// 3. Poll
while (true) {
const res = await fetch(`${base}/audio/retrieve`, {
method: 'POST', headers,
body: JSON.stringify({ model, queue_id }),
})
const ct = res.headers.get('content-type') ?? ''
if (ct.startsWith('audio/')) {
const buf = Buffer.from(await res.arrayBuffer())
await fs.writeFile('track.mp3', buf)
break
}
const { status } = await res.json()
if (status !== 'PROCESSING') throw new Error(`unexpected ${status}`)
await new Promise(r => setTimeout(r, 3000))
}
// 4. Complete
await fetch(`${base}/audio/complete`, {
method: 'POST', headers,
body: JSON.stringify({ model, queue_id }),
})
}/audio/queueGET /models?type=musicmodel_specsupports_lyricslyrics_requiredsupports_lyrics_optimizersupports_force_instrumentalsupports_speedsupports_language_codevoices[]default_voicemin_prompt_lengthprompt_character_limitmin_speedmax_speedpricing.generationpricing.per_secondpricing.per_thousand_characterspricing.durations{ "<tier>": { usd, diem, min_seconds, max_seconds } }| Code | Meaning |
|---|---|
| Wrong params (lyrics on an instrumental-only model, |
| Auth / Pro-only model. |
| Insufficient balance. Bearer → |
| On |
| Content policy violation. |
| Rate limited. |
| Inference or capacity issue. |
duration_seconds/audio/quotequeue/billing/balance/x402/balance/...queue_idmodelretrievecompletelyrics_optimizer: truelyrics_prompt400/retrieveexecution_durationaverage_execution_time