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

# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasetsИзучи полный интерактивный справочник API в документации API Ultralytics Platform.
Обзор API
API организован вокруг основных ресурсов платформы:
graph LR
A[API Key] --> B[Datasets]
A --> C[Projects]
A --> D[Models]
A --> E[Deployments]
B -->|train on| D
C -->|contains| D
D -->|deploy to| E
D -->|export| F[Exports]
B -->|auto-annotate| B| Ресурс | Описание | Основные операции |
|---|---|---|
| Datasets | Коллекции размеченных изображений | CRUD, изображения, разметка, экспорт, версии, клонирование |
| Projects | Рабочие пространства для обучения | CRUD, клонирование, иконка |
| Models | Обученные чекпоинты | CRUD, предсказание, скачивание, клонирование, экспорт |
| Deployments | Выделенные эндпоинты для инференса | CRUD, запуск/остановка, метрики, логи, состояние |
| Exports | Задачи по конвертации форматов | Создание, статус, скачивание |
| Training | Облачные задания обучения на GPU | Запуск, статус, отмена |
| Billing | Кредиты и подписки | Баланс, пополнение, способы оплаты |
| Teams | Совместная работа в рабочем пространстве | Участники, приглашения, роли |
Аутентификация
API ресурсов, таких как датасеты, проекты, модели, обучение, экспорты и предсказания, используют аутентификацию по API-ключам. Публичные эндпоинты (получение списка публичных датасетов, проектов и моделей) поддерживают анонимный доступ на чтение без ключа. Маршруты, связанные с учетной записью — включая активность, настройки, команды, биллинг и потоки GDPR — в настоящее время требуют аутентифицированной сессии браузера и недоступны через API-ключ.
Получить API-ключ
- Перейди в
Settings>API Keys - Нажми
Create Key - Скопируй созданный ключ
Подробные инструкции см. в разделе API Keys.
Заголовок авторизации
Включай свой API-ключ во все запросы:
Authorization: Bearer YOUR_API_KEYAPI-ключи имеют формат ul_, за которым следуют 40 шестнадцатеричных символов. Храни свой ключ в секрете — никогда не добавляй его в систему контроля версий и не распространяй публично.
Пример
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasetsБазовый URL
Все API-эндпоинты используют:
https://platform.ultralytics.com/api
Ограничения частоты запросов
API применяет ограничения частоты запросов на основе API-ключа (скользящее окно, на базе Upstash Redis), чтобы защититься от злоупотреблений, не ограничивая легитимное использование. Анонимный трафик дополнительно защищен средствами контроля злоупотреблений уровня платформы Vercel.
При превышении лимита API возвращает код 429 с метаданными для повторной попытки:
Retry-After: 12
X-RateLimit-Reset: 2026-02-21T12:34:56.000ZЛимиты на API-ключ
Лимиты частоты запросов применяются автоматически в зависимости от вызываемого эндпоинта. Для ресурсоемких операций установлены более строгие ограничения для предотвращения злоупотреблений, в то время как стандартные CRUD-операции имеют щедрый лимит по умолчанию:
| Эндпоинт | Лимит | Применяется к |
|---|---|---|
| По умолчанию | 100 запросов/мин | Все эндпоинты, не перечисленные ниже (список, получение, создание, обновление, удаление) |
| Обучение | 10 запросов/мин | Запуск заданий облачного обучения (POST /api/training/start) |
| Загрузка | 10 запросов/мин | Загрузка файлов, подписанные URL-адреса и загрузка датасетов |
| Предсказание | 20 запросов/мин | Совместный инференс модели (POST /api/models/{id}/predict) |
| Экспорт | 20 запросов/мин | Экспорт форматов моделей (POST /api/exports), экспорт датасетов в NDJSON и создание версий |
| Скачивание | 30 запросов/мин | Скачивание файлов весов моделей (GET /api/models/{id}/download) |
| Выделенные | Без ограничений | Выделенные эндпоинты — твой собственный сервис, без API-лимитов |
Каждая категория имеет независимый счетчик на API-ключ. Например, выполнение 20 запросов на предсказание не влияет на твой лимит по умолчанию в 100 запросов/мин.
Выделенные эндпоинты (без ограничений)
Выделенные эндпоинты не подлежат лимитам частоты API-ключей. Когда ты разворачиваешь модель на выделенном эндпоинте, запросы к этому URL (например, https://predict-abc123.run.app/predict) идут напрямую к твоему выделенному сервису без ограничения скорости со стороны Платформы. Ты платишь за вычислительные мощности, поэтому получаешь пропускную способность, исходя из конфигурации твоего выделенного сервиса, а не общих лимитов API.
При получении кода состояния 429 подожди в течение времени, указанного в Retry-After (или до истечения X-RateLimit-Reset), перед повторной попыткой. См. FAQ по лимитам запросов для реализации экспоненциальной задержки.
Формат ответа
Ответы об успехе
Ответы возвращают JSON со специфическими для ресурса полями:
{
"datasets": [...],
"total": 100
}Ответы об ошибках
{
"error": "Dataset not found"
}| HTTP статус | Значение |
|---|---|
200 | Успешно |
201 | Создано |
400 | Неверный запрос |
401 | Требуется аутентификация |
403 | Недостаточно прав |
404 | Ресурс не найден |
409 | Конфликт (дубликат) |
429 | Превышен лимит запросов |
500 | Ошибка сервера |
Datasets API
Создавай, просматривай и управляй размеченными датасетами изображений для обучения моделей YOLO. См. документацию Datasets.
Список датасетов
GET /api/datasetsПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
username | string | Фильтр по имени пользователя |
slug | string | Получить один набор данных по его слагу |
limit | int | Количество элементов на странице (по умолчанию: 20, макс.: 500) |
owner | string | Имя пользователя владельца рабочего пространства |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/datasets?limit=10"Ответ:
{
"datasets": [
{
"_id": "dataset_abc123",
"name": "my-dataset",
"slug": "my-dataset",
"task": "detect",
"imageCount": 1000,
"classCount": 10,
"classNames": ["person", "car"],
"visibility": "private",
"username": "johndoe",
"starCount": 3,
"isStarred": false,
"sampleImages": [
{
"url": "https://storage.example.com/...",
"width": 1920,
"height": 1080,
"labels": [{ "classId": 0, "bbox": [0.5, 0.4, 0.3, 0.6] }]
}
],
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-01-16T08:30:00Z"
}
],
"total": 1,
"region": "us"
}Получить набор данных
GET /api/datasets/{datasetId}Возвращает полные данные набора, включая метаданные, имена классов и количество данных по разбиениям.
Создать набор данных
POST /api/datasetsТело запроса:
{
"slug": "my-dataset",
"name": "My Dataset",
"task": "detect",
"description": "A custom detection dataset",
"visibility": "private",
"classNames": ["person", "car"]
}Допустимые значения task: detect, segment, classify, pose, obb.
Обновить набор данных
PATCH /api/datasets/{datasetId}Тело запроса (частичное обновление):
{
"name": "Updated Name",
"description": "New description",
"visibility": "public"
}Удалить набор данных
DELETE /api/datasets/{datasetId}Мягкое удаление набора данных (перемещается в корзину, восстановление доступно в течение 30 дней).
Клонировать набор данных
POST /api/datasets/{datasetId}/cloneСоздает копию набора данных со всеми изображениями и разметками. Клонировать можно только публичные наборы данных. Требуется активная сессия браузера на платформе — недоступно через API-ключ.
Тело запроса (все поля необязательны):
{
"name": "cloned-dataset",
"description": "My cloned dataset",
"visibility": "private",
"owner": "team-username"
}Экспортировать набор данных
GET /api/datasets/{datasetId}/exportВозвращает JSON-ответ с подписанной ссылкой для скачивания последнего экспорта набора данных.
Параметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
v | integer | Номер версии (начиная с 1). Если пропущено, возвращает последний (некэшированный) экспорт. |
Ответ:
{
"downloadUrl": "https://storage.example.com/export.ndjson?signed=...",
"cached": true
}Создать версию набора данных
POST /api/datasets/{datasetId}/exportСоздает новый нумерованный снимок версии набора данных. Только для владельца. Версия фиксирует текущее количество изображений, классов, аннотаций и распределение по разбиениям, затем генерирует и сохраняет неизменяемый NDJSON-экспорт.
Тело запроса:
{
"description": "Added 500 training images"
}Все поля необязательны. Поле description — это задаваемая пользователем метка для версии.
Ответ:
{
"version": 3,
"downloadUrl": "https://storage.example.com/v3.ndjson?signed=..."
}Обновить описание версии
PATCH /api/datasets/{datasetId}/exportОбновить описание существующей версии. Только для владельца.
Тело запроса:
{
"version": 2,
"description": "Fixed mislabeled classes"
}Ответ:
{
"ok": true
}Получить статистику классов
GET /api/datasets/{datasetId}/class-statsВозвращает распределение классов, тепловую карту расположения и статистику размеров. Результаты кэшируются на срок до 5 минут.
Ответ:
{
"classes": [{ "classId": 0, "count": 1500, "imageCount": 450 }],
"imageStats": {
"widthHistogram": [{ "bin": 640, "count": 120 }],
"heightHistogram": [{ "bin": 480, "count": 95 }],
"pointsHistogram": [{ "bin": 4, "count": 200 }]
},
"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", "car", "dog"],
"cached": true,
"sampled": false,
"sampleSize": 1000
}Получить модели, обученные на наборе данных
GET /api/datasets/{datasetId}/modelsВозвращает модели, которые были обучены с использованием этого набора данных.
Ответ:
{
"models": [
{
"_id": "model_abc123",
"name": "experiment-1",
"slug": "experiment-1",
"status": "completed",
"task": "detect",
"epochs": 100,
"bestEpoch": 87,
"projectId": "project_xyz",
"projectSlug": "my-project",
"projectIconColor": "#3b82f6",
"projectIconLetter": "M",
"username": "johndoe",
"startedAt": "2024-01-14T22:00:00Z",
"completedAt": "2024-01-15T10:00:00Z",
"createdAt": "2024-01-14T21:55:00Z",
"metrics": {
"mAP50": 0.85,
"mAP50-95": 0.72,
"precision": 0.88,
"recall": 0.81
}
}
],
"count": 1
}Автоматическая разметка набора данных
POST /api/datasets/{datasetId}/predictЗапусти YOLO-инференс на изображениях набора данных для автоматической генерации аннотаций. Использует выбранную модель для предсказания меток на неразмеченных изображениях.
Тело запроса:
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
imageHash | string | Да | Хэш изображения для разметки |
modelId | string | Нет | ID модели для использования в инференсе |
confidence | float | Нет | Порог уверенности (по умолчанию: 0.25) |
iou | float | Нет | Порог IoU (по умолчанию: 0.45) |
Загрузка набора данных
POST /api/datasets/ingestСоздай задачу загрузки набора данных для обработки ZIP или TAR файлов, включая .tar.gz и .tgz, содержащих изображения и разметки.
graph LR
A[Upload Archive] --> B[POST /api/datasets/ingest]
B --> C[Process Archive]
C --> D[Extract images]
C --> E[Parse labels]
C --> F[Generate thumbnails]
D & E & F --> G[Dataset ready]Изображения набора данных
Список изображений
GET /api/datasets/{datasetId}/imagesПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
split | string | Фильтр по разбиению: train, val, test |
offset | int | Смещение пагинации (по умолчанию: 0) |
limit | int | Количество элементов на странице (по умолчанию: 50, макс.: 5000) |
sort | string | Порядок сортировки: newest, oldest, name-asc, name-desc, height-asc, height-desc, width-asc, width-desc, size-asc, size-desc, labels-asc, labels-desc (некоторые отключены для наборов с более чем 100 000 изображений) |
hasLabel | string | Фильтр по статусу наличия разметки (true или false) |
hasError | string | Фильтр по статусу наличия ошибки (true или false) |
search | string | Поиск по имени файла или хэшу изображения |
includeThumbnails | string | Включить подписанные URL миниатюр (по умолчанию: true) |
includeImageUrls | string | Включить подписанные URL полных изображений (по умолчанию: false) |
Получить подписанные URL изображений
POST /api/datasets/{datasetId}/images/urlsПолучи подписанные URL для пакета хэшей изображений (для отображения в браузере).
Удалить изображение
DELETE /api/datasets/{datasetId}/images/{hash}Получить разметку изображения
GET /api/datasets/{datasetId}/images/{hash}/labelsВозвращает аннотации и имена классов для конкретного изображения.
Обновить разметку изображения
PUT /api/datasets/{datasetId}/images/{hash}/labelsТело запроса:
{
"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] }
]
}Координаты разметки используют нормализованные значения YOLO от 0 до 1. Ограничивающие рамки (BBox) используют [x_center, y_center, width, height]. Сегментационные метки используют segments, сплющенный список вершин многоугольника [x1, y1, x2, y2, ...].
Массовые операции с изображениями
Перемещай изображения между разбиениями (train/val/test) внутри набора данных:
PATCH /api/datasets/{datasetId}/images/bulkМассовое удаление изображений:
DELETE /api/datasets/{datasetId}/images/bulkAPI проектов
Организуй свои модели по проектам. Каждая модель принадлежит одному проекту. См. документацию по проектам.
Список проектов
GET /api/projectsПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
username | string | Фильтр по имени пользователя |
limit | int | Элементов на странице |
owner | string | Имя пользователя владельца рабочего пространства |
Получить проект
GET /api/projects/{projectId}Создать проект
POST /api/projectscurl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "my-project", "slug": "my-project", "description": "Detection experiments"}' \
https://platform.ultralytics.com/api/projectsОбновить проект
PATCH /api/projects/{projectId}Удалить проект
DELETE /api/projects/{projectId}Мягкое удаление проекта (перемещается в корзину).
Клонировать проект
POST /api/projects/{projectId}/cloneКлонируй публичный проект (со всеми его моделями) в свое рабочее пространство. Требуется активная сессия браузера на платформе — недоступно через API-ключ.
Значок проекта
Загрузи значок проекта (multipart form с файлом изображения):
POST /api/projects/{projectId}/iconУдалить значок проекта:
DELETE /api/projects/{projectId}/iconОба требуют активного сеанса браузера на платформе — недоступно через API-ключ.
API моделей
Управляй обученными моделями YOLO — просматривай метрики, скачивай веса, запускай инференс и экспортируй в другие форматы. См. документацию по моделям.
Список моделей
GET /api/modelsПараметры запроса:
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
projectId | string | Да | ID проекта (обязательно) |
fields | string | Нет | Набор полей: summary, charts |
ids | string | Нет | ID моделей, разделенные запятыми |
limit | int | Нет | Максимальное количество результатов (по умолчанию 20, максимум 100) |
Список завершенных моделей
GET /api/models/completedВозвращает модели, которые завершили обучение (для использования в селекторах моделей и развертывании).
Получить модель
GET /api/models/{modelId}Создать модель
POST /api/modelsJSON-тело:
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
projectId | string | Да | Целевой ID проекта |
slug | string | Нет | URL-слаг (строчные латинские буквы/цифры/дефисы) |
name | string | Нет | Отображаемое имя (макс. 100 символов) |
description | string | Нет | Описание модели (макс. 1000 символов) |
task | string | Нет | Тип задачи (detect, segment, pose, obb, classify) |
Загрузка .pt-файлов моделей обрабатывается отдельно. Используй интерфейс платформы для перетаскивания файлов моделей в проект.
Обновить модель
PATCH /api/models/{modelId}Удаление модели
DELETE /api/models/{modelId}Скачать файлы модели
GET /api/models/{modelId}/filesВозвращает подписанные URL для скачивания файлов модели.
Клонировать модель
POST /api/models/{modelId}/cloneКлонируй публичную модель в один из своих проектов. Требует активного сеанса браузера на платформе — недоступно через API-ключ.
Тело запроса:
{
"targetProjectSlug": "my-project",
"modelName": "cloned-model",
"description": "Cloned from public model",
"owner": "team-username"
}| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
targetProjectSlug | string | Да | Слаг целевого проекта |
modelName | string | Нет | Имя для клонированной модели |
description | string | Нет | Описание модели |
owner | string | Нет | Имя пользователя команды (для клонирования рабочей области) |
Отслеживать скачивание
POST /api/models/{modelId}/track-downloadОтслеживай аналитику скачивания моделей.
Запустить инференс
POST /api/models/{modelId}/predictMultipart-форма:
| Поле | Тип | Описание |
|---|---|---|
file | файл | Файл изображения (JPEG, PNG, WebP) |
conf | float | Порог уверенности (по умолчанию: 0.25) |
iou | float | Порог IoU (по умолчанию: 0.7) |
imgsz | int | Размер изображения в пикселях (по умолчанию: 640) |
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@image.jpg" \
-F "conf=0.5" \
https://platform.ultralytics.com/api/models/MODEL_ID/predictОтвет:
{
"images": [
{
"shape": [1080, 1920],
"results": [
{
"class": 0,
"name": "person",
"confidence": 0.92,
"box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
}
]
}
],
"metadata": {
"imageCount": 1
}
}Получить токен предсказания
POST /api/models/{modelId}/predict/tokenЭтот маршрут используется вкладкой Predict внутри приложения для выдачи кратковременных токенов инференса для прямых вызовов браузер → predict-service (меньшая задержка, без API-прокси). Он требует активного сеанса браузера на платформе и недоступен через API-ключ. Для программного инференса вызывай POST /api/models/{modelId}/predict со своим API-ключом.
Прогрев модели
POST /api/models/{modelId}/predict/warmupМаршрут прогрева используется вкладкой Predict для предварительной загрузки весов модели в сервис предсказаний перед первым инференсом пользователя. Он требует активного сеанса браузера на платформе и недоступен через API-ключ.
API обучения
Запускай обучение YOLO на облачных GPU (24 типа GPU от RTX 2000 Ada до B300) и отслеживай прогресс в реальном времени. См. документацию по облачному обучению.
graph LR
A[POST /training/start] --> B[Job Created]
B --> C{Training}
C -->|progress| D[GET /models/id/training]
C -->|cancel| E[DELETE /models/id/training]
C -->|complete| F[Model Ready]
F --> G[Deploy or Export]Начать обучение
POST /api/training/startcurl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"modelId": "MODEL_ID",
"projectId": "PROJECT_ID",
"gpuType": "rtx-4090",
"trainArgs": {
"model": "yolo26n.pt",
"data": "ul://username/datasets/my-dataset",
"epochs": 100,
"imgsz": 640,
"batch": 16
}
}' \
https://platform.ultralytics.com/api/training/startДоступные типы GPU включают rtx-4090, a100-80gb-pcie, a100-80gb-sxm, h100-sxm, rtx-pro-6000, b300 и другие. См. облачное обучение для полного списка с ценами.
Получить статус обучения
GET /api/models/{modelId}/trainingВозвращает текущий статус задания обучения, метрики и прогресс для модели. Публичные проекты доступны анонимно; приватные проекты требуют активного сеанса браузера на платформе (этот маршрут не принимает аутентификацию по API-ключу).
Отмена обучения
DELETE /api/models/{modelId}/trainingЗавершает работающий экземпляр вычислений и помечает задание как отмененное. Требует активного сеанса браузера на платформе — недоступно через API-ключ.
API развертывания
Развертывай модели на выделенных эндпоинтах инференса с проверками работоспособности и мониторингом. Новые развертывания по умолчанию используют масштабирование до нуля, а API принимает опциональный объект resources. См. документацию по эндпоинтам.
Только GET /api/deployments, POST /api/deployments, GET /api/deployments/{deploymentId} и DELETE /api/deployments/{deploymentId} поддерживают аутентификацию по API-ключу. Подмаршруты predict, health, logs, metrics, start и stop требуют активного сеанса браузера на платформе — они являются прокси-серверами для удобства работы с UI приложения. Для программного инференса вызывай URL эндпоинта развертывания (например, https://predict-abc123.run.app/predict) напрямую со своим API-ключом. Выделенные эндпоинты не имеют ограничений по частоте запросов.
graph LR
A[Create] --> B[Deploying]
B --> C[Ready]
C -->|stop| D[Stopped]
D -->|start| C
C -->|delete| E[Deleted]
D -->|delete| E
C -->|predict| F[Inference Results]Список развертываний
GET /api/deploymentsПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
modelId | string | Фильтр по модели |
status | string | Фильтр по статусу |
limit | int | Максимальное количество результатов (по умолчанию: 20, максимум: 100) |
owner | string | Имя пользователя владельца рабочего пространства |
Создать развертывание
POST /api/deploymentsТело запроса:
{
"modelId": "model_abc123",
"name": "my-deployment",
"region": "us-central1",
"resources": {
"cpu": 1,
"memoryGi": 2,
"minInstances": 0,
"maxInstances": 1
}
}| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
modelId | string | Да | ID модели для развертывания |
name | string | Да | Имя развертывания |
region | string | Да | Регион развертывания |
resources | объект | Нет | Конфигурация ресурсов (cpu, memoryGi, minInstances, maxInstances) |
Создает выделенный эндпоинт инференса в указанном регионе. Эндпоинт глобально доступен по уникальному URL.
Диалоговое окно развертывания в настоящее время отправляет фиксированные значения по умолчанию: cpu=1, memoryGi=2, minInstances=0 и maxInstances=1. Маршрут API принимает объект resources, но лимиты тарифа ограничивают minInstances до 0, а maxInstances до 1.
Выбирай регион ближе к своим пользователям для минимальной задержки. UI платформы показывает оценки задержки для всех 43 доступных регионов.
Получить развертывание
GET /api/deployments/{deploymentId}Удалить развертывание
DELETE /api/deployments/{deploymentId}Запустить развертывание
POST /api/deployments/{deploymentId}/startВозобновить остановленное развертывание.
Остановить развертывание
POST /api/deployments/{deploymentId}/stopПриостановить запущенное развертывание (останавливает биллинг).
Проверка работоспособности
GET /api/deployments/{deploymentId}/healthВозвращает статус работоспособности эндпоинта развертывания.
Запустить инференс на развертывании
POST /api/deployments/{deploymentId}/predictОтправь изображение напрямую на эндпоинт развертывания для инференса. Функционально эквивалентно предсказанию модели, но маршрутизируется через выделенный эндпоинт для меньшей задержки.
Multipart-форма:
| Поле | Тип | Описание |
|---|---|---|
file | файл | Файл изображения (JPEG, PNG, WebP) |
conf | float | Порог уверенности (по умолчанию: 0.25) |
iou | float | Порог IoU (по умолчанию: 0.7) |
imgsz | int | Размер изображения в пикселях (по умолчанию: 640) |
Получить метрики
GET /api/deployments/{deploymentId}/metricsВозвращает количество запросов, задержку и метрики частоты ошибок со спарклайн-данными.
Параметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
range | string | Временной диапазон: 1h, 6h, 24h (по умолчанию), 7d, 30d |
sparkline | string | Установи true для оптимизированных данных спарклайна для вида дашборда |
Получить логи
GET /api/deployments/{deploymentId}/logsПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
severity | string | Фильтр, разделенный запятыми: DEBUG, INFO, WARNING, ERROR, CRITICAL |
limit | int | Количество записей (по умолчанию: 50, максимум: 200) |
pageToken | string | Токен пагинации из предыдущего ответа |
API мониторинга
GET /api/monitoring — это маршрут только для UI, требующий активной сессии браузера на платформе. Он не поддерживает аутентификацию по API-ключу. Запрашивай метрики отдельных развертываний через маршруты для конкретных развертываний (они также доступны только через сессию браузера) или используй Cloud Monitoring exports на развернутом сервисе Cloud Run для программного доступа.
Агрегированные метрики
GET /api/monitoringВозвращает агрегированные метрики по всем развертываниям пользователя: общее количество запросов, активные развертывания, частоту ошибок и среднюю задержку.
API экспорта
Конвертируй модели в оптимизированные форматы, такие как ONNX, TensorRT, CoreML и TFLite, для развертывания на периферийных устройствах. См. документацию по развертыванию.
Список экспортов
GET /api/exportsПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
modelId | string | ID модели (обязательно) |
status | string | Фильтр по статусу |
limit | int | Максимальное количество результатов (по умолчанию: 20, максимум: 100) |
Создать экспорт
POST /api/exportsТело запроса:
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
modelId | string | Да | ID исходной модели |
format | string | Да | Формат экспорта (см. таблицу ниже) |
gpuType | string | Условный параметр | Обязателен, если format имеет значение engine (TensorRT) |
args | объект | Нет | Аргументы экспорта (imgsz, half, dynamic и т. д.) |
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"modelId": "MODEL_ID", "format": "onnx"}' \
https://platform.ultralytics.com/api/exportsПоддерживаемые форматы:
| Формат | Значение | Вариант использования |
|---|---|---|
| ONNX | onnx | Кроссплатформенный инференс |
| TorchScript | torchscript | Развертывание PyTorch |
| OpenVINO | openvino | Оборудование Intel |
| TensorRT | engine | Оптимизация для NVIDIA GPU |
| CoreML | coreml | Устройства Apple |
| TFLite | tflite | Мобильные и встроенные системы |
| TF SavedModel | saved_model | TensorFlow Serving |
| TF GraphDef | pb | Замороженный граф TensorFlow |
| PaddlePaddle | paddle | Baidu PaddlePaddle |
| NCNN | ncnn | Мобильная нейронная сеть |
| Edge TPU | edgetpu | Устройства Google Coral |
| TF.js | tfjs | Инференс в браузере |
| MNN | mnn | Мобильный инференс Alibaba |
| RKNN | rknn | Rockchip NPU |
| IMX | imx | Сенсор Sony IMX500 |
| Axelera | axelera | Ускорители Axelera AI |
| ExecuTorch | executorch | Среда выполнения Meta ExecuTorch |
Получить статус экспорта
GET /api/exports/{exportId}Отменить экспорт
DELETE /api/exports/{exportId}Отследить скачивание экспорта
POST /api/exports/{exportId}/track-downloadAPI активности
Просматривай ленту недавних действий в своем аккаунте — запуски обучения, загрузки и многое другое. См. документацию по активности.
Маршруты активности работают через запросы с аутентификацией браузера из UI платформы. Они не представлены как публичный API, не принимают аутентификацию по API-ключу, а структура маршрутов ниже приведена только для справки. Используй ленту активности в UI платформы, чтобы просматривать, помечать или архивировать события.
Список активности
GET /api/activityПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
limit | int | Размер страницы (по умолчанию: 20, макс: 100) |
page | int | Номер страницы (по умолчанию: 1) |
archived | логическое значение | true для вкладки архива, false для входящих |
search | string | Поиск без учета регистра в полях событий |
Отметить события как просмотренные
POST /api/activity/mark-seenТело запроса:
{
"all": true
}Или передай конкретные ID:
{
"eventIds": ["EVENT_ID_1", "EVENT_ID_2"]
}Архивировать события
POST /api/activity/archiveТело запроса:
{
"all": true,
"archive": true
}Или передай конкретные ID:
{
"eventIds": ["EVENT_ID_1", "EVENT_ID_2"],
"archive": false
}API корзины
Просматривай и восстанавливай удаленные элементы. Элементы удаляются безвозвратно через 30 дней. См. документацию по корзине.
Список корзины
GET /api/trashПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
type | string | Фильтр: all, project, dataset, model |
page | int | Номер страницы (по умолчанию: 1) |
limit | int | Элементов на странице (по умолчанию: 50, макс: 200) |
owner | string | Имя пользователя владельца рабочего пространства |
Восстановить элемент
POST /api/trashТело запроса:
{
"id": "item_abc123",
"type": "dataset"
}Безвозвратно удалить элемент
DELETE /api/trashТело запроса:
{
"id": "item_abc123",
"type": "dataset"
}Безвозвратное удаление нельзя отменить. Ресурс и все связанные данные будут удалены.
Очистить корзину
DELETE /api/trash/emptyБезвозвратно удаляет все элементы в корзине.
DELETE /api/trash/empty требует аутентифицированной сессии браузера и недоступен через API-ключ. Вместо этого используй кнопку Очистить корзину в UI.
API биллинга
Проверяй баланс кредитов, покупай кредиты, просматривай историю транзакций и настраивай автопополнение. См. документацию по биллингу.
Суммы биллинга указаны в центах (creditsCents), где 100 = $1.00.
Получить баланс
GET /api/billing/balanceПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
owner | string | Имя пользователя владельца рабочего пространства |
Ответ:
{
"creditsCents": 2500,
"plan": "free",
"cashBalance": 25,
"creditBalance": 0,
"reservedAmount": 0,
"totalBalance": 25
}Получить сводку использования
GET /api/billing/usage-summaryВозвращает детали плана, лимиты и метрики использования.
Получить транзакции
GET /api/billing/transactionsВозвращает историю транзакций (сначала самые недавние).
Параметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
owner | string | Имя пользователя владельца рабочего пространства |
Создать сессию оплаты
POST /api/billing/checkout-sessionТело запроса:
{
"amount": 25,
"owner": "team-username"
}| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
amount | число | Да | Сумма в долларах ($5-$1000) |
owner | string | Нет | Имя пользователя команды для пополнения рабочего пространства (требуется роль администратора) |
Создает сессию оплаты для покупки кредитов.
Создать оплату подписки
POST /api/billing/subscription-checkoutСоздает сессию оплаты для перехода на подписку Pro.
Тело запроса:
{
"planId": "pro",
"billingCycle": "monthly",
"owner": "team-username"
}| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
planId | string | Да | План для подписки (pro) |
billingCycle | string | Нет | Цикл оплаты: monthly (по умолчанию) или yearly |
owner | string | Нет | Имя пользователя команды для повышения уровня рабочего пространства (требуется роль администратора) |
Отмена или возобновление подписки
DELETE /api/billing/subscription-checkoutПо умолчанию отменяет подписку Pro в конце периода. Отправь {"resume": true}, чтобы возобновить уже запланированную отмену до окончания биллингового периода.
Тело запроса:
{
"resume": true
}Автоматическое пополнение
Автоматически добавлять кредиты, когда баланс падает ниже порогового значения.
Получить конфигурацию автопополнения
GET /api/billing/auto-topupПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
owner | string | Имя пользователя владельца рабочего пространства |
Обновить конфигурацию автопополнения
PATCH /api/billing/auto-topupТело запроса:
{
"enabled": true,
"thresholdCents": 500,
"amountCents": 2500
}Способы оплаты
Список способов оплаты
GET /api/billing/payment-methodsСоздать намерение настройки
POST /api/billing/payment-methods/setupВозвращает секретный ключ клиента для добавления нового способа оплаты.
Установить способ оплаты по умолчанию
POST /api/billing/payment-methods/defaultТело запроса:
{
"paymentMethodId": "pm_123"
}Обновить платежную информацию
PATCH /api/billing/payment-methodsТело запроса:
{
"name": "Jane Doe",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postal_code": "94105",
"country": "US"
}
}Удалить способ оплаты
DELETE /api/billing/payment-methods/{id}API хранилища
Проверь детализацию использования хранилища по категориям (наборы данных, модели, экспорты) и посмотри свои самые крупные элементы.
Маршруты хранилища требуют активного сеанса браузера на платформе и недоступны через API ключ. Используй страницу Settings > Profile в интерфейсе для интерактивной детализации.
Получить информацию о хранилище
GET /api/storageОтвет:
{
"tier": "free",
"usage": {
"storage": {
"current": 1073741824,
"limit": 107374182400,
"percent": 1.0
}
},
"region": "us",
"username": "johndoe",
"updatedAt": "2024-01-15T10:00:00Z",
"breakdown": {
"byCategory": {
"datasets": { "bytes": 536870912, "count": 2 },
"models": { "bytes": 268435456, "count": 4 },
"exports": { "bytes": 268435456, "count": 3 }
},
"topItems": [
{
"_id": "dataset_abc123",
"name": "my-dataset",
"slug": "my-dataset",
"sizeBytes": 536870912,
"type": "dataset"
},
{
"_id": "model_def456",
"name": "experiment-1",
"slug": "experiment-1",
"sizeBytes": 134217728,
"type": "model",
"parentName": "My Project",
"parentSlug": "my-project"
}
]
}
}API загрузки
Загружай файлы напрямую в облачное хранилище, используя подписанные URL для быстрой и надежной передачи. Использует двухэтапный процесс: получение подписанного URL, затем загрузка файла. См. Data documentation.
Получить подписанный URL для загрузки
POST /api/upload/signed-urlЗапроси подписанный URL для загрузки файла напрямую в облачное хранилище. Подписанный URL позволяет обойти сервер API при передаче больших файлов.
Тело запроса:
{
"assetType": "images",
"assetId": "abc123",
"filename": "my-image.jpg",
"contentType": "image/jpeg",
"totalBytes": 5242880
}| Поле | Тип | Описание |
|---|---|---|
assetType | string | Тип ресурса: models, datasets, images, videos |
assetId | string | ID целевого ресурса |
filename | string | Оригинальное имя файла |
contentType | string | Тип MIME |
totalBytes | int | Размер файла в байтах |
Ответ:
{
"sessionId": "session_abc123",
"uploadUrl": "https://storage.example.com/...",
"objectPath": "images/abc123/my-image.jpg",
"downloadUrl": "https://cdn.example.com/...",
"expiresAt": "2026-02-22T12:00:00Z"
}Завершить загрузку
POST /api/upload/completeУведомь платформу о завершении загрузки файла, чтобы она могла начать обработку.
Тело запроса:
{
"datasetId": "abc123",
"objectPath": "datasets/abc123/images/my-image.jpg",
"filename": "my-image.jpg",
"contentType": "image/jpeg",
"size": 5242880
}API ключей API
Управляй своими API ключами для программного доступа. См. API Keys documentation.
Список API ключей
GET /api/api-keysСоздать API ключ
POST /api/api-keysТело запроса:
{
"name": "training-server"
}Удалить API ключ
DELETE /api/api-keysПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
keyId | string | ID API ключа для отзыва |
Пример:
curl -X DELETE \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/api-keys?keyId=KEY_ID"API команд и участников
Создавай командные рабочие пространства, приглашай участников и управляй ролями для совместной работы. См. Teams documentation.
Список команд
GET /api/teamsСоздать команду
POST /api/teams/createТело запроса:
{
"username": "my-team",
"fullName": "My Team"
}Список участников
GET /api/membersВозвращает участников текущего рабочего пространства.
Пригласить участника
POST /api/membersТело запроса:
{
"email": "user@example.com",
"role": "editor"
}| Роль | Разрешения |
|---|---|
viewer | Доступ только для чтения к ресурсам рабочего пространства |
editor | Создание, редактирование и удаление ресурсов |
admin | Управление участниками, биллингом и всеми ресурсами (назначается только владельцем команды) |
Владелец (owner) команды является её создателем и не может быть приглашен. Владение передается отдельно через POST /api/members/transfer-ownership. См. Teams для получения подробной информации о ролях.
Обновить роль участника
PATCH /api/members/{userId}Удалить участника
DELETE /api/members/{userId}Передать право собственности
POST /api/members/transfer-ownershipПриглашения
Принять приглашение
POST /api/invites/acceptПолучить информацию о приглашении
GET /api/invites/infoПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
token | string | Токен приглашения |
Отозвать приглашение
DELETE /api/invites/{inviteId}Отправить приглашение повторно
POST /api/invites/{inviteId}/resendAPI исследования (Explore)
Ищи и просматривай публичные наборы данных и проекты, которыми поделилось сообщество. См. Explore documentation.
Поиск публичного контента
GET /api/explore/searchПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
q | string | Поисковый запрос |
type | string | Тип ресурса: all (по умолчанию), projects, datasets |
sort | string | Порядок сортировки: stars (по умолчанию), newest, oldest, name-asc, name-desc, count-desc, count-asc |
offset | int | Смещение пагинации (по умолчанию: 0). Результаты возвращаются по 20 элементов на страницу. |
Данные боковой панели
GET /api/explore/sidebarВозвращает отобранный контент для боковой панели Explore.
API пользователей и настроек
Управляй своим профилем, API ключами, использованием хранилища и настройками конфиденциальности данных. См. Settings documentation.
Получить пользователя по имени
GET /api/usersПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
username | string | Имя пользователя для поиска |
Подписаться или отписаться от пользователя
PATCH /api/usersТело запроса:
{
"username": "target-user",
"followed": true
}Проверить доступность имени пользователя
GET /api/username/checkПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
username | string | Имя пользователя для проверки |
suggest | bool | Опционально: true, чтобы включить предложение, если имя занято |
Настройки
GET /api/settings
POST /api/settingsПолучить или обновить настройки профиля пользователя (отображаемое имя, биография, социальные ссылки и т.д.).
Значок профиля
POST /api/settings/icon
DELETE /api/settings/iconЗагрузи или удали аватар профиля.
Онбординг
POST /api/onboardingЗаверши процесс онбординга (установи регион данных, имя пользователя).
API GDPR
Запроси экспорт всех своих данных или навсегда удали свою учетную запись. См. Settings documentation.
Получить статус задачи GDPR
GET /api/gdprПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
jobId | string | ID задачи GDPR для проверки |
Возвращает статус задачи. Для завершенных задач экспорта ответ включает downloadUrl.
Начать процесс экспорта или удаления
POST /api/gdprТело запроса:
{
"action": "export"
}{
"action": "delete",
"confirmationWord": "DELETE"
}Опционально для командных рабочих пространств:
{
"action": "delete",
"confirmationWord": "DELETE",
"teamUsername": "my-team"
}Удаление аккаунта необратимо и не может быть отменено. Все данные, модели и развертывания будут удалены.
Коды ошибок
| Код | HTTP статус | Описание |
|---|---|---|
UNAUTHORIZED | 401 | Неверный или отсутствующий API ключ |
FORBIDDEN | 403 | Недостаточно прав |
NOT_FOUND | 404 | Ресурс не найден |
VALIDATION_ERROR | 400 | Неверные данные запроса |
RATE_LIMITED | 429 | Слишком много запросов |
INTERNAL_ERROR | 500 | Ошибка сервера |
Интеграция с Python
Для более простой интеграции используй пакет Ultralytics для Python, который автоматически обрабатывает аутентификацию, загрузки и потоковую передачу метрик в реальном времени.
Установка и настройка
pip install ultralyticsПроверка установки:
yolo checkДля интеграции с платформой требуется ultralytics>=8.4.35. Более старые версии НЕ будут работать с платформой.
Аутентификация
yolo settings api_key=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")Запуск вывода (inference):
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/datasets/my-dataset")
print(f"mAP50: {metrics.box.map50}")
print(f"mAP50-95: {metrics.box.map}")Вебхуки
Platform использует внутренние вебхуки для передачи метрик обучения в реальном времени из Python SDK ultralytics (работающего на облачных GPU или удаленных/локальных машинах) обратно на Platform — loss по эпохам, mAP, системную статистику и статус завершения. Эти вебхуки проходят аутентификацию через HMAC webhookSecret, предоставленный для каждой задачи обучения, и не предназначены для использования пользовательскими приложениями.
Все тарифы: Прогресс обучения через SDK ultralytics (метрики в реальном времени, уведомления о завершении) работает автоматически на любом тарифе — просто установи project=username/my-project name=my-run при обучении, и SDK будет транслировать события обратно на Platform. Регистрация вебхуков на стороне пользователя не требуется.
Подписки на вебхуки для пользователей (POST-коллбэки на контролируемый тобой URL) находятся в плане развития Enterprise и в данный момент недоступны. Тем временем используй опрос GET /api/models/{modelId}/training для получения статуса или используй ленту активности в интерфейсе.
FAQ
Как использовать пагинацию для больших результатов?
Большинство эндпоинтов используют параметр limit для контроля количества результатов, возвращаемых за один запрос:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/datasets?limit=50"Эндпоинты Activity и Trash также поддерживают параметр page для постраничной пагинации:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/activity?page=2&limit=20"Эндпоинт Explore Search использует offset вместо page с фиксированным размером страницы 20:
curl "https://platform.ultralytics.com/api/explore/search?type=datasets&offset=20&sort=stars"Могу ли я использовать API без SDK?
Да, весь функционал доступен через REST. Python SDK — это удобная обертка, добавляющая такие функции, как потоковая передача метрик в реальном времени и автоматическая загрузка моделей. Ты также можешь интерактивно изучить все эндпоинты на platform.ultralytics.com/api/docs.
Существуют ли клиентские библиотеки API?
В настоящий момент используй пакет Ultralytics для Python или выполняй прямые HTTP-запросы. Официальные клиентские библиотеки для других языков запланированы.
Как обрабатывать лимиты запросов (rate limits)?
Используй заголовок 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 Exception("Rate limit exceeded")Как найти ID моей модели или набора данных?
ID ресурсов возвращаются при создании ресурсов через API. Ты также можешь найти их в URL платформы:
https://platform.ultralytics.com/username/project/model-name
^^^^^^^^ ^^^^^^^ ^^^^^^^^^^
username project modelИспользуй эндпоинты списка (list endpoints) для поиска по имени или фильтрации по проекту.