PopNowAPI
Pegue sua chave de API

Wan 3.0 Plus API

da Alibaba

Wan 3.0 de imagem para vídeo, até 30 segundos com áudio

alibaba/wan-3.0-plus/image-to-video
  • Até 1080p
  • Clipes de 2 a 30 s
  • Com som
  • Quadro inicial e final
  • 5 proporções
  • Imagem para vídeo
  • Estender vídeo

Chame com o nome de modelo alibaba/wan-3.0-plus/image-to-video em POST /jobs/createTask, a partir de US$ 0,285.

Nome do modeloalibaba/wan-3.0-plus/image-to-video
EndpointPOST https://api.popnow.ai/api/v1/jobs/createTask
# 1. Create the task. Keep the Idempotency-Key if you retry after a network error.
export IDEMPOTENCY_KEY="$(uuidgen)"
curl -X POST https://api.popnow.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -d '{
  "model": "alibaba/wan-3.0-plus/image-to-video",
  "input": {
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "image_url": "https://media.popnow.ai/influencer/examples/marco.webp",
    "resolution": "720p",
    "duration_seconds": 5
  }
}'

# 2. Copy data.taskId from the response, then poll until state is succeeded, failed, canceled or expired.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

O input é montado a partir do schema abaixo, então passa na validação como está. Troque o prompt e os links pelos seus.

Preço

OpçãoUSD por segundo
resolution 480pUS$ 0,057
resolution 720pUS$ 0,114
resolution 1080pUS$ 0,228

Cobrança em USD · Todas as opções e preços: GET /models/alibaba/wan-3.0-plus/image-to-video

Limites

Duração do clipe
2–30 s
Resoluções
480p · 720p · 1080p
Proporções
16:9 · 9:16 · 1:1 · 4:3 · 3:4

Parâmetros

Estes campos vêm do mesmo schema que usamos para validar cada requisição. Campos que não estão na lista são rejeitados.

Alguns campos dependem uns dos outros (por exemplo, pelo menos uma referência). O schema bruto no fim tem as regras exatas.

  • image_urlstringObrigatório

    A imagem de partida.

    Faixa
    image/jpeg, image/png, image/webp, image/gif
  • promptstringOpcional

    Describe the subject, action, camera, light, pacing, and sound for the shot.

    Faixa
    1 – … chars
  • last_image_urlstringOpcional

    Quadro final opcional, para o clipe terminar exatamente onde você quer.

    Faixa
    image/jpeg, image/png, image/webp, image/gif
  • aspect_ratiostringOpcional

    O formato do quadro: horizontal, quadrado ou vertical.

    Valores aceitos
    "16:9""9:16""1:1""4:3""3:4"
  • resolutionstringOpcionalMuda o preço

    Tamanho de saída. Maior fica mais nítido e custa mais.

    Padrão
    "720p"
    Valores aceitos
    "480p""720p""1080p"
  • duration_secondsintegerOpcionalMuda o preço

    Quanto tempo dura o clipe. Cobrado por segundo.

    Padrão
    5
    Valores aceitos
    23456789101112131415161718192021222324252627282930
  • generate_audiobooleanOpcional

    Adiciona som combinando com a imagem: vozes, ambiente e efeitos.

    Padrão
    true
  • enable_prompt_expansionbooleanOpcional

    Deixa o modelo completar um prompt curto com detalhes.

    Padrão
    false
  • seedintegerOpcional

    Repetir o mesmo número dá um resultado reproduzível.

    Faixa
    0 – 2147483647
