B2BB2B LLM

Операции изображений компании

Сохранённые операции, закрытые скачивания и обработка неизвестного результата.

Работа с операциями изображений компании

Сохраните полученный ID операции вместе с ID своей бизнес-задачи и Idempotency-Key. Для чтения нужен тот же активный API-ключ компании, с которым создана операция; одно членство владельца не открывает изображения других principal.

МетодПутьНазначение
GET/v1/images/operationsДо 50 операций в разрешённой области; передайте полученный next_cursor как before
GET/v1/images/operations/{id}Сохранённое состояние, цена/usage и описания файлов
GET/v1/images/operations/{id}/resultЗавершённый ответ изображения или ожидающее/конечное состояние
GET/v1/images/operations/{id}/files/{index}Скачивание результата с аутентификацией, индекс с нуля
POST/v1/images/operations/{id}/retry-downloadsЗапрос без тела для повтора только скачивания сохранённых результатов

queued и preparing предшествуют отправке. Платный POST начинается только после устойчивой фиксации состояния dispatching. received и retrieving означают, что обработку ответа можно продолжить без новой генерации. У completed результаты доступны до истечения срока. failed и expired — конечные состояния.

Считайте outcome_unknown и review_required инцидентом для оператора. Они не доказывают ни бесплатную ошибку, ни успешное списание. Эта версия не выполняет автоматическое изменение состояния для сверки. Никогда не создавайте новый ключ идемпотентности вслепую. retrieval_failed допускает не более пяти явных повторов скачивания в пределах 24 часов жизни файлов; новая генерация и новая запись учёта не создаются.

Перед отправкой проверяются исходный principal, версия ключа и группа; при чтении повторно проверяются ключи и правила доступа. Старые ключи браузерной сессии остаются только для интерактивной работы. С версии 10.49.0 отдельная вкладка Images в Playground использует узкие разрешения mg_image_ на операции, не расширяя возможности старых ключей.

accounting_recorded — признак однократной канонической записи для расчёта, а не доказательство списания с баланса компании. Токенные тарифы требуют фактического usage токенов. Жёсткий строковый предел model_gate.max_cost_usd принимается только при известной фиксированной цене. Действуют текущие лимиты и маршрутизация компании.

Playground и потерянные HTTP-ответы (10.49.0)

Playground Images использует отдельные разрешения чтения, создания и повтора скачивания с текущими правами сотрудника/ключа. Ограничения старых браузерных ключей не ослабляются. Сохранённая операция может продолжиться после истечения короткого разрешения, но требования к текущей сессии, ключу и доступу сохраняются.

GET /v1/images/operations?idempotency_key=... — поиск без записи в той же области идентичности/ключа. Совпавшая операция возвращает сохранённый публичный статус; при отсутствии видимого совпадения возвращается submission_found:false. Это не сигнал автоматически создавать другое намерение: исходное принятие ещё может выполняться. Сохраняйте тот же ключ/намерение и проверяйте историю. Поиск не создаёт токен, тело, расчёт цены или списание.

Чтение GET /v1/images/catalog?model=...&operation=... показывает отдельные проверенные предложения маршрутов, а не гарантирует работоспособность поставщика. POST /v1/images/quote нормализует поддерживаемые настройки и возвращает хеш согласования без списания. Список и прямые эндпоинты создания остаются доступны обычным API-клиентам.

Каталог и сохранённые поля

Для поиска в каталоге задавайте доступный компании model; по умолчанию операция — генерация, её можно изменить на image.edit. Список содержит независимые предложения маршрутов и рабочие ограничения. Признак работоспособности всегда false, поскольку локальное чтение конфигурации не проверяет поставщика. Пустой результат может означать отсутствие проверки, истёкшее подтверждение, недоступность ключа/маршрута или действующую политику Only.

Сохранённое состояние содержит идентичность операции, модель, статус/ошибку, время создания и истечения файлов в Unix, quote/usage, описания файлов и URL чтения/повтора. Читайте accounting_recorded вместе с пояснением, не считая его подтверждённым балансом компании. files_available описывает срок хранения, а фактический список files — полученные результаты. Описания содержат хеш и размеры для закрытого предпросмотра. Исходные загрузки не публикуются через маршруты результирующих файлов.

История отсортирована по убыванию ID операции, не по времени внешних идентификаторов; максимум 50 записей. before нельзя сочетать с idempotency_key. Поиск возвращает список из нуля или одного элемента и submission_found; отсутствие результата не доказывает отклонение выполняющегося создания. Чужие ресурсы не раскрываются.

В деталях и истории операций компании предварительные суммы остаются явно помеченными до записи фактических данных для расчёта. Вычисленная стоимость сама по себе не подтверждает списание компании. Пустой список файлов во время обработки не означает истёкший срок скачивания. Отдельное представление агрегированного usage и подписи цен описаны в полях результата изображения.

Поля наблюдения за расчётом проекта

