seedintegerOpcionalDe 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:0maximum:2147483647
alibaba/wan-3.0/reference-to-videoO reference-to-video Wan 3.0 da Alibaba mantém identidade, figurino, locação ou voz consistentes com até 10 imagens, 5 vídeos e 5 áudios. Entrega 2 a 30 segundos de 480p a 1080p, e o prompt é opcional.
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/reference-to-video",
"input": {
"aspect_ratio": "16:9",
"duration_seconds": 5,
"prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
"reference_image_urls": [
"https://example.com/reference.png"
],
"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.
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. Mantenha fixo para comparar um campo alterado por vez; tire para ter variedade.
enable_prompt_expansionbooleanOpcionalDesligada por padrão. Ligada, o prompt é reescrito antes da geração, o que ajuda briefings magros e briga com você nos detalhados. Se você não definir e anexar reference_file_url ou reference_link_url, ela liga nessa requisição, porque o documento ou a página é lido nessa etapa. Se você definir false de forma explícita, o arquivo ou a página ainda é lido, só que sem reescrever o prompt.
generate_audiobooleanOpcionalLigado por padrão. O clipe volta com som já travado à imagem. Ponha false quando você mesmo for sonorizar o plano.
duration_secondsintegerOpcionalAfeta o preçoQualquer número inteiro de 2 a 30, ou -1 para duração inteligente. Padrão 5. Com vídeos de referência, a duração total deles somada a este valor precisa ficar dentro de 30 segundos, e esses segundos são cobrados além da saída. Resolva a aparência em 5 segundos antes de estender.
-123456789101112131415161718192021222324252627282930resolutionstringOpcionalAfeta o preço480p, 720p ou 1080p. Padrão 720p. A resolução muda tanto o preço quanto o tempo que a tarefa leva para voltar.
"480p""720p""1080p"enable_thinkingbooleanOpcionalFaz 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.
aspect_ratiostringOpcional16:9, 9:16, 1:1, 4:3, 3:4 ou adaptive, que deixa o modelo escolher. O padrão é 16:9.
"16:9""9:16""1:1""4:3""3:4""adaptive"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. A verificação de rostos deste modelo costuma recusar fotos de pessoas reais, e a tarefa falha com "The input content is suspected to include real human faces.". Use personagens ilustrados ou renderizados em 3D; tarefas recusadas não são cobradas.
promptstringOpcionalOpcional. Se escrever um, diga primeiro o que cada referência controla e depois o plano: sujeito, uma ação, um movimento de câmera, luz e som. Uma ação clara mexe mais no resultado do que listas longas de adjetivos.
{
"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": "16:9",
"description": "Output aspect ratio; adaptive follows the input media and the intent.",
"enum": [
"16:9",
"9:16",
"1:1",
"4:3",
"3:4",
"adaptive"
],
"type": "string",
"x-ui": {
"order": 70,
"widget": "select"
}
},
"duration_seconds": {
"default": 5,
"description": "Requested output length 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": {
"advanced": false,
"affects_price": true,
"enum_labels": {
"-1": "Smart"
},
"order": 50,
"unit": "s",
"widget": "slider"
}
},
"enable_prompt_expansion": {
"description": "Allow the service to expand the submitted creative brief before generation.",
"type": "boolean",
"x-ui": {
"order": 30,
"widget": "switch"
}
},
"enable_thinking": {
"default": false,
"description": "Let the model reason about the brief and the reference material before generating. Helps with complex references; slower. Switches on by itself when a reference file or link is given.",
"type": "boolean",
"x-ui": {
"order": 66,
"widget": "switch"
}
},
"generate_audio": {
"default": true,
"description": "Request generated audio with the video.",
"type": "boolean",
"x-ui": {
"order": 40,
"widget": "switch"
}
},
"prompt": {
"description": "Describe the subject, action, camera, light, pacing, and boundaries for the shot.",
"minLength": 1,
"type": "string",
"x-ui": {
"order": 110,
"primary": true,
"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 items and 15 seconds in total.",
"items": {
"contentMediaType": [
"audio/mpeg",
"audio/wav"
],
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"type": "array",
"x-ui": {
"max_total_duration_seconds": 15,
"order": 80,
"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": "Reference images, up to 10 items.",
"items": {
"contentMediaType": [
"image/jpeg",
"image/png",
"image/webp",
"image/gif"
],
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array",
"x-ui": {
"order": 100,
"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 items and 15 seconds in total.",
"items": {
"contentMediaType": [
"video/mp4",
"video/webm",
"video/quicktime"
],
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"type": "array",
"x-ui": {
"affects_price": true,
"max_duration_seconds": 15,
"max_total_duration_seconds": 15,
"order": 90,
"widget": "multi-upload"
}
},
"resolution": {
"default": "720p",
"description": "Output resolution.",
"enum": [
"480p",
"720p",
"1080p"
],
"type": "string",
"x-ui": {
"advanced": false,
"affects_price": true,
"order": 60,
"widget": "radio"
}
},
"seed": {
"description": "Random seed. Keep it fixed only for controlled comparisons, not as a frame-identical guarantee.",
"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/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/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/reference-to-video \
--input-json '{"aspect_ratio":"16:9","duration_seconds":5,"prompt":"A slow aerial shot drifting over a misty pine forest at sunrise","reference_image_urls":["https://example.com/reference.png"],"resolution":"720p"}' \
--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/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 · 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/api?model=alibaba%2Fwan-3.0%2Freference-to-video" width="100%" height="560" loading="lazy" title="Exemplo de requisição" style="border:1px solid rgba(0,0,0,.12)"></iframe>