JSON Schema bruto
{
  "additionalProperties": false,
  "allOf": [
    {
      "if": {
        "required": [
          "last_image_url"
        ]
      },
      "then": {
        "required": [
          "image_url"
        ]
      }
    }
  ],
  "properties": {
    "aspect_ratio": {
      "description": "Output aspect ratio. Omit it to let the clip adapt to the opening image; a ratio that differs from the image crops it.",
      "enum": [
        "16:9",
        "9:16",
        "1:1",
        "4:3",
        "3:4"
      ],
      "type": "string"
    },
    "duration_seconds": {
      "default": 5,
      "description": "Requested output length in whole seconds.",
      "enum": [
        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"
    },
    "enable_prompt_expansion": {
      "default": false,
      "description": "Allow the service to expand the submitted creative brief before generation.",
      "type": "boolean"
    },
    "generate_audio": {
      "default": true,
      "description": "Request generated audio with the video.",
      "type": "boolean"
    },
    "image_url": {
      "contentMediaType": [
        "image/jpeg",
        "image/png",
        "image/webp",
        "image/gif"
      ],
      "description": "Opening-frame image.",
      "type": "string"
    },
    "last_image_url": {
      "contentMediaType": [
        "image/jpeg",
        "image/png",
        "image/webp",
        "image/gif"
      ],
      "description": "Optional last frame: the clip ends on this image. Requires image_url.",
      "type": "string"
    },
    "prompt": {
      "description": "Describe the subject, action, camera, light, pacing, and sound for the shot.",
      "minLength": 1,
      "type": "string"
    },
    "resolution": {
      "default": "720p",
      "description": "Output resolution.",
      "enum": [
        "480p",
        "720p",
        "1080p"
      ],
      "type": "string"
    },
    "seed": {
      "description": "Random seed. Keep it fixed only for controlled comparisons, not as a frame-identical guarantee.",
      "maximum": 2147483647,
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "image_url"
  ],
  "type": "object"
}

Respostas, consultas e callbacks

Todos os modelos funcionam do mesmo jeito: crie uma tarefa e depois consulte ou espere o callback.

Veja o preço antes

cURL
curl -X POST https://api.popnow.ai/api/v1/jobs/quote \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "alibaba/wan-3.0-plus/image-to-video",
  "input": {
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "image_url": "https://media.popnow.ai/influencer/examples/marco.webp",
    "resolution": "720p",
    "duration_seconds": 5
  }
}'

Antes de executar, envie o mesmo corpo de requisição para POST /jobs/quote para ver o custo estimado e o máximo em USD. O orçamento não executa tarefas nem debita seu saldo.

Aceita

HTTP
HTTP/1.1 202 Accepted

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued"
  },
  "request_id": "req_example_create"
}

HTTP 202 significa que a tarefa foi aceita: o máximo em USD fica reservado até o acerto final. Ao aceitar uma tarefa, reservamos o valor máximo do orçamento no seu saldo de API. Ao concluir, cobramos o uso real sem ultrapassar a reserva e liberamos o restante. Se a tarefa falhar, o valor reservado é liberado.

Consultar status

cURL
curl "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

Consulte a cada poucos segundos, espaçando cada vez mais, e pare quando state for succeeded, failed, canceled ou expired.

Tarefa pronta

JSON
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "alibaba/wan-3.0-plus/image-to-video",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "url": "https://cdn.popnow.ai/tasks/task_01k3m8x9q2z4v7n5p6r8s0t1w3/output.mp4?signature=FROM_RESPONSE",
          "expiresAt": "2026-10-17T12:20:00Z",
          "mime": "video/mp4",
          "width": 1280,
          "height": 720,
          "durationSeconds": 5
        }
      ]
    },
    "settled": true
  },
  "request_id": "req_example_record"
}

Baixe pela url antes de expiresAt. Precisa de um link novo depois? Peça com POST /common/download-url.

Verificar um callback

Node.js
import { createHash, createHmac, timingSafeEqual } from "node:crypto";
import express from "express";

