API pública

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.

URL basehttps://novamotions.com/api/v1

Inicio 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. 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. 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. 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.

HTTP
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

GET/api/v1/models

Todos 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

JSON
{
  "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

GET/api/v1/balance

Los 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

JSON
{
  "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

POST/api/v1/videos

Texto 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

  • modelstring
    ObligatorioIdentificador del modelo desde el punto final de modelos.
  • promptstring
    ObligatorioQué debe pasar en el clip. Opcional para imagen a video, donde el cuadro inicial es el guía.
  • modestring
    Opcionaltexto a video, imagen a video o referencia a video. Se elige según tus entradas si lo omites.
  • durationinteger
    OpcionalDuración del clip en segundos. Debe ser una de las duraciones del modelo, si no se usa la predeterminada.
  • resolutionstring
    OpcionalResolución de salida como 720p o 1080p, de la lista del modelo.
  • aspect_ratiostring
    Opcional16:9, 9:16, 1:1, 4:3, 3:4 o 21:9, de la lista del modelo. Por defecto 16:9.
  • audioboolean
    OpcionalGenera 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.
  • countinteger
    OpcionalCuántos videos crear con la misma solicitud, de 1 a 4. Cada uno es una tarea separada y se cobra por separado.
  • seedinteger
    OpcionalSemilla 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

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 44,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 44,
  "balance": 1131
}

Crear imágenes

POST/api/v1/images

Texto 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

  • modelstring
    ObligatorioIdentificador del modelo desde el punto final de modelos.
  • promptstring
    ObligatorioQué debe mostrar la imagen, o cómo cambiar la imagen que envías.
  • modestring
    Opcionaltexto a imagen o edición de imagen. Se elige según tus entradas si se omite.
  • resolutionstring
    Opcional1K, 2K o 4K, de la lista del modelo.
  • aspect_ratiostring
    OpcionalRelació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.
  • countinteger
    OpcionalImágenes por solicitud, de 1 a 4. Cada una es una tarea separada.
  • seedinteger
    OpcionalSemilla 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

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 3,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 3,
  "balance": 1172
}

Crear una canción

POST/api/v1/music

Una canción completa desde una descripción, con tus propias letras o como instrumental.

Parámetros

  • modelstring
    ObligatorioIdentificador del modelo desde el punto final de modelos.
  • promptstring
    ObligatorioGénero, ambiente, instrumentos y tempo de la canción.
  • durationinteger
    OpcionalDuración de la canción en segundos, de las duraciones del modelo.
  • lyricsstring
    OpcionalTus propias letras. Déjalo vacío para que el modelo las escriba.
  • instrumentalboolean
    OpcionalCrear 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

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 11,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 11,
  "balance": 1164
}

Obtener una tarea

GET/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

JSON
{
  "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

GET/api/v1/tasks

Tareas 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

  • limitinteger
    OpcionalResultados por página, de 1 a 50. Por defecto 20.
  • cursorstring
    OpcionalEl valor next_cursor de la página anterior.
  • statusstring
    OpcionalSolo 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

JSON
{
  "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.

Respuesta de error
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this request. Top up or renew your plan, then retry.",
    "needed": 44,
    "balance": 14
  }
}
  • 400invalid_jsonEl cuerpo no es un objeto JSON.
  • 401unauthorizedNo hay clave Bearer en el encabezado Authorization.
  • 401invalid_api_keyLa clave no existe o está mal formada.
  • 401key_revokedLa clave fue revocada. Crea una nueva.
  • 402insufficient_creditsNo hay suficientes créditos para esta solicitud. La respuesta incluye necesarios y saldo.
  • 403plan_limit_exceededLa solicitud supera el límite por generación del plan. Reduce la duración o resolución.
  • 403account_suspendedLa cuenta propietaria de la clave está suspendida.
  • 403api_disabledLa API está desactivada por ahora.
  • 404not_foundLa tarea o endpoint no existe en esta cuenta.
  • 404model_not_foundNo hay modelo con este identificador. Revisa el endpoint de modelos.
  • 409too_many_runningEsta cuenta ya tiene 3 tareas en ejecución. Espera a que termine una.
  • 422invalid_requestFalta un campo o tiene un tipo incorrecto. details lista cada problema.
  • 422wrong_endpointEl modelo pertenece a otro endpoint, por ejemplo un modelo de imagen enviado a videos.
  • 422invalid_modeEl modo no es uno que conozca este endpoint.
  • 422mode_not_supportedEl modelo no soporta este modo.
  • 422prompt_requiredEste modo necesita un prompt.
  • 422image_requiredEste modo necesita image_url.
  • 429rate_limitedDemasiadas solicitudes. Espera los segundos indicados en Retry-After y vuelve a intentar.
  • 500internal_errorAlgo falló en nuestro lado. Intenta de nuevo en un momento.
  • 503service_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.
Encabezados de límite de velocidad
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42

Modelos

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.5seedance-2-545 créditos
  • Seedance 2.0 Proseedance-2-pro35 créditos
  • Seedance 2.0 Miniseedance-2-mini24 créditos
  • Wan 3.0wan-346 créditos
  • MiniMax H3minimax-h330 créditos
  • Kling 3kling-330 créditos
  • Seedance 1.5 Proseedance-1-5-pro31 créditos
  • Seedance 1.0seedance-132 créditos
  • Kling O3kling-o346 créditos
  • Kling 2.6kling-2-641 créditos
  • Wan 2.7wan-2-735 créditos
  • Wanwan32 créditos
  • Grokgrok-video47 créditos
  • Veo 3veo-342 créditos
  • GPT Image 2.5gpt-image-2-54 créditos
  • GPT Image 2gpt-image-23 créditos
  • Seedream 5 Proseedream-5-pro4 créditos
  • Seedream 5seedream-53 créditos
  • Nano Banana Pronano-banana-pro5 créditos
  • Nano Banana 2nano-banana-23 créditos
  • Nano Banana 2 Litenano-banana-2-lite2 créditos
  • AI Musicai-music6 créditos

¿Listo para crear?

Crea una clave en tu cuenta y envía tu primera solicitud en un minuto.

Crear una clave API