Детали операции и поиск того же намерения показывают settlement только в текущей области владельца списания, сотрудника/principal, ключа проекта и группы. record_found указывает, найдена ли соответствующая сохранённая входная запись; settled_at и observed_at — временные метки Unix. wallet_debited и usage_applied остаются null до подтверждения записанным событием: отсутствие подтверждения не подменяется false.

Значения status различают not_recorded, ещё не проверенные строки списка not_checked, pending, отложенный failed, not_required, settled/recovered, отсутствующий not_available и ошибку чтения unavailable. Найденная временная метка settled/recovered с положительной стоимостью подтверждает подпись о списании; нулевая стоимость и учёт только в Usage Limit показываются отдельно. Это поле не выполняет расчёт, не сообщает о последующих возвратах и не раскрывает текущий баланс компании. После истечения хранения отсутствие строки не доказывает отсутствие расходов. Откройте конкретную операцию, чтобы обновить ещё не проверенную строку истории.

Поля supplier_http_status (0, если неизвестен) и response_saved описывают сохранённый ответ поставщика, а не статус текущего чтения или подтверждения создания сервисом. Ответ 202/queued не доказывает успех поставщика. Сохраняйте правило: платный запрос с неизвестным результатом не повторяется автоматически.

Краткий статус и детали расчёта

Начиная с версии 11.0.0, ответы операций по умолчанию компактны: object, id, model, status, created, status_url, result_url. Значимый error_code или сообщённый прогресс включается только при наличии. Завершённые результаты содержат доступность, срок действия и необходимые описания файлов. Пустые поля, расчёт цены, нормализованное usage, settlement и диагностика поставщика опускаются. Отсутствие поля не означает нулевую стоимость или завершённое списание.

Для прежнего полного разрешённого представления расчёта используйте GET /v1/images/operations/{id}?view=details. Списки и перечни результатов также поддерживают явный режим деталей там, где применимо. Чтение деталей не генерирует медиа и не расширяет доступ. Эндпоинт quote остаётся отдельным способом просмотра цены без списания.

Чтение результата: Raw и cURL

Используйте тот же активный ключ компании и контекст сотрудника, с которыми создана операция. Общий ключ проекта, владение компанией или доступ к её расчётам не открывают результат другого сотрудника. Текущее членство и права проекта/ключа проверяются повторно. Возьмите OPERATION_ID из ответа о принятом создании или разрешённой истории и задайте MODEL_API_KEY локально, не публикуя секрет. Временное разрешение Playground не является многократно используемыми учётными данными CLI; копирование команды не экспортирует и не расширяет это разрешение.

GET https://api.b2b-llm.com/v1/images/operations/{id}/result
Authorization: Bearer <YOUR_API_KEY>
# status
curl --fail-with-body --request GET \
  --url "https://api.b2b-llm.com/v1/images/operations/${OPERATION_ID:?Set OPERATION_ID}" \
  --header "Authorization: Bearer ${MODEL_API_KEY:?Set MODEL_API_KEY}" \
  --output images-status.json

# result
curl --fail-with-body --request GET \
  --url "https://api.b2b-llm.com/v1/images/operations/${OPERATION_ID:?Set OPERATION_ID}/result" \
  --header "Authorization: Bearer ${MODEL_API_KEY:?Set MODEL_API_KEY}" \
  --output images-result.json

# first image (only when descriptor index 0 exists)
curl --fail-with-body --request GET \
  --url "https://api.b2b-llm.com/v1/images/operations/${OPERATION_ID:?Set OPERATION_ID}/files/0" \
  --header "Authorization: Bearer ${MODEL_API_KEY:?Set MODEL_API_KEY}" \
  --output image-0.bin

/result возвращает сохранённый JSON created/data. Файловый эндпоинт возвращает байты изображения, а не этот JSON. Выберите существующий index с нуля из описаний файлов операции и расширение по MIME-типу; в примере используется .bin, чтобы не предполагать PNG. Playground подставляет подходящее расширение для каждого доступного изображения.

Это GET-запросы без тела: не нужны Content-Type, Idempotency-Key, расчёт цены, route_id или max_cost_usd. Читайте статус до завершения, затем результат/файл. Ответы ожидания, ошибки, истёкшего срока и отказа в доступе — не выходные файлы; --fail-with-body возвращает ненулевой код при HTTP-ошибке, но может записать её тело под выбранным именем. Проверяйте статус и тип содержимого, прежде чем считать загруженное тело медиафайлом. Не повторяйте платный POST из-за ошибки GET.

Блок Playground Get the result · Raw / cURL формирует эти команды для выбранной операции и её исходного ключа. Это примеры нового чтения, а не запись прежнего HTTP-обмена. Копирование и переключение вкладок команд не отправляют сетевых запросов. Открытие истории или сохранённого результата выполняет обычное разрешённое чтение, но не новую генерацию, резервирование или списание.