PopNowAPI
Consigue tu clave API

Seedance 1.5 Pro Plus API

de ByteDance

Seedance 1.5 Pro de imagen a video con cámara fija

bytedance/seedance-1.5-pro-plus/video-extend
  • Hasta 1080p
  • Clips de 4 a 12 s
  • Con sonido
  • Fotograma inicial y final
  • 6 relaciones de aspecto
  • Imagen a video
  • Extender video

Llámalo con el nombre de modelo bytedance/seedance-1.5-pro-plus/video-extend en POST /jobs/createTask, desde 0,06 US$.

Nombre del modelobytedance/seedance-1.5-pro-plus/video-extend
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": "bytedance/seedance-1.5-pro-plus/video-extend",
  "input": {
    "duration_seconds": 5,
    "resolution": "720p",
    "generate_audio": true,
    "video_url": "https://media.popnow.ai/effects/flower-bloom-1abd6efb.mp4"
  }
}'

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

El input se genera a partir del esquema de abajo, así que pasa la validación tal cual. Cambia el prompt y los enlaces por los tuyos.

Precio

OpciónUSD por segundo
generate_audio falseresolution 480p0,012 US$
generate_audio trueresolution 480p0,024 US$
generate_audio falseresolution 720p0,026 US$
generate_audio falseresolution 1080p0,052 US$
generate_audio trueresolution 720p0,052 US$
generate_audio trueresolution 1080p0,104 US$

Facturación en USD · Todas las opciones y su precio: GET /models/bytedance/seedance-1.5-pro-plus/video-extend

Límites

Duración del clip
4–12 s
Resoluciones
480p · 720p · 1080p
Clip de entrada más largo
60 s

Parámetros

Estos campos salen del mismo esquema con el que validamos cada petición. Los campos que no aparecen se rechazan.

  • video_urlstringObligatorio

    El clip con el que trabajar.

    Rango
    1 – … chars · video/mp4, video/webm, video/quicktime, video/x-m4v
  • promptstringOpcional

    Describe what happens next: the action that follows, the camera move and the sound. Optional.

  • last_image_urlstringOpcional

    Fotograma final opcional, para que el clip termine justo donde quieres.

    Rango
    image/jpeg, image/png, image/webp, image/gif
  • duration_secondsintegerOpcionalCambia el precio

    Cuánto dura el clip. Se cobra por segundo.

    Por defecto
    5
    Rango
    4 – 12
  • resolutionstringOpcionalCambia el precio

    Tamaño de salida. Más grande es más nítido y cuesta más.

    Por defecto
    "720p"
    Valores permitidos
    "480p""720p""1080p"
  • generate_audiobooleanOpcionalCambia el precio

    Añade sonido acorde a la imagen: voces, ambiente y efectos.

    Por defecto
    true
  • camera_fixedbooleanOpcional

    Fija la cámara para que solo se mueva el sujeto.

    Por defecto
    false
  • seedintegerOpcional

    Repite el mismo número para obtener un resultado reproducible.

    Rango
    0 – 2147483647
Esquema JSON sin procesar
{
  "additionalProperties": false,
  "properties": {
    "camera_fixed": {
      "default": false,
      "description": "Hold the camera still during the new segment so that only the subject moves.",
      "type": "boolean"
    },
    "duration_seconds": {
      "default": 5,
      "description": "Length of the new segment in seconds (4-12). The source clip is added on top and is not billed.",
      "maximum": 12,
      "minimum": 4,
      "type": "integer"
    },
    "generate_audio": {
      "default": true,
      "description": "Generate sound for the new segment. The source keeps its own sound either way.",
      "type": "boolean"
    },
    "last_image_url": {
      "contentMediaType": [
        "image/jpeg",
        "image/png",
        "image/webp",
        "image/gif"
      ],
      "description": "Optional target closing frame: the new segment lands on this image.",
      "type": "string"
    },
    "prompt": {
      "description": "Describe what happens next: the action that follows, the camera move and the sound. Optional.",
      "type": "string"
    },
    "resolution": {
      "default": "720p",
      "description": "Resolution of the new segment. Match your source clip.",
      "enum": [
        "480p",
        "720p",
        "1080p"
      ],
      "type": "string"
    },
    "seed": {
      "description": "Random seed. Omit to let the model pick one.",
      "maximum": 2147483647,
      "minimum": 0,
      "type": "integer"
    },
    "video_url": {
      "contentMediaType": [
        "video/mp4",
        "video/webm",
        "video/quicktime",
        "video/x-m4v"
      ],
      "format": "uri",
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "video_url"
  ],
  "type": "object"
}

Respuestas, consultas y callbacks

Todos los modelos funcionan igual: crea una tarea y luego consulta su estado o espera el callback.

Consulta el precio primero

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": "bytedance/seedance-1.5-pro-plus/video-extend",
  "input": {
    "duration_seconds": 5,
    "resolution": "720p",
    "generate_audio": true,
    "video_url": "https://media.popnow.ai/effects/flower-bloom-1abd6efb.mp4"
  }
}'

Antes de ejecutar, envía el mismo cuerpo de petición a POST /jobs/quote para consultar el coste estimado y el máximo en USD. El presupuesto no ejecuta tareas ni carga tu saldo.

