Руководство
Коды ошибок и диагностика
HTTP-статусы, значение кодов ошибок, типичные ошибки моделей и материалов, ограничение частоты запросов и шаги диагностики
Коды ошибок и диагностика
При диагностике сначала зафиксируйте: код состояния HTTP, идентификатор запроса, возвращённый платформой, ID модели, ID задачи, ID материала и исходный код ошибки.
Не фиксируйте API Key, Token сессии разрешения на использование образа или полный адрес загрузки материала; перед отправкой в поддержку платформы удалите конфиденциальные данные.
Значение HTTP-статусов
| Статус | Значение | Действие |
|---|---|---|
200 | Запрос успешен (промежуточное состояние асинхронной задачи также 200) | Читайте поле статуса в теле ответа |
400 | Ошибка параметров, неверный формат тела запроса, отсутствует model | Исправьте запрос согласно error.message или msg |
401 | API keys отсутствуют, указаны неверно или истекли | Проверьте Authorization и состояние ключа |
403 | Нет прав (например, доступ к материалам другой учётной записи) | Убедитесь, что ресурс принадлежит текущей учётной записи |
404 | Ресурс не существует, не принадлежит текущей учётной записи, или не совпадает метод | Сверьте ID; если путь верный, проверьте HTTP-метод |
429 | Слишком частые запросы | Повторите с задержкой, не повторяйте параллельно |
500 | Внутренняя ошибка платформы | Зафиксируйте идентификатор запроса и повторите; при постоянных сбоях обратитесь в поддержку |
502 | Ошибка обработки материала или сбой зависимого сервиса | Повторите позже; при постоянных сбоях обратитесь в поддержку |
У 404 три причины — не считайте, что всегда «ID написан неверно»
Это наиболее частая ошибка при диагностике:
| Ситуация | Наблюдаемое поведение |
|---|---|
| Ресурс не существует / не принадлежит текущей учётной записи | GET /api/v1/materials/assets/<不存在> → 404 |
GET отправлен на путь, поддерживающий только POST | GET /v1/chat/completions → 404; GET /v1/images/generations → 404 |
| Опечатка в пути | 404 |
Получив 404, сначала проверьте, соответствует ли метод пути, и лишь затем подозревайте ID.
Если видеозадача не найдена, возвращается 400, а не 404
Это место не согласуется с другими интерфейсами и требует особого внимания:
| Запрос | Фактический статус | Тело ответа |
|---|---|---|
GET /v1/video/generations/<不存在> | 400 | {"code":"task_not_exist","message":"task_not_exist","data":null} |
GET /v1/videos/<不存在> | 400 | То же |
GET /api/v1/materials/assets/<不存在> | 404 | {"code":404,"data":null,"msg":"素材不存在或无权访问"} |
Запрос видеозадачи возвращается со статусом 400 + структура верхнего уровня {code, message, data},
это не 404 и не структура объекта error, описанная ниже.
Три структуры ответа с ошибкой
1. Интерфейсы генерации моделей / изображений / видео — объект error
При ошибке возвращается HTTP не 2xx с объектом error:
{
"error": {
"code": "invalid_parameter",
"message": "请求参数不符合所选模型要求",
"type": "invalid_request_error",
"param": "size"
}
}| Поле | Описание |
|---|---|
code | Код ошибки, может быть пустой строкой (см. ниже) |
message | Читаемая причина, обычно содержит request id |
type | Идентификатор типа ошибки. При сбое аутентификации, отсутствии модели и некорректном теле запроса на практике всегда new_api_error |
param | Появляется только при ошибках параметров и указывает, какое поле неверно |
codeможет быть пустой строкой. На практике: и при сбое аутентификации, и при невозможности разобрать JSON тела запросаcodeравен"". Не определяйте «есть ли ошибка» по пустотеcode— ориентируйтесь на код состояния HTTP и в первую очередь читайтеmessage.
type— не стабильное поле классификации. Если нужна классификация, читайтеcodeи не полагайтесь на значениеtype.
2. Интерфейсы библиотеки материалов — code верхнего уровня
Возвращается HTTP не 2xx, code совпадает с HTTP-статусом:
{ "code": 404, "data": null, "msg": "素材不存在或无权访问" }3. Запрос видеозадачи — строковый code верхнего уровня
{ "code": "task_not_exist", "message": "task_not_exist", "data": null }Обратите внимание: здесь code — строка task_not_exist, а не число.
request id: ключевой идентификатор для диагностики
Платформа записывает request id прямо в error.message, искать его в заголовках не нужно:
"message": "Invalid token (request id: 202609221135501066578648268d9d6uXuM5QgH)"Извлечь одной командой:
curl -s "$LOCOPAL_BASE_URL/v1/models" \
-H "Authorization: Bearer sk-invalid" \
| grep -oE 'request id: [A-Za-z0-9]+'Укажите этот request id при обращении в поддержку — это значительно сократит время диагностики.
Сбой аутентификации
Когда API keys отсутствуют, указаны неверно или истекли, все интерфейсы возвращают HTTP 401 и:
{
"error": {
"code": "",
"message": "Invalid token (request id: ...)",
"type": "new_api_error"
}
}Обратите внимание, что code — пустая строка; именно поэтому выше мы предупреждали «не полагайтесь на code».
Ошибки моделей и генерации
| Код ошибки / сообщение | Причина | Действие |
|---|---|---|
Model name not specified | В теле запроса отсутствует поле model | Добавьте ID модели из /v1/models |
model_not_found | ID модели не существует, или у текущего ключа / группы нет этой модели | Повторно запросите /v1/models и используйте возвращённый id |
No available channel | В текущей группе нет доступного канала | Выберите модель того же типа или обратитесь в поддержку платформы |
invalid_parameter | Комбинация параметров не поддерживается текущей моделью | Скорректируйте размер, пропорции, длительность и т. п. согласно полю param |
unknown_parameter | Текущая модель / канал не распознаёт поле запроса (например, response_format в интерфейсе изображений) | Удалите неподдерживаемое поле согласно param и используйте поведение модели по умолчанию |
InvalidParameter / upstream_error | Вышестоящая модель отклонила параметры (например, не выполнено минимальное число пикселей для изображения) | Прочитайте message и скорректируйте размер или параметры |
credit_balance_exhausted / insufficient_quota | На текущем вышестоящем канале нет доступного баланса | Выберите модель / канал того же типа или обратитесь в поддержку платформы для пополнения баланса канала |
ResourceDownloadFailed | Адрес референсного изображения / видео невозможно загрузить напрямую | Используйте публично доступный HTTPS-адрес или ссылку asset:// из библиотеки материалов |
task_not_exist | Запрашиваемый ID задачи не существует или не принадлежит текущей учётной записи | Сверьте ID задачи и учётную запись, от имени которой задача создавалась |
video_generation_failed | Видеозадача принята, но на этапе отправки вышестоящему провайдеру, обработки материалов, модерации или генерации произошёл сбой | Прочитайте error.message в том же ответе; сохраните ID задачи, исправьте материалы или параметры и предложите пользователю повторно отправить задачу |
| Текущая модель не поддерживает библиотеку материалов реальных людей | Материал реального человека отправлен в модель без такой возможности | Выберите модель с поддержкой библиотеки материалов реальных людей; не обходите ограничение обычным URL изображения |
insufficient_user_quota | Баланса учётной записи или квоты текущего API Key недостаточно для покрытия прогнозируемого расхода | Пополните баланс или скорректируйте параметры согласно «требуется в этот раз / доступно сейчас» и повторите; задача при этом не создаётся |
缺少提示词:请在 prompt 或 content 的 text 元素中提供文本描述 | У видеозадачи нет текстового описания | Добавьте prompt или элемент text в content |
content[0].role 不支持 ... | Роль референсного материала не входит в список допустимых | Используйте reference_image, first_frame, last_frame, reference_video, reference_audio |
素材库中找不到素材 ... | Материал asset:// не существует или не принадлежит текущей учётной записи | Сначала отправьте материал и дождитесь статуса «доступен», либо сверьте учётную запись |
task_concurrency_exceeded | Число одновременно обрабатываемых задач генерации для текущей учётной записи или платформы достигло предела (HTTP 429) | Дождитесь завершения существующих задач согласно «сейчас N / предел M» и только затем отправляйте; не повторяйте подряд |
Ошибки библиотеки материалов
| HTTP | Сообщение | Причина | Действие |
|---|---|---|---|
400 | 请求体必须是 JSON 对象 | Тело запроса не является корректным JSON | Исправьте тело запроса |
400 | type 只能是 virtual 或 real | Неверное значение type | Исправьте type |
400 | 素材分组名称不能为空 / 不能超过 64 个字符 | Название отсутствует или слишком длинное | Исправьте название |
400 | 素材分组说明不能超过 300 个字符 | Описание слишком длинное | Сократите описание |
400 | 缺少 group_id | При отправке материала не указана группа | Добавьте group_id |
400 | image_url 必须是可公开下载的 http(s) 地址… | Адрес не http(s) или неполный | Используйте публичный http(s)-адрес или data_url |
400 | image_url 与 data_url 只能提交一个 | Переданы оба поля или ни одного | Оставьте только одно поле |
400 | data_url 必须是 data:image/...;base64,... 格式 / 图片数据无效或超过 20MB | Неверный формат загружаемых данных или слишком большой размер | Исправьте данные или используйте image_url |
404 | 素材不存在或无权访问 | ID материала неверен, материал удалён или не принадлежит текущей учётной записи | Используйте asset_id, возвращённый при отправке материала |
404 | 素材分组不存在或无权访问 / 素材分组不存在或不属于当前账号 | ID группы неверен или группа не принадлежит текущей учётной записи | Используйте ID группы в своей учётной записи |
404 | 素材分组不存在或不是虚拟素材分组 | Изображение отправляется в группу real | Изображения можно отправлять только в группу virtual |
429 | Слишком частые запросы | Слишком быстрый опрос или слишком высокая параллельность | Повторите с задержкой согласно подсказке |
500 / 502 / 503 | 素材服务暂不可用 | Сбой сервиса материалов или функция не подключена | Сохраните информацию о запросе и повторите; при постоянных сбоях обратитесь в поддержку |
Незавершённая проверка материала — не ошибка: запрос возвращает 200, status равен Processing; просто продолжайте опрашивать тот же ID материала.
Пустой вывод рассуждающей модели — тоже не HTTP-ошибка: если вернулся 200, finish_reason равен length, а usage.completion_tokens_details.reasoning_tokens уже занимает весь лимит вывода, следует увеличить квоту вывода или перейти на нерассуждающую модель.
Ошибки разрешения на использование образа
| Сообщение | Причина | Действие |
|---|---|---|
| Сессия авторизации не существует или доступ запрещён | Сессия истекла, уже использована или принадлежит другому пользователю | Текущему пользователю нужно создать QR-код заново |
| Авторизация ещё не завершена | Пользователь ещё не завершил сбор данных на телефоне | Сохраните QR-код и выполните разбор после завершения |
| Этот материал реального человека уже привязан к другому пользователю | Одну и ту же группу материалов реального человека нельзя повторно использовать между учётными записями | Используйте исходную привязанную учётную запись или предложите человеку авторизоваться заново |
| Сервис материалов временно недоступен | Канал авторизации сейчас недоступен | Зафиксируйте время запроса и обратитесь в поддержку платформы; не заменяйте сбор материалов реального человека обычной загрузкой изображения |
Ограничение частоты запросов и повторные попытки
429означает слишком частые запросы; повторяйте с задержкой (backoff) согласно подсказке и не повторяйте параллельно;- статус материала рекомендуется запрашивать раз в 5–10 секунд, видеозадачу — раз в 5–15 секунд;
- повторяйте только
429и кратковременные5xx; при400/401/403/404сразу исправляйте запрос; - перед повтором сначала запросите по ID задачи / ID материала, чтобы избежать повторного создания и повторного списания средств.
Быстрая самопроверка
- Соответствует ли
AuthorizationформатуBearer <API Key>и включён ли ещё ключ; - Указан ли в запросе домен, заданный сейчас в консоли (по умолчанию
https://locopalai.com, для зарубежных моделей может бытьhttps://us-api.locopalai.com); - Взят ли
modelизdata[].idответа/v1/models; - Достиг ли
statusматериала значенияActive; - Является ли адрес референсного изображения / видео публично доступным
http(s)-адресом, не зависящим от Cookie или Referer; - Не отправлялись ли одна и та же задача / один и тот же материал повторно.
Что приложить при обращении в поддержку
- время запроса и путь эндпоинта;
- код состояния HTTP и полное тело ответа (API Key замаскирован);
- идентификатор запроса, ID задачи или ID материала, возвращённые платформой;
- задействованные ID моделей и параметры;
- минимальный воспроизводимый пример запроса.
