Публичное API

Создавайте видео, изображения и музыку с помощью собственного кода

Создайте ключ, отправьте запрос с авторизацией Bearer и опрашивайте задачу, пока файл не будет готов. Те же модели, цены, лимиты плана и возвраты, что и в студии NovaMotions AI, с одного общего баланса кредитов.

Базовый URLhttps://novamotions.com/api/v1

Быстрый старт

Три шага от нуля до готового видео. Каждый запрос — обычный HTTPS с JSON, так что можно использовать любой язык или инструмент.

  1. 1

    Создайте ключ

    Откройте страницу API в вашем аккаунте и создайте ключ. Полный ключ показывается один раз, сохраните его в переменную окружения с именем API_KEY.

  2. 2

    Отправьте задачу

    Укажите модель, запрос и любые опции. Кредиты списываются один раз при отправке, в ответе указано, сколько списано и сколько осталось.

    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": "Медленная съёмка с движением через дождливую неоновую улицу ночью, отражения на мокром асфальте, кинематографично",
        "duration": 5,
        "resolution": "720p",
        "aspect_ratio": "16:9"
      }'
  3. 3

    Опрашивайте, пока не будет готово

    Проверяйте задачу каждые несколько секунд. Когда статус — succeeded, скачайте файл по output_url. Если задача провалилась, кредиты уже возвращены на баланс.

    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

Аутентификация

Отправляйте ключ в заголовке Authorization каждого запроса. Ключи начинаются с nm_live_ и принадлежат одному аккаунту.

HTTP
Authorization: Bearer nm_live_your_api_key
Content-Type: application/json
Базовый URL
Все эндпоинты доступны по адресу https://novamotions.com/api/v1 и возвращают JSON.
Храните ключи в секрете
Вызывайте API с вашего сервера, никогда не из браузера или мобильного приложения. Отозванный ключ сразу перестаёт работать.
Один баланс
Вызовы API расходуют кредиты владельца ключа, тот же баланс, что и в студии. Также применяются лимиты плана на генерацию.
URL медиа
Изображения, видео и аудио, которые вы передаёте, должны быть публичными https-ссылками, доступными без куки или входа в систему.

Список моделей

GET/api/v1/models

Все модели, доступные через API, с режимами, длительностями, разрешениями, соотношениями сторон, поддержкой аудио, ограничениями по ссылкам и минимальной ценой в кредитах. Используйте для создания выбора модели вместо жёсткого кодирования опций.

Запрос

curl https://novamotions.com/api/v1/models \
  -H "Authorization: Bearer $API_KEY"

Ответ

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
    }
  ]
}

Проверить баланс

GET/api/v1/balance

Кредиты, которые владелец ключа может потратить прямо сейчас, разбитые по пулам с датами истечения, а также текущий план.

Запрос

curl https://novamotions.com/api/v1/balance \
  -H "Authorization: Bearer $API_KEY"

Ответ

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

Создать видео

POST/api/v1/videos

Текст в видео, изображение в видео (начальный кадр и опционально конечный) или ссылка на видео (изображения, клипы и аудио, задающие результат). Режим выбирается по входным данным, если не указан.

Параметры

  • modelstring
    ОбязательноИдентификатор модели из эндпоинта моделей.
  • promptstring
    ОбязательноЧто должно происходить в клипе. Необязательно для image-to-video, где важен начальный кадр.
  • modestring
    Необязательноtext-to-video, image-to-video или reference-to-video. Выбирается по входным данным, если не указан.
  • durationinteger
    НеобязательноДлительность клипа в секундах. Должна быть одной из длительностей модели, иначе используется значение по умолчанию.
  • resolutionstring
    НеобязательноРазрешение вывода, например 720p или 1080p, из списка модели.
  • aspect_ratiostring
    Необязательно16:9, 9:16, 1:1, 4:3, 3:4 или 21:9 из списка моделей. По умолчанию 16:9.
  • audioboolean
    НеобязательноСоздайте звуковую дорожку с диалогами, эффектами и атмосферой на поддерживаемых моделях. Стоимость 20 кредитов. По умолчанию выключено.
  • image_urlstring (URL)
    НеобязательноНачальный кадр для преобразования изображения в видео.
  • end_image_urlstring (URL)
    НеобязательноКонечный кадр, для моделей, поддерживающих первый и последний кадр.
  • reference_image_urlsstring[]
    НеобязательноСправочные изображения для преобразования в видео, до лимита модели.
  • reference_video_urlsstring[]
    НеобязательноСправочные видеоклипы для преобразования в видео, до лимита модели.
  • reference_audio_urlsstring[]
    НеобязательноАудио, задающее направление звуковой дорожке, до лимита модели.
  • countinteger
    НеобязательноСколько видео создать по одному запросу, от 1 до 4. Каждое — отдельная задача с отдельной оплатой.
  • seedinteger
    НеобязательноФиксированное зерно для повторяемых результатов. Для каждого следующего элемента в партии используется следующее зерно.

