Pular para o conteúdo principal

O reference-to-video Wan 3.0 Pro mantém rosto, peça de roupa, cenário, movimento ou voz com referências de imagem, vídeo e áudio, mais um documento ou link opcional. Renderiza 2 a 30 segundos em 1080p, 2K ou 4K.

A partir de $0.144/s20% abaixo do preço de tabela de referência

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-pro/reference-to-video",
  "input": {
    "aspect_ratio": "adaptive",
    "duration_seconds": 5,
    "reference_image_urls": [
      "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"

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.

seedintegerOpcional

De 0 a 2147483647. Fixe enquanto ajusta resolução ou duração; do contrário cada reexecução muda duas coisas ao mesmo tempo.

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

Ligada por padrão nesta família. Ela completa briefings magros e reescreve os detalhados, então desligue assim que o prompt for uma descrição precisa de plano. Um arquivo de referência ou um link da web precisa dela ligada: deixe sem definir ou em true ao anexar reference_file_url ou reference_link_url, porque o documento ou a página é lido nessa etapa. Um false explícito junto com um arquivo ou link é recusado.

Valor padrão
true
generate_audiobooleanOpcional

Ligado por padrão. O som é gerado junto com a imagem e chega dentro do mesmo arquivo. Ponha false quando um compositor for sonorizar a peça.

Valor padrão
true
duration_secondsintegerOpcionalAfeta o preço

Qualquer número inteiro de 2 a 30, padrão 5, ou -1 para duração inteligente, que reserva o máximo e cobra a duração realmente entregue. Com vídeos de referência, a duração total deles mais a saída precisa caber em 30 segundos, e as duas são cobradas. Encontre o plano com 5 segundos em 1080p antes de pagar uma renderização longa em 4K.

Valor padrão
5
Valores permitidos
-123456789101112131415161718192021222324252627282930
aspect_ratiostringOpcional

16:9, 4:3, 1:1, 3:4, 9:16 ou adaptive. Padrão adaptive, que deixa o modelo escolher; nomeie uma proporção quando o formato de entrega for fixo.

Valor padrão
"adaptive"
Valores permitidos
"16:9""4:3""1:1""3:4""9:16""adaptive"
resolutionstringOpcionalAfeta o preço

1080p, 2k ou 4k, padrão 1080p. Uma renderização nativa do Wan 3.0 vai no máximo até 1080p, então as faixas acima dela — 2k e 4k — são entregues ampliando essa renderização, e não renderizadas nativamente nesse tamanho: os pixels a mais vêm da ampliação e nunca ficam melhores que a renderização por baixo. Não há faixa de 480p nem de 720p aqui; para esses tamanhos, use o Wan 3.0.

Valor padrão
"1080p"
Valores permitidos
"1080p""2k""4k"
reference_link_urlstringObrigatório sob condição

Uma página web pública que o modelo lê como referência, por exemplo um artigo, uma página de produto ou um perfil de personagem. Ela precisa abrir sem login. Alguns sites bloqueiam leitores automáticos e uma página com pouco texto não serve; nos dois casos a tarefa falha com uma mensagem dizendo que a URL não pôde ser lida, e tarefas com falha não são cobradas. Não combina com reference_file_url; se você não definir enable_prompt_expansion, anexar um link também liga a expansão do prompt. Links não são cobrados.

Valor padrão
Não especificado
Restrições
format:"uri"
reference_file_urlstringObrigatório sob condição

Um documento que o modelo lê antes de dirigir a cena: uma ficha de personagem, um roteiro, uma lista de planos ou um briefing de produto. PDF, DOCX, DOC, TXT, MD, PPTX, PPT, XLSX, XLS, KEY, PAGES ou NUMBERS, até 100 MB e 50 páginas. Funciona sozinho ou junto com imagens, vídeos e áudio de referência, mas não junto com reference_link_url. Se você não definir enable_prompt_expansion, anexar um arquivo liga a expansão do prompt nessa requisição, porque o documento é lido nessa etapa. Arquivos não são cobrados.

Valor padrão
Não especificado
Restrições
format:"uri"
contentMediaType:["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.apple.keynote","application/vnd.apple.pages","application/vnd.apple.numbers","text/plain","text/markdown"]
reference_audio_urlsarray<string>Obrigatório sob condição

Até 5 clipes, cada um de 1 a 15 segundos e 15 segundos no total — uma voz, a leitura de uma fala ou o som ambiente que o plano precisa acompanhar. Áudio de referência não é cobrado. WAV ou MP3, até 15 MB por clipe. Assim como no vídeo, esses limites são verificados durante a geração, não quando a tarefa é aceita.

Valor padrão
Não especificado
Restrições
minItems:1
maxItems:5
reference_video_urlsarray<string>Obrigatório sob condiçãoAfeta o preço

Até 5 clipes, cada um de 1 a 15 segundos e 15 segundos no total. Use-os para movimento e estilo de câmera, não para um rosto. A duração deles é cobrada junto com a saída, e vídeo de referência mais saída precisam caber em 30 segundos. MP4 ou MOV, no mínimo 16 fps, de 240 a 4096 px por lado, proporção de no máximo 8:1 e até 100 MB por clipe. Esses limites são verificados durante a geração, não quando a tarefa é aceita, então confira a duração dos clipes antes de enviar.

Valor padrão
Não especificado
Restrições
minItems:1
maxItems:5
reference_image_urlsarray<string>Obrigatório sob condição

De 1 a 10 imagens como referências de identidade, figurino e cenário. Nomeie cada uma no prompt — personagem, peça, cenário —, senão elas viram uma média. Imagens de referência não são cobradas. 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 por imagem.

Valor padrão
Não especificado
Restrições
minItems:1
maxItems:10
promptstringOpcional

Opcional, mas é aqui que você diz para que serve cada referência — qual imagem é o personagem, qual clipe carrega o movimento, qual áudio é a voz — e o que de fato acontece no plano.

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

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-pro/reference-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 Pro · Reference 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