Руководство
Материалы
Отправка материалов-изображений, запрос статуса проверки и запрос списка материалов
Материалы
После отправки материал обрабатывается платформой асинхронно; использовать его в видеозадачах можно только после смены статуса с Processing на Active.
Отправка материала-изображения
/api/v1/materials/assetsАутентификация
Authorization: Bearer <API_KEY>.
Тело запроса · application/json
Prop
Type
image_url и data_url — можно передать только одно. image_url также может быть data:image/...;base64,..., и платформа обработает его как встроенное изображение. При использовании удалённого URL адрес должен быть http(s)://-адресом, который платформа может публично скачать (поддерживаются и http, и https), не зависеть от Cookie, Referer, страницы входа или сессии браузера и оставаться действительным на протяжении всей обработки на платформе.
Удалённый image_url сначала проходит через быстрый промежуточный кеш платформы, а затем зеркалируется библиотекой материалов; для обычных изображений это обычно занимает секунды. Платформа также поддерживает встроенные изображения: можно записать значение image_url как data:image/...;base64,... или использовать отдельное поле data_url. Для изображений, уже находящихся на стороне клиента, встроенная отправка позволяет дополнительно избежать одной внешней загрузки.
data_url загружает всё изображение в base64 (объём примерно в 1,33 раза больше оригинала); используйте его только тогда, когда действительно невозможно предоставить публичный адрес изображения: например, изображение находится за адресом, требующим входа, во внутренней сети или существует только как локальный файл. При использовании data_url время загрузки зависит от размера изображения и пропускной способности вызывающей стороны; платформа записывает изображение в краткосрочное временное промежуточное хранилище, а не в постоянное хранилище материалов платформы. После того как библиотека материалов завершит зеркалирование и материал перейдёт в Active, для превью в первую очередь используется preview_url, возвращённый библиотекой материалов, а временные файлы автоматически удаляются сервисом промежуточного хранения.
Материалы-изображения можно отправлять только в группы virtual; материалы группы real создаются в процессе авторизации образа реального человека по QR-коду.
request_id также можно передать через заголовок запроса Idempotency-Key. При повторной отправке в рамках одной учётной записи с тем же request_id платформа вернёт тот же материал, успешно созданный в первый раз, и не будет повторно создавать материал на стороне вышестоящего сервиса. Если request_id не передан, платформа автоматически сформирует стабильное значение на основе учётной записи, группы, названия и исходных данных изображения; повторные попытки с тем же изображением и названием также можно безопасно переиспользовать.
Пример запроса
curl -X POST "$LOCOPAL_BASE_URL/api/v1/materials/assets" \
-H "Authorization: Bearer $LOCOPAL_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<JSON
{
"group_id": "group-1789069780-5762d1",
"request_id": "brand-character-front-001",
"title": "角色正面定妆图",
"image_url": "$LOCOPAL_IMAGE_URL",
"tags": ["人物", "正面"]
}
JSONПри использовании локального изображения вместо этого передайте data_url:
{
"group_id": "group-1789069780-5762d1",
"request_id": "brand-character-front-001",
"title": "角色正面定妆图",
"file_name": "person.png",
"data_url": "data:image/png;base64,iVBORw0KGgo..."
}Если клиент хочет продолжать использовать поле image_url, можно также передать встроенное изображение:
{
"group_id": "group-1789069780-5762d1",
"request_id": "brand-character-front-001",
"title": "角色正面定妆图",
"image_url": "data:image/png;base64,iVBORw0KGgo..."
}Параметры ответа
| Параметр | Тип | Описание |
|---|---|---|
code | integer | При успехе — 0 |
msg | string | При успехе — 图片素材已提交 |
data.asset_id | string | ID материала, равен data.asset.id |
data.asset.id | string | ID материала; в видеозадачах ссылка указывается как asset://<id> |
data.asset.kind | string | Тип материала; для изображения — image |
data.asset.title | string | Название материала (итоговое значение после автозаполнения) |
data.asset.request_id | string / null | Идемпотентный ID запроса, использованный при данной загрузке |
data.asset.platform_asset_id | string | ID материала в сервисе материалов, используется для диагностики; в текущем развёртывании обычно совпадает с id |
data.asset.group_id | string | ID группы, к которой относится материал |
data.asset.status | string | После приёма — Processing |
data.asset.error_message | string / null | Причина сбоя обработки; в нормальном случае — null |
data.asset.note | string / null | Примечание; null, если не передано |
data.asset.tags | string[] | Список тегов; обычно пустой массив, если не передано |
data.asset.mime_type | string / null | MIME-тип, возвращённый сервисом материалов; null, если не возвращён |
data.asset.bytes | integer / null | Размер файла материала; null, если сервис материалов его не вернул |
data.asset.created_at | integer | Время создания (Unix-секунды) |
data.asset.updated_at | integer | Время обновления (Unix-секунды) |
Тело ответа
{
"code": 0,
"data": {
"asset_id": "asset-20260911035115-etexu",
"asset": {
"id": "asset-20260911035115-etexu",
"platform_asset_id": "asset-20260911035115-etexu",
"kind": "image",
"title": "角色正面定妆图",
"group_id": "group-1789069780-5762d1",
"status": "Processing",
"error_message": null,
"note": null,
"tags": [],
"mime_type": null,
"bytes": null,
"created_at": 1789069876,
"updated_at": 1789069876
}
},
"msg": "图片素材已提交"
}Успешная отправка означает лишь то, что материал принят; перед отправкой видеозадачи всё равно необходимо запросить статус.
Ответы с ошибками
| HTTP | msg | Описание |
|---|---|---|
400 | 缺少 group_id | Группа не указана |
400 | image_url 必须是可公开下载的 http(s) 地址,当前为 … | Протокол адреса не http / https или адрес неполный; используйте публичный http(s)-адрес либо data_url |
400 | image_url 与 data_url 只能提交一个 | Оба поля переданы одновременно или не передано ни одного |
400 | data_url 必须是 data:image/...;base64,... 格式 | Неверный формат data_url |
400 | 图片数据无效或超过 20MB | Данные изображения пусты или превышают 20 MB |
400 | 素材名称不能为空 / 素材名称不能超过 64 个字符 | Ошибка валидации title |
401 | Invalid token | API Key отсутствует, неверен или истёк |
404 | 素材分组不存在或不属于当前账号 | Неверный group_id или группа не принадлежит текущей учётной записи |
404 | 素材分组不存在或不是虚拟素材分组 | Попытка отправить изображение в группу real |
502 / 503 | 素材服务暂不可用 | Сбой сервиса материалов; сохраните информацию о запросе и повторите попытку |
Запрос одного материала
/api/v1/materials/assets/{asset_id}Аутентификация
Authorization: Bearer <API_KEY>.
Параметры запроса · path
Prop
Type
Пример запроса
curl "$LOCOPAL_BASE_URL/api/v1/materials/assets/asset-20260911035115-etexu" \
-H "Authorization: Bearer $LOCOPAL_API_KEY"Параметры ответа
| Параметр | Тип | Описание |
|---|---|---|
code | integer | При успехе — 0 |
msg | string | При успехе — OK |
data.asset | object | Объект материала; поля совпадают с интерфейсом отправки |
Значения data.asset.status и способы обработки:
| Статус | Значение | Поведение программы |
|---|---|---|
Processing | Материал всё ещё обрабатывается или проверяется | Сохраните asset_id, запросите позже, не отправляйте материал повторно |
Active | Материал можно использовать в задачах, поддерживающих этот тип материала | Используйте asset://<asset_id> в поле content видео |
Failed | Сбой обработки материала | Прочитайте error_message, исправьте исходное изображение и создайте новый материал |
Тело ответа
{
"code": 0,
"data": {
"asset": {
"id": "asset-20260911035115-etexu",
"platform_asset_id": "asset-20260911035115-etexu",
"kind": "image",
"title": "角色正面定妆图",
"group_id": "group-1789069780-5762d1",
"status": "Active",
"error_message": null,
"note": null,
"tags": [],
"mime_type": null,
"bytes": null,
"created_at": 1789069876,
"updated_at": 1789069877
}
},
"msg": "OK"
}При сбое проверки также возвращается HTTP 200, а причина сбоя находится в error_message:
{
"code": 0,
"data": {
"asset": {
"id": "asset-20260911035115-etexu",
"status": "Failed",
"error_message": "素材处理失败"
}
},
"msg": "OK"
}Ответы с ошибками
| HTTP | msg | Описание |
|---|---|---|
401 | Invalid token | API Key отсутствует, неверен или истёк |
404 | 素材不存在或无权访问 | Неверный ID материала, материал удалён или не принадлежит текущей учётной записи |
502 / 503 | 素材服务暂不可用 | Сбой сервиса материалов; сохраните информацию о запросе и повторите попытку |
Запрос списка материалов
/api/v1/materials/assetsАутентификация
Authorization: Bearer <API_KEY>.
Параметры запроса · query
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
page | integer | Нет | 1 | Номер страницы |
page_size | integer | Нет | 20 | Количество записей на страницу, максимум 100 |
group_id | string | Нет | — | Возвращать только материалы этой группы |
Пример запроса
curl "$LOCOPAL_BASE_URL/api/v1/materials/assets?page=1&page_size=20&group_id=group-1789069780-5762d1" \
-H "Authorization: Bearer $LOCOPAL_API_KEY"Параметры ответа
| Параметр | Тип | Описание |
|---|---|---|
code | integer | При успехе — 0 |
msg | string | При успехе — OK |
data.total | integer | Общее количество материалов, соответствующих условиям |
data.page / data.page_size | integer | Параметры пагинации текущего запроса |
data.assets | array | Список материалов, поля совпадают с интерфейсом отправки |
Тело ответа
{
"code": 0,
"data": {
"assets": [
{
"id": "asset-20260911035115-etexu",
"platform_asset_id": "asset-20260911035115-etexu",
"kind": "image",
"title": "角色正面定妆图",
"group_id": "group-1789069780-5762d1",
"status": "Active",
"error_message": null,
"note": null,
"tags": [],
"mime_type": null,
"bytes": null,
"created_at": 1789069876,
"updated_at": 1789069877
}
],
"total": 1,
"page": 1,
"page_size": 20
},
"msg": "OK"
}Ответы с ошибками
| HTTP | msg | Описание |
|---|---|---|
401 | Invalid token | API Key отсутствует, неверен или истёк |
404 | 素材分组不存在或无权访问 | Указанный group_id не существует или не принадлежит текущей учётной записи |
500 / 502 / 503 | 素材服务暂不可用 | Сбой сервиса материалов; сохраните информацию о запросе и повторите попытку |