Запрос

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": "Медленная съёмка с движением через дождливую неоновую улицу ночью, отражения на мокром асфальте, кинематографично",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'

Ответ

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

Создать изображения

POST/api/v1/images

Текст в изображение или редактирование существующего изображения с помощью запроса. Можно запросить до четырёх изображений за один запрос, каждое — отдельная задача.

Параметры

  • modelstring
    ОбязательноИдентификатор модели из эндпоинта моделей.
  • promptstring
    ОбязательноЧто должно быть изображено на картинке или как изменить переданное изображение.
  • modestring
    Необязательноtext-to-image или image-edit. Выбирается из ваших данных, если не указано.
  • resolutionstring
    Необязательно1K, 2K или 4K из списка моделей.
  • aspect_ratiostring
    НеобязательноСоотношение сторон из списка моделей, включая Авто для поддерживаемых моделей.
  • image_urlstring (URL)
    НеобязательноИзображение для редактирования. Обязательно для image-edit.
  • reference_image_urlsstring[]
    НеобязательноДополнительные справочные изображения для редактирования, до лимита модели.
  • countinteger
    НеобязательноИзображений на запрос, от 1 до 4. Каждое — отдельная задача.
  • seedinteger
    НеобязательноФиксированное зерно для повторяемых результатов. Для каждого следующего элемента в партии используется следующее зерно.

Запрос

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": "Студийное фото керамической кофейной чашки на дубовом столе, мягкий свет из окна, малая глубина резкости",
    "resolution": "1K",
    "aspect_ratio": "1:1",
    "count": 1
  }'

Ответ

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

Создать песню

POST/api/v1/music

Полная песня по описанию, с вашими текстами или как инструментальная.

Параметры

  • modelstring
    ОбязательноИдентификатор модели из эндпоинта моделей.
  • promptstring
    ОбязательноЖанр, настроение, инструменты и темп песни.
  • durationinteger
    НеобязательноДлительность песни в секундах, из доступных у модели.
  • lyricsstring
    НеобязательноВаши собственные тексты песен. Оставьте пустым, чтобы модель написала их.
  • instrumentalboolean
    НеобязательноСоздать песню без вокала. По умолчанию выключено.

Запрос

curl -X POST https://novamotions.com/api/v1/music \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ai-music",
    "prompt": "Тёплый лоу-фай хип-хоп с мягким пианино, треск винила и расслабленный ночной грув",
    "duration": 60,
    "instrumental": false
  }'

Ответ

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

Получить задачу

GET/api/v1/tasks/{id}

Опрашивайте задачу по её id. Когда статус — succeeded, output_url указывает на готовый файл. Опрашивание использует лимит на чтение, не расходуя лимит на отправку.

Запрос

curl https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2 \
  -H "Authorization: Bearer $API_KEY"

Ответ

JSON
{
  "id": "cmtask8k2x0001ab7c9d0e1f2",
  "object": "task",
  "kind": "video",
  "model": "seedance-2-pro",
  "mode": "text-to-video",
  "status": "succeeded",
  "progress": 100,
  "prompt": "Медленная съёмка с движением через дождливую неоновую улицу ночью, отражения на мокром асфальте, кинематографично",
  "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"
}

Список задач

GET/api/v1/tasks

Задачи, созданные через API за последние 30 дней, сначала новые, с тем же форматом, что и одна задача. Передайте next_cursor как cursor для загрузки следующей страницы.

Параметры

  • limitinteger
    НеобязательноРезультатов на страницу, от 1 до 50. По умолчанию 20.
  • cursorstring
    НеобязательноЗначение next_cursor с предыдущей страницы.
  • statusstring
    НеобязательноТолько задачи с этим статусом: queued, running, succeeded или failed.

Запрос

curl https://novamotions.com/api/v1/tasks?limit=20 \
  -H "Authorization: Bearer $API_KEY"

Ответ

JSON
{
  "object": "list",
  "data": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "object": "task",
      "kind": "video",
      "model": "seedance-2-pro",
      "mode": "text-to-video",
      "status": "succeeded",
      "progress": 100,
      "prompt": "Медленная съёмка с движением через дождливую неоновую улицу ночью, отражения на мокром асфальте, кинематографично",
      "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
}

Статусы задач

Задача переходит из очереди в выполнение и заканчивается успешно или с ошибкой. Остановите опрос при достижении конечного статуса.

queued
Принята и ожидает слот для рендеринга. Продолжайте опрос.
running
Сейчас рендерится. Прогресс от 0 до 99.
succeeded
Готово. output_url и thumbnail_url указывают на готовые файлы.
failed
Завершилась без результата. В error указана причина, refunded равно true — кредиты возвращены на баланс.

