seedintegerOpcionalDe 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:0maximum:2147483647
alibaba/wan-3.0-pro-prime/reference-to-videoO reference-to-video Wan 3.0 Pro Prime trava rosto, peça de roupa, cenário, movimento ou voz com até 10 referências de imagem, 5 de vídeo e 5 de áudio. Renderiza 2 a 30 segundos em 1080p, 2K ou 4K, ampliado de 1080p acima disso.
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çõeshttps://api.spicyapi.ai/api/v1/jobs/createTaskGuarde 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# 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/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.
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.
seedintegerOpcionalDe 0 a 2147483647. Fixe enquanto ajusta resolução ou duração; do contrário cada reexecução muda duas coisas ao mesmo tempo.
enable_prompt_expansionbooleanOpcionalLigada 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.
generate_audiobooleanOpcionalLigado 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.
duration_secondsintegerOpcionalAfeta o preçoQualquer 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.
-123456789101112131415161718192021222324252627282930aspect_ratiostringOpcional16: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.
"16:9""4:3""1:1""3:4""9:16""adaptive"resolutionstringOpcionalAfeta o preço1080p, 2k ou 4k, padrão 1080p. Uma renderização nativa do Wan 3.0 Prime 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 ou o Wan 3.0 Prime.
"1080p""2k""4k"reference_link_urlstringObrigatório sob condiçãoUma 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.
reference_file_urlstringObrigatório sob condiçãoUm 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.
reference_audio_urlsarray<string>Obrigatório sob condiçãoAté 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.
reference_video_urlsarray<string>Obrigatório sob condiçãoAfeta o preçoAté 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.
reference_image_urlsarray<string>Obrigatório sob condiçãoDe 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.
promptstringOpcionalOpcional, mas é aqui que as referências são separadas umas das outras — qual chapa é qual personagem, para que servem o vídeo e o áudio — e a ação é declarada.
{
"additionalProperties": false,
"anyOf": [
{
"required": [
"reference_image_urls"
]
},
{
"required": [
"reference_video_urls"
]
},
{
"required": [
"reference_audio_urls"
]
},
{
"required": [
"reference_file_url"
]
},
{
"required": [
"reference_link_url"
]
}
],
"properties": {
"aspect_ratio": {
"default": "adaptive",
"description": "Output aspect ratio; adaptive follows the input media and the intent.",
"enum": [
"16:9",
"4:3",
"1:1",
"3:4",
"9:16",
"adaptive"
],
"type": "string",
"x-ui": {
"order": 60,
"widget": "select"
}
},
"duration_seconds": {
"default": 5,
"description": "Output duration in seconds. Pass -1 for smart duration: the model picks the length from the prompt and any input media instead of a fixed number. With reference videos, their total length plus the output length must not exceed 30 seconds, and the reference video seconds are billed together with the output seconds.",
"enum": [
-1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30
],
"type": "integer",
"x-ui": {
"affects_price": true,
"enum_labels": {
"-1": "Smart"
},
"order": 50,
"widget": "slider"
}
},
"enable_prompt_expansion": {
"default": true,
"description": "Expand the prompt before generation.",
"type": "boolean",
"x-ui": {
"order": 30,
"widget": "switch"
}
},
"generate_audio": {
"default": true,
"description": "Include an audio track in the output.",
"type": "boolean",
"x-ui": {
"order": 40,
"widget": "switch"
}
},
"prompt": {
"description": "Describe the subject, motion and camera.",
"maxLength": 20000,
"minLength": 1,
"type": "string",
"x-ui": {
"order": 100,
"reference_tokens": {
"reference_audio_urls": "Audio {index}",
"reference_image_urls": "Image {index}",
"reference_video_urls": "Video {index}"
},
"widget": "textarea"
}
},
"reference_audio_urls": {
"description": "Reference audio, up to 5 clips of 1 to 15 seconds each and 15 seconds in total.",
"items": {
"contentMediaType": [
"audio/mpeg",
"audio/wav"
],
"format": "uri",
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"type": "array",
"x-ui": {
"max_total_duration_seconds": 15,
"order": 86,
"widget": "multi-upload"
}
},
"reference_file_url": {
"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"
],
"description": "One reference document (PDF, DOCX, TXT, MD and similar) that the model reads for characters, wardrobe, setting and action.",
"format": "uri",
"type": "string",
"x-ui": {
"order": 76,
"widget": "upload"
}
},
"reference_image_urls": {
"description": "Ordered reference images used to guide the scene.",
"items": {
"contentMediaType": [
"image/jpeg",
"image/png",
"image/webp",
"image/gif"
],
"format": "uri",
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array",
"x-ui": {
"order": 90,
"primary": true,
"widget": "multi-upload"
}
},
"reference_link_url": {
"description": "One public web page the model reads for reference. It must open without a login.",
"format": "uri",
"type": "string",
"x-ui": {
"order": 74,
"placeholder": "https://",
"widget": "text"
}
},
"reference_video_urls": {
"description": "Reference videos, up to 5 clips of 1 to 15 seconds each and 15 seconds in total.",
"items": {
"contentMediaType": [
"video/mp4",
"video/webm",
"video/quicktime"
],
"format": "uri",
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"type": "array",
"x-ui": {
"affects_price": true,
"max_total_duration_seconds": 15,
"order": 88,
"widget": "multi-upload"
}
},
"resolution": {
"default": "1080p",
"description": "Output resolution tier. A native Wan 3.0 Prime render tops out at 1080p; 2k and 4k are enlarged from that render, not rendered natively.",
"enum": [
"1080p",
"2k",
"4k"
],
"type": "string",
"x-ui": {
"affects_price": true,
"order": 70,
"widget": "radio"
}
},
"seed": {
"description": "Random seed. Omit for a generated seed.",
"maximum": 2147483647,
"minimum": 0,
"type": "integer",
"x-ui": {
"order": 10,
"widget": "number"
}
}
},
"type": "object",
"x-pricing": {
"billingMode": "duration_capped",
"variantFields": [
"resolution"
]
}
}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.
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.
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.
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.
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.
{
"code": 200,
"msg": "success",
"request_id": "req_example_record",
"data": {
"taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
"model": "alibaba/wan-3.0-pro-prime/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.
Use a SpicyAPI no seu app, terminal, assistente de IA ou fluxo visual. Escolha um guia de configuração.
Você não precisa escrever nada do código acima. Conecte o servidor MCP uma vez e qualquer agente que fale MCP — Claude Code, Codex, Cursor, Windsurf, VS Code, Gemini CLI, Cline, LibreChat — chama este modelo pelo nome. Ou rode direto do terminal, em um comando só.
Com alibaba/wan-3.0-pro-prime/reference-to-video, faça um plano de cinco segundos: terraço em luz de neon ao anoitecer, aproximação lenta, e salve em ./out/.
O agente procura o modelo no catálogo atual e envia o arquivo local por você. Em seguida, mostra a estimativa exata de preço e o valor máximo de cobrança e espera sua confirmação. Nada é cobrado até você autorizar.
claude mcp add spicyapi -e SPICY_API_KEY=$SPICY_API_KEY \
-- npx --yes --package=@spicyapi/mcp spicyapi-mcp
npx skills add spicyapi-ai/spicy-skillA primeira linha entrega as ferramentas ao agente; a segunda, a Skill com as regras de uso: mostrar a estimativa antes de cobrar, enviar arquivos locais em vez de colar bytes e ler a URL do arquivo concluído em vez de adivinhá-la. Os demais clientes usam o mesmo servidor pelo próprio arquivo de configuração: veja a área do desenvolvedor.
npx @spicyapi/cli tasks create --model alibaba/wan-3.0-pro-prime/reference-to-video \
--input-json '{"aspect_ratio":"adaptive","duration_seconds":5,"reference_image_urls":["https://example.com/reference.png"],"resolution":"1080p"}' \
--waitA entrada vem do schema deste endpoint, igual aos exemplos acima. --wait acompanha a tarefa até o fim e imprime o resultado; use --yes para pular a confirmação na CI. Defina antes o SPICY_API_KEY — a mesma chave serve para a API, a CLI e o servidor MCP.
npx @spicyapi/cli tasks create --model alibaba/wan-3.0-pro-prime/reference-to-video \
--input-json '{…}' --retention 1h --wait
npx @spicyapi/cli tasks get $TASK_ID # read back the retention that appliedO --retention só encurta o prazo — 30m, 1h, 7d, ou 0 para apagar assim que a tarefa chega a um estado final. O valor que realmente vale é o menor entre a sua requisição, as configurações da conta e o limite da plataforma; então releia do registro da tarefa em vez de supor que o número pedido valeu. Pedir um prazo maior do que a conta permite não faz nada.
Instale os nós da SpicyAPI pelo ComfyUI Manager ou com o comando abaixo e procure por Wan 3.0 Pro Prime · 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-spicyapiO painel incorporado lê o mesmo schema desta página, então não tem como sair de sincronia com a API. Se a sua documentação precisar de conteúdo indexável, pegue o JSON em /api/embed/models/ e renderize por conta própria.
<iframe src="https://spicyapi.ai/embed/pt-BR/models/wan-3-0-pro-prime/api?model=alibaba%2Fwan-3.0-pro-prime%2Freference-to-video" width="100%" height="560" loading="lazy" title="Exemplo de requisição" style="border:1px solid rgba(0,0,0,.12)"></iframe>