Перейти к основному содержанию
LocoPal AiLocoPal Ai
Подключение к APIИнтерфейсы моделей и генерацииИнтерфейс генерации видео

Руководство

Запрос видеозадачи

Запрос прогресса и результата задачи, обработка статусов, сбой чтения референсных материалов и тарификация

Показать Markdown

Запрос видеозадачи

После создания задачи используйте id из ответа создания для запроса прогресса и результата; способ создания см. в разделе Создание видеозадачи.

Запрос статуса: GET /v1/video/generations/{task_id}

Загрузка готового видео: GET /v1/videos/{task_id}/content

После завершения задачи интерфейс запроса возвращает адрес видео в metadata.url. Платформа в первую очередь возвращает исходный адрес видео вышестоящей стороны; только если у вышестоящей стороны нет доступного адреса, используется адрес артефакта платформы с возможностью access. Исходный адрес вышестоящей стороны может содержать подпись и срок действия и открывается напрямую в браузере или плеере; адрес артефакта платформы также работает. Можно также с API Key вызвать /v1/videos/{task_id}/content для загрузки видеофайла.

Способ аутентификации

Authorization: Bearer <API_KEY>.

Параметры запроса · path

ПараметрТипОбязательноОписание
task_idstringДаid из ответа создания

Пример запроса

curl "$LOCOPAL_API_ORIGIN/v1/video/generations/$LOCOPAL_TASK_ID" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY"

Загрузка видео

После перехода задачи в статус completed используйте metadata.url из ответа запроса напрямую:

curl -L "$LOCOPAL_API_ORIGIN/v1/videos/$LOCOPAL_TASK_ID/content" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY" \
  -o "$LOCOPAL_TASK_ID.mp4"

Параметры ответа

ПараметрТипОписание
idstringПубличный ID задачи
task_idstringСовместимое поле, совпадающее с id
objectstringВсегда video
modelstringID видеомодели
statusstringqueued, in_progress, completed, failed или unknown
progressintegerТекущий прогресс, от 0 до 100
created_atintegerВремя создания (Unix-секунды)
completed_atintegerВремя завершения; не возвращается, пока задача не завершена
metadata.urlstringАдрес видео, возвращается при успехе; предпочтительно исходный адрес вышестоящей стороны, при необходимости — адрес артефакта платформы
metadata.upstream_createdbooleanСоздана ли задача на вышестоящей стороне
duration_secsintegerДлительность видео (секунды); предоставляется, если вернула вышестоящая сторона
expires_atintegerВремя истечения URL вышестоящей стороны (Unix-секунды); предоставляется только если вышестоящая сторона явно его вернула
framespersecondintegerЧастота кадров видео; предоставляется, если вернула вышестоящая сторона
generate_audiobooleanГенерируется ли синхронизированный звук; предоставляется, если вернула вышестоящая сторона
ratiostringПропорции вывода; предоставляется, если вернула вышестоящая сторона
resolutionstringРазрешение вывода; предоставляется, если вернула вышестоящая сторона
seedintegerСлучайное зерно; предоставляется, если вернула вышестоящая сторона
output_formatstringФормат вывода, например mp4; предоставляется, если вернула вышестоящая сторона
execution_expires_afterintegerСрок хранения результата задачи; предоставляется, если вернула вышестоящая сторона
usageobjectФактический расход и стоимость после расчёта по задаче; не возвращается, пока задача не рассчитана (в очереди, в процессе генерации или сразу после приёма)
usage.prompt_tokensintegerЧисло видеотокенов, тарифицируемых в этот раз (совпадает с числом слева в столбце «Tokens» счёта)
usage.completion_tokensintegerДля видеозадач/задач изображений выходные токены отдельно не передаются, всегда 0
usage.total_tokensintegerОбщий объём, равен usage.prompt_tokens
usage.quotaintegerФактически потреблённые баллы за эту задачу
usage.amountnumberСумма за эту задачу (юани), пересчитанная из usage.quota по тарифной методике платформы, с 6 знаками после запятой; счёт в консоли показывает ту же сумму с 4 знаками после запятой
usage.currencystringВалюта суммы, всегда CNY
error.codestringКод ошибки при сбое, возвращается только при сбое. Конечный сбой видеозадачи платформы обычно video_generation_failed; не поддающиеся нормализации ошибки вышестоящей стороны могут сохранять её код
error.messagestringПричина сбоя, возвращается только при сбое. Платформа сначала снимает многослойные обёртки JSON и HTML шлюза и возвращает читаемый текст, готовый к показу; клиенту не следует повторно разбирать этот текст как JSON

Тело ответа

В процессе выполнения:

{
  "id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "object": "video",
  "model": "doubao-seedance-2.0-A",
  "status": "in_progress",
  "progress": 50,
  "created_at": 1787299277
}

Успешная генерация:

{
  "id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "object": "video",
  "model": "doubao-seedance-2.0-A",
  "status": "completed",
  "progress": 100,
  "created_at": 1787299277,
  "completed_at": 1787299581,
  "duration_secs": 5,
  "expires_at": 1790578352,
  "framespersecond": 24,
  "generate_audio": true,
  "ratio": "9:16",
  "resolution": "480p",
  "seed": 20260409,
  "output_format": "mp4",
  "execution_expires_after": 172800,
  "metadata": {
    "url": "https://upstream.example.com/task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO.mp4?signature=...",
    "upstream_created": true
  },
  "usage": {
    "prompt_tokens": 141034,
    "completion_tokens": 0,
    "total_tokens": 141034,
    "quota": 2789652,
    "amount": 5.579304,
    "currency": "CNY"
  }
}

