Справочник по 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
- Перейдите в Настройки > Ключи API
- Нажмите Создать ключ
- Скопируйте сгенерированный ключ
Подробные инструкции см. в разделе Ключи 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
Ограничения скорости запросов
| План | Запросов/минута | Запросов/день |
|---|---|---|
| Бесплатно | 60 | 1,000 |
| Pro | 300 | 50,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
Параметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
page | int | Номер страницы (по умолчанию: 1) |
limit | int | Элементов на страницу (по умолчанию: 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 | файла | Файл изображения |
conf | float | Порог достоверности |
iou | float | Порог 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 |
limit | int | Количество записей |
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")