Ultralytics YOLO27:

Справочник REST API#

Ultralytics Platform предоставляет REST API для программного доступа к наборам данных, изображениям, проектам, моделям, обучению, экспорту и развёртываниям.

Интерактивная документация API Ultralytics Platform

Быстрый старт
# List the datasets owned by a workspace
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://platform.ultralytics.com/api/datasets/YOUR_USERNAME

Для каждой конечной точки ниже указан вызов client.<resource>.<method>(...) из SDK ultralytics-platform, созданного на основе того же контракта, что и этот справочник.

Интерактивный справочник API

Эта страница представляет собой обзор API. Сгенерированный и всегда актуальный справочник доступен по адресу platform.ultralytics.com/api/docs, а машиночитаемый документ OpenAPI 3.2, на котором он основан, опубликован по адресу platform.ultralytics.com/openapi.json. Оба документа генерируются непосредственно из серверного контракта, поэтому именно они являются источником истины, если эта страница и схема расходятся.

Обзор API#

API организован вокруг основных ресурсов Platform:

graph LR
    A[API Key]:::start --> B[Datasets]:::proc
    A --> C[Projects]:::proc
    B -->|images| G[Images]:::proc
    C -->|contains| D[Models]:::proc
    B -->|train on| D
    D -->|deploy| E[Deployments]:::proc
    D -->|export| F[Exports]:::proc

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
РесурсОписаниеОсновные операции
Наборы данныхКоллекции размеченных изображенийCRUD, импорт, версии, классы, разбиения, клонирование
ИзображенияОтдельные изображения и меткиЧтение, аннотирование, перемещение между разбиениями, удаление, автоматическое аннотирование
ПроектыРабочие пространства моделейCRUD, клонирование
МоделиОбученные чекпойнтыCRUD, предсказание, скачивание, клонирование, статус обучения
ОбучениеЗадания обучения на облачных GPUДоступность GPU, запуск, отслеживание прогресса, отмена
ЭкспортЗадания конвертации форматовСоздание, получение списка, проверка статуса, отмена
РазвёртыванияВыделенные конечные точки инференсаСоздание, запуск/остановка/замена, предсказание, метрики, журналы
КорзинаРесурсы, удалённые программноПолучение списка, восстановление, окончательное удаление
ХранилищеИнтеграции с облачными хранилищамиПодключение, обнаружение, просмотр, отключение
АккаунтТариф, кредиты, хранилище, профильСводка по аккаунту, ключи API, использование хранилища, поиск пользователей
БиллингИспользование тарифа и журнал операцийСводка использования, транзакции
ОбзорПоиск общедоступного контентаПоиск проектов и наборов данных

Аутентификация#

Для большинства конечных точек требуется ключ API. Конечные точки, предоставляющие доступ к общедоступному контенту — чтение общедоступного набора данных, проекта или модели, получение списка изображений общедоступного набора данных, запуск инференса общедоступной модели или поиск в разделе «Обзор», — также принимают анонимные запросы и просто возвращают больше данных при передаче ключа.

Получение ключа API#

  1. Перейди в Settings > API Keys
  2. Нажми Create Key
  3. Скопируй сгенерированный ключ

Подробные инструкции см. в разделе Ключи API.

Заголовок авторизации#

Передавай ключ API в виде токена bearer:

Authorization: Bearer YOUR_API_KEY
Формат ключа API

Ключи API состоят из буквального префикса ul_, за которым следуют 40 шестнадцатеричных символов; всего 43 символа (например, ul_a1b2c3d4e5f6789012345678901234567890abcd). Запросы без заголовка, с некорректным или отозванным ключом возвращают 401. Храни ключ в секрете — никогда не добавляй его в систему контроля версий и не публикуй.

Пример#

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://platform.ultralytics.com/api/account/summary

Базовый URL#

Все конечные точки API используют:

https://platform.ultralytics.com/api

Пути ресурсов#

Для обращения к ресурсам используются те же понятные человеку имена, что и в URL Platform, а не идентификаторы базы данных:

РесурсПутьПример
Датасет/api/datasets/{owner}/{dataset}/api/datasets/acme-vision/warehouse
Проект/api/projects/{owner}/{project}/api/projects/acme-vision/inspection
Модель/api/models/{owner}/{project}/{model}/api/models/acme-vision/inspection/v3
Развёртывание/api/deployments/{owner}/{deployment}/api/deployments/acme-vision/edge-1
Изображение/api/images/{imageId}/api/images/65f1c0a2b3d4e5f601234567
  • {owner} — это личное имя пользователя или идентификатор рабочего пространства команды: от 4 до 32 символов, строчные буквы и цифры с одиночными дефисами между сегментами.
  • {dataset}, {project}, {model} и {deployment} соответствуют тому же шаблону со строчными буквами и дефисами, длина — до 128 символов.
  • {imageId} и {exportId} — это шестнадцатеричные идентификаторы длиной 24 символа, возвращаемые API.
  • Переименование ресурса через PATCH одновременно изменяет отображаемое name и имя в URL, а ответ возвращает текущее имя в URL, чтобы ты мог продолжить использовать его.
Выбор рабочего пространства