usage возвращается только после завершения и расчёта задачи, а значения полностью совпадают со списанием за эту задачу в счёте: usage.quota — потреблённые в этот раз баллы, usage.amount — сумма в юанях, в которую те же баллы пересчитаны по текущему курсу сайта, usage.total_tokens — число видеотокенов, тарифицируемых в этот раз. Пока задача стоит в очереди или генерируется, usage не возвращается, и по ответу запроса нельзя судить о стоимости; чтобы сверить списание, найдите задачу по тому же id в счёте консоли и сравните usage.quota и usage.amount.

metadata.url может быть подписанным адресом вышестоящей стороны или подстраховываться интерфейсом артефактов платформы. Обращайтесь с ним как с учётными данными и не публикуйте. После генерации готового видео рекомендуется скачать его или перенести в собственное объектное хранилище до наступления expires_at.

Артефакты видео и предпросмотр

Помимо прямого чтения metadata.url, можно запросить список артефактов платформы:

curl "$LOCOPAL_API_ORIGIN/v1/tasks/$LOCOPAL_TASK_ID/artifacts" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY"

После завершения задачи возвращается:

{
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "artifacts": [
    {
      "key": "video",
      "type": "video",
      "content_url": "https://locopalai.com/v1/tasks/task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO/artifacts/video/content?access=..."
    }
  ]
}

Адрес содержимого артефакта поддерживает Range-запросы; его можно напрямую использовать в плеерах, для предпросмотра в браузере и докачки файлов. Если клиент читает только metadata.url, он может продолжать использовать прежнюю логику и не обязан переходить на интерфейс артефактов.

Сбой генерации:

{
  "id": "task_NlersigX6rIqiOjCwTFlgNmGMTwqt39K",
  "object": "video",
  "model": "doubao-seedance-2.0-D",
  "status": "failed",
  "progress": 100,
  "created_at": 1789971935,
  "error": {
    "code": "video_generation_failed",
    "message": "音频素材缓冲失败: 音频地址必须是 http(s)"
  },
  "metadata": {
    "submission_stage": "submitting",
    "upstream_created": false
  }
}

error.message — итоговый текст сбоя, подготовленный платформой. Даже если историческая задача изначально хранила вложенный JSON, при запросе возвращается нормализованный текст; вызывающей стороне достаточно показать это поле пользователю и не нужно на клиенте склеивать или разбирать исходный JSON вышестоящей стороны.

Ответ с ошибкой

Запрос несуществующего ID задачи (или задачи, не принадлежащей текущей учётной записи) возвращает HTTP 400:

{ "code": "task_not_exist", "message": "task_not_exist", "data": null }
HTTPОтветДействие
400{"code":"task_not_exist","message":"task_not_exist","data":null}Сверьте ID задачи и учётную запись, от имени которой задача создавалась
401Invalid tokenAPI Key отсутствует, указан неверно или истёк
500Сбой запроса задачиСохраните ID запроса и позже продолжайте запрашивать исходную задачу

Обработка статусов

СтатусДействие клиента
queuedЗадача в очереди; продолжайте запрашивать тот же ID задачи
in_progressИдёт генерация; обновляйте прогресс и время ожидания, не создавайте новую задачу
completedПрочитайте metadata.url или вызовите /v1/videos/{task_id}/content, чтобы загрузить готовое видео; рекомендуется сразу сохранить его
failedПокажите один раз error.code и error.message; решение о повторной отправке принимает пользователь
unknownСтатус пока определить нельзя; сохраните ID задачи и запросите позже

Клиент не должен определять завершение по фиксированному числу секунд ожидания или повторно создавать задачу из-за одного сетевого тайм-аута; рекомендуется запрашивать раз в 5–15 секунд.

Сбой чтения референсных материалов

Если ошибка указывает на content[n].image_url, video_url или содержит resource download failed, сначала определите конкретный элемент по индексу массива, затем проверьте:

  1. Можно ли напрямую выполнить GET по URL из публичной сети и получить 200;
  2. Не происходит ли перенаправление на страницу входа и нет ли зависимости от Cookie, Referer, белого списка IP;
  3. Соответствует ли Content-Type реальному формату файла;
  4. Действителен ли временный подписанный URL во время загрузки и обработки;
  5. Принадлежит ли материал asset:// текущей учётной записи и находится ли он в статусе Active;
  6. Поддерживает ли текущая модель этот тип и количество материалов.

После исправления материалов создайте задачу заново. Сообщение об ошибке нужно показать пользователю один раз в читаемом виде; не выводите повторно склеенный многослойно экранированный JSON.

Параллельность, повторные попытки и тарификация

  • Разные видеозадачи можно создавать параллельно;
  • Для одного ответа создания всегда используйте один и тот же ID задачи при запросах;
  • Новый запрос создания отправляйте только если задача явно завершилась сбоем и пользователь сам инициировал повтор;
  • Тарификация детализируется по модели, разрешению, длительности и входному референсному видео; ориентируйтесь на каталог моделей и итоговый счёт; неудачная валидация параметров (400) означает, что запрос не принят, и обычно не приводит к расходам на задачу генерации.

Связанная документация

Что вы хотите узнатьКуда перейти
Границы возможностей и типичные вопросы по нескольким изображениям, референсному и «глубокому» видеоНесколько изображений и референсное видео
Полный процесс от добавления материала в библиотеку до отправки видеоПроцесс подключения портретных материалов и референсного видео
Группы материалов, статус материалов, разрешение на использование образаИнтерфейсы библиотеки материалов
Краткий справочник кодов ошибокКоды ошибок и диагностика
Эта страница была полезной?

На этой странице