Video Generations
> Minimum-discount routing: Prefix the path with a min{N} segment (e.g. /min30/v1/video/generations) to require marketplace seller offers to meet a minimum estimated buyer discount before routing. Buyer-owned providers are not covered. See Minimum-Discount Routing.
Async video generation via the marketplace. Submit a job, poll for status, retrieve results.
Submit Job
POST /v1/video/generations
Auth: API key required (Authorization: Bearer *).
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
model | string | ✅ | Model ID, e.g. venice-runway-gen4-5-text; legacy venice-video-gen maps to a live Venice model |
prompt | string | ✅ | Text prompt (max 2000 chars) |
duration_seconds | integer | Video duration. Optional; omitted values use the model's cheapest/default duration when known | |
image_url | string | Image-to-video input URL for models that support it | |
resolution | string | Provider-supported resolution such as 480p, 720p, 1080p, 4k | |
aspect_ratio | string | Provider-supported ratio such as 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | |
audio | boolean | Include audio track when the model supports it | |
webhook_url | string | URL for terminal state callbacks | |
metadata | object | Client pass-through metadata |
Current Venice-backed examples include venice-runway-gen4-5-text, venice-seedance-2-fast-t2v, and venice-pixverse-c1-t2v. Query /v1/models and /api/markets for the live catalog and active order book.
Response: 202 Accepted
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"object": "media.job",
"kind": "video",
"status": "queued",
"created": 1713200000,
"expires_at": 1713201800,
"estimated_cost_usdc": "102000",
"max_cost_usdc": "112200",
"poll_url": "/v1/video/generations/550e8400-...",
"cancel_url": "/v1/video/generations/550e8400-...",
"job_token": "mjt_abc123..."
}
Idempotency: Include Idempotency-Key header to prevent duplicate submissions.
Poll Status
GET /v1/video/generations/:id
Auth: API key OR X-Job-Token header (returned from submit).
Response: 202 (pending) or 200 (terminal)
{
"id": "550e8400-...",
"object": "media.job",
"kind": "video",
"status": "succeeded",
"created": 1713200000,
"expires_at": 1713201800,
"progress": 1.0,
"results": [
{
"artifact_index": 0,
"url": "https://media-artifacts.s3.amazonaws.com/async-media/550e8400/0.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Signature=…",
"download_url": "/v1/media/artifacts/550e8400-.../0",
"content_type": "video/mp4",
"duration_seconds": 10,
"width": 1920,
"height": 1080,
"bytes": 5000000
}
],
"usage": {
"seller_cost_usdc": "80000",
"buyer_cost_usdc": "96000",
"settlement_status": "confirmed"
}
}
Status values: queued → submitted → running → succeeded | failed | canceled | expired.
Cancel Job
DELETE /v1/video/generations/:id
Auth:** API key OR X-Job-Token header.
Cancellation is best-effort. If the provider has already completed the job, it may transition to succeeded instead.
Cost Model
- Costs are USDC microdollars (1 USD = 1,000,000 microdollars).
- Download artifacts are cached/proxied for buyer access. Default artifact retention is 3 hours (
MEDIA_ARTIFACT_TTL_SECONDScan override it). - Seller selection uses the provider
/video/quoteendpoint with decrypted seller credentials; cost-multiplier offers apply the multiplier to the live quote. estimated_cost_usdcis the buyer estimate at submit time.max_cost_usdcis the reservation ceiling (estimated + 10% buffer).- Jobs expire after 30 minutes if not completed. Completed artifact download retention defaults to 3 hours.