const app = express();
// express.raw keeps the exact bytes that were signed; express.json would not match.
app.post("/hooks/popnow", express.raw({ type: "application/json" }), (req, res) => {
  const timestamp = req.header("X-Webhook-Timestamp");
  const signature = req.header("X-Webhook-Signature") ?? "";
  const body = JSON.parse(req.body.toString("utf8"));
  const taskId = body.data?.taskId ?? body.task_id;
  const digest = createHash("sha256").update(req.body).digest("hex");
  const expected = createHmac("sha256", process.env.POPNOW_WEBHOOK_SECRET)
    .update(`${taskId}.${timestamp}.${digest}`)
    .digest("base64");
  const ok = expected.length === signature.length && timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
  // Check the signature first, then reject anything older than five minutes.
  if (!ok || Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return res.status(401).end();
  res.status(200).end(); // answer fast, then fetch the task and store its files
});

Com callBackUrl definida, enviamos a tarefa pronta para você. Confira a assinatura no corpo bruto antes de confiar nela.

Enviar um arquivo local

cURL
curl -X POST https://api.popnow.ai/api/v1/common/upload-url \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contentType": "image/png", "bytes": 482113}'

# PUT the file bytes to data.uploadUrl with every header in data.headers, then commit it:
curl -X POST https://api.popnow.ai/api/v1/files/$FILE_ID/commit \
  -H "Authorization: Bearer $POPNOW_API_KEY"
# The commit returns a popnow://f/... reference. Put it in any image, video or
# audio field of the task input instead of a public https URL.

Links https públicos funcionam como estão. Arquivos locais passam antes por upload-url e commit.

Sobre o Wan 3.0 Plus

Wan 3.0 de imagem para vídeo, até 30 segundos com áudio.

Chame com o nome de modelo alibaba/wan-3.0-plus/image-to-video em POST /jobs/createTask, a partir de US$ 0,285.

Parâmetros da requisição

ParâmetroObrigatórioDescrição
aspect_ratioNãoO formato do quadro: horizontal, quadrado ou vertical. 16:9 · 9:16 · 1:1 · 4:3 · 3:4
duration_secondsNãoQuanto tempo dura o clipe. Cobrado por segundo. 2–30 · Padrão: 5
enable_prompt_expansionNãoDeixa o modelo completar um prompt curto com detalhes. Padrão: false
generate_audioNãoAdiciona som combinando com a imagem: vozes, ambiente e efeitos. Padrão: true
image_urlSimA imagem de partida.
last_image_urlNãoQuadro final opcional, para o clipe terminar exatamente onde você quer.
promptNãoDescribe the subject, action, camera, light, pacing, and sound for the shot.
resolutionNãoTamanho de saída. Maior fica mais nítido e custa mais. 480p · 720p · 1080p · Padrão: 720p
seedNãoRepetir o mesmo número dá um resultado reproduzível. ≥ 0 · ≤ 2147483647

Preços

Os preços são em USD. A API usa um saldo separado em dólares americanos. Os créditos do site não podem ser usados na API nem convertidos em saldo de API, e o saldo de API não pode ser convertido em créditos do site. Ao aceitar uma tarefa, reservamos o valor máximo do orçamento no seu saldo de API. Ao concluir, cobramos o uso real sem ultrapassar a reserva e liberamos o restante. Se a tarefa falhar, o valor reservado é liberado.

OpçãoUSD por segundo
resolution 480pUS$ 0,057
resolution 720pUS$ 0,114
resolution 1080pUS$ 0,228

Antes de executar, envie o mesmo corpo de requisição para POST /jobs/quote para ver o custo estimado e o máximo em USD. O orçamento não executa tarefas nem debita seu saldo.

Início rápido da API

Chame a API do Wan 3.0 Plus em três passos

  1. Crie uma chave de API. Entre na PopNow e crie uma chave no console da API. As chaves começam com sk-popnow-. As chamadas usam seu saldo separado em dólares americanos.
  2. Envie a requisição. Faça POST /jobs/createTask com model alibaba/wan-3.0-plus/image-to-video e um objeto input conforme a tabela de parâmetros. A resposta traz um ID de tarefa na hora.
  3. Pegue o resultado. Consulte GET /jobs/recordInfo com o ID da tarefa, ou passe uma callBackUrl e enviamos o resultado para ela. Baixe os links de saída quando a tarefa der certo.
# 1. Create the task. Keep the Idempotency-Key if you retry after a network error.
export IDEMPOTENCY_KEY="$(uuidgen)"
curl -X POST https://api.popnow.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -d '{
  "model": "alibaba/wan-3.0-plus/image-to-video",
  "input": {
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "image_url": "https://media.popnow.ai/influencer/examples/marco.webp",
    "resolution": "720p",
    "duration_seconds": 5
  }
}'

# 2. Copy data.taskId from the response, then poll until state is succeeded, failed, canceled or expired.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

Troque o prompt e os links pelos seus. A aba API traz a referência da resposta, do polling e do callback.

Perguntas sobre a API do Wan 3.0 Plus

Quanto custa a API do Wan 3.0 Plus?

O Wan 3.0 Plus custa a partir de US$ 0,285 por um clipe de 5 segundos com Imagem para vídeo, a tarefa mais barata. Preços por opção: 480p US$ 0,057 por segundo, 720p US$ 0,114 por segundo, 1080p US$ 0,228 por segundo. A API usa um saldo separado em dólares americanos. Os créditos do site não podem ser usados na API nem convertidos em saldo de API, e o saldo de API não pode ser convertido em créditos do site. Ao aceitar uma tarefa, reservamos o valor máximo do orçamento no seu saldo de API. Ao concluir, cobramos o uso real sem ultrapassar a reserva e liberamos o restante. Se a tarefa falhar, o valor reservado é liberado.

Qual é o nome de modelo do Wan 3.0 Plus na API?

Coloque alibaba/wan-3.0-plus/image-to-video para Imagem para vídeo; alibaba/wan-3.0-plus/video-extend para Estender vídeo no campo model de POST /jobs/createTask.

Quais são os limites da API do Wan 3.0 Plus?

Duração do clipe: 2–30 s; Resoluções: 480p · 720p · 1080p; Proporções: 16:9 · 9:16 · 1:1 · 4:3 · 3:4. Requisições fora desses limites são rejeitadas antes de qualquer cobrança.

Mais sobre o Wan 3.0 Plus