Async music, video & Voice Changer
Long audio and video are asynchronous. Do not re-queue while retrieve returns PROCESSING — that starts another paid job.
Payment on this gateway: quote, retrieve, and complete are free. Only queue returns HTTP 402 and settles USDC.
Music / long audio (/api/v1/audio/*)
POST /audio/quote → { quote } USD estimate (free)
POST /audio/queue → { queue_id, model, status } (paid — 402)
POST /audio/retrieve → PROCESSING json OR binary audio (free)
POST /audio/complete → finalize & delete media (free)- Quote (recommended, free) — pricing fields only:
model+duration_seconds(orcharacter_count). Do not sendprompton quote (Venice rejects it; this gateway strips it if present). Forace-step-*,duration_secondsmust be one of60|90|120|150|180|210. Returns{ quote }so you can budget before paying. - Queue (paid) — generation body (
model,prompt, …). Settle the 402, then savequeue_id. Charge comes from a fresh server-side Venice quote × margin — not from trusting the client quote amount. - Retrieve (poll, free) —
{ "model", "queue_id" }.- Processing: JSON with timing fields (ms).
- Done: binary audio — save immediately.
- Complete (free) — delete media unless already deleted on retrieve.
- After a successful binary retrieve, Venice may have already cleaned the job.
- On this gateway, that case returns 200
{ "success": true, "alreadyCompleted": true }instead of a 400. - Preferred: save media from retrieve; treat complete as best-effort cleanup (or set
delete_media_on_completion: trueon retrieve and skip complete).
Poll interval: start ~2–5s; use average_execution_time as a guide.
Video (/api/v1/video/*)
Same pattern under /video/quote (free), /video/queue (paid), /video/retrieve (free), /video/complete (free).
Queue 200 is { model, queue_id } — not job_id, and often no status.
duration, aspect_ratio, and resolution must be values from that model’s model_spec.constraints on GET /api/v1/models?type=video. Catalog data[0] (e.g. Gemini Omni) may reject 5s (only 4s/6s/8s/10s). A rejected quote is 400, not 503.
- Some models return
download_url(VPS-backed); when present, retrieve may return JSON status and you download from that URL (~24h). - Non-VPS: retrieve returns binary
video/mp4when ready — save immediately. completeafter a successful retrieve is often a no-op; the gateway maps Venice “Request ID is invalid” to{ success: true, alreadyCompleted: true }.- Poll interval: ~10–15s (jobs can take minutes).
Venice retired POST /api/v1/video/transcriptions (HTTP 410, no charge). For video analysis use POST /api/v1/chat/completions with video_url on a model that lists supportsVideoInput.
Voice Changer (/api/v1/audio/voice-changer/*)
Same pattern: quote / retrieve / complete are free. Only queue settles x402.
POST /audio/voice-changer/quote → { quote } USD (free) — model + duration_seconds
POST /audio/voice-changer/queue → { queue_id, model, status } (paid)
POST /audio/voice-changer/retrieve → PROCESSING json OR binary audio (free)
POST /audio/voice-changer/complete → cleanup (free)- Quote (free) —
model+duration_seconds(source length). Do not send the recording here. - Queue (paid) — same
duration_secondsplusaudio_urlXOR multipartfile. Catalog:GET /api/v1/modelsrows withmodel_spec.voice_changer=true(e.g.elevenlabs-voice-changer). Do not send a filesystem path as JSONfile. - Retrieve / complete — same as music. After a successful binary retrieve, complete may return
{ success: true, alreadyCompleted: true }.
Venice skill patterns (do not vendor the repo): github.com/veniceai/skills.
Full detail: OpenAPI info.x-guidance.