Agent API (x402)Async music & video

Async music & video

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)
  1. Quote (recommended, free) — pricing fields only: model + duration_seconds (or character_count). Do not send prompt on quote (Venice rejects it; this gateway strips it if present). For ace-step-*, duration_seconds must be one of 60|90|120|150|180|210. Returns { quote } so you can budget before paying.
  2. Queue (paid) — generation body (model, prompt, …). Settle the 402, then save queue_id. Charge comes from a fresh server-side Venice quote × margin — not from trusting the client quote amount.
  3. Retrieve (poll, free){ "model", "queue_id" }.
    • Processing: JSON with timing fields (ms).
    • Done: binary audio — save immediately.
  4. 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: true on 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/mp4 when ready — save immediately.
  • complete after 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).

Sync alternative for YouTube transcripts: POST /api/v1/video/transcriptions (paid sync route).

Full detail: OpenAPI info.x-guidance.