Перейти к содержанию

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

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

Быстрый старт

# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://platform.ultralytics.com/api/datasets

# Run inference on a model
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@image.jpg" \
  https://platform.ultralytics.com/api/models/MODEL_ID/predict

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

Все запросы к API требуют аутентификации с помощью ключа API.

Получить ключ API

  1. Перейдите в Настройки > Ключи API
  2. Нажмите Создать ключ
  3. Скопируйте сгенерированный ключ

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

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

Включайте ваш ключ API во все запросы:

Authorization: Bearer ul_your_api_key_here

Пример

curl -H "Authorization: Bearer ul_abc123..." \
  https://platform.ultralytics.com/api/datasets

Базовый URL

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

https://platform.ultralytics.com/api

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

ПланЗапросов/минутаЗапросов/день
Бесплатно601,000
Pro30050,000
КорпоративныйПользовательскийПользовательский

Заголовки с ограничениями скорости запросов включены в ответы:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 55
X-RateLimit-Reset: 1640000000

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

Все ответы в формате JSON:

{
  "success": true,
  "data": { ... },
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 100
  }
}

Ответы об ошибках

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid dataset ID",
    "details": { ... }
  }
}

API наборов данных

Список наборов данных

GET /api/datasets

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

ПараметрТипОписание
pageintНомер страницы (по умолчанию: 1)
limitintЭлементов на страницу (по умолчанию: 20)
taskстрокаФильтр по типу задачи

Ответ:

{
    "success": true,
    "data": [
        {
            "id": "dataset_abc123",
            "name": "my-dataset",
            "slug": "my-dataset",
            "task": "detect",
            "imageCount": 1000,
            "classCount": 10,
            "visibility": "private",
            "createdAt": "2024-01-15T10:00:00Z"
        }
    ]
}

Получить набор данных

GET /api/datasets/{datasetId}

Создать набор данных

POST /api/datasets

Тело запроса:

{
    "name": "my-dataset",
    "task": "detect",
    "description": "A custom detection dataset"
}

Удалить набор данных

DELETE /api/datasets/{datasetId}

Экспорт набора данных

POST /api/datasets/{datasetId}/export

Возвращает URL-адрес для загрузки в формате NDJSON.

Получите модели, обученные на наборе данных

GET /api/datasets/{datasetId}/models

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

Ответ:

{
    "success": true,
    "data": [
        {
            "id": "model_abc123",
            "name": "experiment-1",
            "projectId": "project_xyz",
            "trainedAt": "2024-01-15T10:00:00Z",
            "metrics": {
                "mAP50": 0.85,
                "mAP50-95": 0.72
            }
        }
    ]
}

API проектов

Список проектов

GET /api/projects

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

GET /api/projects/{projectId}

Создать проект

POST /api/projects

Тело запроса:

{
    "name": "my-project",
    "description": "Detection experiments"
}

Удалить проект

DELETE /api/projects/{projectId}

API моделей

Список моделей

GET /api/models

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

ПараметрТипОписание
projectIdстрокаФильтр по проекту
taskстрокаФильтр по типу задачи

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

GET /api/models/{modelId}

Загрузить модель

POST /api/models

Многокомпонентная форма:

ПолеТипОписание
fileфайлаФайл модели .pt
projectIdстрокаЦелевой проект
nameстрокаИмя модели

Удалить модель

DELETE /api/models/{modelId}

Скачать модель

GET /api/models/{modelId}/files

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

Запуск Inference

POST /api/models/{modelId}/predict

Многокомпонентная форма:

ПолеТипОписание
fileфайлаФайл изображения
conffloatПорог достоверности
ioufloatПорог IoU

Ответ:

{
    "success": true,
    "predictions": [
        {
            "class": "person",
            "confidence": 0.92,
            "box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
        }
    ]
}

API обучения

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

POST /api/training/start

Тело запроса:

{
    "modelId": "model_abc123",
    "datasetId": "dataset_xyz789",
    "epochs": 100,
    "imageSize": 640,
    "gpuType": "rtx-4090"
}

Получить статус обучения

GET /api/models/{modelId}/training

Отменить обучение

DELETE /api/models/{modelId}/training

API развертываний

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

GET /api/deployments

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

ПараметрТипОписание
modelIdстрокаФильтр по модели

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

POST /api/deployments

Тело запроса:

{
    "modelId": "model_abc123",
    "region": "us-central1",
    "minInstances": 0,
    "maxInstances": 10
}

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

GET /api/deployments/{deploymentId}

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

POST /api/deployments/{deploymentId}/start

Остановить развертывание

POST /api/deployments/{deploymentId}/stop

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

DELETE /api/deployments/{deploymentId}

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

GET /api/deployments/{deploymentId}/metrics

Получить журналы

GET /api/deployments/{deploymentId}/logs

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

ПараметрТипОписание
severityстрокаINFO, WARNING, ERROR
limitintКоличество записей

API экспорта

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

GET /api/exports

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

POST /api/exports

Тело запроса:

{
    "modelId": "model_abc123",
    "format": "onnx"
}

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

onnx, torchscript, openvino, tensorrt, coreml, tflite, saved_model, graphdef, paddle, ncnn, edgetpu, tfjs, mnn, rknn, imx, axelera, executorch

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

GET /api/exports/{exportId}

API активности

track и управлять событиями активности для вашей учетной записи.

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

GET /api/activity

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

ПараметрТипОписание
startDateстрокаФильтр с даты (ISO)
endDateстрокаФильтр по дату (ISO)
searchстрокаПоиск в сообщениях о событиях

Отметить события как просмотренные

POST /api/activity/mark-seen

Архивировать события

POST /api/activity/archive

API корзины

Управление временно удаленными ресурсами (срок хранения 30 дней).

Список корзины

GET /api/trash

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

POST /api/trash

Тело запроса:

{
    "itemId": "item_abc123",
    "type": "dataset"
}

Очистить корзину

POST /api/trash/empty

Окончательно удаляет все элементы из корзины.

API биллинга

Управление кредитами и подписками.

Получить баланс

GET /api/billing/balance

Ответ:

{
    "success": true,
    "data": {
        "cashBalance": 5000000,
        "creditBalance": 20000000,
        "reservedAmount": 0,
        "totalBalance": 25000000
    }
}

Микро-USD

Все суммы указаны в микро-USD (1 000 000 = $1.00) для точного учета.

Получить сводку использования

GET /api/billing/usage-summary

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

Создать сессию оформления заказа

POST /api/billing/checkout-session

Тело запроса:

{
    "amount": 25
}

Создает сессию оформления заказа Stripe для покупки кредитов ($5-$1000).

Создать оформление подписки

POST /api/billing/subscription-checkout

Создает сессию оформления заказа Stripe для Pro-подписки.

Создать сессию портала

POST /api/billing/portal-session

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

Получить историю платежей

GET /api/billing/payments

Возвращает список платежных транзакций из Stripe.

API хранилища

Получить информацию о хранилище

GET /api/storage

Ответ:

{
    "success": true,
    "data": {
        "used": 1073741824,
        "limit": 107374182400,
        "percentage": 1.0
    }
}

API GDPR

Конечные точки соответствия GDPR для экспорта и удаления данных.

Экспорт/удаление данных аккаунта

POST /api/gdpr

Тело запроса:

{
    "action": "export"
}
ДействиеОписание
exportСкачать все данные учетной записи
deleteУдалить учетную запись и все данные

Необратимое действие

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

API ключей API

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

GET /api/api-keys

Создать ключ API

POST /api/api-keys

Тело запроса:

{
    "name": "training-server",
    "scopes": ["training", "models"]
}

Удалить ключ API

DELETE /api/api-keys/{keyId}

Коды ошибок

КодОписание
UNAUTHORIZEDНедействительный или отсутствующий ключ API
FORBIDDENНедостаточно прав
NOT_FOUNDРесурс не найден
VALIDATION_ERRORНедействительные данные запроса
RATE_LIMITEDСлишком много запросов
INTERNAL_ERRORОшибка сервера

Python

Для более простой интеграции используйте пакет Ultralytics Python.

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

pip install ultralytics

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

yolo check

Требования к версии пакета

Для интеграции с платформой требуется ultralytics>=8.4.0. Более ранние версии НЕ будут работать с платформой.

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

Метод 1: CLI (рекомендуется)

yolo settings api_key=YOUR_API_KEY

Метод 2: Переменная среды

export ULTRALYTICS_API_KEY=YOUR_API_KEY

Метод 3: В коде

from ultralytics import settings

settings.api_key = "YOUR_API_KEY"

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

Справочные наборы данных с ul:// URI:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")

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

Формат URI:

ul://{username}/{resource-type}/{name}

Examples:
ul://john/datasets/coco-custom     # Dataset
ul://john/my-project               # Project
ul://john/my-project/exp-1         # Specific model
ul://ultralytics/yolo26/yolo26n    # Official model

Перенос на платформу

Отправить результаты в проект платформы:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")

# Results automatically sync to Platform
model.train(
    data="coco8.yaml",
    epochs=100,
    project="ul://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, half=True)

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

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

Проверка:

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

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

Вебхуки

Вебхуки уведомляют ваш сервер о событиях Платформы:

СобытиеОписание
training.startedЗадача обучения начата
training.epochЭпоха завершена
training.completedОбучение завершено
training.failedОбучение не удалось
export.completedЭкспорт готов

Настройка вебхуков доступна в тарифных планах Enterprise.

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

Как осуществлять пагинацию больших результатов?

Используйте page и limit параметры:

GET /api/datasets?page=2 &
limit=50

Можно ли использовать API без SDK?

Да, весь функционал доступен через REST. SDK является удобной оберткой.

Существуют ли клиентские библиотеки API?

В настоящее время используйте пакет Ultralytics Python или выполняйте прямые HTTP-запросы. Официальные клиентские библиотеки для других языков планируются.

Как обрабатывать ограничения скорости запросов?

Реализуйте экспоненциальную задержку:

import time


def api_request_with_retry(url, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url)
        if response.status_code != 429:
            return response
        wait = 2**attempt
        time.sleep(wait)
    raise Exception("Rate limit exceeded")


📅 Создано 20 дней назад ✏️ Обновлено 14 дней назад
glenn-jocherLaughing-q

Комментарии