---
title: "Generate a video from references (w3.0-prime-spicy)"
method: POST
path: "/v1/w3.0-prime-spicy/reference-to-video"
tags: ["Tasks"]
---

# Generate a video from references (w3.0-prime-spicy)

`POST /v1/w3.0-prime-spicy/reference-to-video`

## Request

- Base URL: `https://api.hotapi.ai`
- URL: `https://api.hotapi.ai/v1/w3.0-prime-spicy/reference-to-video`
- Auth: HTTP bearer

Uncensored reference-to-video generation (W3.0 / Wan 3.0, 480p/720p/1080p, 2–30s): up to 10 reference images, 5 reference videos, or 5 reference audio clips, or one reference document (file_url) / web page (link_url). Reference videos are billed with the output ((Σ reference-video seconds + output seconds) × resolution rate); reference images, documents and pages add no billable seconds. Duration and resolution are required. Async: returns a task (202); poll `GET /v1/tasks/{id}`.

## Query parameters

- `webhook` string, uri

## Headers

- `idempotency-key` string

## Request body

- object: Uncensored reference-to-video input (W3.0 Prime Spicy). Provide at least one of: reference images (1–10), reference videos (1–5), reference audio clips (1–5), a reference document (file_url), or a web page (link_url).
  - `reference_image_urls` string[]: 1–10 reference images (HTTP/HTTPS URLs or base64).
  - `reference_audio_urls` string[]: 1–5 HTTPS reference audio clips. Audio-only input is supported.
  - `reference_video_urls` string[]: 1–5 HTTPS reference video URLs (MP4/MOV, each 1–15s, ≤15s total, ≤100MB; clips under 1s are rejected before charging). Reference duration is billed with the output — the charge is (Σ reference-video seconds + output seconds) × resolution rate, from durations probed at submit — so an unreadable or over-limit reference is rejected before any credits are deducted.
  - `file_url` string, uri: Reference document URL (docx/doc/xlsx/xls/pptx/ppt/pdf/txt/key/pages/numbers/md; ≤100MB, ≤50 pages). Mutually exclusive with link_url. Requires prompt expansion, which the gateway pins on for these requests.
  - `link_url` string, uri: Public web page URL used as reference. Mutually exclusive with file_url. Requires prompt expansion, which the gateway pins on for these requests.
  - `prompt` string: Optional text prompt.
  - `duration_seconds` integer, required: 2–30 seconds.
  - `resolution` union, required: Required output resolution: 480p, 720p, 1080p.
    - '480p'
    - '720p'
    - '1080p'
  - `ratio` union: Output aspect ratio. Omitted = adaptive.
    - 'adaptive'
    - '16:9'
    - '4:3'
    - '1:1'
    - '3:4'
    - '9:16'
  - `generate_audio` boolean: Generate a synced audio track. Omitted = true.
  - `prompt_extend` boolean: Let the model rewrite/expand the prompt. Omitted = true.
  - `seed` integer, nullable: Random seed (0–2147483647). null or omitted = random.

## Response `200`

An async task. Creation returns 202 with status=queued; poll GET /v1/tasks/{id} (or await the webhook) until a terminal status.

- Task: An async task. Creation returns 202 with status=queued; poll GET /v1/tasks/{id} (or await the webhook) until a terminal status.
  - `id` string, required
  - `object` 'task', required
  - `status` union, required: Lifecycle status. Terminal states: succeeded | failed | cancelled | expired.
    - 'pending'
    - 'queued'
    - 'processing'
    - 'succeeded'
    - 'failed'
    - 'cancelled'
    - 'expired'
  - `model` string, required
  - `task_kind` string, required
  - `input` object, required: The normalized request input the task was created with.
  - `output` object: Result payload, present once status=succeeded. Contains hosted asset URLs (re-hosted on our CDN).
  - `error` object
    - `type` string, required
    - `code` string, required
    - `message` string, required
  - `estimated_credits_cost` integer, required: Credits charged up-front when the task was created (1000 credits = $1).
  - `reference_video_seconds` number: Input-video seconds measured and frozen at submission; reused for draft finalization billing. Zero when no reference video was supplied.
  - `actual_credits_cost` integer: Final credits charged after settlement (equals estimate today).
  - `webhook_url` string, uri
  - `api_key_id` string: The organization's API key that created the task; absent for dashboard/session-created tasks.
  - `created_at` integer, required: Unix seconds.
  - `queued_at` integer: Unix seconds.
  - `started_at` integer: Unix seconds.
  - `completed_at` integer: Unix seconds.
  - `expires_at` integer, required: Unix seconds; result + asset retention deadline.

## Other responses

- `202`: An async task. Creation returns 202 with status=queued; poll GET /v1/tasks/{id} (or await the webhook) until a terminal status.
- `400`: Standard error envelope returned by every error response (OpenAI-style).
- `401`: Standard error envelope returned by every error response (OpenAI-style).
- `402`: Standard error envelope returned by every error response (OpenAI-style).
- `404`: Standard error envelope returned by every error response (OpenAI-style).
- `429`: Standard error envelope returned by every error response (OpenAI-style).

---

[API](https://skmtc.dev/hotapi/apis/hotapi-gateway.md) · [All operations](https://skmtc.dev/hotapi/apis/hotapi-gateway/llms.txt) · [OpenAPI document](https://skmtc.dev/hotapi/apis/hotapi-gateway/revisions/9b6578b0c389?raw)
