Referencia de la REST API
Plataforma Ultralytics proporciona una REST API completa para el acceso programático a conjuntos de datos, modelos, entrenamiento y despliegues.

Inicio rápido
# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasets
Documentación interactiva de la API
Explore la referencia completa e interactiva de la API en la documentación de la API de la plataforma Ultralytics.
Visión general de la API
La API se organiza en torno a los recursos principales de la plataforma:
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
| Recurso | Descripción | Operaciones clave |
|---|---|---|
| Conjuntos de datos | Colecciones de imágenes etiquetadas | CRUD, imágenes, etiquetas, exportar, versiones, clonar |
| Proyectos | Espacios de trabajo de entrenamiento | CRUD, clonar, icono |
| Modelos | Puntos de control entrenados | CRUD, predecir, descargar, clonar, exportar |
| Despliegues | Puntos finales de inferencia dedicados | CRUD, iniciar/detener, métricas, registros, estado |
| Exportaciones | Trabajos de conversión de formato | Crear, estado, descargar |
| Entrenamiento | Trabajos de entrenamiento con GPU en la Nube | Iniciar, estado, cancelar |
| Facturación | Créditos y suscripciones | Saldo, recarga, métodos de pago |
| Equipos | Colaboración en el espacio de trabajo | Miembros, invitaciones, roles |
Autenticación
La mayoría de las solicitudes de API requieren autenticación mediante clave de API. Los puntos finales públicos (que listan conjuntos de datos, proyectos y modelos públicos) admiten acceso de lectura anónimo sin una clave.
Obtener clave de API
- Ir a
Settings>Profile(sección Claves API) - Haz clic
Create Key - Copia la clave generada
Consulta Claves API para obtener instrucciones detalladas.
Encabezado de autorización
Incluye tu clave API en todas las solicitudes:
Authorization: Bearer ul_your_api_key_here
Formato de Clave API
Las claves API utilizan el formato ul_ seguido de 40 caracteres hexadecimales. Mantenga su clave en secreto: nunca la suba al control de versiones ni la comparta públicamente.
Ejemplo
curl -H "Authorization: Bearer ul_abc123..." \
https://platform.ultralytics.com/api/datasets
import requests
headers = {"Authorization": "Bearer ul_abc123..."}
response = requests.get(
"https://platform.ultralytics.com/api/datasets",
headers=headers,
)
data = response.json()
const response = await fetch("https://platform.ultralytics.com/api/datasets", {
headers: { Authorization: "Bearer ul_abc123..." },
});
const data = await response.json();
URL base
Todos los puntos finales de la API utilizan:
https://platform.ultralytics.com/api
Límites de Tasa
La API utiliza un sistema de limitación de velocidad de dos capas para proteger contra el abuso, manteniendo al mismo tiempo el uso legítimo sin restricciones:
- Por clave API — Límites aplicados por clave API en solicitudes autenticadas
- Por IP — 100 solicitudes/min por dirección IP en todas
/api/*rutas (aplica tanto a solicitudes autenticadas como no autenticadas)
Cuando se limita, la API devuelve 429 con metadatos de reintento:
Retry-After: 12
X-RateLimit-Reset: 2026-02-21T12:34:56.000Z
Límites por clave de API
Los límites de tasa se aplican automáticamente en función del endpoint que se está llamando. Las operaciones costosas tienen límites más estrictos para prevenir el abuso, mientras que las operaciones CRUD estándar comparten un valor predeterminado generoso:
| Endpoint | Límite | Aplicable a |
|---|---|---|
| Predeterminado | 100 solicitudes/min | Todos los puntos finales no listados a continuación (list, get, create, update, delete) |
| Entrenamiento | 10 solicitudes/min | Iniciando trabajos de entrenamiento en la nube (POST /api/training/start) |
| Cargar | 10 solicitudes/min | Cargas de archivos, URL firmadas e ingesta de conjuntos de datos |
| Predecir | 20 solicitudes/min | Inferencia de modelo compartido (POST /api/models/{id}/predict) |
| Exportar | 20 solicitudes/min | Exportaciones de formato de modelo (POST /api/exports), exportaciones NDJSON de conjuntos de datos y creación de versiones |
| Descargar | 30 solicitudes/min | Descargas de archivos de pesos del modelo (GET /api/models/{id}/download) |
| Dedicado | Ilimitado | Puntos finales dedicados — su propio servicio, sin límites de API |
Cada categoría tiene un contador independiente por clave API. Por ejemplo, realizar 20 solicitudes de predicción no afecta su asignación predeterminada de 100 solicitudes/min.
Puntos finales dedicados (ilimitados)
Puntos finales dedicados son no sujeto a límites de tasa de clave API. Cuando despliega un modelo en un endpoint dedicado, las solicitudes a esa URL de endpoint (por ejemplo, https://predict-abc123.run.app/predict) van directamente a su servicio dedicado sin limitación de velocidad por parte de la Plataforma. Usted está pagando por la capacidad de cómputo, por lo que obtiene un rendimiento ilimitado hasta la configuración de escalado de su endpoint.
Gestión de límites de tasa
Cuando recibe un 429 código de estado, esperar a Retry-After (o hasta que X-RateLimit-Reset) antes de reintentar. Consulte el Preguntas frecuentes sobre el límite de tasa para una implementación de retroceso exponencial.
Formato de Respuesta
Respuestas de Éxito
Las respuestas devuelven JSON con campos específicos del recurso:
{
"datasets": [...],
"total": 100
}
Respuestas de Error
{
"error": "Invalid dataset ID"
}
| Estado HTTP | Significado |
|---|---|
200 | Éxito |
201 | Creada |
400 | Solicitud inválida |
401 | Autenticación requerida |
403 | Permisos insuficientes |
404 | Recurso no encontrado |
409 | Conflicto (duplicado) |
429 | Límite de tasa excedido |
500 | Error del servidor |
API de Conjuntos de Datos
Gestione colecciones de imágenes etiquetadas para entrenar modelos YOLO.
Listar conjuntos de datos
GET /api/datasets
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
username | string | Filtrar por nombre de usuario |
slug | string | Obtener un único conjunto de datos por slug |
limit | int | Elementos por página (predeterminado: 20, máximo: 500) |
owner | string | Nombre de usuario del propietario del espacio de trabajo |
curl -H "Authorization: Bearer $API_KEY" \
"https://platform.ultralytics.com/api/datasets?limit=10"
import requests
resp = requests.get(
"https://platform.ultralytics.com/api/datasets",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"limit": 10},
)
for ds in resp.json()["datasets"]:
print(f"{ds['name']}: {ds['imageCount']} images")
Respuesta:
{
"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"
}
Obtener Conjunto de Datos
GET /api/datasets/{datasetId}
Devuelve los detalles completos del conjunto de datos, incluyendo metadatos, nombres de clases y recuentos de divisiones.
Crear Conjunto de Datos
POST /api/datasets
Cuerpo:
{
"slug": "my-dataset",
"name": "My Dataset",
"task": "detect",
"description": "A custom detection dataset",
"visibility": "private",
"classNames": ["person", "car"]
}
Tareas admitidas
Válido task valores: detect, segment, classify, pose, obb.
Actualizar Conjunto de Datos
PATCH /api/datasets/{datasetId}
Cuerpo (actualización parcial):
{
"name": "Updated Name",
"description": "New description",
"visibility": "public"
}
Eliminar conjunto de datos
DELETE /api/datasets/{datasetId}
Elimina de forma lógica el conjunto de datos (movido a la papelera, recuperable durante 30 días).
Clonar Conjunto de Datos
POST /api/datasets/{datasetId}/clone
Crea una copia del conjunto de datos con todas las imágenes y etiquetas. Solo los conjuntos de datos públicos pueden ser clonados.
Cuerpo (todos los campos opcionales):
{
"name": "cloned-dataset",
"description": "My cloned dataset",
"visibility": "private",
"owner": "team-username"
}
Exportar Conjunto de Datos
GET /api/datasets/{datasetId}/export
Devuelve una respuesta JSON con una URL de descarga firmada para la última exportación del conjunto de datos.
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
v | entero | Número de versión (indexado desde 1). Si se omite, devuelve la exportación más reciente (sin caché). |
Respuesta:
{
"downloadUrl": "https://storage.example.com/export.ndjson?signed=...",
"cached": true
}
Crear Versión del Conjunto de Datos
POST /api/datasets/{datasetId}/export
Crear una nueva instantánea de versión numerada del conjunto de datos. Solo para el propietario. La versión captura el recuento actual de imágenes, el recuento de clases, el recuento de anotaciones y la distribución de divisiones, luego genera y almacena una exportación NDJSON inmutable.
Cuerpo de la Solicitud:
{
"description": "Added 500 training images"
}
Todos los campos son opcionales. El description El campo es una etiqueta proporcionada por el usuario para la versión.
Respuesta:
{
"version": 3,
"downloadUrl": "https://storage.example.com/v3.ndjson?signed=..."
}
Actualizar descripción de la versión
PATCH /api/datasets/{datasetId}/export
Actualizar la descripción de una versión existente. Solo para el propietario.
Cuerpo de la Solicitud:
{
"version": 2,
"description": "Fixed mislabeled classes"
}
Respuesta:
{
"ok": true
}
Obtener estadísticas de clase
GET /api/datasets/{datasetId}/class-stats
Devuelve la distribución de clases, el mapa de calor de ubicación y las estadísticas de dimensiones. Los resultados se almacenan en caché por hasta 5 minutos.
Respuesta:
{
"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
}
Obtener modelos entrenados en el conjunto de datos
GET /api/datasets/{datasetId}/models
Devuelve los modelos que fueron entrenados utilizando este conjunto de datos.
Respuesta:
{
"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
}
Autoanotar conjunto de datos
POST /api/datasets/{datasetId}/predict
Ejecutar inferencia de YOLO en imágenes del conjunto de datos para auto-generar anotaciones. Utiliza un modelo seleccionado para predecir etiquetas para imágenes sin anotar.
Cuerpo:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
imageHash | string | Sí | Hash de la imagen a anotar |
modelId | string | No | ID del modelo a utilizar para inferencia |
confidence | float | No | Umbral de confianza (predeterminado: 0.25) |
iou | float | No | Umbral de IoU (por defecto: 0.45) |
Ingesta de Conjunto de Datos
POST /api/datasets/ingest
Crear un trabajo de ingesta de conjunto de datos para procesar archivos ZIP cargados que contienen imágenes y etiquetas.
graph LR
A[Upload ZIP] --> B[POST /api/datasets/ingest]
B --> C[Process ZIP]
C --> D[Extract images]
C --> E[Parse labels]
C --> F[Generate thumbnails]
D & E & F --> G[Dataset ready]
Imágenes del Conjunto de Datos
Listar imágenes
GET /api/datasets/{datasetId}/images
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
split | string | Filtrar por división: train, val, test |
offset | int | Desplazamiento de paginación (predeterminado: 0) |
limit | int | Elementos por página (predeterminado: 50, máximo: 5000) |
sort | string | Orden de ordenación: newest, oldest, name-asc, name-desc, size-asc, size-desc, labels-asc, labels-desc |
hasLabel | string | Filtrar por estado de la etiqueta (true o false) |
hasError | string | Filtrar por estado de error (true o false) |
search | string | Buscar por nombre de archivo o hash de imagen |
includeThumbnails | string | Incluir URLs de miniaturas firmadas (por defecto: true) |
includeImageUrls | string | Incluir URLs de imágenes completas firmadas (por defecto: false) |
Obtener URLs de imagen firmadas
POST /api/datasets/{datasetId}/images/urls
Obtener URLs firmadas para un lote de hashes de imagen (para visualización en el navegador).
Eliminar imagen
DELETE /api/datasets/{datasetId}/images/{hash}
Obtener etiquetas de imagen
GET /api/datasets/{datasetId}/images/{hash}/labels
Devuelve anotaciones y nombres de clase para una imagen específica.
Actualizar Etiquetas de Imagen
PUT /api/datasets/{datasetId}/images/{hash}/labels
Cuerpo:
{
"labels": [{ "classId": 0, "bbox": [0.5, 0.5, 0.2, 0.3] }]
}
Formato de Coordenadas
Las cajas delimitadoras utilizan el formato normalizado de YOLO: [x_center, y_center, width, height] donde todos los valores están entre 0 y 1.
Operaciones Masivas de Imágenes
Mover imágenes entre divisiones (entrenamiento/validación/prueba) dentro de un conjunto de datos:
PATCH /api/datasets/{datasetId}/images/bulk
Eliminar imágenes masivamente:
DELETE /api/datasets/{datasetId}/images/bulk
API de Proyectos
Gestionar los espacios de trabajo de entrenamiento que agrupan modelos.
Listar Proyectos
GET /api/projects
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
username | string | Filtrar por nombre de usuario |
limit | int | Elementos por página |
owner | string | Nombre de usuario del propietario del espacio de trabajo |
Obtener Proyecto
GET /api/projects/{projectId}
Crear proyecto
POST /api/projects
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "my-project", "slug": "my-project", "description": "Detection experiments"}' \
https://platform.ultralytics.com/api/projects
resp = requests.post(
"https://platform.ultralytics.com/api/projects",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"name": "my-project", "slug": "my-project", "description": "Detection experiments"},
)
project_id = resp.json()["projectId"]
Actualizar Proyecto
PATCH /api/projects/{projectId}
Eliminar proyecto
DELETE /api/projects/{projectId}
Elimina de forma lógica el proyecto (movido a la papelera).
Clonar Proyecto
POST /api/projects/{projectId}/clone
Icono del proyecto
Subir un icono de proyecto (formulario multipart con archivo de imagen):
POST /api/projects/{projectId}/icon
Eliminar el icono del proyecto:
DELETE /api/projects/{projectId}/icon
API de Modelos
Gestionar los puntos de control de modelos entrenados dentro de los proyectos.
Listar Modelos
GET /api/models
Parámetros de consulta:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
projectId | string | Sí | ID del proyecto (obligatorio) |
fields | string | No | Conjunto de campos: summary, charts |
ids | string | No | IDs de modelo separados por comas |
limit | int | No | Máximo de resultados (por defecto 20, máximo 100) |
Listar modelos completados
GET /api/models/completed
Devuelve los modelos que han finalizado el entrenamiento (para su uso en selectores de modelos y despliegue).
Obtener Modelo
GET /api/models/{modelId}
Crear Modelo
POST /api/models
Cuerpo JSON:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
projectId | string | Sí | ID de proyecto objetivo |
slug | string | No | Slug de URL (alfanuméricos en minúscula/guiones) |
name | string | No | Nombre visible (máx. 100 caracteres) |
description | string | No | Descripción del modelo (máx. 1000 caracteres) |
task | string | No | Tipo de tarea (detect, segment, pose, obb, classify) |
Carga de Archivo del Modelo
Modelo .pt Las cargas de archivos se gestionan por separado. Utilice la interfaz de usuario de la plataforma para arrastrar y soltar archivos de modelo en un proyecto.
Actualizar Modelo
PATCH /api/models/{modelId}
Eliminar modelo
DELETE /api/models/{modelId}
Descargar archivos del modelo
GET /api/models/{modelId}/files
Devuelve URLs de descarga firmadas para archivos de modelo.
Clonar Modelo
POST /api/models/{modelId}/clone
Clonar un modelo público a uno de sus proyectos.
Cuerpo:
{
"targetProjectSlug": "my-project",
"modelName": "cloned-model",
"description": "Cloned from public model",
"owner": "team-username"
}
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
targetProjectSlug | string | Sí | Slug del proyecto de destino |
modelName | string | No | Nombre para el modelo clonado |
description | string | No | Descripción del modelo |
owner | string | No | Nombre de usuario del equipo (para la clonación del espacio de trabajo) |
Track Descarga
POST /api/models/{modelId}/track-download
Track analíticas de descarga de modelos.
Ejecutar Inferencia
POST /api/models/{modelId}/predict
Formulario Multipart:
| Campo | Tipo | Descripción |
|---|---|---|
file | archivo | Archivo de imagen (JPEG, PNG, WebP) |
conf | float | Umbral de confianza (predeterminado: 0.25) |
iou | float | Umbral de IoU (por defecto: 0.7) |
imgsz | int | Tamaño de la imagen en píxeles (predeterminado: 640) |
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-F "file=@image.jpg" \
-F "conf=0.5" \
https://platform.ultralytics.com/api/models/MODEL_ID/predict
with open("image.jpg", "rb") as f:
resp = requests.post(
f"https://platform.ultralytics.com/api/models/{model_id}/predict",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
data={"conf": 0.5},
)
results = resp.json()["images"][0]["results"]
Respuesta:
{
"images": [
{
"shape": [1080, 1920],
"results": [
{
"class": 0,
"name": "person",
"confidence": 0.92,
"box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
}
]
}
],
"metadata": {
"imageCount": 1
}
}
Obtener token de predicción
POST /api/models/{modelId}/predict/token
Obtener un token de corta duración para solicitudes de predicción directas. El token omite el proxy de la API para una inferencia de menor latencia desde aplicaciones del lado del cliente.
Modelo de calentamiento
POST /api/models/{modelId}/predict/warmup
Precargue un modelo para una primera inferencia más rápida. Llame a esto antes de ejecutar predicciones para evitar retrasos en la solicitud inicial.
API de Entrenamiento
Iniciar, supervisar y cancelar trabajos de entrenamiento en la nube.
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]
Comenzar el entrenamiento
POST /api/training/start
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"modelId": "MODEL_ID",
"projectId": "PROJECT_ID",
"gpuType": "rtx-4090",
"trainArgs": {
"model": "yolo11n.pt",
"data": "ul://username/datasets/my-dataset",
"epochs": 100,
"imgsz": 640,
"batch": 16
}
}' \
https://platform.ultralytics.com/api/training/start
resp = requests.post(
"https://platform.ultralytics.com/api/training/start",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"modelId": "MODEL_ID",
"projectId": "PROJECT_ID",
"gpuType": "rtx-4090",
"trainArgs": {
"model": "yolo11n.pt",
"data": "ul://username/datasets/my-dataset",
"epochs": 100,
"imgsz": 640,
"batch": 16,
},
},
)
Tipos de GPU
Los tipos de GPU disponibles incluyen rtx-4090, a100-80gb-pcie, a100-80gb-sxm, h100-sxm, rtx-pro-6000, y otros. Ver Entrenamiento en la Nube para la lista completa con precios.
Obtener Estado de Entrenamiento
GET /api/models/{modelId}/training
Devuelve el estado actual del trabajo de entrenamiento, las métricas y el progreso de un modelo.
Cancelar Entrenamiento
DELETE /api/models/{modelId}/training
Termina la instancia de cómputo en ejecución y marca el trabajo como cancelado.
API de Despliegues
Cree y gestione endpoints de inferencia dedicados.
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]
Listar Despliegues
GET /api/deployments
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
modelId | string | Filtrar por modelo |
status | string | Filtrar por estado |
limit | int | Resultados máximos (por defecto: 20, máximo: 100) |
owner | string | Nombre de usuario del propietario del espacio de trabajo |
Crear Despliegue
POST /api/deployments
Cuerpo:
{
"modelId": "model_abc123",
"name": "my-deployment",
"region": "us-central1",
"resources": {
"cpu": 1,
"memoryGi": 2,
"minInstances": 0,
"maxInstances": 1
}
}
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
modelId | string | Sí | ID del modelo a desplegar |
name | string | Sí | Nombre del despliegue |
region | string | Sí | Región de despliegue |
resources | objeto | No | Configuración de recursos (CPU, memoryGi, minInstances, maxInstances) |
Crea un punto final de inferencia dedicado en la región especificada. El punto final es accesible globalmente a través de una URL única.
Selección de región
Elija una región cercana a sus usuarios para obtener la menor latencia. La interfaz de usuario de la plataforma muestra estimaciones de latencia para las 43 regiones disponibles.
Obtener Despliegue
GET /api/deployments/{deploymentId}
Eliminar Despliegue
DELETE /api/deployments/{deploymentId}
Iniciar Despliegue
POST /api/deployments/{deploymentId}/start
Reanudar una implementación detenida.
Detener Despliegue
POST /api/deployments/{deploymentId}/stop
Pausar una implementación en ejecución (detiene la facturación).
Comprobación del estado
GET /api/deployments/{deploymentId}/health
Devuelve el estado de salud del punto final de despliegue.
Ejecutar inferencia en despliegue
POST /api/deployments/{deploymentId}/predict
Enviar una imagen directamente a un endpoint de despliegue para inferencia. Funcionalmente equivalente a la predicción del modelo, pero enrutado a través del endpoint dedicado para una menor latencia.
Formulario Multipart:
| Campo | Tipo | Descripción |
|---|---|---|
file | archivo | Archivo de imagen (JPEG, PNG, WebP) |
conf | float | Umbral de confianza (predeterminado: 0.25) |
iou | float | Umbral de IoU (por defecto: 0.7) |
imgsz | int | Tamaño de la imagen en píxeles (predeterminado: 640) |
Obtener Métricas
GET /api/deployments/{deploymentId}/metrics
Devuelve las métricas de recuentos de solicitudes, latencia y tasa de error con datos de sparkline.
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
range | string | Rango de tiempo: 1h, 6h, 24h (predeterminado), 7d, 30d |
sparkline | string | Establecer en true para datos de minigráficos optimizados para la vista de panel de control |
Obtener Registros
GET /api/deployments/{deploymentId}/logs
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
severity | string | Filtro separado por comas: DEBUG, INFO, WARNING, ERROR, CRITICAL |
limit | int | Número de entradas (predeterminado: 50, máximo: 200) |
pageToken | string | Token de paginación de la respuesta anterior |
API de Monitorización
Métricas Agregadas
GET /api/monitoring
Devuelve métricas agregadas de todas las implementaciones de usuario: solicitudes totales, implementaciones activas, tasa de error y latencia promedio.
API de Exportación
Convertir modelos a formatos optimizados para despliegue en el edge.
Listar Exportaciones
GET /api/exports
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
modelId | string | ID del modelo (obligatorio) |
status | string | Filtrar por estado |
limit | int | Resultados máximos (por defecto: 20, máximo: 100) |
Crear Exportación
POST /api/exports
Cuerpo:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
modelId | string | Sí | ID del modelo de origen |
format | string | Sí | Formato de exportación (ver tabla a continuación) |
gpuType | string | Condicional | Requerido cuando format es engine (TensorRT) |
args | objeto | No | Argumentos de exportación (imgsz, half, dynamic, etc.) |
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"modelId": "MODEL_ID", "format": "onnx"}' \
https://platform.ultralytics.com/api/exports
resp = requests.post(
"https://platform.ultralytics.com/api/exports",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"modelId": "MODEL_ID", "format": "onnx"},
)
export_id = resp.json()["exportId"]
Formatos admitidos:
| Formato | Valor | Caso de uso |
|---|---|---|
| ONNX | onnx | Inferencia multiplataforma |
| TorchScript | torchscript | Despliegue de PyTorch |
| OpenVINO | openvino | Hardware Intel |
| TensorRT | engine | Optimización de GPU NVIDIA |
| CoreML | coreml | dispositivos Apple |
| TFLite | tflite | Móvil y embebido |
| TF SavedModel | saved_model | TensorFlow Serving |
| TF GraphDef | pb | Grafo congelado de TensorFlow |
| PaddlePaddle | paddle | Baidu PaddlePaddle |
| NCNN | ncnn | Red neuronal móvil |
| Edge TPU | edgetpu | Dispositivos Google Coral |
| TF.js | tfjs | Inferencia en navegador |
| MNN | mnn | Inferencia móvil Alibaba |
| RKNN | rknn | Rockchip NPU |
| IMX | imx | Sensor Sony IMX500 |
| Axelera | axelera | Aceleradores de IA Axelera |
| ExecuTorch | executorch | Tiempo de ejecución de Meta ExecuTorch |
Obtener Estado de Exportación
GET /api/exports/{exportId}
Cancelar exportación
DELETE /api/exports/{exportId}
Track Descarga de Exportación
POST /api/exports/{exportId}/track-download
API de Actividad
track y gestione los eventos de actividad de su cuenta.
Listar Actividad
GET /api/activity
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
limit | int | Tamaño de página (predeterminado: 20, máximo: 100) |
page | int | Número de página (predeterminado: 1) |
archived | booleano | true para la pestaña Archivo, false para la Bandeja de entrada |
search | string | Búsqueda sin distinción entre mayúsculas y minúsculas en campos de eventos |
Marcar Eventos Vistos
POST /api/activity/mark-seen
Cuerpo:
{
"all": true
}
O pasar IDs específicos:
{
"eventIds": ["EVENT_ID_1", "EVENT_ID_2"]
}
Archivar Eventos
POST /api/activity/archive
Cuerpo:
{
"all": true,
"archive": true
}
O pasar IDs específicos:
{
"eventIds": ["EVENT_ID_1", "EVENT_ID_2"],
"archive": false
}
API de Papelera
Gestionar recursos eliminados de forma lógica (retención de 30 días).
Listar Papelera
GET /api/trash
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
type | string | Filtro: all, project, dataset, model |
page | int | Número de página (predeterminado: 1) |
limit | int | Elementos por página (predeterminado: 50, máximo: 200) |
owner | string | Nombre de usuario del propietario del espacio de trabajo |
Restaurar Elemento
POST /api/trash
Cuerpo:
{
"id": "item_abc123",
"type": "dataset"
}
Eliminar elemento permanentemente
DELETE /api/trash
Cuerpo:
{
"id": "item_abc123",
"type": "dataset"
}
Irreversible
La eliminación permanente no se puede deshacer. El recurso y todos los datos asociados serán eliminados.
Vaciar Papelera
DELETE /api/trash/empty
Elimina permanentemente todos los elementos de la papelera.
API de Facturación
Gestione créditos, suscripciones y métodos de pago.
Unidades monetarias
Los importes de facturación usan céntimos (creditsCents) donde 100 = $1.00.
Obtener Saldo
GET /api/billing/balance
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
owner | string | Nombre de usuario del propietario del espacio de trabajo |
Respuesta:
{
"creditsCents": 2500,
"plan": "free",
"cashBalance": 25,
"creditBalance": 0,
"reservedAmount": 0,
"totalBalance": 25
}
Obtener Resumen de Uso
GET /api/billing/usage-summary
Devuelve los detalles del plan, los límites y las métricas de uso.
Obtener transacciones
GET /api/billing/transactions
Devuelve el historial de transacciones (las más recientes primero).
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
owner | string | Nombre de usuario del propietario del espacio de trabajo |
Crear Sesión de Pago
POST /api/billing/checkout-session
Cuerpo:
{
"amount": 25,
"owner": "team-username"
}
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
amount | número | Sí | Cantidad en dólares ($5-$1000) |
owner | string | No | Nombre de usuario del equipo para recargas del espacio de trabajo (requiere rol de administrador) |
Crea una sesión de pago para la compra de créditos.
Crear Pago de Suscripción
POST /api/billing/subscription-checkout
Crea una sesión de pago para la mejora de la suscripción Pro.
Cuerpo:
{
"planId": "pro",
"billingCycle": "monthly",
"owner": "team-username"
}
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
planId | string | Sí | Plan al que suscribirse (pro) |
billingCycle | string | No | Ciclo de facturación: monthly (predeterminado) o yearly |
owner | string | No | Nombre de usuario del equipo para actualizaciones del espacio de trabajo (requiere rol de administrador) |
Crear Sesión del Portal
POST /api/billing/portal-session
Devuelve la URL al portal de facturación para la gestión de suscripciones.
Recarga automática
Añadir créditos automáticamente cuando el saldo cae por debajo de un umbral.
Obtener configuración de recarga automática
GET /api/billing/auto-topup
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
owner | string | Nombre de usuario del propietario del espacio de trabajo |
Actualizar Configuración de Recarga Automática
PATCH /api/billing/auto-topup
Cuerpo:
{
"enabled": true,
"thresholdCents": 500,
"amountCents": 2500
}
Métodos de Pago
Listar métodos de pago
GET /api/billing/payment-methods
Crear Intención de Configuración
POST /api/billing/payment-methods/setup
Devuelve un secreto de cliente para añadir un nuevo método de pago.
Establecer Método de Pago Predeterminado
POST /api/billing/payment-methods/default
Cuerpo:
{
"paymentMethodId": "pm_123"
}
Actualizar Información de Facturación
PATCH /api/billing/payment-methods
Cuerpo:
{
"name": "Jane Doe",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postal_code": "94105",
"country": "US"
}
}
Eliminar método de pago
DELETE /api/billing/payment-methods/{id}
API de Almacenamiento
Obtener Información de Almacenamiento
GET /api/storage
Respuesta:
{
"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"
}
]
}
}
Recalcular Almacenamiento
POST /api/storage
Activa un recálculo del uso de almacenamiento.
API de carga
Las cargas directas de archivos utilizan un flujo de URL firmada de dos pasos.
Obtener URL de carga firmada
POST /api/upload/signed-url
Solicitar una URL firmada para subir un archivo directamente al almacenamiento en la nube. La URL firmada evita el servidor API para transferencias de archivos grandes.
Cuerpo:
{
"assetType": "images",
"assetId": "abc123",
"filename": "my-image.jpg",
"contentType": "image/jpeg",
"totalBytes": 5242880
}
| Campo | Tipo | Descripción |
|---|---|---|
assetType | string | Tipo de activo: models, datasets, images, videos |
assetId | string | ID del activo objetivo |
filename | string | Nombre de archivo original |
contentType | string | Tipo MIME |
totalBytes | int | Tamaño del archivo en bytes |
Respuesta:
{
"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"
}
Carga completada
POST /api/upload/complete
Notificar a la plataforma que una carga de archivo está completa para que pueda comenzar el procesamiento.
Cuerpo:
{
"datasetId": "abc123",
"objectPath": "datasets/abc123/images/my-image.jpg",
"filename": "my-image.jpg",
"contentType": "image/jpeg",
"size": 5242880
}
API de claves API
Listar Claves de API
GET /api/api-keys
Crear Clave de API
POST /api/api-keys
Cuerpo:
{
"name": "training-server"
}
Eliminar clave API
DELETE /api/api-keys
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
keyId | string | ID de clave API a revocar |
Ejemplo:
curl -X DELETE \
-H "Authorization: Bearer $API_KEY" \
"https://platform.ultralytics.com/api/api-keys?keyId=KEY_ID"
API de Equipos y Miembros
Gestionar la colaboración en el espacio de trabajo con equipos, miembros e invitaciones.
Listar equipos
GET /api/teams
Crear equipo
POST /api/teams/create
Cuerpo:
{
"username": "my-team",
"fullName": "My Team"
}
Listar miembros
GET /api/members
Devuelve los miembros del espacio de trabajo actual.
Invitar a un miembro
POST /api/members
Cuerpo:
{
"email": "user@example.com",
"role": "editor"
}
Roles de miembro
| Rol | Permisos |
|---|---|
viewer | Acceso de solo lectura a los recursos del espacio de trabajo |
editor | Crear, editar y eliminar recursos |
admin | Acceso completo, incluida la gestión de miembros |
Consulte Teams para detalles de roles en la interfaz de usuario.
Actualizar Rol de Miembro
PATCH /api/members/{userId}
Eliminar miembro
DELETE /api/members/{userId}
Transferir propiedad
POST /api/members/transfer-ownership
Invitaciones
Aceptar Invitación
POST /api/invites/accept
Obtener información de invitación
GET /api/invites/info
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
token | string | Token de invitación |
Revocar invitación
DELETE /api/invites/{inviteId}
Reenviar invitación
POST /api/invites/{inviteId}/resend
Explore la API
Buscar contenido público
GET /api/explore/search
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
q | string | Consulta de búsqueda |
type | string | Tipo de recurso: all (predeterminado), projects, datasets |
sort | string | Orden de ordenación: stars (predeterminado), newest, oldest, name-asc, name-desc, count-desc, count-asc |
offset | int | Desplazamiento de paginación (predeterminado: 0). Los resultados devuelven 20 elementos por página. |
Datos de la barra lateral
GET /api/explore/sidebar
Devuelve contenido seleccionado para la barra lateral de Explorar.
APIs de Usuario y Configuración
Obtener usuario por nombre de usuario
GET /api/users
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
username | string | Nombre de usuario a buscar |
Seguir o Dejar de Seguir Usuario
PATCH /api/users
Cuerpo:
{
"username": "target-user",
"followed": true
}
Verificar disponibilidad de nombre de usuario
GET /api/username/check
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
username | string | Nombre de usuario a verificar |
suggest | booleano | Opcional: true para incluir una sugerencia si se considera |
Configuración
GET /api/settings
POST /api/settings
Obtener o actualizar la configuración del perfil de usuario (nombre de visualización, biografía, enlaces sociales, etc.).
Icono de perfil
POST /api/settings/icon
DELETE /api/settings/icon
Subir o eliminar avatar de perfil.
Incorporación
POST /api/onboarding
Completar el flujo de incorporación (establecer región de datos, nombre de usuario).
API de GDPR
Puntos de conexión de cumplimiento del RGPD para la exportación y eliminación de datos.
Obtener estado del trabajo GDPR
GET /api/gdpr
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
jobId | string | ID de trabajo GDPR a verificar |
Devuelve el estado del trabajo. Para los trabajos de exportación completados, la respuesta incluye un downloadUrl.
Iniciar flujo de exportación o eliminación
POST /api/gdpr
Cuerpo:
{
"action": "export"
}
{
"action": "delete",
"confirmationWord": "DELETE"
}
Opcional para espacios de trabajo en equipo:
{
"action": "delete",
"confirmationWord": "DELETE",
"teamUsername": "my-team"
}
Acción irreversible
La eliminación de la cuenta es permanente y no se puede deshacer. Todos los datos, modelos y despliegues serán eliminados.
Códigos de error
| Código | Estado HTTP | Descripción |
|---|---|---|
UNAUTHORIZED | 401 | Clave API inválida o faltante |
FORBIDDEN | 403 | Permisos insuficientes |
NOT_FOUND | 404 | Recurso no encontrado |
VALIDATION_ERROR | 400 | Datos de solicitud inválidos |
RATE_LIMITED | 429 | Demasiadas solicitudes |
INTERNAL_ERROR | 500 | Error del servidor |
Integración con Python
Para una integración más sencilla, utilice el paquete Python de Ultralytics que maneja la autenticación, las cargas y la transmisión de métricas en tiempo real automáticamente.
Instalación y configuración
pip install ultralytics
Verificar instalación:
yolo check
Requisito de Versión del Paquete
La integración con la Plataforma requiere ultralytics>=8.4.14. Las versiones anteriores NO funcionarán con la Plataforma.
Autenticación
yolo settings api_key=YOUR_API_KEY
export ULTRALYTICS_API_KEY=YOUR_API_KEY
from ultralytics import settings
settings.api_key = "YOUR_API_KEY"
Uso de Conjuntos de Datos de la Plataforma
Referenciar conjuntos de datos con ul:// URIs:
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,
)
Formato URI:
| Patrón | Descripción |
|---|---|
ul://username/datasets/slug | Conjunto de datos |
ul://username/project-name | Proyecto |
ul://username/project/model-name | Modelo específico |
ul://ultralytics/yolo26/yolo26n | Modelo oficial |
Envío a la Plataforma
Enviar resultados a un proyecto de la Plataforma:
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",
)
Qué se sincroniza:
- Métricas de entrenamiento (en tiempo real)
- Pesos finales del modelo
- Gráficos de validación
- Salida de la consola
- Métricas del sistema
Ejemplos de API
Cargar un modelo desde la Plataforma:
# Your own model
model = YOLO("ul://username/project/model-name")
# Official model
model = YOLO("ul://ultralytics/yolo26/yolo26n")
Ejecutar inferencia:
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
Exportar modelo:
# 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)
Validación:
metrics = model.val(data="ul://username/my-dataset")
print(f"mAP50: {metrics.box.map50}")
print(f"mAP50-95: {metrics.box.map}")
Webhooks
Los webhooks notifican a su servidor sobre eventos de la Plataforma mediante callbacks HTTP POST:
| Evento | Descripción |
|---|---|
training.started | Trabajo de entrenamiento iniciado |
training.epoch | Época completada |
training.completed | Entrenamiento finalizado |
training.failed | Entrenamiento fallido |
export.completed | Exportación lista |
Funcionalidad Empresarial
Los puntos finales de webhook personalizados están disponibles en los planes Enterprise. Los webhooks de entrenamiento para el SDK de Python funcionan automáticamente en todos los planes.
Preguntas frecuentes
¿Cómo pagino resultados extensos?
La mayoría de los puntos finales utilizan un limit parámetro para controlar cuántos resultados se devuelven por solicitud:
curl -H "Authorization: Bearer $API_KEY" \
"https://platform.ultralytics.com/api/datasets?limit=50"
Los puntos finales de Actividad y Papelera también admiten un page parámetro para la paginación basada en páginas:
curl -H "Authorization: Bearer $API_KEY" \
"https://platform.ultralytics.com/api/activity?page=2&limit=20"
El endpoint de búsqueda Explorar utiliza offset en lugar de page, con un tamaño de página fijo de 20:
curl "https://platform.ultralytics.com/api/explore/search?type=datasets&offset=20&sort=stars"
¿Puedo usar la API sin un SDK?
Sí, toda la funcionalidad está disponible a través de REST. El SDK de Python es un envoltorio de conveniencia que añade características como la transmisión de métricas en tiempo real y la carga automática de modelos.
¿Existen bibliotecas cliente de la API?
Actualmente, utilice el paquete Python de Ultralytics o realice solicitudes HTTP directas. Se planean bibliotecas cliente oficiales para otros lenguajes.
¿Cómo gestiono los límites de tasa?
Utilice el Retry-After encabezado de la respuesta 429 para esperar el tiempo adecuado:
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")
¿Cómo encuentro mi ID de modelo o conjunto de datos?
Los ID de recursos se devuelven al crear recursos a través de la API. También puede encontrarlos en la URL de la plataforma:
https://platform.ultralytics.com/username/project/model-name
^^^^^^^^ ^^^^^^^ ^^^^^^^^^^
username project model
Utilice los endpoints de lista para buscar por nombre o filtrar por proyecto.