Vai al contenuto principale

L’image-to-video Wan 3.0 Pro Prime anima un fotogramma iniziale a 1080p, 2K o 4K per 2–30 secondi, con audio generato. Un ultimo fotogramma facoltativo fissa il finale; 2K e 4K sono ingranditi da un rendering nativo 1080p.

Da $0.234/s10% sotto il prezzo di listino di riferimento

Playground

Invia una richiesta

Guida rapida

Gli esempi usano le definizioni pubbliche dei parametri dell’endpoint selezionato. Sostituisci la chiave API e i media di esempio, poi invia la richiesta dal tuo server.

SDK e integrazioni
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Autenticazione dell’API

Tieni la chiave API nella variabile d’ambiente del server SPICY_API_KEY. Per le richieste JSON usa l’autenticazione Bearer e Content-Type: application/json.

Authorization: Bearer $SPICY_API_KEY
Risultato di esempioUsa questo esempio
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "alibaba/wan-3.0-pro-prime/image-to-video",
  "input": {
    "aspect_ratio": "adaptive",
    "duration_seconds": 5,
    "image_url": "https://example.com/reference.png",
    "resolution": "1080p"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Generato dallo schema di input di questo modello, lo stesso su cui l’API valida ogni richiesta.

Parametri di input

Metti questi campi dentro l’oggetto input del corpo della richiesta. Nomi e tipi corrispondono all’API. Quando un valore predefinito non è indicato, non darlo per scontato.

image_urlstringObbligatorio

Il fotogramma iniziale, usato esattamente come primo fotogramma, e il vero tetto di qualità dell'inquadratura. Guardaroba, corpo, set e direzione della luce si ereditano da lì, così il prompt deve portare solo il movimento. JPEG, PNG senza trasparenza, BMP o WEBP; da 240 a 8000 px per lato, rapporto d'aspetto non oltre 8:1, al massimo 20 MB.

Predefinito
Non specificato
Vincoli
minLength:1
format:"uri"
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
seedintegerFacoltativo

Da 0 a 2147483647. Tienilo fisso mentre regoli risoluzione o durata, altrimenti ogni ripetizione cambia due cose insieme.

Predefinito
Non specificato
Vincoli
minimum:0
maximum:2147483647
enable_prompt_expansionbooleanFacoltativo

Attivo di default su questa famiglia. Completa i brief scarni e riscrive quelli dettagliati, quindi disattivalo appena il tuo prompt è una descrizione precisa dell'inquadratura.

Predefinito
true
generate_audiobooleanFacoltativo

Attivo di default. Il suono viene generato insieme alle immagini e arriva dentro lo stesso file. Mettilo a false quando lo spot lo musica un compositore.

Predefinito
true
duration_secondsintegerFacoltativoIncide sul prezzo

Qualsiasi numero intero da 2 a 30, predefinito 5, oppure -1 per la durata intelligente, in cui è il modello a scegliere la lunghezza: il massimo di 30 secondi viene riservato in anticipo e l'addebito si assesta sulla durata effettivamente consegnata. Trova l'inquadratura a 5 secondi e 1080p prima di spenderci sopra un rendering 4K da 30 secondi.

Predefinito
5
Valori ammessi
-123456789101112131415161718192021222324252627282930
aspect_ratiostringFacoltativo

adaptive segue il fotogramma iniziale. Fissa un rapporto solo quando lo impone il formato di consegna.

Predefinito
"adaptive"
Valori ammessi
"16:9""4:3""1:1""3:4""9:16""adaptive"
resolutionstringFacoltativoIncide sul prezzo

1080p, 2k o 4k, predefinito 1080p. Un rendering nativo di Wan 3.0 Prime arriva al massimo a 1080p, quindi le fasce superiori — 2k e 4k — vengono consegnate ingrandendo quel rendering invece di essere renderizzate nativamente a quella misura: i pixel in più vengono dall'ingrandimento e non sono mai migliori del rendering che sta sotto. Qui non ci sono fasce 480p o 720p; per quelle misure usa Wan 3.0 o Wan 3.0 Prime.

Predefinito
"1080p"
Valori ammessi
"1080p""2k""4k"
last_image_urlstringFacoltativo

Facoltativo, e solo insieme a image_url. Il clip termina esattamente su questa immagine: viene usata come ultimo fotogramma, non come indicazione di massima, quindi forniscila quando l'inquadratura deve chiudersi su una composizione fissa, per esempio un prodotto tornato sulla sua angolazione principale. Stessi limiti di file di image_url.

Predefinito
Non specificato
Vincoli
minLength:1
format:"uri"
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
promptstringFacoltativo

Qui è facoltativo. Usalo per movimento e camera; ripetere ciò che è già visibile nel fotogramma invita il modello a ridisegnarlo.

Predefinito
Non specificato
Vincoli
minLength:1
maxLength:20000

Segui l’attività

HTTP 202 significa che l’attività è stata accettata, non che sia finita. Salva il taskId restituito e interroga quell’attività. Non crearne un’altra mentre aspetti il risultato.

Risposta di accettazione
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

La risposta di accettazione include la stima, così la tua applicazione può mostrare lo stesso importo nella cronologia delle attività e nella fatturazione.

Leggi l’attività
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Comincia a interrogare ogni 2 secondi circa e allunga l’intervallo man mano. Fermati a uno stato terminale. Dopo una caduta di connessione, interroga il taskId originale. Ripeti la creazione solo con la chiave di idempotenza e il corpo originali.

Oppure lascia che sia la callback a trovarti
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Passa callBackUrl quando crei l’attività e il record finito ti arriva via POST: nessun ciclo di polling. Ogni consegna porta X-Webhook-Timestamp, X-Webhook-Signature e X-Webhook-Payload-Version. La firma è un HMAC-SHA256 in base64 su taskId.timestamp.sha256(body), quindi va verificata sui byte grezzi: se analizzi il JSON e lo riserializzi i byte cambiano e la verifica fallisce. Le consegne fallite vengono ritentate, quindi lo stesso taskId può arrivare due volte: rendi idempotente il gestore. Rispondi prima con un 2xx e fai il lavoro dopo; un gestore lento viene trattato come una consegna fallita.

Leggi il risultato

Usa l’output solo quando lo stato è succeeded. In caso di fallimento, indaga con errorCode, errorMessage e request_id. Costi e stati degli esempi non rappresentano un addebito reale.

Esempio di risposta completata
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "alibaba/wan-3.0-pro-prime/image-to-video",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp4",
          "mime": "video/mp4",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp4?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Per ogni asset disponibile, apri o scarica assets[].url direttamente, senza l’header Authorization dell’API. L’URL firmato scade a expiresAt; interroga di nuovo l’attività per rinnovarlo finché l’asset resta entro il periodo di conservazione. Un asset in attesa o non disponibile non ha URL. Tratta gli URL firmati come privati.

SDK e integrazioni

Usa SpicyAPI nella tua app, nel terminale, con un assistente IA o in un workflow visivo. Scegli una guida di configurazione.

Usalo in ComfyUI

Installa i nodi SpicyAPI da ComfyUI Manager o con il comando qui sotto, poi cerca Wan 3.0 Pro Prime · Image To Video sulla tela. Il nodo ha le stesse opzioni di questa pagina e mostra il prezzo prima dell’esecuzione.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi