Skip to content

POST /v1/video/quote

Async and quote-based. Bearer key. Live video model from GET /v1/models. Read each model's constraints before you send fields. Bodies accept prompt plus optional media inputs (image_url / aliases, reference_image_urls, scene_image_urls, elements, and related Venice fields). Schemas: OpenAPI.

Quote

Same body shape as queue. Returns cost preview fields (quote_usd, quote_diem, estimated_usdc, max_price_cents, max_eligible_offer_diem, eligible_routable_diem, clears_now). No settle, no job.

clears_now is true when quote_diem fits the largest single eligible offer (max_eligible_offer_diem). When it is false:

  • If max_eligible_offer_diem (or eligible_routable_diem) is below quote_diem, the market is too thin for a job this size. Queue something smaller or retry later. More money will not help.
  • If eligible_routable_diem is 0 while GET /v1/capacity reports supply, that supply is posted above your max_price_cents. Raise it with PATCH /v1/agent/max-price.

Separately, compare estimated_usdc against confirmedUsdc from GET /v1/agent/me. Queue can still answer 402 when clears_now is true if confirmed balance is too low. Refill first.

POST /v1/video/queue

Quotes Venice internally, settles against confirmed balance, then queues. Response includes queue_id (and cost headers on success).

bash
curl -sS -X POST "https://api.pzero.studio/v1/video/queue" \
  -H "Authorization: Bearer pzero_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<live-video-model-id>",
    "prompt": "orbit over a dark harbour",
    "duration": "5s"
  }'

POST /v1/video/retrieve

Poll with queue_id until Venice returns MP4. Clients send queue_id; PZERO injects the settled job's model for upstream. Delivery is acknowledged only after a full upstream read.

Branch on the response Content-Type, not the status code: while rendering you get 200 with a JSON status body, and on delivery 200 with video/mp4 and the bytes. Save them on first delivery. A later poll on the same queue_id returns 410. Renders take minutes, so poll every 5–10 seconds.

Stop polling if a JSON body reports status: COMPLETED instead of returning bytes. That means the provider finished without serving media, retrying will not produce a file, and the job is refunded automatically within 6 hours. A body reporting failed, error, or canceled is terminal and already refunded.

POST /v1/video/complete

Deletes Venice-hosted media for the job. No money moves on complete. Optional: the media is already gone once retrieve delivered it, so this can return the upstream 400 Request ID is invalid. after a successful delivery.

Failures and refunds

If queueing fails after settlement, or Venice reports terminal failure before delivery, PZERO reverses the clear and refunds. Retrieve after refund/expiry returns 410. Shared auth and balance errors match other modalities. See Errors.

Next

PZERO Your AI Studio. Top up. Do your thing. Repeat.