Коды ошибок

Каждая ошибка имеет одинаковую структуру. Определяйте по коду и показывайте сообщение пользователю. Задача, принятая к исполнению, может позже завершиться с ошибкой, поэтому проверяйте статус при опросе.

Ответ с ошибкой
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this request. Top up or renew your plan, then retry.",
    "needed": 44,
    "balance": 14
  }
}
  • 400invalid_jsonТело запроса не является JSON-объектом.
  • 401unauthorizedВ заголовке Authorization отсутствует Bearer ключ.
  • 401invalid_api_keyКлюч не существует или имеет неверный формат.
  • 401key_revokedКлюч был отозван. Создайте новый.
  • 402insufficient_creditsНедостаточно кредитов для этого запроса. В ответе указаны необходимые и текущий баланс.
  • 403plan_limit_exceededЗапрос превышает лимит генерации вашего плана. Уменьшите длительность или разрешение.
  • 403account_suspendedАккаунт, к которому привязан ключ, заблокирован.
  • 403api_disabledAPI временно отключено.
  • 404not_foundЗадача или конечная точка не найдены в этом аккаунте.
  • 404model_not_foundМодель с таким идентификатором не найдена. Проверьте endpoint моделей.
  • 409too_many_runningВ этом аккаунте уже выполняется 3 задач. Подождите завершения одной.
  • 422invalid_requestОтсутствует поле или неверный тип. details содержит список проблем.
  • 422wrong_endpointМодель принадлежит другому endpoint, например, модель изображения отправлена в видео.
  • 422invalid_modeРежим неизвестен этому endpoint.
  • 422mode_not_supportedМодель не поддерживает этот режим.
  • 422prompt_requiredДля этого режима требуется подсказка.
  • 422image_requiredДля этого режима требуется image_url.
  • 429rate_limitedСлишком много запросов. Подождите время из Retry-After, затем повторите.
  • 500internal_errorНа нашей стороне произошла ошибка. Попробуйте позже.
  • 503service_busyСервис перегружен. Попробуйте через несколько минут.

Кредиты и возвраты

Списывается один раз при отправке

Каждая задача стоит столько же, сколько при тех же настройках в студии. В ответе на отправку возвращаются credits_charged и новый баланс. Аудио в видео добавляет 20 кредитов.

Возврат кредитов за неудачные задачи

Если задача не выполнена по любой причине, все её кредиты возвращаются в соответствующие пулы, а у задачи выставляется refunded = true. Запрашивать возврат не нужно.

Применяются лимиты плана

Лимит генерации вашего плана действует и для API задач. Сначала расходуются кредиты с ближайшим сроком истечения, пополнение — в последнюю очередь.

Ограничения по скорости

Ограничения считаются по ключу за скользящую минуту. При превышении лимита возвращается HTTP 429 с заголовком Retry-After в секундах. Каждый ответ содержит заголовки X-RateLimit, чтобы вы могли снизить скорость до превышения.

Отправка
30 в минуту
Создание видео, изображений и песен.
Чтение
120 в минуту
Задачи, баланс и модели. Считается отдельно от отправок.
Одновременное выполнение
3
Количество задач на аккаунт, выполняющихся одновременно.
Заголовки ограничения скорости
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42

Модели

Модели, которые вы можете использовать сегодня, с их идентификаторами и минимальной ценой. Эндпоинт моделей возвращает тот же список со всеми опциями.

  • Seedance 2.5seedance-2-545 кредитов
  • Seedance 2.0 Proseedance-2-pro35 кредитов
  • Seedance 2.0 Miniseedance-2-mini24 кредитов
  • Wan 3.0wan-346 кредитов
  • MiniMax H3minimax-h330 кредитов
  • Kling 3kling-330 кредитов
  • Seedance 1.5 Proseedance-1-5-pro31 кредитов
  • Seedance 1.0seedance-132 кредитов
  • Kling O3kling-o346 кредитов
  • Kling 2.6kling-2-641 кредитов
  • Wan 2.7wan-2-735 кредитов
  • Wanwan32 кредитов
  • Grokgrok-video47 кредитов
  • Veo 3veo-342 кредитов
  • GPT Image 2.5gpt-image-2-54 кредитов
  • GPT Image 2gpt-image-23 кредитов
  • Seedream 5 Proseedream-5-pro4 кредитов
  • Seedream 5seedream-53 кредитов
  • Nano Banana Pronano-banana-pro5 кредитов
  • Nano Banana 2nano-banana-23 кредитов
  • Nano Banana 2 Litenano-banana-2-lite2 кредитов
  • AI Musicai-music6 кредитов

Готовы начать?

Создайте ключ в своем аккаунте и отправьте первый запрос за минуту.

Создать API-ключ