Aceptada

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 la tarea está aceptada: el máximo en USD queda reservado hasta la liquidación. Al aceptar una tarea, reservamos el importe máximo del presupuesto en tu saldo de API. Al terminar, cobramos el uso real sin superar la reserva y liberamos el resto. Si la tarea falla, liberamos el importe reservado.

Consultar estado

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

Consulta cada pocos segundos espaciando cada vez más y para cuando state sea succeeded, failed, canceled o expired.

Tarea terminada

JSON
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "bytedance/seedance-1.5-pro-plus/video-extend",
    "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"
}

Descarga desde la url antes de expiresAt. ¿Necesitas un enlace nuevo más tarde? Pídelo con POST /common/download-url.

Verificar un 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
});

Con callBackUrl te enviamos la tarea terminada. Comprueba la firma sobre el cuerpo sin procesar antes de fiarte de ella.

Enviar un archivo 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.

Los enlaces https públicos funcionan tal cual. Los archivos locales pasan antes por upload-url y commit.

Acerca de Seedance 1.5 Pro Plus

Seedance 1.5 Pro de imagen a video con cámara fija.

Llámalo con el nombre de modelo bytedance/seedance-1.5-pro-plus/video-extend en POST /jobs/createTask, desde 0,06 US$.

Parámetros de la petición

ParámetroObligatorioDescripción
camera_fixedNoFija la cámara para que solo se mueva el sujeto. Por defecto: false
duration_secondsNoCuánto dura el clip. Se cobra por segundo. ≥ 4 · ≤ 12 · Por defecto: 5
generate_audioNoAñade sonido acorde a la imagen: voces, ambiente y efectos. Por defecto: true
last_image_urlNoFotograma final opcional, para que el clip termine justo donde quieres.
promptNoDescribe what happens next: the action that follows, the camera move and the sound. Optional.
resolutionNoTamaño de salida. Más grande es más nítido y cuesta más. 480p · 720p · 1080p · Por defecto: 720p
seedNoRepite el mismo número para obtener un resultado reproducible. ≥ 0 · ≤ 2147483647
video_urlSíEl clip con el que trabajar.

Precios

Los precios se indican en USD. La API utiliza un saldo independiente en dólares estadounidenses. Los créditos de la web no sirven para la API ni se pueden convertir en saldo de API; tampoco se puede convertir el saldo de API en créditos de la web. Al aceptar una tarea, reservamos el importe máximo del presupuesto en tu saldo de API. Al terminar, cobramos el uso real sin superar la reserva y liberamos el resto. Si la tarea falla, liberamos el importe reservado.

OpciónUSD por segundo
generate_audio false · resolution 480p0,012 US$
generate_audio true · resolution 480p0,024 US$
generate_audio false · resolution 720p0,026 US$
generate_audio false · resolution 1080p0,052 US$
generate_audio true · resolution 720p0,052 US$
generate_audio true · resolution 1080p0,104 US$

Antes de ejecutar, envía el mismo cuerpo de petición a POST /jobs/quote para consultar el coste estimado y el máximo en USD. El presupuesto no ejecuta tareas ni carga tu saldo.

Inicio rápido de la API

Llama a la API de Seedance 1.5 Pro Plus en tres pasos

  1. Crea una clave de API. Inicia sesión en PopNow y crea una clave en la consola API. Las claves empiezan por sk-popnow-. Las llamadas utilizan tu saldo independiente en dólares estadounidenses.
  2. Envía la solicitud. Haz POST /jobs/createTask con model bytedance/seedance-1.5-pro-plus/video-extend y un objeto input según la tabla de parámetros. La respuesta devuelve un ID de tarea al instante.
  3. Obtén el resultado. Consulta GET /jobs/recordInfo con el ID de tarea, o pasa una callBackUrl y te enviamos el resultado ahí. Descarga los enlaces de salida cuando la tarea termine bien.
# 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": "bytedance/seedance-1.5-pro-plus/video-extend",
  "input": {
    "duration_seconds": 5,
    "resolution": "720p",
    "generate_audio": true,
    "video_url": "https://media.popnow.ai/effects/flower-bloom-1abd6efb.mp4"
  }
}'

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

Sustituye el prompt y los enlaces por los tuyos. La pestaña API tiene la referencia de la respuesta, el sondeo y el callback.

Preguntas sobre la API de Seedance 1.5 Pro Plus

¿Cuánto cuesta la API de Seedance 1.5 Pro Plus?

Seedance 1.5 Pro Plus cuesta desde 0,06 US$ por un clip de 5 segundos con Extender video, su tarea más barata. Precios por opción: false · 480p 0,012 US$ por segundo, true · 480p 0,024 US$ por segundo, false · 720p 0,026 US$ por segundo, false · 1080p 0,052 US$ por segundo. La API utiliza un saldo independiente en dólares estadounidenses. Los créditos de la web no sirven para la API ni se pueden convertir en saldo de API; tampoco se puede convertir el saldo de API en créditos de la web. Al aceptar una tarea, reservamos el importe máximo del presupuesto en tu saldo de API. Al terminar, cobramos el uso real sin superar la reserva y liberamos el resto. Si la tarea falla, liberamos el importe reservado.

¿Qué límites tiene la API de Seedance 1.5 Pro Plus · Extender video?

Duración del clip: 4–12 s; Resoluciones: 480p · 720p · 1080p; Clip de entrada más largo: 60 s. Las peticiones fuera de estos límites se rechazan antes de cobrar nada.

Más sobre Seedance 1.5 Pro Plus