Genera videos, imágenes y música desde tu propio código
Crea una clave, envía una solicitud con autenticación Bearer y consulta la tarea hasta que tu archivo esté listo. Mismos modelos, precios, límites de plan y reembolsos que el estudio NovaMotions AI, desde un saldo compartido de créditos.
https://novamotions.com/api/v1Inicio rápido
Tres pasos de cero a un video terminado. Cada solicitud es HTTPS simple con JSON, así que cualquier lenguaje o herramienta funciona.
- 1
Crear una clave
Abre la página de API en tu cuenta y crea una clave. La clave completa se muestra una vez, así que guárdala en una variable de entorno llamada API_KEY.
- 2
Enviar una tarea
Envía el modelo, un prompt y cualquier opción. Los créditos se cobran una vez, al enviar, y la respuesta te indica cuántos y cuántos quedan.
curl -X POST https://novamotions.com/api/v1/videos \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2-pro", "prompt": "Una toma lenta con dolly por una calle neón lluviosa de noche, reflejos en asfalto mojado, cinematográfico", "duration": 5, "resolution": "720p", "aspect_ratio": "16:9" }' - 3
Consultar hasta que esté listo
Revisa la tarea cada pocos segundos. Cuando el estado sea 'succeeded', descarga el archivo desde output_url. Si falló, los créditos ya están de vuelta en tu saldo.
TASK_ID=your_task_id while true do TASK=$(curl -s https://novamotions.com/api/v1/tasks/$TASK_ID -H "Authorization: Bearer $API_KEY") STATUS=$(echo "$TASK" | jq -r .status) echo "$STATUS" if [ "$STATUS" = "succeeded" ] || [ "$STATUS" = "failed" ] then echo "$TASK" | jq break fi sleep 5 done
Autenticación
Envía tu clave en el encabezado Authorization de cada solicitud. Las claves comienzan con nm_live_ y pertenecen a una cuenta.
Authorization: Bearer nm_live_your_api_key
Content-Type: application/json- URL base
- Todos los puntos finales están bajo https://novamotions.com/api/v1 y devuelven JSON.
- Mantén las claves en secreto
- Llama a la API desde tu servidor, nunca desde un navegador o app móvil. Una clave revocada deja de funcionar de inmediato.
- Un solo saldo
- Las llamadas a la API gastan los créditos del dueño de la clave, el mismo saldo que usa el estudio. También aplican los límites del plan por generación.
- URLs de medios
- Las imágenes, videos y audios que envíes deben ser URLs públicas https que carguen sin cookies ni inicio de sesión.
Lista de modelos
/api/v1/modelsTodos los modelos que ofrece la API, con sus modos, duraciones, resoluciones, relaciones de aspecto, soporte de audio, límites de referencia y su precio más bajo en créditos. Úsalo para crear un selector de modelos en lugar de codificar opciones.
Solicitud
curl https://novamotions.com/api/v1/models \
-H "Authorization: Bearer $API_KEY"Respuesta
{
"object": "list",
"data": [
{
"slug": "seedance-2-pro",
"name": "Seedance 2.0 Pro",
"kind": "video",
"endpoint": "/api/v1/videos",
"available": true,
"modes": [
"text-to-video",
"image-to-video",
"reference-to-video"
],
"durations": [
4,
5,
6,
8,
10,
12,
15
],
"default_duration": 5,
"resolutions": [
"480p",
"720p",
"1080p",
"4K"
],
"aspect_ratios": [
"16:9",
"9:16",
"1:1",
"4:3",
"3:4",
"21:9"
],
"audio": {
"supported": true,
"extra_credits": 20
},
"references": {
"images": 9,
"videos": 3,
"audio": 3,
"end_frame": true
},
"max_count": 4,
"prompt_max_length": 10000,
"from_credits": 35
}
]
}Consultar saldo
/api/v1/balanceLos créditos que el dueño de la clave puede gastar ahora mismo, divididos en grupos con sus fechas de expiración, más el plan actual.
Solicitud
curl https://novamotions.com/api/v1/balance \
-H "Authorization: Bearer $API_KEY"Respuesta
{
"object": "balance",
"balance": 1175,
"never_expiring": 375,
"next_expiry": "2026-11-17T00:00:00.000Z",
"pools": [
{
"source": "subscription",
"remaining": 800,
"granted": 2000,
"expires_at": "2026-11-17T00:00:00.000Z"
},
{
"source": "topup",
"remaining": 375,
"granted": 375,
"expires_at": null
}
],
"plan": {
"name": "Pro",
"status": "active",
"cycle": "monthly",
"renews_or_ends_at": "2026-11-14T00:00:00.000Z"
}
}Crear un video
/api/v1/videosTexto a video, imagen a video (un cuadro inicial y opcionalmente uno final) o referencia a video (imágenes, clips y audio que guían el resultado). El modo se elige según las entradas si lo omites.
Parámetros
modelstringObligatorioIdentificador del modelo desde el punto final de modelos.promptstringObligatorioQué debe pasar en el clip. Opcional para imagen a video, donde el cuadro inicial es el guía.modestringOpcionaltexto a video, imagen a video o referencia a video. Se elige según tus entradas si lo omites.durationintegerOpcionalDuración del clip en segundos. Debe ser una de las duraciones del modelo, si no se usa la predeterminada.resolutionstringOpcionalResolución de salida como 720p o 1080p, de la lista del modelo.aspect_ratiostringOpcional16:9, 9:16, 1:1, 4:3, 3:4 o 21:9, de la lista del modelo. Por defecto 16:9.audiobooleanOpcionalGenera una banda sonora con diálogos, efectos y ambiente en modelos que lo soportan. Añade 20 créditos. Por defecto falso.image_urlstring (URL)OpcionalFotograma inicial para imagen a video.end_image_urlstring (URL)OpcionalFotograma final, en modelos que soportan primer y último fotograma.reference_image_urlsstring[]OpcionalImágenes de referencia para referencia a video, hasta el límite del modelo.reference_video_urlsstring[]OpcionalClips de referencia para referencia a video, hasta el límite del modelo.reference_audio_urlsstring[]OpcionalAudio que guía la banda sonora, hasta el límite del modelo.countintegerOpcionalCuántos videos crear con la misma solicitud, de 1 a 4. Cada uno es una tarea separada y se cobra por separado.seedintegerOpcionalSemilla fija para resultados repetibles. Cada ítem extra en un lote recibe la siguiente semilla.
Solicitud
curl -X POST https://novamotions.com/api/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-pro",
"prompt": "Una toma lenta con dolly por una calle neón lluviosa de noche, reflejos en asfalto mojado, cinematográfico",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}'Respuesta
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 44,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 44,
"balance": 1131
}Crear imágenes
/api/v1/imagesTexto a imagen, o editar una imagen existente con un prompt. Pide hasta cuatro imágenes por solicitud, cada una es una tarea independiente.
Parámetros
modelstringObligatorioIdentificador del modelo desde el punto final de modelos.promptstringObligatorioQué debe mostrar la imagen, o cómo cambiar la imagen que envías.modestringOpcionaltexto a imagen o edición de imagen. Se elige según tus entradas si se omite.resolutionstringOpcional1K, 2K o 4K, de la lista del modelo.aspect_ratiostringOpcionalRelación de aspecto de la lista del modelo, incluyendo Auto en modelos que lo soportan.image_urlstring (URL)OpcionalLa imagen a editar. Requerido para edición de imagen.reference_image_urlsstring[]OpcionalImágenes de referencia extra para una edición, hasta el límite del modelo.countintegerOpcionalImágenes por solicitud, de 1 a 4. Cada una es una tarea separada.seedintegerOpcionalSemilla fija para resultados repetibles. Cada ítem extra en un lote recibe la siguiente semilla.
Solicitud
curl -X POST https://novamotions.com/api/v1/images \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Foto de producto en estudio de una taza de cerámica sobre roble, luz suave de ventana, poca profundidad de campo",
"resolution": "1K",
"aspect_ratio": "1:1",
"count": 1
}'Respuesta
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 3,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 3,
"balance": 1172
}Crear una canción
/api/v1/musicUna canción completa desde una descripción, con tus propias letras o como instrumental.
Parámetros
modelstringObligatorioIdentificador del modelo desde el punto final de modelos.promptstringObligatorioGénero, ambiente, instrumentos y tempo de la canción.durationintegerOpcionalDuración de la canción en segundos, de las duraciones del modelo.lyricsstringOpcionalTus propias letras. Déjalo vacío para que el modelo las escriba.instrumentalbooleanOpcionalCrear una canción sin voces. Por defecto falso.
Solicitud
curl -X POST https://novamotions.com/api/v1/music \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ai-music",
"prompt": "Hip hop lo-fi cálido con piano suave, crujido de vinilo y un ritmo relajado de madrugada",
"duration": 60,
"instrumental": false
}'Respuesta
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 11,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 11,
"balance": 1164
}Obtener una tarea
/api/v1/tasks/{id}Consulta una tarea por su id. Cuando el estado sea 'succeeded', output_url apunta al archivo terminado. Consultar usa el límite de lectura, así que no consume tu presupuesto de envío.
Solicitud
curl https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2 \
-H "Authorization: Bearer $API_KEY"Respuesta
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"object": "task",
"kind": "video",
"model": "seedance-2-pro",
"mode": "text-to-video",
"status": "succeeded",
"progress": 100,
"prompt": "Una toma lenta con dolly por una calle neón lluviosa de noche, reflejos en asfalto mojado, cinematográfico",
"params": {
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": false,
"seed": null
},
"output_url": "https://novamotions.com/uploads/videos/2026/10/example.mp4",
"thumbnail_url": "https://novamotions.com/uploads/videos/2026/10/example.jpg",
"width": 1280,
"height": 720,
"duration_seconds": 5,
"credits": 44,
"refunded": false,
"error": null,
"created_at": "2026-10-18T09:30:00.000Z",
"completed_at": "2026-10-18T09:31:12.000Z"
}Listar tareas
/api/v1/tasksTareas que creaste vía API en los últimos 30 días, las más recientes primero, con la misma estructura que una tarea individual. Pasa next_cursor como cursor para cargar la siguiente página.
Parámetros
limitintegerOpcionalResultados por página, de 1 a 50. Por defecto 20.cursorstringOpcionalEl valor next_cursor de la página anterior.statusstringOpcionalSolo tareas con este estado: en cola, en ejecución, completadas o fallidas.
Solicitud
curl https://novamotions.com/api/v1/tasks?limit=20 \
-H "Authorization: Bearer $API_KEY"Respuesta
{
"object": "list",
"data": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"object": "task",
"kind": "video",
"model": "seedance-2-pro",
"mode": "text-to-video",
"status": "succeeded",
"progress": 100,
"prompt": "Una toma lenta con dolly por una calle neón lluviosa de noche, reflejos en asfalto mojado, cinematográfico",
"params": {
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": false,
"seed": null
},
"output_url": "https://novamotions.com/uploads/videos/2026/10/example.mp4",
"thumbnail_url": "https://novamotions.com/uploads/videos/2026/10/example.jpg",
"width": 1280,
"height": 720,
"duration_seconds": 5,
"credits": 44,
"refunded": false,
"error": null,
"created_at": "2026-10-18T09:30:00.000Z",
"completed_at": "2026-10-18T09:31:12.000Z"
}
],
"next_cursor": null
}Estados de las tareas
Una tarea pasa de en cola a en ejecución y termina como completada o fallida. Deja de consultar en cualquiera de los estados finales.
queued- Aceptada y esperando un espacio para renderizar. Sigue consultando.
running- Renderizando ahora. el progreso va de 0 a 99.
succeeded- Hecho. output_url y thumbnail_url apuntan a los archivos terminados.
failed- Terminó sin resultado. error explica por qué y refunded es true, los créditos vuelven a tu saldo.
Códigos de error
Cada error tiene la misma estructura. Ramifica según el código y muestra el mensaje a una persona. Una tarea aceptada puede fallar después, así que revisa su estado cuando consultes.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this request. Top up or renew your plan, then retry.",
"needed": 44,
"balance": 14
}
}- 400
invalid_jsonEl cuerpo no es un objeto JSON. - 401
unauthorizedNo hay clave Bearer en el encabezado Authorization. - 401
invalid_api_keyLa clave no existe o está mal formada. - 401
key_revokedLa clave fue revocada. Crea una nueva. - 402
insufficient_creditsNo hay suficientes créditos para esta solicitud. La respuesta incluye necesarios y saldo. - 403
plan_limit_exceededLa solicitud supera el límite por generación del plan. Reduce la duración o resolución. - 403
account_suspendedLa cuenta propietaria de la clave está suspendida. - 403
api_disabledLa API está desactivada por ahora. - 404
not_foundLa tarea o endpoint no existe en esta cuenta. - 404
model_not_foundNo hay modelo con este identificador. Revisa el endpoint de modelos. - 409
too_many_runningEsta cuenta ya tiene 3 tareas en ejecución. Espera a que termine una. - 422
invalid_requestFalta un campo o tiene un tipo incorrecto. details lista cada problema. - 422
wrong_endpointEl modelo pertenece a otro endpoint, por ejemplo un modelo de imagen enviado a videos. - 422
invalid_modeEl modo no es uno que conozca este endpoint. - 422
mode_not_supportedEl modelo no soporta este modo. - 422
prompt_requiredEste modo necesita un prompt. - 422
image_requiredEste modo necesita image_url. - 429
rate_limitedDemasiadas solicitudes. Espera los segundos indicados en Retry-After y vuelve a intentar. - 500
internal_errorAlgo falló en nuestro lado. Intenta de nuevo en un momento. - 503
service_busyEstamos a capacidad ahora mismo. Intenta de nuevo en unos minutos.
Créditos y reembolsos
Cobrado una vez, al enviar
Cada tarea cuesta igual que con las mismas configuraciones en el estudio. La respuesta al enviar devuelve credits_charged y tu nuevo saldo. Audio en video añade 20 créditos.
Tareas fallidas se reembolsan en su totalidad
Si una tarea falla por cualquier motivo, todos sus créditos vuelven a las fuentes de donde vinieron y la tarea muestra refunded como true. No hay nada que reclamar.
Se aplican límites del plan
El límite por generación de tu plan se aplica también a tareas API. Se gastan primero los créditos que expiran antes, y los de recarga al final.
Límites de tasa
Los límites se cuentan por clave en un minuto móvil. Si excedes el límite recibes HTTP 429 con un encabezado Retry-After en segundos. Cada respuesta lleva los encabezados X-RateLimit para que puedas reducir la velocidad antes de eso.
- Enviar
- 30 por minuto
- Crear videos, imágenes y canciones.
- Leer
- 120 por minuto
- Tareas, saldo y modelos. Contados por separado de los envíos.
- Ejecutándose a la vez
- 3
- Tareas por cuenta renderizando al mismo tiempo.
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42Modelos
Los modelos que puedes usar hoy con sus identificadores y el precio más bajo. El endpoint de modelos devuelve la misma lista con todas las opciones.
- Seedance 2.5
seedance-2-5Video45 créditos - Seedance 2.0 Pro
seedance-2-proVideo35 créditos - Seedance 2.0 Mini
seedance-2-miniVideo24 créditos - Wan 3.0
wan-3Video46 créditos - MiniMax H3
minimax-h3Video30 créditos - Kling 3
kling-3Video30 créditos - Seedance 1.5 Pro
seedance-1-5-proVideo31 créditos - Seedance 1.0
seedance-1Video32 créditos - Kling O3
kling-o3Video46 créditos - Kling 2.6
kling-2-6Video41 créditos - Wan 2.7
wan-2-7Video35 créditos - Wan
wanVideo32 créditos - Grok
grok-videoVideo47 créditos - Veo 3
veo-3Video42 créditos - GPT Image 2.5
gpt-image-2-5Imagen4 créditos - GPT Image 2
gpt-image-2Imagen3 créditos - Seedream 5 Pro
seedream-5-proImagen4 créditos - Seedream 5
seedream-5Imagen3 créditos - Nano Banana Pro
nano-banana-proImagen5 créditos - Nano Banana 2
nano-banana-2Imagen3 créditos - Nano Banana 2 Lite
nano-banana-2-liteImagen2 créditos - AI Music
ai-musicMúsica6 créditos
¿Listo para crear?
Crea una clave en tu cuenta y envía tu primera solicitud en un minuto.