SeeGen AI API
Bienvenido a la API de SeeGen AI: una sola API para generar vídeo cinematográfico e imágenes de alta fidelidad con múltiples modelos líderes.
Descripción general
SeeGen AI es una API de generación unificada: un conjunto consistente de endpoints para ejecutar varios de los principales modelos de IA de vídeo e imagen. Elige un modelo con el parámetro model — la autenticación, el envío de tareas, el sondeo de estado y los webhooks funcionan igual en todos ellos.
Modelos disponibles actualmente:
- Vídeo — Seedance 2.0 Pro (
sd2), Seedance 2.0 Fast (sd2-fast), Seedance 2.0 Mini (sd2-mini), Seedance 2.5 (sd2.5), HappyHorse 1.1 (happyhorse) - Imagen — GPT Image 2 (
gpt-image-2), Nano Banana 2 (nano-banana-2), Nano Banana Pro (nano-banana-pro), Seedream 5.0 Lite (seedream-v5.0-lite), Seedream 5.0 Pro (seedream-v5.0-pro)
URL base: https://seegen.ai/api/v1
Modelo: pasa cualquiera de los alias anteriores en el campo model (por ejemplo, sd2, gpt-image-2).
¿Por qué SeeGen AI?
Más razones para elegir SeeGen AI:
- Más que Seedance 2.0: HappyHorse 1.1, Nano Banana, ChatGPT Image y más.
- Sin suscripción — paga solo por lo que uses
- Acceso rápido a los modelos más recientes
- Soporte al cliente 24/7
- Soporte para consultas oficiales relacionadas con los modelos
- Acceso a la consola para desarrolladores
- Abierto tanto a empresas como a usuarios individuales
Precios
API Pack
125,000 créditos ($0.004/crédito)
~781 vídeos de 5s
API-XL Pack
500,000 créditos ($0.004/crédito)
~3,125 vídeos de 5s
Seedance 2.0 / Fast / Mini / 2.5: cálculo del coste
Sea out = output_seconds e in = la suma de ⌈duration⌉ de cada vídeo de entrada (cada uno redondeado hacia arriba, con un mínimo de out × 2/3). Seedance 2.5 sigue el mismo cálculo que Seedance 2.0. La tarifa base de cada modelo correspondiente se multiplica por 1.5 y se redondea antes de aplicar la fórmula de la tarea (1080P es nativo en sd2.5, 2.5× su tarifa de 720P); los complementos de escalado independientes del modelo se mantienen en +30 / +40 créditos por segundo de salida para 2K / 4K (+20 para 1080P solo en sd2-fast / sd2-mini).
| Sin entrada de vídeo | Con entrada de vídeo | |
|---|---|---|
| sd2.5: 480P | 30 × out | 23 × (out + in) |
| sd2.5: 720P | 60 × out | 45 × (out + in) |
| sd2.5: 1080P (nativo) | 150 × out | 113 × (out + in) |
| sd2.5: 2K | (60 + 30) × out | 45 × (out + in) + 30 × out |
| sd2.5: 4K | (60 + 40) × out | 45 × (out + in) + 40 × out |
| sd2-pro: 480P | 20 × out | 15 × (out + in) |
| sd2-pro: 720P | 40 × out | 30 × (out + in) |
| sd2-pro: 1080P (nativo) | 100 × out | 75 × (out + in) |
| sd2-pro: 2K | (40 + 30) × out | 30 × (out + in) + 30 × out |
| sd2-pro: 4K (nativo) | 200 × out | 150 × (out + in) |
| sd2-fast: 480P | 16 × out | 12 × (out + in) |
| sd2-fast: 720P | 32 × out | 24 × (out + in) |
| sd2-fast: 1080P | (32 + 20) × out | 24 × (out + in) + 20 × out |
| sd2-fast: 2K | (32 + 30) × out | 24 × (out + in) + 30 × out |
| sd2-fast: 4K | (32 + 40) × out | 24 × (out + in) + 40 × out |
| sd2-mini: 480P | 10 × out | 7.5 × (out + in) |
| sd2-mini: 720P | 20 × out | 15 × (out + in) |
| sd2-mini: 1080P | (20 + 20) × out | 15 × (out + in) + 20 × out |
| sd2-mini: 2K | (20 + 30) × out | 15 × (out + in) + 30 × out |
| sd2-mini: 4K | (20 + 40) × out | 15 × (out + in) + 40 × out |
Nota: sd2-pro en 1080P y 4K es salida nativa oficial (4K = 5× la tarifa de 720P); sd2-pro en 2K y todo sd2-fast / sd2-mini en 1080P/2K/4K son escalados por SeeGen AI. sd2.5 genera de forma nativa en 480P/720P/1080P (1080P = 2.5× la tarifa de 720P, sin recargo de escalado) y usa escalado automático para 2K/4K. Solicita cualquier nivel con outputResolution: "4k" (por ejemplo, "2k" / "4k"; el gateway elige automáticamente entre nativo y escalado — solo cambian el precio y la etiqueta Native). sd2-mini cuesta el 50% de sd2-pro, el nivel más económico. Seedance 2.5 usa el mismo redondeo de duración por vídeo, el mínimo de duración de entrada y el cálculo de escalado que Seedance 2.0. La tarifa base de cada modelo correspondiente se multiplica por 1.5 y se redondea antes del cálculo de la tarea (por ejemplo, 1080P con vídeo: 75 × 1.5 → 113). Los complementos de escalado 2K / 4K, independientes del modelo, se mantienen en +30 / +40 créditos por segundo de salida. Si el escalado falla, la tarea completada devuelve el resultado de reserva en 720P sin reembolso parcial de créditos.
- sd2.5 480P, salida de 4 segundos sin vídeo de entrada: 120 créditos
- sd2.5 720P, salida de 5 segundos sin vídeo de entrada: 300 créditos
- sd2.5 720P, salida de 5 segundos + vídeo de entrada de 3 segundos (mínimo de entrada de 4 segundos): 405 créditos
- sd2.5 1080P nativo, salida de 5 segundos sin vídeo de entrada: 750 créditos
- sd2.5 1080P nativo, salida de 5 segundos + vídeo de entrada de 5 segundos: 1,130 créditos
happyhorse: créditos por segundo
| Salida | Créditos/seg | Ejemplo de 5s |
|---|---|---|
| 720P | 32 | 160 |
| 1080P | 60 | 300 |
| 2K | 32 + 30 | 310 |
| 4K | 32 + 40 | 360 |
Nota: el escalado 2K / 4K se añade sobre la base de 720P (no se combina con el nativo 1080P). t2v / i2v / r2v comparten la misma tarifa por segundo: las imágenes de referencia no se facturan.
🎉 Oferta por tiempo limitado: 33% de descuento en toda la generación de imágenes — todos los precios de imagen que aparecen abajo ya incluyen el descuento.
gpt-image-2: créditos por imagen
| Resolución | Calidad media | Calidad alta |
|---|---|---|
| 1k | 1015 | 4770 |
| 2k (predeterminado) | 2335 | 84125 |
| 4k | 4060 | 154230 |
Cada tarea genera 1 imagen. Envía N tareas para obtener N variantes. Las tareas fallidas reembolsan los créditos automáticamente.
nano-banana-2 y nano-banana-pro: créditos por imagen
| Resolución | nano-banana-2 | nano-banana-pro |
|---|---|---|
| 1k | 2030 | 4060 |
| 2k (predeterminado) | 3045 | 4060 |
| 4k | 4770 | 74110 |
Cada tarea genera 1 imagen. Envía N tareas para obtener N variantes. Las tareas fallidas reembolsan los créditos automáticamente.
Seedream 5.0: créditos por imagen
| Modelo / nivel | Créditos |
|---|---|
| Lite 2k / 4k (tarifa plana) | 710 |
| Pro 1k (predeterminado) | 1015 |
| Pro 2k | 2030 |
Cada tarea genera 1 imagen. Envía N tareas para obtener N variantes. Las tareas fallidas reembolsan los créditos automáticamente. Las imágenes de referencia no se facturan por separado.
Consulta tu saldo: GET /api/v1/account/credits
Autenticación
Todas las solicitudes a la API requieren un token Bearer en la cabecera Authorization. Puedes crear y gestionar tus claves de API desde Configuración de la cuenta.
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://seegen.ai/api/v1/account/creditsImportante: tu clave de API solo se muestra una vez, en el momento de crearla. Guárdala de forma segura. Puedes crear hasta 10 claves de API por cuenta.
Guía rápida
Genera un vídeo en dos pasos: crea una tarea y luego consulta el resultado.
# 1. Create a text-to-video task
TASK_ID=$(curl -s -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"prompt": "A golden retriever running on the beach at sunset",
"duration": "5s",
"resolution": "1280x720"
}
}' \
https://seegen.ai/api/v1/jobs/createTask | jq -r '.taskId')
echo "Task created: $TASK_ID"
# 2. Poll for result
while true; do
RESULT=$(curl -s -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/jobs/queryTask?taskId=$TASK_ID")
STATUS=$(echo $RESULT | jq -r '.status')
echo "Status: $STATUS"
if [ "$STATUS" = "COMPLETED" ] || [ "$STATUS" = "FAILED" ]; then
echo $RESULT | jq .
break
fi
sleep 5
doneEndpoints
/api/v1/jobs/createTaskCrea una nueva tarea de generación de vídeo
/api/v1/jobs/queryTaskConsulta el estado y el resultado de una tarea
/api/v1/account/creditsConsulta tu saldo de créditos
/api/v1/assets/uploadSube un recurso (imagen/vídeo/audio) para su revisión
/api/v1/assets/statusConsulta el estado de revisión de un recurso
/api/v1/assets/listEnumera tus recursos subidos
/api/v1/upscale/createEnvía una tarea independiente de escalado de vídeo (720p / 1080p / 2K / 4K)
/api/v1/upscale/queryConsulta el estado y el resultado de una tarea de escalado independiente
Elegir un modelo (vídeo)
Dos familias de modelos generan vídeo. Elige según el modo y el precio; combina con la sección Precios para estimar el coste.
| Modelo | T2V | I2V | First–Last | Multi-Ref | R2V | 1080p nativo | 4K nativo | Audio | 720p / 5s |
|---|---|---|---|---|---|---|---|---|---|
| sd2.5 | ✓ | ✓ | ✓ | ✓ | — | ✓ | escalado | ✓ | 300 créditos |
| sd2 | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ | ✓ | 200 créditos |
| sd2-fast | ✓ | ✓ | ✓ | ✓ | — | escalado | escalado | ✓ | 160 créditos |
| sd2-mini | ✓ | ✓ | ✓ | ✓ | — | escalado | escalado | ✓ | 100 créditos |
| happyhorse | ✓ | ✓ | — | — | ✓ | ✓ | escalado | ✓ | 160 créditos |
T2V = Texto a vídeo · I2V = Imagen a vídeo (primer fotograma) · First–Last = primer + último fotograma clave · Multi-Ref = referencias mixtas de imagen / vídeo / audio · R2V = 1–9 imágenes de referencia con marcadores de personaje
Seedance 2.0 / 2.0 Fast / 2.0 Mini / Seedance 2.5
Texto a vídeo
Genera un vídeo a partir de un prompt de texto. No se requieren imágenes.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"prompt": "A futuristic city with flying cars at night, neon lights reflecting on wet streets",
"duration": "5s",
"resolution": "1280x720"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| prompt | string | Sí | Descripción de texto del vídeo que se va a generar. Máximo 20000 caracteres. |
| duration | string | No | Duración del vídeo: de "4s" a "15s"; sd2.5 admite hasta "30s" (por defecto: "5s") |
| resolution | string | No | Relación de aspecto mediante resolution. Opciones: auto (por defecto), 720x720, 720x960, 960x720, 1280x720, 720x1280, 1280x540 |
| outputResolution | string | No | Nivel de resolución de salida: "480p", "720p" (por defecto), "1080p", "2k" o "4k". Las resoluciones nativas varían según el modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast y Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Los niveles superiores se escalan automáticamente. |
| seed | int | No | Semilla de reproducibilidad: -1 u omitir para aleatorio; 0–2147483647 para un valor fijo. |
| generateAudio | boolean | No | Si se debe sintetizar una pista de audio sincronizada. Por defecto es true; pasa false para un vídeo sin sonido. |
Imagen a vídeo
Anima una imagen estática convirtiéndola en un vídeo. Proporciona una URL de imagen como fotograma inicial.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"urls": ["https://example.com/photo.jpg"], // or "asset://asset-20260326-abc123"
"prompt": "The woman slowly turns her head and smiles",
"duration": "5s"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| urls | string[] | Sí | Array con una URL de imagen (el fotograma de origen). Admite tanto URLs HTTP como referencias de recursos (por ejemplo, "asset://asset-20260326-abc123") |
| prompt | string | No | Descripción de texto del movimiento deseado |
| duration | string | No | Duración del vídeo: de "4s" a "15s"; sd2.5 admite hasta "30s" (por defecto: "5s") |
| outputResolution | string | No | Nivel de resolución de salida: "480p", "720p" (por defecto), "1080p", "2k" o "4k". Las resoluciones nativas varían según el modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast y Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Los niveles superiores se escalan automáticamente. |
| seed | int | No | Semilla de reproducibilidad: -1 u omitir para aleatorio; 0–2147483647 para un valor fijo. |
| generateAudio | boolean | No | Si se debe sintetizar una pista de audio sincronizada. Por defecto es true; pasa false para un vídeo sin sonido. |
Primer y último fotograma
Define el fotograma inicial y el final, y el modelo genera la transición entre ambos. Usa videoInputMode: "keyframe".
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"urls": [
"https://example.com/first-frame.jpg",
"https://example.com/last-frame.jpg"
],
"prompt": "Smooth camera transition from day to night",
"duration": "5s",
"videoInputMode": "keyframe"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| urls | string[] | Sí | Array con exactamente 2 URLs de imagen: [first_frame, last_frame]. Admite tanto URLs HTTP como referencias de recursos (por ejemplo, "asset://asset-20260326-abc123") |
| videoInputMode | string | Sí | Debe ser "keyframe" |
| prompt | string | No | Descripción de texto que guía la transición |
| duration | string | No | Duración del vídeo: de "4s" a "15s"; sd2.5 admite hasta "30s" (por defecto: "5s") |
| outputResolution | string | No | Nivel de resolución de salida: "480p", "720p" (por defecto), "1080p", "2k" o "4k". Las resoluciones nativas varían según el modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast y Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Los niveles superiores se escalan automáticamente. |
| seed | int | No | Semilla de reproducibilidad: -1 u omitir para aleatorio; 0–2147483647 para un valor fijo. |
| generateAudio | boolean | No | Si se debe sintetizar una pista de audio sincronizada. Por defecto es true; pasa false para un vídeo sin sonido. |
Multi-Referencia
Usa varias imágenes, vídeos y archivos de audio de referencia para guiar la generación. Usa videoInputMode: "reference". En sd2.5 esta es la subtarea de referencia por defecto; consulta Edición y extensión de vídeo más abajo para editar o continuar un vídeo existente.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"urls": [
"https://example.com/ref1.jpg",
"https://example.com/ref2.jpg"
],
"videoUrls": ["asset://asset-motion-video"],
"audioUrls": ["https://example.com/audio.mp3"],
"prompt": "Character walks through a garden",
"duration": "5s",
"videoInputMode": "reference",
"resolution": "1280x720"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| urls | string[] | No | URLs de imágenes de referencia (máx. 9). Admite tanto URLs HTTP como referencias de recursos (por ejemplo, "asset://asset-20260326-abc123") |
| videoUrls | string[] | No | URIs asset:// de vídeos de referencia — primero súbelos con /api/v1/assets/upload; las URLs externas se rechazan. sd2: máx. 3 vídeos, cada uno ≤15s. sd2.5: hasta 10 vídeos, cada uno de 2–30s y ≤200MB, duración total de referencia ≤30s, admite entradas de 480p a 4K. |
| audioUrls | string[] | No | Entradas de audio de referencia. sd2 / sd2-fast / sd2-mini: hasta 3 archivos de audio, cada uno de 2–15s, total ≤15s — el audio no puede ser la única referencia en estos modelos (añade al menos una imagen o un vídeo). sd2.5: hasta 10 archivos, ≤15MB y 2–30s cada uno, total ≤30s, y se admite la entrada solo de audio. |
| videoInputMode | string | Sí | Debe ser "reference" |
| prompt | string | No | Descripción de texto |
| duration | string | No | Duración del vídeo: de "4s" a "15s"; sd2.5 admite hasta "30s" (por defecto: "5s") |
| resolution | string | Sí | Obligatorio en modo de referencia. Opciones: 720x720, 720x960, 960x720, 1280x720, 720x1280, 1280x540 |
| outputResolution | string | No | Nivel de resolución de salida: "480p", "720p" (por defecto), "1080p", "2k" o "4k". Las resoluciones nativas varían según el modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast y Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Los niveles superiores se escalan automáticamente. |
| seed | int | No | Semilla de reproducibilidad: -1 u omitir para aleatorio; 0–2147483647 para un valor fijo. |
| generateAudio | boolean | No | Si se debe sintetizar una pista de audio sincronizada. Por defecto es true; pasa false para un vídeo sin sonido. |
Restricciones de referencia
- Máximo 9 imágenes, 3 vídeos, 3 archivos de audio
- Máximo 12 archivos en total entre todos los tipos
- Cada vídeo/audio debe durar ≤ 15 segundos
- Las imágenes deben tener al menos 400px en el lado más corto
- sd2.5: máx. 30 imágenes, 10 vídeos, 10 archivos de audio, y 50 en total; los totales de vídeo y audio son cada uno ≤ 30 segundos
Edición y extensión de vídeo
sd2.5 divide la generación basada en referencias en tres subtareas. Omite mode para la generación de referencia habitual, define mode: "edit" para editar un vídeo existente, o mode: "extend" para continuarlo. Ambas requieren al menos un vídeo en videoUrls y siempre generan la salida con la relación de aspecto del vídeo de origen.
Coloca el vídeo que quieres modificar en primer lugar dentro de videoUrls y refiérete a él como "Video 1" en tu prompt. edit obliga a que la duración de salida coincida con ese primer vídeo (de origen), que debe durar entre 4 y 30s, por lo que se ignora cualquier duration que envíes; la facturación usa la duración del vídeo de origen como duración de salida, más todos los vídeos de referencia como entrada. extend acepta de 1 a 3 clips unidos en orden, y el duration que solicites es la duración de salida de esta generación (sin relación con la duración de origen), facturado como una generación de referencia normal.
Los modelos de la familia 2.0 (sd2 / sd2-fast / sd2-mini) también admiten mode: "edit" y mode: "extend": infieren la operación a partir de tu prompt (describe explícitamente la edición o continuación), la relación de aspecto sigue al vídeo de origen, y duration sigue bajo tu control con la facturación habitual.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2.5",
"inputs": {
"mode": "edit",
"videoUrls": ["asset://asset-source-video"],
"urls": ["https://example.com/annotation-at-1.2s.png"],
"source_frame_timestamps_ms": [1200],
"prompt": "Replace the marked object with a red umbrella",
"outputResolution": "720p"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| mode | string | No | "edit" o "extend". Omite para la generación de referencia habitual. |
| videoUrls | string[] | Sí | Al menos un vídeo; el primero es el de origen ("Video 1") — la duración de salida y la facturación de la edición dependen de él. Los vídeos posteriores son referencias adicionales (edit) o clips adicionales unidos en orden (extend, máx. 3). |
| urls | string[] | No | Imágenes opcionales de anotación/referencia. |
| source_frame_timestamps_ms | number[] | No | Solo con mode "edit". Una marca de tiempo no negativa del vídeo de origen, en milisegundos, por cada imagen en urls. |
| outputResolution | string | No | Nivel de resolución de salida: "480p", "720p" (por defecto), "1080p", "2k" o "4k". Las resoluciones nativas varían según el modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast y Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Los niveles superiores se escalan automáticamente. |
Referencia de parámetros de Seedance
Referencia completa de todos los parámetros de inputs para los modelos sd2 / sd2-fast / sd2-mini / sd2.5.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| prompt | string | No | Descripción de texto (obligatoria para texto a vídeo, opcional en otros modos). Máximo 20000 caracteres. |
| urls | string[] | No | URLs de imagen. Admite tanto URLs HTTP como referencias de recursos (por ejemplo, "asset://asset-20260326-abc123"). Se asigna internamente a uploadedUrls. |
| videoUrls | string[] | No | URIs asset:// de vídeos de referencia (solo modo de referencia). Deben subirse primero con /api/v1/assets/upload — las URLs externas se rechazan. |
| audioUrls | string[] | No | URLs de audio de referencia (solo modo de referencia). La entrada solo de audio se admite en sd2.5; sd2 / sd2-fast / sd2-mini requieren al menos una imagen o un vídeo junto con el audio. |
| duration | string | No | De "4s" a "15s" normalmente; sd2.5 admite hasta "30s". Por defecto: "5s" |
| resolution | string | No | Relación de aspecto: auto (por defecto) | 720x720 | 720x960 | 960x720 | 1280x720 | 720x1280 | 1280x540 |
| outputResolution | string | No | Nivel de resolución de salida: "480p", "720p" (por defecto), "1080p", "2k" o "4k". Las resoluciones nativas varían según el modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast y Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Los niveles superiores se escalan automáticamente. |
| videoInputMode | string | No | "keyframe" (por defecto) o "reference" |
| mode | string | No | Subtarea de modo de referencia (todos los modelos Seedance): omite para la generación de referencia habitual, "edit" para editar el primer vídeo en videoUrls, "extend" para continuar de 1 a 3 clips. Consulta Edición y extensión de vídeo. |
| source_frame_timestamps_ms | number[] | No | Solo para la edición de vídeo de sd2.5: una marca de tiempo en milisegundos, no negativa, por cada imagen de anotación. |
| seed | int | No | Semilla aleatoria para reproducibilidad. -1 u omitir para aleatoria en el servidor. La misma semilla + las mismas entradas producen un resultado muy similar (no idéntico a nivel de bits, debido a la no determinación de la GPU). Rango: -1 a 2147483647. |
| generateAudio | boolean | No | Si se debe sintetizar una pista de audio (voz, efectos de sonido, música de fondo) sincronizada con el vídeo. Por defecto es true. Ponlo en false para producir un vídeo sin sonido — ligeramente más rápido, útil si planeas doblarlo por separado. |
| bitrateMode | string | No | Nivel de bitrate de salida a la misma resolución: "standard" (por defecto) o "high". "high" conserva más detalle y reduce el banding/bloqueo a costa de un tamaño de archivo ~3-5× mayor — no cambia la resolución ni el precio. |
| upscaleResolution | string | No | (Obsoleto) Campo dividido heredado, aceptado por compatibilidad con versiones anteriores. Las integraciones nuevas deben usar outputResolution, que ahora acepta "2k" / "4k" directamente. Si se envían ambos, upscaleResolution tiene prioridad — excepto en modelos con 1080p nativo (Seedance2 Pro / Seedance 2.5), donde upscaleResolution:"1080p" se resuelve como 1080p nativo (facturado a la tarifa nativa). |
Campos de nivel superior de la solicitud: model (obligatorio), inputs (obligatorio), callBackUrl (URL de webhook opcional).
Recursos
Los recursos son archivos de imagen, vídeo y audio que pasan por un proceso de revisión antes de poder usarse en tareas de generación de vídeo. Sube un recurso, espera a que pase a ACTIVE y luego usa su URL asset:// en tus tareas.
Nota: los recursos de imagen y vídeo con personas reales requieren revisión oficial, que normalmente se completa en cuestión de segundos. Una vez aprobados, pueden usarse directamente como referencias. Sin revisión, la generación puede fallar.
Subir recurso
Hay dos formas de subir: enviar un archivo local directamente (multipart/form-data) o enviar una URL HTTPS de acceso público. En ambos casos, el recurso se procesa y revisa automáticamente.
Método A: subida de archivo directa (multipart/form-data)
Envía un archivo local sin necesidad de alojar la imagen en otro sitio. El tipo de medio se detecta a partir de los bytes del archivo (no se confía en la extensión del nombre). Permitidos: imágenes (jpg/png/webp/gif/bmp/tiff/heic), vídeos (mp4/mov), audio (wav/mp3). Máximo 50MB por archivo (imagen ≤30MB, vídeo ≤50MB, audio ≤15MB).
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-F "file=@/path/to/photo.jpg" \
-F "name=my-photo" \
https://seegen.ai/api/v1/assets/upload| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| file | file | Sí | El archivo local (campo del formulario multipart). El tipo de medio se detecta a partir del contenido. |
| name | string | No | Nombre del recurso (máx. 64 caracteres) |
Método B: por URL (application/json)
Si el archivo ya está alojado en una URL HTTPS pública.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/photo.jpg",
"type": "IMAGE",
"name": "my-photo"
}' \
https://seegen.ai/api/v1/assets/upload| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| url | string | Sí | URL HTTPS de acceso público del archivo que se va a subir |
| type | string | Sí | "IMAGE", "AUDIO" o "VIDEO" |
| name | string | No | Nombre del recurso (máx. 64 caracteres) |
Respuesta de subida
{
"assetId": 123,
"volcAssetId": "asset-20260326-abc123",
"type": "IMAGE",
"status": "PROCESSING",
"failReason": null,
"url": "https://example.com/photo.jpg",
"name": "my-photo",
"createdAt": 1711234567890
}Consultar estado del recurso
Consulta el estado de revisión de un recurso. Cuando el estado es PROCESSING, el endpoint comprueba automáticamente si hay actualizaciones del sistema de revisión.
# Query by asset ID (numeric)
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/status?assetId=123"
# Query by volcAssetId (string)
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/status?assetId=asset-20260326-abc123"Valores de estado del recurso
PROCESSING— en revisión, aún no utilizableACTIVE— revisión aprobada, listo para usarse en tareasFAILED— revisión fallida, consulta failReason
Listar recursos
Enumera tus recursos subidos, con filtrado opcional por tipo y estado. Admite paginación basada en cursor.
# List all assets
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/list"
# Filter by type and status
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/list?type=IMAGE&status=ACTIVE&limit=10"
# Paginate with cursor
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/list?cursor=100&limit=20"| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| type | string | No | Filtrar por tipo: "IMAGE", "AUDIO" o "VIDEO" |
| status | string | No | Filtrar por estado: "NONE", "PROCESSING", "ACTIVE" o "FAILED" |
| cursor | number | No | Cursor para paginación (usa nextCursor de la respuesta anterior) |
| limit | number | No | Elementos por página, 1-50 (por defecto: 20) |
Respuesta de listado
{
"items": [
{
"assetId": 123,
"volcAssetId": "asset-20260326-abc123",
"type": "IMAGE",
"status": "ACTIVE",
"failReason": null,
"url": "https://example.com/photo.jpg",
"name": "my-photo",
"width": 1920,
"height": 1080,
"size": 245000,
"duration": null,
"createdAt": 1711234567890
}
],
"nextCursor": 122
}Uso de recursos en tareas
Una vez que un recurso está ACTIVE, usa su volcAssetId con el protocolo asset:// en las URLs de tu tarea:
{
"model": "sd2",
"inputs": {
"urls": ["asset://asset-20260326-abc123"],
"prompt": "The person slowly looks up and smiles",
"duration": "5s"
}
}HappyHorse 1.1 (Alibaba)
Un modelo alternativo de generación de vídeo de Alibaba DashScope. Admite tres modos: texto a vídeo, imagen a vídeo con primer fotograma, y referencia a vídeo (1–9 imágenes de referencia fusionadas por prompt; haz referencia a los sujetos con character1, character2, … en el prompt). HappyHorse 1.1 no admite último fotograma, vídeo de referencia ni audio de referencia. Nombre del modelo: happyhorse.
No requiere revisión de recursos — puedes usar URLs de imagen HTTPS públicas directamente, o pasar referencias asset:// de la biblioteca de recursos (se resuelven automáticamente a la URL R2 original).
Texto a vídeo
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse",
"inputs": {
"prompt": "A panda DJ at a beach party, smoky sunset",
"duration": "5s",
"outputResolution": "720p",
"ratio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImagen a vídeo (primer fotograma)
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse",
"inputs": {
"urls": ["https://example.com/panda.jpg"],
"prompt": "The panda blinks and smiles",
"duration": "5s",
"outputResolution": "1080p"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskReferencia a vídeo (1–9 imágenes de referencia)
Pasa videoWorkflowTab: "multi-reference" con 1–9 URLs de imágenes de referencia para fusionar varios sujetos en una sola salida. Haz referencia a cada imagen en el prompt con character1, character2, … (siguiendo el orden de urls). La relación de aspecto se controla con el campo ratio (no hay un primer fotograma del que derivarla).
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse",
"inputs": {
"videoWorkflowTab": "multi-reference",
"urls": [
"https://example.com/character.jpg",
"https://example.com/folding-fan.jpg",
"https://example.com/earrings.jpg"
],
"prompt": "A woman in red character1 opening folding fan character2, with tassel earrings character3 swinging",
"duration": "5s",
"outputResolution": "720p",
"ratio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskReferencia de parámetros de HappyHorse
Referencia completa de todos los parámetros de inputs para el modelo happyhorse.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| prompt | string | No | Descripción de texto. Obligatoria para texto a vídeo y referencia a vídeo; opcional para imagen a vídeo. Máximo 5000 caracteres no CJK o 2500 caracteres CJK (el sistema ascendente trunca automáticamente el exceso). En r2v, usa character1/character2/… para referirte a la imagen de referencia N-ésima. |
| urls | string[] | No | t2v: omitir. i2v: exactamente 1 URL (se usa como primer fotograma). r2v: 1–9 URLs. Admite URLs HTTPS públicas y referencias de recursos (por ejemplo, "asset://asset-20260326-abc123"). |
| videoWorkflowTab | string | No | Establece "multi-reference" para activar el modo de referencia a vídeo (debe combinarse con 1 o más urls). Omite para texto a vídeo / imagen a vídeo. |
| duration | string | No | De "3s" a "15s" (por defecto "5s"). |
| outputResolution | string | No | "720p" (por defecto) o "1080p". |
| ratio | string | No | "16:9" / "9:16" / "1:1" / "4:3" / "3:4". Se usa para texto a vídeo y referencia a vídeo — la relación de aspecto de imagen a vídeo se infiere del primer fotograma. |
| seed | int | No | De 0 a 2147483647. Déjalo en blanco para una semilla aleatoria. |
Requisitos de imagen (i2v / r2v)
- Lado más corto ≥ 300px
- Relación de aspecto entre 1:2.5 y 2.5:1
- Formatos: JPEG, JPG, PNG, BMP, WEBP
- Tamaño máximo de archivo 10MB por imagen (r2v: cada una de las 1–9 entradas)
Elegir un modelo (imagen)
Los modelos de imagen toman un prompt (y opcionalmente imágenes de referencia) y devuelven una imagen por tarea. Cada solicitud se factura por imagen según el nivel del modelo seleccionado (o una tarifa fija para Seedream Lite). Las tareas fallidas se reembolsan automáticamente. No hay parámetro de lote — para generar varias variantes, llama a createTask una vez por imagen.
| Modelo | T2I | I2I (Edición) | Multi-Ref | Resolución máxima | 2k / medium |
|---|---|---|---|---|---|
| gpt-image-2 | ✓ | ✓ | hasta 10 | 4k | ver Precios |
| nano-banana-2 | ✓ | ✓ | hasta 10 | 4k | ver Precios |
| nano-banana-pro | ✓ | ✓ | hasta 10 | 4k | ver Precios |
| seedream-v5.0-lite | ✓ | ✓ | hasta 10 | 4k | tarifa plana |
| seedream-v5.0-pro | ✓ | ✓ | hasta 10 | 2k | ver Precios |
GPT Image 2
El modelo GPT Image 2 de OpenAI para edición de texto a imagen e imagen a imagen de alta calidad. Un único flujo de trabajo gestiona ambos modos — pasa urls para cambiar automáticamente al modo de edición. La salida se entrega mediante R2 en el formato que solicites (PNG / JPEG / WEBP). Nombre del modelo: gpt-image-2.
Texto a imagen
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"inputs": {
"prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
"quality": "medium",
"resolution": "2k",
"aspectRatio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImagen a imagen (edición)
Pasa de 1 a 10 imágenes de referencia mediante urls. El modelo las usará como contexto visual para la edición descrita en prompt.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"inputs": {
"urls": ["https://example.com/portrait.jpg"],
"prompt": "Restyle as oil painting",
"quality": "medium",
"resolution": "1k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskReferencia de parámetros de GPT Image 2
Referencia completa de todos los parámetros de inputs para el modelo gpt-image-2.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| prompt | string | Sí | Descripción de texto de la imagen a generar, o la edición a aplicar cuando se proporciona urls. |
| urls | string[] | No | URLs de imágenes de referencia para el modo imagen a imagen (edición) (1–10 imágenes). Omite para texto a imagen. Se aceptan URLs HTTPS públicas. |
| quality | string | No | "medium" / "high". Por defecto: "medium". Los créditos varían según el nivel (ver Precios). |
| resolution | string | No | "1k" / "2k" / "4k". Por defecto: "2k". Los créditos varían según el nivel (ver Precios). |
| aspectRatio | string | No | "1:1" / "16:9" / "9:16" / "4:3" / "3:4". Por defecto: "1:1". |
| outputFormat | string | No | "png" / "jpeg" / "webp". Por defecto: "png". |
Requisitos de la imagen de entrada (modo imagen a imagen)
- Hasta 10 imágenes de referencia por tarea
- Tamaño máximo de archivo 50 MB por imagen
- Lado más corto ≥ 256px
- Relación de aspecto entre 1:3 y 3:1
- Formatos: JPEG, JPG, PNG, WEBP
Los créditos por imagen varían según la resolución y la calidad — consulta la tabla completa en la sección Precios.
Nano Banana 2
Nano Banana 2 es un modelo de imagen de alta fidelidad con mayor cobertura de relaciones de aspecto que gpt-image-2 — añade preajustes vertical/horizontal (3:2, 2:3, 4:5, 5:4) y el formato cinematográfico 21:9. Un único flujo de trabajo gestiona ambos modos — pasa urls para cambiar automáticamente al modo de edición. Nombre del modelo: nano-banana-2.
Texto a imagen
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"inputs": {
"prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
"resolution": "2k",
"aspectRatio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImagen a imagen (edición)
Pasa de 1 a 10 imágenes de referencia mediante urls. El modelo las usará como contexto visual para la edición descrita en prompt.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"inputs": {
"urls": ["https://example.com/portrait.jpg"],
"prompt": "Restyle as oil painting",
"resolution": "2k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskReferencia de parámetros de Nano Banana 2
Referencia completa de todos los parámetros de inputs para el modelo nano-banana-2.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| prompt | string | Sí | Descripción de texto de la imagen a generar, o la edición a aplicar cuando se proporciona urls. |
| urls | string[] | No | URLs de imágenes de referencia para el modo imagen a imagen (edición) (1–10 imágenes). Omite para texto a imagen. Se aceptan URLs HTTPS públicas. |
| resolution | string | No | "1k" / "2k" / "4k". Por defecto: "2k". Los créditos varían según el nivel (ver Precios). |
| aspectRatio | string | No | "1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9". Por defecto: "1:1". |
Requisitos de la imagen de entrada (modo imagen a imagen)
- Hasta 10 imágenes de referencia por tarea
- Tamaño máximo de archivo 50 MB por imagen
- Lado más corto ≥ 256px
- Relación de aspecto entre 1:3 y 3:1
- Formatos: JPEG, JPG, PNG, WEBP
Los créditos por imagen varían según la resolución — consulta la tabla completa en la sección Precios.
Nano Banana Pro
Nano Banana Pro es un modelo de imagen de alta fidelidad con mayor cobertura de relaciones de aspecto que gpt-image-2 — añade preajustes vertical/horizontal (3:2, 2:3, 4:5, 5:4) y el formato cinematográfico 21:9. Un único flujo de trabajo gestiona ambos modos — pasa urls para cambiar automáticamente al modo de edición. Nombre del modelo: nano-banana-pro.
Texto a imagen
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-pro",
"inputs": {
"prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
"resolution": "2k",
"aspectRatio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImagen a imagen (edición)
Pasa de 1 a 10 imágenes de referencia mediante urls. El modelo las usará como contexto visual para la edición descrita en prompt.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-pro",
"inputs": {
"urls": ["https://example.com/portrait.jpg"],
"prompt": "Restyle as oil painting",
"resolution": "2k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskReferencia de parámetros de Nano Banana Pro
Referencia completa de todos los parámetros de inputs para el modelo nano-banana-pro.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| prompt | string | Sí | Descripción de texto de la imagen a generar, o la edición a aplicar cuando se proporciona urls. |
| urls | string[] | No | URLs de imágenes de referencia para el modo imagen a imagen (edición) (1–10 imágenes). Omite para texto a imagen. Se aceptan URLs HTTPS públicas. |
| resolution | string | No | "1k" / "2k" / "4k". Por defecto: "2k". Los créditos varían según el nivel (ver Precios). |
| aspectRatio | string | No | "1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9". Por defecto: "1:1". |
Requisitos de la imagen de entrada (modo imagen a imagen)
- Hasta 10 imágenes de referencia por tarea
- Tamaño máximo de archivo 50 MB por imagen
- Lado más corto ≥ 256px
- Relación de aspecto entre 1:3 y 3:1
- Formatos: JPEG, JPG, PNG, WEBP
Los créditos por imagen varían según la resolución — consulta la tabla completa en la sección Precios.
Seedream 5.0 Lite
Generación rápida de texto a imagen e imagen a imagen en 2K o 4K con 15 relaciones de aspecto. Nombre del modelo: seedream-v5.0-lite.
Texto a imagen
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-v5.0-lite",
"inputs": {
"prompt": "A cinematic product photograph, soft studio light",
"resolution": "2k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImagen a imagen (edición)
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-v5.0-lite",
"inputs": {
"prompt": "Restyle the references as a premium fashion campaign",
"urls": ["https://example.com/reference.png"],
"resolution": "4k",
"aspectRatio": "3:4"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskParámetros de Seedream 5.0 Lite
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| prompt | string | Sí | Descripción de la imagen o instrucción de edición. |
| urls | string[] | No | 1–10 URLs HTTPS públicas de imágenes de referencia. Omite para texto a imagen. |
| resolution | string | No | "2k" o "4k". Por defecto: "2k". |
| aspectRatio | string | No | "1:1", "1:2", "2:1", "1:3", "3:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "9:21", o "21:9". |
Seedream 5.0 Pro
Generación y edición de alta fidelidad en 1K o 2K. Nombre del modelo: seedream-v5.0-pro.
Texto a imagen
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-v5.0-pro",
"inputs": {
"prompt": "Editorial portrait with dramatic rim lighting",
"resolution": "2k",
"aspectRatio": "3:4"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImagen a imagen (edición)
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-v5.0-pro",
"inputs": {
"prompt": "Turn the reference into a cinematic poster",
"urls": ["https://example.com/reference.png"],
"resolution": "2k",
"aspectRatio": "1:2"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskParámetros de Seedream 5.0 Pro
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| prompt | string | Sí | Descripción de la imagen o instrucción de edición. |
| urls | string[] | No | 1–10 URLs HTTPS públicas de imágenes de referencia. Omite para texto a imagen. |
| resolution | string | No | "1k" o "2k". Por defecto: "1k". 4k no se admite. |
| aspectRatio | string | No | "1:1", "1:2", "2:1", "1:3", "3:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "9:21", o "21:9". |
Escalador de vídeo
Crear tarea
POST /api/v1/upscale/create
# source.url accepts ANY https video URL — your own CDN, OR a file you first
# uploaded to us via /api/v1/assets/upload (pass the r2Url it returns). No need
# to declare which: we detect it. External URLs are validated; our own are trusted.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source": { "type": "url", "url": "https://your-cdn.com/video.mp4" },
"targetResolution": "2k",
"callBackUrl": "https://your-server.com/webhook"
}' \
https://seegen.ai/api/v1/upscale/create| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| source.type | string | Sí | Usa "url" para cualquier fuente. ("uploadId" es un alias heredado que se mantiene por compatibilidad con versiones anteriores.) |
| source.url | string | No | Con type="url". Cualquier URL de vídeo https — tu propia CDN, o el r2Url devuelto por /api/v1/assets/upload. En el caso de URLs externas, se rechazan http y las IPs privadas/internas (protección SSRF); las URLs de nuestro propio host de recursos omiten esa comprobación. |
| source.r2Url | string | No | Heredado — solo con type="uploadId" (compatibilidad con versiones anteriores). Las integraciones nuevas deben usar type="url". |
| targetResolution | string | Sí | "720p", "1080p", "2k" o "4k". Debe ser superior a la resolución de origen. |
| callBackUrl | string | No | URL de webhook invocada una vez al alcanzar el estado final (completado o fallido). |
Respuesta de creación
{
"taskId": "n770mo4sh6rpi690ff3gwymx",
"orderId": "ord_2026...",
"status": "validating"
}Consultar estado
GET /api/v1/upscale/query?taskId=...
El estado avanza validating → processing → completed / failed.
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/upscale/query?taskId=n770mo4sh6rpi690ff3gwymx"Respuesta de finalización
{
"taskId": "n770mo4sh6rpi690ff3gwymx",
"status": "completed",
"targetResolution": "2k",
"creditsConsumed": 900,
"result": {
"url": "https://static.seegen.ai/standalone-upscale/results/...mp4",
"probedDurationSeconds": 30,
"probedSourceResolution": "1280x720"
},
"error": null,
"createdAt": "2026-04-29T01:23:45.000Z",
"finishedAt": "2026-04-29T01:35:01.000Z"
}Respuesta de fallo
{
"taskId": "n770mo4sh6rpi690ff3gwymx",
"status": "failed",
"creditsConsumed": null,
"result": null,
"error": {
"code": "SOURCE_RESOLUTION_TOO_HIGH",
"message": "Source 3840x2160 is not below target 4k"
}
}Límites
- Fuente: URL https o tu URL R2 subida anteriormente
- Duración de hasta 600 s (los clips de menos de 5 s se facturan como 5 s)
- Tamaño de archivo ≤ 200 MB
- Formato: MP4 / MOV / WebM
- La resolución de origen debe ser inferior a la de destino
Precios
- 720P: 17 créditos/seg (5s = 85, 30s = 510)
- 1080P: 25 créditos/seg (5s = 125, 30s = 750)
- 2K: 38 créditos/seg (5s = 190, 30s = 1140)
- 4K: 50 créditos/seg (5s = 250, 30s = 1500)
- Mínimo de 5 segundos; los fallos reembolsan los créditos automáticamente
Códigos de error
Errores comunes sobre los que puedes actuar. Otros fallos devuelven un campo message autoexplicativo — léelo antes de asumir que el código es uno de estos.
| Código | Significado |
|---|---|
| INVALID_URL | La URL tiene un formato incorrecto o no es https |
| URL_NOT_REACHABLE | No se pudo obtener la URL — comprueba que sea pública y accesible |
| UNSUPPORTED_MEDIA_TYPE | El archivo no es un vídeo, o no está en formato MP4 / MOV / WebM |
| FILE_TOO_LARGE | La fuente supera los 200 MB |
| DURATION_EXCEEDS_LIMIT | La fuente dura más de 600 s |
| SOURCE_RESOLUTION_TOO_HIGH | La fuente ya está en o por encima del destino — elige un destino más alto |
| INSUFFICIENT_CREDITS | Créditos insuficientes — recarga y vuelve a intentarlo |
Callback de webhook
En lugar de hacer polling, puedes proporcionar una callBackUrl para recibir los resultados automáticamente cuando una tarea se completa o falla.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"callBackUrl": "https://your-server.com/webhook/callback",
"inputs": {
"prompt": "A cat playing piano",
"duration": "5s"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskPayload del callback
Cuando la tarea finaliza, enviamos una solicitud POST a tu URL con el mismo formato que la respuesta de queryTask:
// POST to your callBackUrl
{
"taskId": "task_abc123",
"model": "sd2",
"status": "COMPLETED",
"creditsUsed": 200,
"output": [
{
"url": "https://static.seegen.ai/videos/result.mp4",
"width": 1280,
"height": 720
}
],
"error": null,
"createTime": 1711234567890,
"completeTime": 1711234612345
}Política de reintentos: si tu endpoint devuelve un estado que no sea 2xx, reintentamos hasta 3 veces con retrasos crecientes (1s, 5s, 30s).
Formato de respuesta
Respuesta de createTask
// 200 OK
{ "taskId": "task_abc123" }Respuesta de queryTask
{
"taskId": "task_abc123",
"model": "sd2",
"status": "COMPLETED", // "PENDING" | "PROCESSING" | "COMPLETED" | "FAILED"
"creditsUsed": 200,
"output": [ // null when status is not "COMPLETED"
{
"url": "https://static.seegen.ai/videos/result.mp4",
"width": 1280,
"height": 720
}
],
"error": null, // error message when status is "FAILED"
"createTime": 1711234567890,
"completeTime": 1711234612345
}Respuesta de credits
{
"credits": 5000,
"availableCredits": 4800
}Manejo de errores
| Código de estado | Significado | Acción |
|---|---|---|
| 400 | Parámetros no válidos | Revisa el mensaje de error y corrige tu solicitud |
| 401 | Clave de API no válida o ausente | Revisa el formato de tu cabecera Authorization |
| 402 | Créditos insuficientes | Compra más créditos en seegen.ai |
| 403 | Acceso denegado | Solo puedes consultar tus propias tareas |
| 404 | Tarea no encontrada | Verifica que el taskId sea correcto |
| 429 | Límite de concurrencia (3 tareas) | Espera a que finalicen las tareas existentes |
| 500 | Error interno del servidor | Vuelve a intentarlo después de unos segundos |
Validación previa al envío (400 con un código)
Las solicitudes de Seedance se verifican contra el contrato ascendente antes de cobrar cualquier crédito. Cuando una verificación falla, createTask devuelve { "message": "...", "code": "..." } con HTTP 400 y no se crea ninguna tarea. El mensaje indica exactamente qué límite se superó y cómo solucionarlo.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| EMPTY_CONTENT | code | No | No hay prompt ni imagen/vídeo/audio de referencia. |
| AUDIO_ONLY_NOT_SUPPORTED | code | No | El audio es la única referencia en sd2 / sd2-fast / sd2-mini. Añade una imagen o un vídeo, o usa sd2.5 (admite solo audio). |
| DURATION_OUT_OF_RANGE | code | No | duration no es un entero dentro del rango del modelo (familia sd2 "4s"–"15s", sd2.5 "4s"–"30s"). |
| EDIT_SOURCE_VIDEO_REQUIRED / EXTEND_SOURCE_VIDEO_REQUIRED | code | No | Se solicitó mode "edit" / "extend" sin un vídeo en videoUrls. |
| EDIT_SOURCE_DURATION_INVALID | code | No | Edición de vídeo de sd2.5: un vídeo de la solicitud dura menos de 4s o más de 30s (ARK aplica 4–30s a todos los vídeos de una tarea de edición). |
| TOO_MANY_REFERENCES | code | No | Hay más imágenes/vídeos/clips de audio de referencia de los que admite el modelo (familia sd2 9 / 3 / 3, sd2.5 30 / 10 / 10; extend ≤3 vídeos). |
| REFERENCE_VIDEO_DURATION_INVALID | code | No | Un vídeo de referencia supera el máximo por clip (familia sd2 15s, sd2.5 30s) o la duración total de referencia supera el límite (15s / 30s). |
| ASSET_NOT_FOUND / EXTERNAL_URL / READ_TIMEOUT / READ_FAILED | code | No | No se pudo resolver una entrada de videoUrls a uno de tus recursos subidos, o no se pudo leer su duración. |
Ejemplos completos
Flujo de trabajo completo: sube un recurso, espera la revisión, crea una tarea con el recurso aprobado y consulta el resultado.
const API_KEY = process.env.API_KEY;
const BASE = "https://seegen.ai/api/v1";
const headers = {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json",
};
// 1. Upload asset and wait for review
// (To upload a LOCAL file instead of a URL, POST multipart/form-data with a "file"
// field — no Content-Type header, no "type" — see the Upload Asset section above.)
async function uploadAndWaitForAsset(url, type = "IMAGE") {
const res = await fetch(`${BASE}/assets/upload`, {
method: "POST",
headers,
body: JSON.stringify({ url, type }),
});
if (!res.ok) throw new Error(`Upload failed: ${(await res.json()).message}`);
const asset = await res.json();
console.log(`Asset uploaded: ${asset.assetId}, status: ${asset.status}`);
// Poll until review completes
while (true) {
const statusRes = await fetch(
`${BASE}/assets/status?assetId=${asset.assetId}`,
{ headers }
);
const status = await statusRes.json();
if (status.status === "ACTIVE") {
console.log(`Asset approved: asset://${status.volcAssetId}`);
return status.volcAssetId;
}
if (status.status === "FAILED") {
throw new Error(`Asset review failed: ${status.failReason}`);
}
await new Promise((r) => setTimeout(r, 3000));
}
}
// 2. Create a task
async function createTask(inputs, callBackUrl) {
const res = await fetch(`${BASE}/jobs/createTask`, {
method: "POST",
headers,
body: JSON.stringify({
model: "sd2",
inputs,
...(callBackUrl && { callBackUrl }),
}),
});
if (!res.ok) throw new Error(`[${res.status}] ${(await res.json()).message}`);
return res.json();
}
// 3. Poll until done
async function waitForResult(taskId, timeoutMs = 300000) {
const start = Date.now();
while (Date.now() - start < timeoutMs) {
const res = await fetch(
`${BASE}/jobs/queryTask?taskId=${taskId}`,
{ headers }
);
const result = await res.json();
if (result.status === "COMPLETED") return result;
if (result.status === "FAILED") throw new Error(result.error);
await new Promise((r) => setTimeout(r, 5000));
}
throw new Error("Timeout waiting for task");
}
// Full workflow: upload → review → generate → result
async function main() {
// Upload image and wait for review
const volcAssetId = await uploadAndWaitForAsset(
"https://example.com/photo.jpg", "IMAGE"
);
// Create task with approved asset
const { taskId } = await createTask({
urls: [`asset://${volcAssetId}`],
prompt: "The person slowly looks up and smiles",
duration: "5s",
});
console.log(`Task: ${taskId}`);
// Wait for video
const result = await waitForResult(taskId);
console.log(`Video: ${result.output[0].url}`);
}
main().catch(console.error);¿Necesitas ayuda? Únete a nuestro Discord o contáctanos