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(oreligible_routable_diem) is belowquote_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_diemis0whileGET /v1/capacityreports supply, that supply is posted above yourmax_price_cents. Raise it withPATCH /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.