Параметра запроса owner не существует. Пути с областью действия рабочего пространства содержат владельца в пути, а конечные точки с областью действия аккаунта (/api/account/summary, /api/api-keys, /api/storage, /api/billing/*, /api/trash, /api/integrations/buckets) работают с рабочим пространством, выдавшим ключ API. Чтобы выполнить действие в рабочем пространстве команды, используй ключ API, созданный в этом рабочем пространстве.

Ограничения частоты запросов#

API применяет ограничения по скользящему окну для каждого ключа API. Каждый маршрут относится к одной категории, и у каждой категории есть отдельный счётчик, поэтому 20 запросов на предсказание не расходуют лимит по умолчанию.

КатегорияОграничениеПрименяется к
По умолчанию100 запросов/минКаждый маршрут, не указанный ниже
Обучение10 запросов/минPOST /api/training/start
Загрузка10 запросов/минПодписанные URL для загрузки, завершение загрузки и импорт набора данных
Predict20 запросов/минИнференс моделей и развёртываний через маршруты API Platform
Экспорт20 запросов/минМаршруты экспорта моделей и маршруты экспорта/версий датасетов, за исключением чтения экспорта датасета (GET), в котором используется лимит по умолчанию
Скачать30 запросов/минСкачивание файлов моделей
Изменение данных10 запросов/минПолучение списка ключей API, подключение или обнаружение облачного хранилища и действия PATCH развёртываний
Гидратация20 запросов/минPOST /api/datasets/{owner}/{dataset}/images (получение выбранного набора изображений) и GET /api/images/{imageId}/similar
Кластеризация10 запросов/минGET /api/datasets/{owner}/{dataset}/images/clustering и GET /api/models/{owner}/{project}/{model}/similar-images

Маршруты Platform, предназначенные только для браузера, например оформление оплаты и управление командами, имеют собственные ограничения, которые не применяются к трафику с ключами API.

При превышении лимита API возвращает 429 вместе с заголовками и телом JSON:

Retry-After: 12
X-RateLimit-Reset: 2026-02-21T12:34:56.000Z
{
    "error": "Rate limit exceeded",
    "retryAfter": 12,
    "resetAt": "2026-02-21T12:34:56.000Z"
}

Выделенные конечные точки (без ограничений)#

Выделенные конечные точки не подпадают под ограничения частоты запросов Platform для ключей API, если ты напрямую вызываешь собственную конечную точку serviceUrl развёртывания (например, https://predict-abc123.run.app/predict). После этого пропускная способность зависит от конфигурации развёрнутого сервиса.

Обработка ограничений частоты запросов

Получив 429, подожди Retry-After секунд (или до X-RateLimit-Reset), прежде чем повторять запрос. Реализацию экспоненциальной задержки см. в разделе часто задаваемых вопросов об ограничениях частоты запросов.

Формат ответа#

Успешные ответы#

Ответы представляют собой объекты JSON с полями, зависящими от ресурса. Универсальной оболочки нет: конечные точки списков возвращают именованную коллекцию вместе с количественными показателями, а операции изменения данных — изменённые идентификаторы.

{
    "datasets": [{ "id": "65f1c0a2b3d4e5f601234567", "owner": "acme-vision", "dataset": "warehouse" }],
    "total": 1,
    "region": "us"
}

Ответы с данными также содержат region (us, eu или ap) — регион хранения для этого рабочего пространства.

Ответы с ошибками#

Каждый ответ с ошибкой представляет собой объект JSON с сообщением error:

{
    "error": "Dataset not found"
}
Статус HTTPЗначение
200Успешно
201Создано
202Принято, выполнение продолжается асинхронно
400Недопустимый путь, запрос или тело запроса
401Отсутствует или недействительна аутентификация
402Недостаточно кредитов (обучение)
403Недостаточно разрешений, не подходит тариф или исчерпана квота
404Ресурс не найден
409Конфликт с текущим состоянием (дублирующееся имя, выполняющееся задание)
413Входные данные для предсказания слишком велики
422Классы модели не соответствуют датасету (автоматическая разметка)
429Превышен лимит запросов
500Ошибка сервера
502Сбой вызова вышестоящего провайдера или сервиса
503Зависимый сервис временно недоступен

Пагинация#

Стиль пагинации зависит от коллекции:

СтильЭндпоинтыПараметры
Только лимитСписки датасетов, проектов, моделей, экспортов и развёртыванийlimit
Смещение и лимитИзображения датасета, кластеризация изображений, поиск Exploreoffset, limit, а также hasMore в ответе
КурсорИзображения датасета (большие датасеты)cursor, includeTotal, а также nextCursor
Номер страницыКорзинаpage, limit, а также totalPages
Непрозрачный токен страницыЖурналы развёртыванияpageToken, а также nextPageToken

Datasets API#

Создавай, просматривай и управляй размеченными датасетами изображений для обучения моделей YOLO. См. документацию по датасетам.

Список датасетов#

GET /api/datasets/{owner}

Python SDK: client.datasets.list(owner)

Возвращает общедоступные датасеты владельца, а также приватные датасеты, если твой ключ позволяет просматривать это рабочее пространство.

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

ПараметрТипОписание
limitintМаксимальное количество возвращаемых датасетов (по умолчанию: 1000, максимум: 1000)
includeSamplesлогическое значениеВключать образцы предварительного просмотра изображений (по умолчанию: true)
includeImageUrlsлогическое значениеВключать URL запасных вариантов полноразмерных образцов изображений (по умолчанию: false)
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/datasets/acme-vision?limit=10&includeSamples=false"

Ответ:

{
    "datasets": [
        {
            "id": "65f1c0a2b3d4e5f601234567",
            "owner": "acme-vision",
            "dataset": "warehouse",
            "name": "Warehouse",
            "task": "detect",
            "visibility": "private",
            "imageCount": 1000,
            "classCount": 2,
            "classNames": ["person", "forklift"],
            "splits": { "train": 800, "val": 200, "test": 0, "labeled": 1000 },
            "annotationCount": 5400,
            "starCount": 3,
            "isStarred": false,
            "status": "ready",
            "createdAt": "2026-01-15T10:00:00Z",
            "updatedAt": "2026-01-16T08:30:00Z"
        }
    ],
    "total": 1,
    "region": "us"
}

Получить датасет#

GET /api/datasets/{owner}/{dataset}

Python SDK: client.datasets.retrieve(owner, dataset)

Возвращает полный объект датасета в ключе dataset, включая classNames, splits, versions, source и пользовательский объект metadata.

Создать датасет#

POST /api/datasets

Python SDK: client.datasets.create(dataset=..., name=...)

Тело:

{
    "dataset": "warehouse",
    "name": "Warehouse",
    "task": "detect",
    "description": "Forklift and pedestrian safety dataset",
    "classNames": ["person", "forklift"],
    "visibility": "private",
    "metadata": { "location": "factory-1", "reviewed": true },
    "owner": "acme-vision"
}
ПолеТипОбязательноеОписание
datasetstringДаИмя датасета, используемое в URL Platform (строчные буквы, дефисы, максимум 128 символов)
namestringДаОтображаемое имя (максимум 100 символов)
descriptionstringНетОписание (максимум 1000 символов)
taskstringНетТип задачи (по умолчанию: detect)
classNamesмассивНетИмена классов в порядке индексов (максимум 25 000)
formatstringНетФормат разметки: yolo (по умолчанию), coco, raw, ndjson
visibilitystringНетpublic или private
tagsмассивНетДо 50 тегов длиной до 50 символов каждый
licensestringНетИдентификатор лицензии датасета
metadataобъектНетПользовательские метаданные JSON
ownerstringНетИдентификатор рабочего пространства команды; по умолчанию используется твоё личное рабочее пространство
requireExactSlugлогическое значениеНетВозвращает 409, когда dataset уже занят, вместо создания имени с суффиксом, таким как warehouse-2 (по умолчанию false)

В ответе возвращается фактически созданный идентификатор dataset, поэтому считай его перед загрузкой, если только ты не установил requireExactSlug.

Поддерживаемые задачи

Допустимые значения task при создании или обновлении датасета: detect, segment, semantic, depth, classify, pose и obb. У датасетов глубины нет классов.

Ответ (201):

{
    "id": "65f1c0a2b3d4e5f601234567",
    "owner": "acme-vision",
    "dataset": "warehouse",
    "region": "us"
}

Обновить датасет#

PATCH /api/datasets/{owner}/{dataset}

Python SDK: client.datasets.update(owner, dataset)

Тело (частичное обновление):

{
    "name": "Warehouse Safety",
    "description": "New description",
    "visibility": "public",
    "metadata": { "location": "factory-2", "reviewed": true }
}

Допустимые поля: name, description, visibility, metadata, tags, classNames, classColors, format, task, license, iconColor, iconLetter и starred. Чтобы очистить пользовательские метаданные, отправь пустой объект metadata ({}). Длина ключей метаданных ограничена 128 символами, а сериализованного объекта — 500 000 символами.

Ответ:

{
    "success": true,
    "dataset": "warehouse-safety"
}

Переименование изменяет имя в URL, поэтому для последующих запросов используй возвращённое значение dataset.

Удаление датасета#

DELETE /api/datasets/{owner}/{dataset}

Python SDK: client.datasets.delete(owner, dataset)

Перемещает датасет в корзину, откуда его можно восстановить в течение 30 дней.

Клонирование датасета#

POST /api/datasets/{owner}/{dataset}/clone

Python SDK: client.datasets.clone(owner, dataset)

Копирует доступный датасет вместе с его изображениями и метками в твоё личное рабочее пространство или рабочее пространство команды.

Необязательное тело (все поля необязательны):

{
    "dataset": "warehouse-copy",
    "name": "Warehouse Copy",
    "description": "Cloned for experimentation",
    "visibility": "private",
    "license": "CC-BY-4.0",
    "owner": "acme-vision"
}

Ответ (201): id, owner, dataset, name, imageCount, classCount и region. Для датасетов, использующих подключённый источник хранилища, возвращается 409, поскольку их файлы не копируются.

Скачать экспорт датасета#

GET /api/datasets/{owner}/{dataset}/export

Python SDK: client.datasets.export(owner, dataset)

Возвращает подписанный URL для скачивания NDJSON. Не указывай v, чтобы экспортировать текущее состояние датасета и повторно использовать кэшированный экспорт, если с момента его создания ничего не изменилось.

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

ПараметрТипОписание
vцелое числоНомер сохранённой версии (нумерация начинается с 1). Не указывай для текущего датасета.

Ответ:

{
    "downloadUrl": "https://storage.googleapis.com/...&signature=...",
    "cached": true
}

Запрос определённой версии возвращает downloadUrl и version вместо cached.

Создать версию датасета#

POST /api/datasets/{owner}/{dataset}/export

Python SDK: client.datasets.create_export(owner, dataset)

Создаёт неизменяемый пронумерованный снимок датасета и сохраняет его экспорт NDJSON. Требуется доступ редактора.

Тело (необязательно):

{
    "description": "Added 500 training images"
}

Ответ:

{
    "version": 3,
    "downloadUrl": "https://storage.googleapis.com/...&signature=...",
    "reused": false
}

reused имеет значение true, если датасет не изменился с момента предыдущей версии и вместо этого был возвращён этот снимок.

Обновить описание версии#

PATCH /api/datasets/{owner}/{dataset}/export

Python SDK: client.datasets.update_export(owner, dataset, version=..., description=...)

Тело:

{
    "version": 2,
    "description": "Fixed mislabeled classes"
}

Ответ: {"ok": true}

Восстановить версию датасета#

POST /api/datasets/{owner}/{dataset}/restore

Python SDK: client.datasets.restore(owner, dataset, version=...)

Восстанавливает изображения, аннотации и классы из сохранённой версии без копирования байтов изображений.

Тело:

{
    "version": 2
}

Ответ: {"version": 2, "imageCount": 1000}

Получить статистику датасета#

GET /api/datasets/{owner}/{dataset}/class-stats

Python SDK: client.datasets.class_stats(owner, dataset)

Возвращает количество аннотаций по классам, гистограммы изображений и аннотаций, а также тепловые карты. Для больших датасетов используется выборка; в этом случае sampleSize сообщает, сколько изображений участвовало.

Ответ (сокращённый):

{
    "classes": [{ "classId": 0, "count": 1500, "imageCount": 450 }],
    "imageStats": {
        "widthHistogram": [{ "bin": 640, "count": 120, "size": 1 }],
        "heightHistogram": [{ "bin": 480, "count": 95, "size": 1 }],
        "pointsHistogram": [{ "bin": 4, "count": 200, "size": 1 }],
        "formatDistribution": { "jpg": 900, "png": 100 },
        "fileSizeHistogram": [{ "bin": 250000, "count": 300, "size": 50000 }],
        "objectsPerImageHistogram": [{ "bin": 5, "count": 210, "size": 1 }],
        "bboxWidthHistogram": [{ "bin": 120, "count": 340, "size": 20 }],
        "bboxHeightHistogram": [{ "bin": 90, "count": 300, "size": 20 }]
    },
    "locationHeatmap": {
        "bins": [
            [5, 10],
            [8, 3]
        ],
        "maxCount": 50
    },
    "dimensionHeatmap": {
        "bins": [
            [2, 5],
            [3, 1]
        ],
        "maxCount": 12,
        "minWidth": 10,
        "maxWidth": 1920,
        "minHeight": 10,
        "maxHeight": 1080
    },
    "classNames": ["person", "forklift"],
    "cached": true,
    "sampleSize": null
}

Управление классами#

Объединение классов (переназначение аннотаций целевому классу с последующим удалением исходных классов):

POST /api/datasets/{owner}/{dataset}/classes/merge

Python SDK: client.datasets.merge_classes(owner, dataset, source_class_ids=..., target_class_id=...)

{
    "sourceClassIds": [2, 4],
    "targetClassId": 1
}

Удаление классов (их аннотации удаляются, а идентификаторы оставшихся классов сдвигаются вниз):

POST /api/datasets/{owner}/{dataset}/classes/delete

Python SDK: client.datasets.delete_classes(owner, dataset, class_ids=...)

{
    "classIds": [2, 4]
}

Обе операции возвращают success, обновлённые classNames и classColors, а также сводку изменений (mergedClassIds и targetClassId или deletedClassIds и deletedAnnotations).

Идентификаторы классов являются позиционными

Поскольку после объединения или удаления идентификаторы оставшихся классов сдвигаются, эти операции не являются идемпотентными. Перед выполнением следующей операции с классами повторно получи датасет, чтобы узнать текущие индексы классов.

Перераспределить разбиения#

POST /api/datasets/{owner}/{dataset}/splits/redistribute

Python SDK: client.datasets.redistribute_splits(owner, dataset, train=..., val=..., test=...)

Случайным образом перераспределяет изображения между разбиениями. Сумма трёх процентов должна составлять 100.

{
    "train": 80,
    "val": 20,
    "test": 0
}

Ответ: success, полученные значения splits и modified (количество перемещённых изображений).

Эмбеддинги датасета#

GET /api/datasets/{owner}/{dataset}/embeddings
POST /api/datasets/{owner}/{dataset}/embeddings
DELETE /api/datasets/{owner}/{dataset}/embeddings

Python SDK: client.datasets.embeddings(owner, dataset), client.datasets.create_embeddings(owner, dataset), client.datasets.delete_embeddings(owner, dataset)

GET возвращает сводку анализа (analyzedAt, embeddingsCount, latestImageAt, activeJob). POST ставит анализ эмбеддингов в очередь и возвращает 202 с jobId. DELETE отменяет активное задание и возвращает идентификатор отменённого задания или null.

Кластеризация изображений#

GET /api/datasets/{owner}/{dataset}/images/clustering

Python SDK: client.datasets.clustering(owner, dataset)

Возвращает двумерное расположение UMAP из завершённого анализа с пагинацией через offset и limit (по умолчанию и максимум 50 000). Каждая запись содержит id, umapX, umapY, split, classIds, width, height, bytes, labelCount и missing.

Список моделей, обученных на датасете#

GET /api/datasets/{owner}/{dataset}/models

Python SDK: client.datasets.models(owner, dataset)

Ответ:

{
    "models": [
        {
            "id": "65f1c0a2b3d4e5f601234599",
            "owner": "acme-vision",
            "project": "inspection",
            "model": "v3",
            "name": "v3",
            "status": "completed",
            "task": "detect",
            "epochs": 100,
            "bestEpoch": 87,
            "metrics": { "mAP50": 0.85, "mAP50-95": 0.72, "precision": 0.88, "recall": 0.81 },
            "startedAt": "2026-01-14T22:00:00Z",
            "completedAt": "2026-01-15T10:00:00Z",
            "createdAt": "2026-01-14T21:55:00Z"
        }
    ],
    "count": 1
}

Список изображений датасета#

GET /api/datasets/{owner}/{dataset}/images

Python SDK: client.datasets.images(owner, dataset)

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

ПараметрТипОписание
limitintМаксимальное количество возвращаемых изображений (по умолчанию: 50, максимум: 5000)
offsetintКоличество пропускаемых изображений (по умолчанию: 0)
cursorstringИдентификатор последнего изображения с предыдущей страницы для пагинации по курсору
includeTotalлогическое значениеВключать общее количество совпадений (по умолчанию: true)
splitstringФильтровать по разбиению: train, val, test
hasLabelлогическое значениеФильтровать по состоянию разметки
hasErrorлогическое значениеФильтровать по состоянию ошибки обработки
classIdsstringИдентификаторы классов через запятую; возвращает изображения, содержащие любой из них
searchstringПоиск подстроки в имени файла и пользовательских метаданных (максимум 200 символов)
sortstringnewest (по умолчанию), oldest, name-asc, name-desc, height-asc, height-desc, width-asc, width-desc, size-asc, size-desc, labels-asc, labels-desc
includeThumbnailsлогическое значениеВключать подписанные URL миниатюр (по умолчанию: true)
includeImageUrlsлогическое значениеВключать подписанные URL полноразмерных изображений (по умолчанию: false)
includeLabelsлогическое значениеВключать аннотации для предварительного просмотра с ограничением количества (по умолчанию: false)

Ответ:

{
    "images": [
        {
            "id": "65f1c0a2b3d4e5f601234567",
            "hash": "9f2c1d4b6a8e0f3c5d7b9a1e2f4c6d8b",
            "ext": "jpg",
            "name": "aisle-04.jpg",
            "thumbnailUrl": "https://storage.googleapis.com/...&signature=...",
            "width": 1920,
            "height": 1080,
            "split": "train",
            "labelCount": 6,
            "bytes": 284213,
            "error": null
        }
    ],
    "total": 1000,
    "hasMore": true,
    "classes": ["person", "forklift"],
    "errorCount": 0,
    "nextCursor": "65f1c0a2b3d4e5f601234567"
}

Получить выбранные изображения#

POST /api/datasets/{owner}/{dataset}/images

Python SDK: client.datasets.selected_images(owner, dataset, image_ids=...)

Возвращает изображения в том же формате для не более чем 1 000 переданных идентификаторов изображений и принимает те же параметры фильтрации и URL-запроса, что и операция перечисления.

{
    "imageIds": ["65f1c0a2b3d4e5f601234567", "65f1c0a2b3d4e5f601234568"]
}

Импортировать данные датасета#

POST /api/datasets/{owner}/{dataset}/ingest

Python SDK: client.datasets.ingest(owner, dataset, body=...)

Обрабатывает завершённую загрузку, удалённый архив или подключённое хранилище и добавляет данные в существующий датасет. Укажи ровно один источник:

ПолеТипОписание
sessionIdstringСеанс загрузки из POST /api/upload/signed-url, уже завершённый
sourceUrlstringОбщедоступный HTTP- или HTTPS-URL ZIP-, TAR-, TAR.GZ-, TGZ- или NDJSON-файла (не более 4096 символов)
referenceобъектПодключённый источник: облачное хранилище (provider: "cloud", integrationId, target, prefix) или локальная инфраструктура (provider: "local", keyId, root, prefix)
targetSplitstringtrain, val или test; переопределяет структуру разбиения архива
conflictPolicystringskip, keep_both или replace для конфликтов имён файлов или содержимого
classMappingобъектСопоставляет входящие имена классов с индексом класса, существующим или новым именем класса либо с null, чтобы пропустить класс
imageMetadataобъектПользовательские метаданные, индексированные относительным путём каждого изображения в архиве или значением file в NDJSON

Сеансы загрузки привязываются к датасету через assetId, переданный в POST /api/upload/signed-url, а импорт отклоняет сеанс, принадлежащий другому датасету.

Тело (загруженный архив):

{
    "sessionId": "session_abc123",
    "targetSplit": "train"
}

Тело (удалённый архив или NDJSON):

{
    "sourceUrl": "https://example.com/my-dataset.zip"
}

Тело (импорт меток при последующем импорте):

{
    "sessionId": "session_abc123",
    "classMapping": { "person": 0, "automobile": "forklift", "background": null }
}

Тело (добавление метаданных для каждого изображения):

{
    "sessionId": "session_abc123",
    "imageMetadata": {
        "airbus-wing.jpg": { "aircraft": { "family": "A350" }, "inspectionStatus": "reviewed" },
        "images/tail.jpg": { "aircraft": { "family": "A320" }, "inspectionSeverity": 2 }
    }
}

Ключи метаданных должны соответствовать нормализованному пути внутри архива, включая папки. При импорте NDJSON каждая запись может содержать собственный объект metadata, который имеет приоритет над соответствующей записью imageMetadata. Длина путей в архиве ограничена 1 024 символами, ключей метаданных верхнего уровня — 128 символами, а каждого объекта метаданных и всей карты imageMetadata — 500 000 сериализованными символами.

Сопоставление классов

При первом импорте классы автоматически создаются из архива. При последующих импортах классы архива, отсутствующие в classMapping, сопоставляются с существующими классами датасета без учёта регистра. Метки пропускаются только для классов, явно сопоставленных с null, или классов, для которых нет соответствующего существующего класса.

Ответ (201):

{
    "jobId": "65f1c0a2b3d4e5f6012345aa",
    "status": "queued"
}
graph LR
    A[POST /api/datasets]:::start --> B[POST /api/upload/signed-url]:::proc
    B --> C[PUT archive to signed URL]:::proc
    C --> D[POST /api/upload/complete]:::proc
    D --> E["POST /api/datasets/{owner}/{dataset}/ingest"]:::proc
    E --> F[Process archive]:::proc
    F --> G[Dataset ready]:::out

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef out fill:#9C27B0,color:#fff
Загрузить одно изображение с метаданными через Python

Тот же код работает с группой изображений: добавь в ZIP дополнительные файлы и соответствующие записи в imageMetadata.

import io
import zipfile
from pathlib import Path

import requests

api = "https://platform.ultralytics.com/api"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
owner, dataset = "acme-vision", "warehouse"
dataset_id = "65f1c0a2b3d4e5f601234567"  # id returned by POST /api/datasets
image_path = Path("airbus-wing.jpg")

archive = io.BytesIO()
with zipfile.ZipFile(archive, "w", zipfile.ZIP_DEFLATED) as zf:
    zf.write(image_path, image_path.name)
data = archive.getvalue()

signed = requests.post(
    f"{api}/upload/signed-url",
    headers=headers,
    json={
        "assetType": "datasets",
        "assetId": dataset_id,
        "filename": "images.zip",
        "contentType": "application/zip",
        "totalBytes": len(data),
    },
)
signed.raise_for_status()
upload = signed.json()

requests.put(upload["uploadUrl"], headers={"Content-Type": "application/zip"}, data=data).raise_for_status()
requests.post(
    f"{api}/upload/complete",
    headers=headers,
    json={"sessionId": upload["sessionId"]},
).raise_for_status()

ingest = requests.post(
    f"{api}/datasets/{owner}/{dataset}/ingest",
    headers=headers,
    json={
        "sessionId": upload["sessionId"],
        "imageMetadata": {
            "airbus-wing.jpg": {
                "aircraft": {"family": "A350", "section": "wing"},
                "inspectionStatus": "reviewed",
            }
        },
    },
)
ingest.raise_for_status()
print(ingest.json())

API изображений#

Просматривай, аннотируй, перемещай и удаляй изображения датасета по их 24-символьному идентификатору изображения. См. документацию по аннотациям.

Получить изображение#

GET /api/images/{imageId}

Python SDK: client.images.retrieve(image_id)

Возвращает объект metadata (пользовательский, определённый пользователем), объект properties (имя файла, хеш, размеры, разбиение, количества, временные метки), labels и classNames датасета.

Обновить изображение#

PATCH /api/images/{imageId}

Python SDK: client.images.update(image_id, body=...)

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

Тело (аннотации):

{
    "labels": [
        { "classId": 0, "bbox": [0.5, 0.5, 0.2, 0.3] },
        { "classId": 1, "segments": [0.1, 0.2, 0.3, 0.2, 0.2, 0.4] }
    ]
}

Тело (метаданные):

{
    "metadata": { "location": "strasbourg", "reviewed": true }
}
Формат координат

Координаты меток используют нормализованные значения YOLO от 0 до 1. Для ограничивающих рамок используется [x_center, y_center, width, height]. Метки сегментации используют segments — плоский список вершин полигона [x1, y1, x2, y2, ...]. Метки поз используют keypoints в одной согласованной плоской форме: пары [x1, y1, x2, y2, ...] или тройки [x1, y1, v1, x2, y2, v2, ...], где видимость обычно обозначается значениями 0, 1 или 2. Для ориентированных рамок используются углы obb. Сохранённые координаты округляются до 5 знаков после запятой, а изображение может содержать не более 10 000 аннотаций.

Удалить изображение#

DELETE /api/images/{imageId}

Python SDK: client.images.delete(image_id)

Безвозвратно удаляет одно изображение и его аннотации.

Автоматически аннотировать изображение#

POST /api/images/{imageId}/predict

Python SDK: client.images.predict(image_id, model_id=...)

Запускает инференс YOLO для изображения и возвращает предсказанные аннотации. Они не сохраняются — запиши результаты обратно с помощью PATCH /api/images/{imageId}, когда убедишься, что они подходят.

ПолеТипОбязательноеОписание
modelIdstringДаПолностью квалифицированный URI модели, ul://{owner}/{project}/{model}
confidencefloatНетПорог уверенности, 0.01–1.0 (по умолчанию: 0.25)
ioufloatНетПорог IoU для подавления немаксимумов, 0.0–0.95 (по умолчанию: 0.7)

Ответ: success, predictions (объекты аннотаций), modelUsed и inferenceTime. Модель, классы которой не совпадают с классами датасета, возвращает 422.

Авторазметка набора данных#

POST /api/datasets/{owner}/{dataset}/predict/batch

Python SDK: client.datasets.create_batch(owner, dataset, model_id=...)

Сохраняет версию набора данных, затем ставит в очередь запуск, который размечает неразмеченные изображения набора данных с помощью модели и возвращает 202. Тело запроса принимает те же поля modelId, confidence и iou, что и эндпоинт для одного изображения, а также includeAnnotated (по умолчанию false), чтобы также размечать изображения, у которых уже есть разметка, и необязательный массив classMapping, задающий индекс класса набора данных для каждого класса модели, либо null, чтобы пропустить его. Существующие метки никогда не изменяются, а запуск тарифицируется за фактически обработанные изображения. 402 означает, что баланс не покрывает смету, 409 — что набор данных не готов, не содержит оставшихся для разметки изображений или для него уже выполняется запуск, а 422 — что в наборе данных нет классов: создай их с помощью эндпоинта классов перед вызовом этого эндпоинта, что и делает шаг сопоставления классов в приложении перед запуском.

GET по тому же пути (client.datasets.batch(owner, dataset)) возвращает выполняющийся в данный момент запуск и его прогресс либо последний завершенный запуск до его отклонения; DELETE (client.datasets.delete_batch(owner, dataset)) отменяет выполняющийся запуск либо производит расчет по счетам и закрывает итоговую сводку.

Массово переместить изображения#

PATCH /api/images/bulk

Python SDK: client.images.update_bulk(image_ids=..., split=...)

Перемещает до 1 000 изображений из одного датасета в другое разбиение.

{
    "imageIds": ["65f1c0a2b3d4e5f601234567"],
    "split": "val",
    "conflictPolicy": "skip"
}

При конфликтах имён файлов или содержимого возвращается 409, пока ты не выберешь единое для всей группы conflictPolicy из вариантов skip, keep_both или replace. В ответе указываются modifiedCount, skippedCount и targetSplit.

Массово удалить изображения#

DELETE /api/images/bulk

Python SDK: client.images.delete_bulk(image_ids=...)

{
    "imageIds": ["65f1c0a2b3d4e5f601234567", "65f1c0a2b3d4e5f601234568"]
}

Удаляет до 1 000 изображений из одного датасета и возвращает deletedCount и deletedImageIds.

Получить подписанные URL изображений#

POST /api/images/urls

Python SDK: client.images.urls(image_ids=...)

Возвращает временные подписанные URL для не более чем 100 идентификаторов изображений из одного датасета.

{
    "imageIds": ["65f1c0a2b3d4e5f601234567"]
}

Ответ: urls и thumbnails, оба индексированные идентификатором изображения.


API проектов#

Организуй свои модели по проектам. Каждая модель принадлежит одному проекту. См. документацию по проектам.

Перечислить проекты#

GET /api/projects/{owner}

Python SDK: client.projects.list(owner)

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

ПараметрТипОписание
limitintМаксимальное количество возвращаемых проектов (по умолчанию: 20, максимум: 500)

Получить проект#

GET /api/projects/{owner}/{project}

Python SDK: client.projects.retrieve(owner, project)

Возвращает объект project, массив models со сводками по каждой модели (статус, метрики, эпохи, веса, аргументы обучения) и isOwner.

Создание проекта#

POST /api/projects

Python SDK: client.projects.create(project=..., name=...)

ПолеТипОбязательноеОписание
projectstringДаИмя проекта, используемое в URL Platform
namestringДаОтображаемое имя (максимум 100 символов)
descriptionstringНетОписание (максимум 1000 символов)
visibilitystringНетpublic или private
tagsмассивНетДо 50 тегов
licensestringНетИдентификатор лицензии проекта
metadataобъектНетПользовательские метаданные JSON
ownerstringНетИдентификатор рабочего пространства команды; по умолчанию используется твоё личное рабочее пространство
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "project": "inspection",
    "name": "Inspection",
    "description": "Detection experiments",
    "metadata": {"department": "manufacturing", "cost_center": "cv-01"}
  }' \
  https://platform.ultralytics.com/api/projects

Ответ (201): id, owner, project, region.

Обновить проект#

PATCH /api/projects/{owner}/{project}

Python SDK: client.projects.update(owner, project)

Допустимые поля: name, description, visibility, metadata, tags, license, archived, iconColor, iconLetter, viewPreferences и starred.

{
    "metadata": { "department": "research", "program": "inspection" }
}

Отправь пустой объект metadata ({}), чтобы очистить его. К метаданным проекта применяются те же ограничения, что и к метаданным набора данных: ключ — 128 символов, сериализованный объект — 500 000 символов.

Удаление проекта#

DELETE /api/projects/{owner}/{project}

Python SDK: client.projects.delete(owner, project)

Перемещает проект и его модели в корзину, возвращая cascadedModels.

Клонирование проекта#

POST /api/projects/{owner}/{project}/clone

Python SDK: client.projects.clone(owner, project)

Клонирует доступный проект и его завершённые модели. Необязательное тело принимает project, name, description, visibility, license и целевой owner.


API моделей#

Управляй обученными моделями YOLO: просматривай метрики, скачивай веса, запускай инференс и отслеживай обучение. См. документацию по моделям.

Перечислить модели в проекте#

GET /api/models/{owner}/{project}

Python SDK: client.models.list(owner, project)

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

ПараметрТипОписание
limitintМаксимальное количество возвращаемых моделей (по умолчанию: 20, максимум: 100)

Получить модель#

GET /api/models/{owner}/{project}/{model}

Python SDK: client.models.retrieve(owner, project, model)

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

ПараметрТипОписание
analysisintУстанови 1, чтобы вместо модели вернуть анализ валидации для каждого изображения

Ответ по умолчанию содержит объект model — статус, задачу, метрики, trainArgs, trainResults, classNames, computeCost, metadata и другие поля — а также isOwner.

Создать модель#

POST /api/models

Python SDK: client.models.create(body=...)

Создаёт запись необученной модели, к которой можно прикрепить веса или запустить обучение.

ПолеТипОбязательноеОписание
projectstringДаИмя целевого проекта
ownerstringНетИдентификатор рабочего пространства; по умолчанию используется твоё личное рабочее пространство
modelstringНетИмя модели, используемое в URL Platform; создаётся автоматически, если не указано
namestringНетОтображаемое имя (принимается только вместе с model)
descriptionstringНетОписание (максимум 1000 символов)
taskstringНетdetect, segment, semantic, depth, classify, pose или obb
metadataобъектНетПользовательские метаданные JSON
trainArgsобъектНетАргументы обучения для сохранения
metricsобъектНетМетрики, такие как mAP50, mAP50-95, precision, recall
epochsчислоНетКоличество эпох для уже обученной модели
versionstringНетМетка версии (не более 50 символов)

Ответ (201): id, owner, project, model, region.

Загрузка файла модели

Чтобы прикрепить веса .pt, запроси подписанный URL загрузки с помощью assetType: "models", передав id этой модели как assetId, загрузи файл через PUT по возвращённому URL, затем вызови POST /api/upload/complete с возвращённым sessionId.

Обновить модель#

PATCH /api/models/{owner}/{project}/{model}

Python SDK: client.models.update(owner, project, model)

Допустимые поля включают name, description, color, metadata, status, license, datasetSlug, trainArgs, trainResults, epochs, bestEpoch, bestFitness, version, trainingError и starred. Передача projectId сама по себе перемещает модель в другой проект того же владельца; в ответе возвращается slug модели в пункте назначения, renamed: true, если этот идентификатор там уже занят, и 409, пока модель все еще обучается.

{
    "metadata": { "release": "candidate-3", "reviewed": true }
}

Пользовательское поле metadata отделено от полей, управляемых обучением, таких как trainArgs, environment и trainResults, и использует те же ограничения размера, что и метаданные датасета.

Удаление модели#

DELETE /api/models/{owner}/{project}/{model}

Python SDK: client.models.delete(owner, project, model)

Перемещает модель в корзину на 30 дней.

Скачать файлы модели#

GET /api/models/{owner}/{project}/{model}/files

Python SDK: client.models.files(owner, project, model)

Возвращает подписанные URL весов модели с коротким сроком действия.

{
    "files": [
        {
            "name": "best.pt",
            "size": 6534127,
            "downloadUrl": "https://storage.googleapis.com/...&signature=..."
        }
    ]
}

Клонирование модели#

POST /api/models/{owner}/{project}/{model}/clone

Python SDK: client.models.clone(owner, project, model, project_body=...)

Копирует доступную модель в существующий проект.

{
    "owner": "acme-vision",
    "project": "inspection",
    "model": "v3-copy",
    "name": "V3 Copy",
    "description": "Cloned from a public model"
}
ПолеТипОбязательноеОписание
projectstringДаИмя целевого проекта
ownerstringНетЦелевое рабочее пространство; по умолчанию используется твоё личное рабочее пространство
modelstringНетИмя целевой модели
namestringНетОтображаемое имя целевой модели
descriptionstringНетОписание клона

Запусти инференс#

POST /api/models/{owner}/{project}/{model}/predict

Python SDK: client.models.predict(owner, project, model, body=...)

Для общедоступных моделей можно выполнять предсказания без аутентификации. Для частных моделей и моделей с общим доступом требуется ключ API с доступом к родительскому проекту.

Составная форма:

ПараметрТипПо умолчаниюДиапазонОписание
filefile--Файл изображения или видео (обязателен, если не задан source)
conffloat0.250.01 – 1.0Минимальный порог уверенности
ioufloat0.70.0 – 0.95Порог IoU для NMS
imgszint64032 – 1280Размер входного изображения в пикселях
normalizeboolfalse-Возвращать координаты ограничивающих рамок в диапазоне 0 – 1
decimalsint50 – 10Точность координатных значений после запятой
bitsint88, 12, 16Квантизация карты глубины, только для моделей глубины
sourcestring--URL изображения или строка base64 (альтернатива file)

Укажи file или source. Модели глубины также принимают bits (8, 12 или 16) для выбора квантования PNG-карты глубины. Запросы, превышающие входные ограничения сервиса, возвращают 413.

curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@image.jpg" \
  -F "conf=0.5" \
  https://platform.ultralytics.com/api/models/acme-vision/inspection/v3/predict

Ответ:

Каждая запись в images содержит shape, speed, results и для задач с плотным предсказанием — PNG-полезную нагрузку semantic_mask или depth (значения глубины представлены как pixel × max / divisor, с делителем 255 для стандартной 8-битной карты и 65535, если bits равен 12 или 16). Объект metadata содержит сведения о количестве изображений, времени выполнения функций, задаче и версиях сервиса. Внутренние пути к моделям никогда не возвращаются.

{
    "images": [
        {
            "shape": [1080, 1920],
            "speed": { "preprocess": 2.1, "inference": 12.4, "postprocess": 1.3 },
            "results": [
                {
                    "class": 0,
                    "name": "person",
                    "confidence": 0.92,
                    "box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
                }
            ]
        }
    ],
    "metadata": {
        "imageCount": 1,
        "functionTimeAlive": 184.2,
        "functionTimeCall": 0.31,
        "task": "detect",
        "version": { "ultralytics": "8.4.120" }
    }
}

Проверить прогресс обучения#

GET /api/models/{owner}/{project}/{model}/training

Python SDK: client.models.training(owner, project, model)

Возвращает job, содержащий статус, прогресс по эпохам, время выполнения, сведения о вычислениях, аргументы обучения, метрики эпох и безопасные сведения об ошибке, или null, если модель ещё ни разу не обучалась. Модели в публичных проектах доступны для чтения без аутентификации.

Отмена обучения#

DELETE /api/models/{owner}/{project}/{model}/training

Python SDK: client.models.delete_training(owner, project, model)

Завершает работу выполняющегося вычислительного экземпляра и помечает задачу как отменённую. Возвращает 409, если обучение больше не выполняется.


API обучения#

Запускай обучение YOLO на облачных GPU и отслеживай прогресс в реальном времени. См. документацию по облачному обучению.

graph LR
    A[POST /api/training/start]:::start --> B[Job Created]:::proc
    B --> C{Training}:::decide
    C -->|progress| D[GET .../training]:::proc
    C -->|cancel| E[DELETE .../training]:::error
    C -->|complete| F[Model Ready]:::out
    F --> G[Deploy or Export]:::proc

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef decide fill:#FF9800,color:#fff
    classDef out fill:#9C27B0,color:#fff
    classDef error fill:#F44336,color:#fff

Получить доступность GPU#

GET /api/training/gpu-availability

Python SDK: client.training.gpu_availability()

Возвращает текущий статус доступности, сгруппированный по идентификатору GPU. Доступно публично и без аутентификации; передай managed=true, чтобы включить управляемые мощности обучения — для этого требуется API-ключ.

Начать обучение#

POST /api/training/start

Python SDK: client.training.start(model_id=..., train_args=...)

ПолеТипОбязательноеОписание
modelIdstringДаИдентификатор модели для обучения
trainArgsобъектДаАргументы обучения YOLO; model, data и epochs обязательны
gpuTypestringНетИспользуемый облачный GPU (по умолчанию: rtx-4090)
captureDatasetVersionлогическое значениеНетСохранить неизменяемую версию датасета для этого запуска (по умолчанию: false)
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "modelId": "65f1c0a2b3d4e5f601234599",
    "gpuType": "rtx-4090",
    "trainArgs": {
      "model": "yolo26n.pt",
      "data": "ul://acme-vision/datasets/warehouse",
      "epochs": 100,
      "imgsz": 640,
      "batch": 16
    }
  }' \
  https://platform.ultralytics.com/api/training/start

Ответ:

{
    "modelId": "65f1c0a2b3d4e5f601234599",
    "status": "starting",
    "gpuType": "rtx-4090",
    "estimatedCost": { "pricePerHour": 0.69, "gpuMemoryGb": 24 },
    "billing": {
        "estimatedCostCents": 138,
        "estimatedCostDisplay": "$1.38",
        "balanceCents": 2500
    }
}

Обучение возвращает 402, если на балансе недостаточно кредитов, и 503, если для запрошенного GPU нет доступных мощностей.

Типы GPU

Доступно 26 типов GPU — от rtx-2000-ada до b300, включая rtx-4090, l40s, a100-80gb-pcie, a100-80gb-sxm, rtx-pro-6000, h100-sxm, h200-sxm и b200. Полный список с ценами см. в разделе Облачное обучение.


API экспорта#

Преобразуй модели в оптимизированные форматы, такие как ONNX, TensorRT, CoreML и LiteRT, для развёртывания на периферийных устройствах. См. документацию по развёртыванию.

Список экспортов#

GET /api/models/{owner}/{project}/{model}/exports

Python SDK: client.exports.list(owner, project, model)

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

ПараметрТипОписание
statusstringФильтровать по queued, starting, running, completed, failed или cancelled
limitintМаксимальное число возвращаемых экспортов (по умолчанию: 20, максимум: 100)

Создать экспорт#

POST /api/models/{owner}/{project}/{model}/exports

Python SDK: client.exports.create(owner, project, model, format=...)

ПолеТипОбязательноеОписание
formatstringДаЦелевой формат экспорта (см. таблицу ниже)
gpuTypestringУсловныйОбязателен, если format имеет значение engine; используй поддерживаемую целевую платформу GPU или Jetson
argsобъектНетПараметры экспорта: imgsz, quantize, dynamic, simplify, opset, conf, iou, batch, workspace, nms, optimize, keras и name (целевое устройство для форматов RKNN, QNN, Hailo и Ascend)
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"format": "onnx", "args": {"imgsz": 640, "quantize": 16}}' \
  https://platform.ultralytics.com/api/models/acme-vision/inspection/v3/exports

Ответ (201): id, format, status (queued или running), gpuType, region. Эквивалентный экспорт, который уже выполняется, возвращает 409.

Поддерживаемые форматы:

Используй аргумент format из общей таблицы экспорта ниже. PyTorch — исходный формат, а не целевой формат экспорта через API.

ФорматАргумент formatМодельМетаданныеАргументы
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n.aimodelimgsz, batch, quantize

nms=None по умолчанию выдает сырые результаты для внешнего NMS. Установи nms=False, чтобы выбрать доступный головной модуль без NMS; неподдерживаемые форматы возвращаются к своему родному пути вывода. Записи nms выше определяют форматы, которые могут встраивать NMS с помощью nms=True.

Получить статус экспорта#

GET /api/models/{owner}/{project}/{model}/exports/{exportId}

Python SDK: client.exports.retrieve(owner, project, model, export_id)

Возвращает объект export с полями status, format, args, gpuType, временными метками и после завершения — объектом file, содержащим size, downloadUrl и downloadFilename.

Отменить или удалить экспорт#

DELETE /api/models/{owner}/{project}/{model}/exports/{exportId}

Python SDK: client.exports.delete(owner, project, model, export_id)

Отменяет активный экспорт или удаляет завершённый экспорт вместе с его файлом. В ответе указывается, какое действие выполнено:

{
    "success": true,
    "action": "cancelled"
}

API развёртываний#

Разворачивай модели на выделенных конечных точках инференса с проверками состояния и мониторингом. См. документацию по конечным точкам.

graph LR
    A[Create]:::start --> B[Deploying]:::proc
    B --> C[Ready]:::out
    C -->|action stop| D[Stopped]:::extern
    C -->|action replace| B
    D -->|action start| C
    C -->|delete| E[Deleted]:::error
    D -->|delete| E
    C -->|predict| F[Inference Results]:::out

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef out fill:#9C27B0,color:#fff
    classDef error fill:#F44336,color:#fff
    classDef extern fill:#607D8B,color:#fff

Список развёртываний#

GET /api/deployments/{owner}

Python SDK: client.deployments.list(owner)

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

ПараметрТипОписание
statusstringcreating, deploying, ready, stopping, stopped или failed
modelstringФильтровать по {project}/{model}, например по inspection/v3
limitintМаксимальное число возвращаемых развёртываний (по умолчанию: 20, максимум: 100)

Анонимные вызывающие стороны должны фильтровать по одной публичной модели; для просмотра всего рабочего пространства требуется аутентификация.

Создать развёртывание#

POST /api/deployments/{owner}

Python SDK: client.deployments.create(owner, project=..., model=..., deployment=..., name=..., region=...)

Тело:

{
    "project": "inspection",
    "model": "v3",
    "deployment": "edge-1",
    "name": "Edge 1",
    "region": "us-central1"
}
ПолеТипОбязательноеОписание
projectstringДаПроект, содержащий модель
modelstringДаМодель для развёртывания
deploymentstringДаИмя развёртывания, используемое в URL Platform
namestringДаОтображаемое имя
regionstringДаОдин из 42 поддерживаемых регионов развёртывания

Ответ (201): id, deployment, status (creating), message и region.

Размер ресурсов

Масштабирование CPU, памяти и экземпляров управляется Platform в соответствии с ограничениями твоего тарифного плана, а запрос на создание не принимает конфигурацию ресурсов. Текущие значения возвращаются в объекте resources при каждом чтении развёртывания.

Выбор региона

Выбирай регион, расположенный ближе к пользователям, чтобы минимизировать задержку. В интерфейсе Platform отображаются оценки задержки для всех 42 доступных регионов.

Получить развёртывание#

GET /api/deployments/{owner}/{deployment}

Python SDK: client.deployments.retrieve(owner, deployment)

Возвращает объект deployment с полями status, statusMessage, region, serviceUrl и resources.

Запустить, остановить или заменить развёртывание#

PATCH /api/deployments/{owner}/{deployment}

Python SDK: client.deployments.update(owner, deployment, body=...)

Одна запись action выбирает операцию:

{ "action": "start" }

Замена развёртывает новую ревизию, сохраняя идентификатор развёртывания, регион и URL конечной точки; существующая ревизия продолжает работать, если развёртывание не удалось. Заменяющая модель должна быть завершённой моделью с весами, к которым у твоего ключа есть доступ. Завершённые операции возвращают 200 с status, ready или stopped; операции, для которых развёртывание ещё выполняется, возвращают 202 с deploying или stopping.

Удалить развёртывание#

DELETE /api/deployments/{owner}/{deployment}

Python SDK: client.deployments.delete(owner, deployment)

Безвозвратно удаляет конечную точку инференса.

Проверка состояния#

GET /api/deployments/{owner}/{deployment}/health

Python SDK: client.deployments.health(owner, deployment)

Проверяет доступность и прогревает конечную точку, возвращая healthy, latencyMs и код вышестоящего сервиса status.

Запустить инференс в развёртывании#

POST /api/deployments/{owner}/{deployment}/predict

Python SDK: client.deployments.predict(owner, deployment, body=...)

Направляет изображение или видео через выделенную конечную точку. Контракты запроса и ответа соответствуют инференсу модели.

Составная форма:

ПараметрТипПо умолчаниюДиапазонОписание
filefile--Файл изображения или видео (обязателен, если не задан source)
conffloat0.250.01 – 1.0Минимальный порог уверенности
ioufloat0.70.0 – 0.95Порог IoU для NMS
imgszint64032 – 1280Размер входного изображения в пикселях
normalizeboolfalse-Возвращать координаты ограничивающих рамок в диапазоне 0 – 1
decimalsint50 – 10Точность координатных значений после запятой
bitsint88, 12, 16Квантизация карты глубины, только для моделей глубины
sourcestring--URL изображения или строка base64 (альтернатива file)

Получить метрики#

GET /api/deployments/{owner}/{deployment}/metrics

Python SDK: client.deployments.metrics(owner, deployment)

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

ПараметрТипОписание
rangestring1h, 6h, 24h (по умолчанию), 7d или 30d
sparklineлогическое значениеВернуть компактную сводку панели вместо полного ряда данных (по умолчанию: false)

Полный ответ содержит summary (общее количество запросов, долю ошибок, среднюю задержку и задержку p50/p95/p99) и timeSeries (запросы, ошибки, задержку, CPU, память, количество экземпляров). Ответ со спарклайном возвращает requests24h, totalRequests, errorRate и avgLatencyMs.

Получить логи#

GET /api/deployments/{owner}/{deployment}/logs

Python SDK: client.deployments.logs(owner, deployment)

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

ПараметрТипОписание
severitystringЧерез запятую: DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY
limitintКоличество возвращаемых записей (по умолчанию: 50, максимум: 200)
pageTokenstringТокен пагинации из предыдущего ответа

API корзины#

Просматривай, восстанавливай и безвозвратно удаляй проекты, датасеты и модели, удалённые программно. Элементы автоматически очищаются через 30 дней. См. документацию по корзине.

Список элементов корзины#

GET /api/trash

Python SDK: client.lifecycle.trash()

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

ПараметрТипОписание
typestringall (по умолчанию), project, dataset или model
pageintНомер страницы (по умолчанию: 1)
limitintКоличество элементов на странице (по умолчанию: 50, максимум: 200)

Ответ содержит items (каждый элемент с daysRemaining), total, page, limit, totalPages и summary с итоговыми значениями по типам.

Восстановление элемента#

POST /api/trash

Python SDK: client.lifecycle.restore(id=..., type=...)

{
    "id": "65f1c0a2b3d4e5f601234567",
    "type": "dataset"
}

Восстановление проекта также восстанавливает модели, удалённые вместе с ним; они указываются как restoredModels.

Удалить безвозвратно#

DELETE /api/trash

Python SDK: client.lifecycle.delete_trash(body=...)

Удалить один элемент:

{
    "id": "65f1c0a2b3d4e5f601234567",
    "type": "dataset"
}

Или очистить всю корзину:

{
    "all": true
}

В ответе указываются deletedCount, а также cascadedModels и survivingDeployments, если применимо.

Необратимо

Безвозвратное удаление невозможно отменить. Ресурс и все связанные с ним данные удаляются.


API загрузки#

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

Получить подписанный URL для загрузки#

POST /api/upload/signed-url

Python SDK: client.upload.signed_url(body=...)

Тело:

{
    "assetType": "datasets",
    "assetId": "65f1c0a2b3d4e5f601234567",
    "filename": "warehouse.zip",
    "contentType": "application/zip",
    "totalBytes": 52428800
}
ПолеТипОбязательноеОписание
assetTypestringДаdatasets, models, images или videos
assetIdstringДаИдентификатор целевого датасета или модели
filenamestringДаИсходное имя файла (максимум 256 символов)
contentTypestringДаТип MIME
totalBytesчислоДаРазмер файла в байтах
Имена файлов архива датасета

Если assetType имеет значение datasets, имя filename должно заканчиваться на .zip, .tar, .tar.gz, .tgz или .ndjson. Упакуй отдельные изображения в архив перед загрузкой.

Ответ:

{
    "sessionId": "session_abc123",
    "uploadUrl": "https://storage.googleapis.com/...&signature=...",
    "expiresAt": "2026-02-22T12:00:00Z",
    "headers": { "x-goog-if-generation-match": "0" }
}

Загрузи файл с помощью запроса PUT по адресу uploadUrl, используя тот же Content-Type, который ты объявил, и каждый заголовок, возвращенный в headers. URL-адреса загрузки датасетов действительны в течение 12 часов и предназначены только для создания: второй запрос PUT по тому же URL-адресу возвращает 412, а запрос PUT без возвращенных заголовков возвращает 400.

Завершить загрузку#

POST /api/upload/complete

Python SDK: client.upload.complete(session_id=...)

{
    "sessionId": "session_abc123",
    "md5": "<optional md5 hex>"
}

Ответ: success и объект file с полями size и contentType. Для моделей это связывает веса с моделью; для архивов датасетов далее вызови приём, чтобы начать обработку.

Когда указан md5, он сверяется с сохраненным объектом. Несоответствие возвращает 400; для сеанса, который еще не завершен, оно также удаляет загруженный файл и оставляет сеанс незавершенным, поэтому запроси новый подписанный URL-адрес и загрузи снова. Завершенный сеанс датасета можно завершить повторно, пока существует его архив, но конкурирующие завершения с различными дайджестами возвращают 409; сеансы моделей удаляются при завершении. checksum сохраняется как метаданные файла модели и не проверяется.


API интеграций хранилищ#

Подключай доступные только для чтения аккаунты Google Cloud Storage, Amazon S3 или Azure Blob Storage и просматривай их как источники датасетов. См. документацию по интеграциям.

Список интеграций#

GET /api/integrations/buckets

Python SDK: client.storage_integrations.list()

Возвращает integrations, каждый из которых содержит id, provider, credentialIdentity, targets и createdAt. Учетные данные никогда не возвращаются.

Обнаружение расположений#

POST /api/integrations/buckets/discover

Python SDK: client.storage_integrations.discover(body=...)

Перечисляет доступные для чтения с указанными учетными данными бакеты или контейнеры, не сохраняя их.

{
    "provider": "gcs",
    "credentials": {
        "client_email": "svc@project.iam.gserviceaccount.com",
        "private_key": "-----BEGIN PRIVATE KEY-----\n...",
        "project_id": "my-project"
    }
}

Ответ: {"targets": ["my-bucket", "another-bucket"]}

Подключение хранилища#

POST /api/integrations/buckets

Python SDK: client.storage_integrations.create(body=...)

Используются те же формы учетных данных, что и для обнаружения, а также обязательный массив targets из 1–50 имен бакетов или контейнеров. Возвращает 201 с сохраненной интеграцией. Временные учетные данные S3 (ключи доступа ASIA) отклоняются.

Просмотр объектов#

GET /api/integrations/buckets/{id}/objects

Python SDK: client.storage_integrations.objects(id, target=...)

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

ПараметрТипОбязательноеОписание
targetstringДаИмя бакета или контейнера
prefixstringНетПрефикс папки (не более 1024 символов)
cursorstringНетКурсор пагинации провайдера с предыдущей страницы

Возвращает entries (каждый kind — это folder или file) и необязательный cursor для следующей страницы.

Отключение хранилища#

DELETE /api/integrations/buckets/{id}

Python SDK: client.storage_integrations.delete(id)

Удаляет сохраненные учетные данные, не удаляя данные у провайдера. Подключенные наборы данных остаются видимыми, но их файлы становятся недоступны, пока та же учетная запись хранилища не будет подключена повторно. Требуется доступ администратора рабочего пространства.


API импорта наборов данных#

Импортируй наборы данных из сторонних сервисов. См. интеграцию с Roboflow.

Предварительный просмотр импорта из Roboflow#

POST /api/integrations/roboflow/preview

Python SDK: client.datasets.preview_roboflow(api_key=...)

Преобразует ключ API Roboflow в план импорта: сведения о рабочем пространстве, newDatasets, которые будут импортированы, количество пропущенных, неподдерживаемых и неразрешенных проектов, bytesTotal и доступный объем storage. Ключ API Roboflow считывается из тела запроса и не сохраняется.

{
    "apiKey": "ROBOFLOW_API_KEY"
}

Импорт из Roboflow#

POST /api/integrations/roboflow/import

Python SDK: client.datasets.import_roboflow(api_key=..., items=...)

Ставит в очередь задания приема данных для не более чем 500 выбранных версий проектов Roboflow, используя элементы, возвращенные в предварительном просмотре.

{
    "apiKey": "ROBOFLOW_API_KEY",
    "items": [
        {
            "workspace": "my-workspace",
            "projectId": "warehouse-safety",
            "projectName": "Warehouse Safety",
            "projectType": "object-detection",
            "latestVersion": 4
        }
    ]
}

Ответ (201): массивы imported, failed и skipped. Для импорта требуется свободное место в хранилище, а каждый набор данных должен соответствовать ограничению размера отдельного импорта в твоем тарифном плане.


API учетной записи#

Просматривай учетную запись Platform, ключи, хранилище и общедоступные профили. См. документацию по настройкам.

Сводка учетной записи#

GET /api/account/summary

Python SDK: client.account.summary()

Возвращает тарифный план, баланс кредитов и количество ресурсов для рабочего пространства, выдавшего ключ.

{
    "username": "acme-vision",
    "name": "Acme Vision",
    "accountType": "team",
    "plan": "pro",
    "creditsCents": 2500,
    "counts": { "projects": 4, "datasets": 7, "models": 21 },
    "teams": []
}
Список команды

teams заполняется для сеансов браузера. Ответы с API-ключом содержат пустой список, поскольку ключ уже ограничен одним рабочим пространством.

Список API-ключей#

GET /api/api-keys

Python SDK: client.account.api_keys()

Возвращает keys с keyId, name, keyPrefix и createdAt для рабочего пространства ключа. Запросы, аутентифицированные с помощью API-ключа, получают только метаданные; полные значения ключей отображаются владельцу рабочего пространства в разделе Настройки > API-ключи пользовательского интерфейса Platform — там же ключи создаются и отзываются.

Проверка использования хранилища#

GET /api/storage

Python SDK: client.account.storage()

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

ПараметрТипОписание
detailsлогическое значениеВключить десять крупнейших потребителей хранилища (по умолчанию: false)

Ответ:

{
    "tier": "pro",
    "usage": {
        "storage": { "current": 1073741824, "limit": 107374182400, "percent": 1.0 },
        "datasets": { "current": 536870912, "limit": 107374182400, "percent": 0.5 }
    },
    "breakdown": {
        "byCategory": {
            "datasets": { "bytes": 536870912, "count": 2 },
            "models": { "bytes": 268435456, "count": 4 },
            "exports": { "bytes": 268435456, "count": 3 }
        },
        "topItems": [
            {
                "_id": "65f1c0a2b3d4e5f601234567",
                "name": "Warehouse",
                "slug": "warehouse",
                "sizeBytes": 536870912,
                "type": "dataset"
            }
        ]
    },
    "region": "us",
    "username": "acme-vision",
    "updatedAt": "2026-01-15T10:00:00Z"
}

Получение общедоступного профиля пользователя#

GET /api/users

Python SDK: client.account.profile(username=...)

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

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

Возвращает общедоступный профиль user с followerCount и, для аутентифицированных вызывающих сторон, isFollowed.

Подписка на пользователя или отмена подписки#

PATCH /api/users

Python SDK: client.account.follow(username=..., followed=...)

{
    "username": "target-user",
    "followed": true
}

Ответ: followed и обновленный followerCount.


API биллинга#

Проверяй использование тарифного плана и реестр кредитов. См. документацию по биллингу.

Денежные единицы

Суммы биллинга — это целые числа в центах США, где 100 = $1.00.

Просмотр тарифного плана и использования#

GET /api/billing/usage-summary

Python SDK: client.billing.usage_summary()

Возвращает plan (идентификатор, статус, расчетный цикл, конец периода), metrics (лимит и использование хранилища), trainingCredit, features, creditsCents и количество мест.

Просмотр транзакций#

GET /api/billing/transactions

Python SDK: client.billing.transactions()

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

ПараметрТипОписание
fromstringСамая ранняя временная отметка транзакции (ISO 8601)
tostringСамая поздняя временная отметка транзакции (ISO 8601)

Каждая транзакция содержит id, type (например, purchase, training, monthly_grant или refund), amountCents, balanceAfter, createdAt, необязательный receiptUrl и контекст модели для расходов на обучение. Внутренние сведения о биллинге никогда не возвращаются.


Обзор API#

Ищи общедоступные проекты и наборы данных, которыми поделилось сообщество. См. документацию по разделу «Обзор».

Поиск общедоступного содержимого#

GET /api/explore/search

Python SDK: client.explore.search()

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

ПараметрТипОписание
qstringПоисковый запрос (не более 200 символов)
typestringall (по умолчанию), projects или datasets
sortstringnewest (по умолчанию), oldest, stars, name-asc, name-desc, count-desc, count-asc
offsetintКоличество пропускаемых результатов (по умолчанию: 0)
limitintМаксимальное количество результатов для каждого типа ресурса (по умолчанию: 20, максимум: 100)
taskstringФильтры задач через запятую: detect, segment, semantic, depth, classify, pose, obb
authorstringФильтр по имени пользователя-владельца
starredлогическое значениеВозвращать только содержимое, добавленное аутентифицированным вызывающим в избранное; требуется API-ключ

Ответ: projects, datasets и hasMore.

curl "https://platform.ultralytics.com/api/explore/search?type=datasets&task=detect&sort=stars&limit=20"

Python SDK#

ultralytics-platform — типизированный клиент Python, сгенерированный из контракта OpenAPI, с одним методом для каждой конечной точки (client.datasets.list, client.models.predict, client.exports.create, ...). Каждый метод принимает параметры пути позиционно, остальные входные данные — как именованные аргументы, а также необязательные timeout и extra_headers для отдельного запроса.

pip install "ultralytics-platform>=0.1.32" # Python 3.11+
from ultralytics_platform import Platform

with Platform() as client:  # reads ULTRALYTICS_API_KEY or the key saved by yolo login
    dataset = client.datasets.retrieve("acme-vision", "warehouse")
    images = client.datasets.images("acme-vision", "warehouse", limit=10)
    export = client.exports.create("acme-vision", "inspection", "v3", format="onnx")

AsyncPlatform предоставляет то же дерево ресурсов для кода async/await, неуспешные ответы вызывают APIError с status_code, body и разобранным json, а сбои подключения вызывают APIConnectionError. Полный README см. в репозитории SDK.

Интеграция с Python#

Для рабочих процессов обучения и инференса используй пакет Ultralytics для Python: он автоматически обрабатывает аутентификацию, загрузку файлов и потоковую передачу метрик в реальном времени.

Установка и настройка#

Для интеграции с платформой требуются Python>=3.11 и ultralytics>=8.4.120:

pip install "ultralytics>=8.4.120"

Проверь установку:

yolo check

Аутентификация#

yolo login YOUR_API_KEY

Использование наборов данных платформы#

Ссылайся на наборы данных с помощью URI ul://:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Train on your Platform dataset
model.train(
    data="ul://your-username/datasets/your-dataset",
    epochs=100,
    imgsz=640,
)

Формат URI:

ШаблонОписание
ul://username/datasets/slugДатасет
ul://username/project-nameПроект
ul://username/project/model-nameКонкретная модель
ul://ultralytics/yolo26/yolo26nОфициальная модель

Отправка в Platform#

Отправь результаты в проект Platform:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Results automatically sync to Platform
model.train(
    data="coco8.yaml",
    epochs=100,
    project="your-username/my-project",
    name="experiment-1",
)

Что синхронизируется:

  • Метрики обучения (в реальном времени)
  • Итоговые веса модели
  • Графики валидации
  • Вывод консоли
  • Системные метрики

Примеры API#

Загрузка модели из Platform:

# Your own model
model = YOLO("ul://username/project/model-name")

# Official model
model = YOLO("ul://ultralytics/yolo26/yolo26n")

Запуск инференса:

results = model("image.jpg")

# Access results
for r in results:
    boxes = r.boxes  # Detection boxes
    masks = r.masks  # Segmentation masks
    keypoints = r.keypoints  # Pose keypoints
    probs = r.probs  # Classification probabilities

Экспорт модели:

# Export to ONNX
model.export(format="onnx", imgsz=640, quantize=16)

# Export to TensorRT
model.export(format="engine", imgsz=640, quantize=16)

# Export to CoreML
model.export(format="coreml", imgsz=640)  # use imgsz=224 for classification

Валидация:

metrics = model.val(data="ul://username/datasets/my-dataset")

print(f"mAP50: {metrics.box.map50}")
print(f"mAP50-95: {metrics.box.map}")

Часто задаваемые вопросы#

  • Используй те же сегменты владельца и имени, которые указаны в URL Platform. Модель по адресу https://platform.ultralytics.com/acme-vision/inspection/v3 имеет обозначение GET /api/models/acme-vision/inspection/v3. Идентификаторы базы данных по-прежнему возвращаются в ответах (как id), а некоторые маршруты принимают их напрямую — маршруты изображений принимают imageId, загрузки принимают assetId, а POST /api/training/start принимает modelId.

  • Это зависит от коллекции. Большинство конечных точек списков принимает limit:

    curl -H "Authorization: Bearer YOUR_API_KEY" \
      "https://platform.ultralytics.com/api/datasets/acme-vision?limit=50"

    Изображения наборов данных, кластеризация и поиск в разделе «Обзор» используют offset с limit и возвращают hasMore:

    curl "https://platform.ultralytics.com/api/explore/search?type=datasets&offset=20&limit=20&sort=stars"

    Очень большие наборы изображений лучше просматривать с помощью курсора, возвращаемого как nextCursor:

    curl -H "Authorization: Bearer YOUR_API_KEY" \
      "https://platform.ultralytics.com/api/datasets/acme-vision/warehouse/images?limit=1000&includeTotal=false&cursor=LAST_IMAGE_ID"

    Корзина использует page, а журналы развертывания — непрозрачный pageToken, возвращаемый как nextPageToken.

  • Да. Каждая операция на этой странице представляет собой обычный HTTPS-запрос, а полный контракт опубликован в формате OpenAPI 3.2 по адресу platform.ultralytics.com/openapi.json; его можно передать генератору клиента на любом языке. Пакет ultralytics-platform — именно такой типизированный клиент, сгенерированный из контракта, а пакет ultralytics добавляет потоковую передачу метрик в реальном времени и автоматическую загрузку моделей поверх обучения и инференса. Потоки учетной записи, доступные только в сеансе браузера, например оформление биллинга и управление командой, остаются в пользовательском интерфейсе Platform.

  • Используй заголовок Retry-After из ответа 429, чтобы подождать нужное количество времени:

    import time
    
    import requests
    
    def api_request_with_retry(url, headers, max_retries=3):
        for attempt in range(max_retries):
            response = requests.get(url, headers=headers)
            if response.status_code != 429:
                return response
            wait = int(response.headers.get("Retry-After", 2**attempt))
            time.sleep(wait)
        raise RuntimeError("Rate limit exceeded")
  • 404 означает, что ресурс не существует или вообще не виден твоему ключу. 403 означает, что ресурс найден, но для действия требуется больше прав, чем есть у твоего ключа, — доступ редактора для изменения набора данных, доступ владельца для удаления развертывания, доступ администратора для отключения хранилища или более высокий тарифный план либо квота для экспорта и развертываний.

  • Чтение общедоступных наборов данных, проектов и моделей, включая их изображения, подписанные URL изображений, статистику классов, состояние эмбеддингов, структуру кластеризации и список экспортов; проверка прогресса обучения общедоступной модели; скачивание файлов общедоступной модели; запуск инференса на общедоступной модели; поиск общедоступного профиля пользователя; просмотр развертываний с фильтрацией по одной общедоступной модели; и поиск в разделе «Обзор». GET /api/training/gpu-availability полностью общедоступен, если только ты не запрашиваешь управляемые вычислительные ресурсы. Для всего остального требуется ключ, а его передача в общедоступной конечной точке также открывает доступ к твоим частным ресурсам.

Комментарии