Pular para o conteúdo principal

O image-to-video Wan 3.0 Prime anima um quadro de abertura em 2 a 30 segundos com áudio gerado, em 480p, 720p ou 1080p. Um último quadro opcional fixa o final, e o prompt só precisa descrever o movimento.

A partir de $0.061/s10% abaixo do preço oficial

Playground

Enviar uma requisição

Início rápido

Os exemplos usam as definições públicas de parâmetros do endpoint selecionado. Troque a chave de API e as mídias de exemplo e envie a requisição a partir do seu servidor.

SDKs e integrações
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Autenticação da API

Guarde a chave de API na variável de ambiente do servidor SPICY_API_KEY. Use autenticação Bearer e Content-Type: application/json nas requisições JSON.

Authorization: Bearer $SPICY_API_KEY
Resultado de exemploUsar este exemplo
# 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-prime/image-to-video",
  "input": {
    "duration_seconds": 5,
    "image_url": "https://example.com/reference.png",
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "resolution": "720p"
  }
}'

# 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"

Gerado a partir do schema de entrada deste modelo — o mesmo que a API usa para validar cada requisição.

Parâmetros de entrada

Coloque estes campos no objeto input do corpo da requisição. Nomes e tipos são os mesmos da API. Quando nenhum valor padrão estiver indicado, não presuma que exista um.

Este modelo tem dependências entre campos. Os campos marcados como obrigatórios sob condição dependem de outras entradas; as regras completas estão no JSON Schema abaixo.

image_urlstringObrigatório

O quadro de abertura, usado exatamente como primeiro quadro, e o verdadeiro teto de qualidade do plano. Figurino, corpo, cenário e direção da luz são herdados dele, então o prompt só precisa carregar o movimento. JPEG, PNG sem transparência, BMP ou WEBP; de 240 a 8000 px por lado, proporção de no máximo 8:1 e até 20 MB.

Valor padrão
Não especificado
Restrições
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
seedintegerOpcional

De 0 a 2147483647. Mantenha fixo para comparar um campo alterado por vez; tire para ter variedade.

Valor padrão
Não especificado
Restrições
minimum:0
maximum:2147483647
enable_prompt_expansionbooleanOpcional

Desligada por padrão. Ligada, o prompt é reescrito antes da geração, o que ajuda briefings magros e briga com você nos detalhados.

Valor padrão
false
generate_audiobooleanOpcional

Ligado por padrão. O clipe volta com som já travado à imagem. Ponha false quando você mesmo for sonorizar o plano.

Valor padrão
true
duration_secondsintegerOpcionalAfeta o preço

Qualquer número inteiro de 2 a 30, ou -1 para duração inteligente, em que o modelo escolhe a duração: o máximo de 30 segundos é reservado de antemão e a cobrança fica na duração realmente entregue. Padrão 5. Clipes mais longos derivam mais, então resolva a aparência em 5 segundos antes de estender.

Valor padrão
5
Valores permitidos
-123456789101112131415161718192021222324252627282930
resolutionstringOpcionalAfeta o preço

480p, 720p ou 1080p. Padrão 720p. A resolução muda tanto o preço quanto o tempo que a tarefa leva para voltar.

Valor padrão
"720p"
Valores permitidos
"480p""720p""1080p"
enable_thinkingbooleanOpcional

Faz o modelo analisar o pedido e o material de referência antes de gerar. Ajuda com documentos extensos, páginas web e imagens de referência complexas, e deixa a geração mais lenta. Desligado por padrão; liga sozinho quando você passa um arquivo ou link de referência. Não muda o preço.

Valor padrão
false
aspect_ratiostringOpcional

16:9, 9:16, 1:1, 4:3, 3:4 ou adaptive, que deixa o modelo escolher. Omita para herdar o formato do quadro de abertura; um valor conflitante corta.

Valor padrão
Não especificado
Valores permitidos
"16:9""9:16""1:1""4:3""3:4""adaptive"
last_image_urlstringOpcional

Opcional, e só junto com image_url. O clipe termina exatamente nesta imagem — ela é usada como quadro final, não como uma orientação solta —, então forneça quando o plano tiver que aterrissar numa composição fixa, como um produto de volta ao ângulo principal. Valem os mesmos limites de arquivo de image_url.

Valor padrão
Não especificado
Restrições
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
promptstringOpcional

Opcional: sem ele, o modelo anima o quadro de abertura por conta própria. Se escrever um, descreva o plano: sujeito, uma ação, um movimento de câmera, e então luz e som. Listas longas de adjetivos mexem menos no resultado do que uma ação clara.

Valor padrão
Não especificado
Restrições
minLength:1

Acompanhar tarefa

HTTP 202 quer dizer que a tarefa foi aceita, não que terminou. Guarde o taskId devolvido e consulte essa tarefa. Não crie outra enquanto espera o resultado.

Requisição aceita
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"
  }
}

A resposta de aceitação já traz a estimativa, para que o seu aplicativo mostre o mesmo valor no histórico de tarefas e na cobrança.

Consultar a tarefa
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Comece consultando a cada 2 segundos, mais ou menos, e vá espaçando. Pare em um estado final. Se a conexão cair, consulte o taskId original. Só recrie a tarefa com a chave de idempotência e o corpo originais.

Ou receba o resultado por callback
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);
});

Passe callBackUrl ao criar a tarefa e o registro concluído chega até você via POST — sem nenhum laço de polling. Toda entrega traz X-Webhook-Timestamp, X-Webhook-Signature e X-Webhook-Payload-Version. A assinatura é um HMAC-SHA256 em base64 sobre taskId.timestamp.sha256(body), então confira contra os bytes brutos: se você analisar o JSON e serializar de novo, os bytes mudam e a verificação falha. Entregas com erro são repetidas, ou seja, o mesmo taskId pode chegar duas vezes — deixe seu handler idempotente. Responda 2xx primeiro e faça o trabalho depois; um handler lento conta como entrega falha.

Ler resultado

Só consuma output quando state for succeeded. Em caso de falha, use errorCode, errorMessage e request_id para investigar. Os custos e estados de exemplo não representam uma cobrança real.

Exemplo de resposta concluída
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "alibaba/wan-3.0-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"
  }
}

Para cada arquivo disponível, abra ou baixe assets[].url direto, sem o cabeçalho Authorization da API. O link assinado expira em expiresAt: consulte a tarefa de novo para renovar enquanto o arquivo estiver dentro do prazo de retenção. Arquivo pendente ou indisponível não tem URL. Trate os links assinados como dado privado.

SDKs e integrações

Use a SpicyAPI no seu app, terminal, assistente de IA ou fluxo visual. Escolha um guia de configuração.

Use no ComfyUI

Instale os nós da SpicyAPI pelo ComfyUI Manager ou com o comando abaixo e procure por Wan 3.0 Prime · Image to Video no canvas. O nó tem as mesmas opções desta página e mostra o preço antes da execução.

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