Skip to main content
POST
segment и region_edit используют существующий асинхронный endpoint изображений. Сохраните полученный task_id, затем опрашивайте Статус задачи; запрос создания не возвращает готовые слои или изображения.
Никогда не размещайте API Key в браузерном bundle, LocalStorage, URL или frontend-логах. Вызывайте APIMart через backend или BFF.

Обзор операций

source_task_id и image_id не взаимозаменяемы. segment принимает ID исходной задачи, а region_edit — ID изображения. Чтобы сегментировать отредактированное изображение, используйте ID завершённой задачи region_edit как новый source_task_id.

Заголовки запроса

Используйте Authorization: Bearer <APIMART_API_KEY>, Content-Type: application/json и Accept: application/json. Idempotency-Key необязателен, но настоятельно рекомендуется для платных запросов region_edit. Поддерживается 1–191 видимый символ ASCII; рекомендуется UUID. Используйте новый ключ для каждой логической операции. При сетевом повторе того же запроса используйте исходный ключ и идентичный body. Если результат неопределён, не повторяйте автоматически с новым ключом.

Асинхронный процесс

Успешное создание возвращает HTTP 200 и data[0].task_id. Опрашивайте GET /v1/tasks/{task_id}?language=ru с интервалом от 2 до 5 секунд и общим лимитом 10 минут. Останавливайте старый опрос при смене исходного изображения.
Запрос задачи может вернуть HTTP 200, когда data.status равен failed. Всегда определяйте результат по data.status и показывайте data.error.

segment

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

Для segment не нужен prompt. Не отправляйте image_id, image_index, billing_model_name, n, size или response_format. cache_only=true и refresh=true несовместимы.

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

Промах кэша всё равно считается успешной задачей. Используйте cache_status или from_cache; не определяйте попадание по cached.

Завершённый ответ

Для segment поле data.result непосредственно содержит сегментацию и не оборачивается в images.
Объект без допустимого mask_rle или mask_url можно редактировать только приблизительно по рамке.

Декодирование mask_rle

mask_rle.counts — строка сжатых счётчиков COCO, а не Base64 или zlib. Она разворачивается по столбцам; первый run — фон, затем чередуются объект и фон. Следующий TypeScript преобразует её в удобную для браузера двоичную маску по строкам:
Декодируйте большие маски в Web Worker. Не отправляйте полные mask_rle.counts в логи, аналитику, URL или отчёты об ошибках.

Преобразование маски в точное выделение

Найдите связанные области и отверстия, упростите контуры и нормализуйте каждую точку в 0–1. В каждом кольце должно быть не менее 3 разных точек, ненулевая площадь и не должно быть самопересечений. Оставляйте до 16 крупнейших областей на слой и 400 точек на кольцо.
mask_size имеет порядок [height,width] и использует координаты исходной маски, а не CSS. При object-fit: contain вычтите поля, масштабируйте по фактической области и ограничьте значения диапазоном 0–1.
Для чтения пикселей исходного изображения или mask_url нужен CORS. Задайте crossOrigin = "anonymous" до src либо загрузите Blob. Прямое декодирование mask_rle не имеет этой зависимости.

Редактирование области: region_edit

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

Хотя бы одно из selection_regions, boxes или object_indices должно быть непустым. API разрешает комбинации, но frontend должен использовать один способ на запрос.
Не отправляйте billing_model_name, size, aspect_ratio, source_aspect_ratio, source_size или image_urls. Пропустите n или задайте 1; пропустите claim_asset или задайте false; пропустите response_format или задайте url. Base64 и stream=true не поддерживаются.

Способы выделения

points может быть плоским массивом или вложенными парами. Все значения должны быть конечными и находиться в 0–1; в каждом кольце нужно не менее 3 пар.

Завершённый ответ

Предпочитайте result.images[0].items[0]. Для старого ответа сопоставляйте url[0] и image_ids[0] только при равной длине массивов. Продолжайте лишь после получения HTTP(S) URL и нового image_id. Срок URL определяйте по expires_at; не фиксируйте число часов. Нужные надолго файлы скачивайте или сохраняйте.

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

После завершения одновременно обновите отображаемый URL, текущий ID изображения и ID исходной задачи, затем очистите старые слои и состояние опроса.
  • Повторная сегментация: использовать ID этой задачи region_edit как source_task_id
  • Повторное редактирование: использовать новый image_id
  • Не передавайте image_id в segment и не продолжайте редактировать предыдущий ID изображения.

Обработка ошибок

Оплата

  • segment бесплатен и завершается с cost=0 и credits_cost=0, но требует авторизации и допустимой исходной задачи.
  • region_edit платный. Используйте cost и credits_cost завершённой задачи; не фиксируйте цены во frontend.
  • Не отправляйте внутреннее поле billing_model_name.

Проверка frontend

  • Хранить API Key только на backend или BFF.
  • Отправлять в segment только source_task_id, без image_id и image_index.
  • Использовать image_id из segment для region_edit и передавать хотя бы один способ выделения.
  • Для точного редактирования использовать selection_regions; object_indices — лишь приближение рамкой.
  • Всегда читать mask_size как [height,width] и учитывать масштаб и поля.
  • Для того же сетевого повтора использовать исходный ключ идемпотентности и проверять URL вместе с новым image_id.