Referencia de la REST API
La Ultralytics Platform proporciona una completa REST API para el acceso programático a datasets, modelos, entrenamiento y despliegues.

# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasetsExplora la referencia interactiva completa de la API en la documentación de la API de Ultralytics Platform.
Descripción general de la API
La API está organizada 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 |
|---|---|---|
| Datasets | Colecciones de imágenes etiquetadas | CRUD, imágenes, etiquetas, exportación, versiones, clonación |
| Projects | Espacios de trabajo de entrenamiento | CRUD, clonación, icono |
| Models | Checkpoints entrenados | CRUD, predicción, descarga, clonación, exportación |
| Deployments | Endpoints de inferencia dedicados | CRUD, inicio/parada, métricas, registros, estado |
| Exports | Trabajos de conversión de formato | Creación, estado, descarga |
| Training | Trabajos de entrenamiento en GPU en la nube | Inicio, estado, cancelación |
| Billing | Créditos y suscripciones | Saldo, recarga, métodos de pago |
| Teams | Colaboración en espacios de trabajo | Miembros, invitaciones, roles |
Autenticación
Las API de recursos, como datasets, proyectos, modelos, entrenamiento, exportaciones y predicciones, utilizan autenticación mediante API key. Los endpoints públicos (listado de datasets, proyectos y modelos públicos) admiten acceso de lectura anónimo sin necesidad de una clave. Las rutas orientadas a la cuenta —incluyendo actividad, configuración, equipos, facturación y flujos de GDPR— requieren actualmente una sesión de navegador autenticada y no están disponibles mediante API key.
Obtener API Key
- Ve a
Settings>API Keys - Haz clic en
Create Key - Copia la clave generada
Consulta API Keys para obtener instrucciones detalladas.
Cabecera de autorización
Incluye tu API key en todas las solicitudes:
Authorization: Bearer YOUR_API_KEYLas API keys usan el formato ul_ seguido de 40 caracteres hexadecimales. Mantén tu clave en secreto; nunca la subas al control de versiones ni la compartas públicamente.
Ejemplo
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasetsURL base
Todos los endpoints de la API utilizan:
https://platform.ultralytics.com/api
Límites de tasa
La API impone límites de tasa por API key (ventana deslizante, respaldada por Upstash Redis) para proteger contra abusos manteniendo el uso legítimo sin restricciones. El tráfico anónimo está protegido adicionalmente por los controles de abuso a nivel de plataforma de Vercel.
Cuando se alcanza el límite, la API devuelve un código 429 con metadatos de reintento:
Retry-After: 12
X-RateLimit-Reset: 2026-02-21T12:34:56.000ZLímites por API Key
Los límites de tasa se aplican automáticamente según el endpoint que se esté llamando. Las operaciones costosas tienen límites más estrictos para evitar abusos, mientras que las operaciones CRUD estándar comparten un generoso límite predeterminado:
| Endpoint | Límite | Se aplica a |
|---|---|---|
| Predeterminado | 100 solicitudes/min | Todos los endpoints no listados a continuación (listado, obtención, creación, actualización, eliminación) |
| Entrenamiento | 10 solicitudes/min | Inicio de trabajos de entrenamiento en la nube (POST /api/training/start) |
| Cargar | 10 solicitudes/min | Carga de archivos, URLs firmadas e ingesta de datasets |
| Predict | 20 solicitudes/min | Inferencia de modelos compartidos (POST /api/models/{id}/predict) |
| Exportar | 20 solicitudes/min | Exportaciones de formato de modelo (POST /api/exports), exportaciones NDJSON de datasets y creación de versiones |
| Descarga | 30 solicitudes/min | Descargas de archivos de pesos del modelo (GET /api/models/{id}/download) |
| Dedicado | Ilimitado | Endpoints dedicados — tu propio servicio, sin límites de API |
Cada categoría tiene un contador independiente por API key. Por ejemplo, realizar 20 solicitudes de predicción no afecta a tu asignación predeterminada de 100 solicitudes/min.
Endpoints dedicados (Ilimitado)
Los endpoints dedicados no están sujetos a límites de tasa por API key. Cuando despliegas un modelo en un endpoint dedicado, las solicitudes a esa URL de endpoint (p. ej., https://predict-abc123.run.app/predict) van directamente a tu servicio dedicado sin limitación de tasa por parte de la plataforma. Pagas por la computación, así que obtienes el rendimiento de la configuración de tu servicio dedicado en lugar de los límites de la API compartida.
Cuando recibas un código de estado 429, espera según Retry-After (o hasta X-RateLimit-Reset) antes de volver a intentarlo. Consulta el FAQ sobre límites de tasa para ver una implementación de retroceso exponencial.
Formato de respuesta
Respuestas exitosas
Las respuestas devuelven JSON con campos específicos del recurso:
{
"datasets": [...],
"total": 100
}Respuestas de error
{
"error": "Dataset not found"
}| Estado HTTP | Significado |
|---|---|
200 | Éxito |
201 | Creado |
400 | Solicitud no vá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 Datasets
Crea, explora y gestiona datasets de imágenes etiquetadas para entrenar modelos YOLO. Consulta la documentación de Datasets.
Listar datasets
GET /api/datasetsParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
username | cadena | Filtrar por nombre de usuario |
slug | cadena | Obtener un conjunto de datos único por slug |
limit | int | Elementos por página (predeterminado: 20, máximo: 500) |
owner | cadena | Nombre de usuario del propietario del área de trabajo |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/datasets?limit=10"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, incluidos los metadatos, los nombres de las clases y los recuentos de particiones.
Crear conjunto de datos
POST /api/datasetsCuerpo:
{
"slug": "my-dataset",
"name": "My Dataset",
"task": "detect",
"description": "A custom detection dataset",
"visibility": "private",
"classNames": ["person", "car"]
}Valores de task válidos: 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 el conjunto de datos de forma lógica (movido a la papelera, recuperable durante 30 días).
Clonar conjunto de datos
POST /api/datasets/{datasetId}/cloneCrea una copia del conjunto de datos con todas las imágenes y etiquetas. Solo se pueden clonar conjuntos de datos públicos. Requiere una sesión activa en el navegador de la plataforma; no disponible a través de una clave API.
Cuerpo (todos los campos son opcionales):
{
"name": "cloned-dataset",
"description": "My cloned dataset",
"visibility": "private",
"owner": "team-username"
}Exportar conjunto de datos
GET /api/datasets/{datasetId}/exportDevuelve 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 en 1). Si se omite, devuelve la última exportación (no almacenada en caché). |
Respuesta:
{
"downloadUrl": "https://storage.example.com/export.ndjson?signed=...",
"cached": true
}Crear versión del conjunto de datos
POST /api/datasets/{datasetId}/exportCrea 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 particiones, y luego genera y almacena una exportación NDJSON inmutable.
Cuerpo de la solicitud:
{
"description": "Added 500 training images"
}Todos los campos son opcionales. El campo description 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}/exportActualiza 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-statsDevuelve la distribución de clases, el mapa de calor de ubicación y las estadísticas de dimensiones. Los resultados se almacenan en caché hasta por 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 con el conjunto de datos
GET /api/datasets/{datasetId}/modelsDevuelve los modelos que se entrenaron 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}/predictEjecuta la inferencia de YOLO en las imágenes del conjunto de datos para generar anotaciones automáticamente. Utiliza un modelo seleccionado para predecir etiquetas para imágenes sin anotar.
Cuerpo:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
imageHash | cadena | Sí | Hash de la imagen a anotar |
modelId | cadena | No | ID del modelo a utilizar para la inferencia |
confidence | float | No | Umbral de confianza (predeterminado: 0.25) |
iou | float | No | Umbral de IoU (predeterminado: 0.45) |
Ingesta de conjunto de datos
POST /api/datasets/ingestCrea un trabajo de ingesta de conjuntos de datos para procesar archivos ZIP o TAR cargados, incluidos .tar.gz y .tgz, que contengan imágenes y etiquetas.
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]Imágenes del conjunto de datos
Listar imágenes
GET /api/datasets/{datasetId}/imagesParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
split | cadena | Filtrar por partición: train, val, test |
offset | int | Desplazamiento de paginación (predeterminado: 0) |
limit | int | Elementos por página (predeterminado: 50, máximo: 5000) |
sort | cadena | Orden de clasificación: newest, oldest, name-asc, name-desc, height-asc, height-desc, width-asc, width-desc, size-asc, size-desc, labels-asc, labels-desc (algunos deshabilitados para conjuntos de datos de más de 100 000 imágenes) |
hasLabel | cadena | Filtrar por estado de etiqueta (true o false) |
hasError | cadena | Filtrar por estado de error (true o false) |
search | cadena | Buscar por nombre de archivo o hash de imagen |
includeThumbnails | cadena | Incluir URL de miniaturas firmadas (predeterminado: true) |
includeImageUrls | cadena | Incluir URL de imágenes completas firmadas (predeterminado: false) |
Obtener URL de imágenes firmadas
POST /api/datasets/{datasetId}/images/urlsObtener URL firmadas para un lote de hashes de imagen (para su visualización en el navegador).
Eliminar imagen
DELETE /api/datasets/{datasetId}/images/{hash}Obtener etiquetas de imagen
GET /api/datasets/{datasetId}/images/{hash}/labelsDevuelve las anotaciones y los nombres de las clases para una imagen específica.
Actualizar etiquetas de imagen
PUT /api/datasets/{datasetId}/images/{hash}/labelsCuerpo:
{
"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] }
]
}Las coordenadas de las etiquetas utilizan valores normalizados de YOLO entre 0 y 1. Los cuadros delimitadores (bounding boxes) utilizan [x_center, y_center, width, height]. Las etiquetas de segmentación utilizan segments, una lista aplanada de vértices de polígono [x1, y1, x2, y2, ...].
Operaciones masivas con imágenes
Mover imágenes entre particiones (train/val/test) dentro de un conjunto de datos:
PATCH /api/datasets/{datasetId}/images/bulkEliminar imágenes de forma masiva:
DELETE /api/datasets/{datasetId}/images/bulkAPI de proyectos
Organiza tus modelos en proyectos. Cada modelo pertenece a un proyecto. Consulta la documentación de Proyectos.
Listar proyectos
GET /api/projectsParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
username | cadena | Filtrar por nombre de usuario |
limit | int | Elementos por página |
owner | cadena | Nombre de usuario del propietario del área de trabajo |
Obtener proyecto
GET /api/projects/{projectId}Crear proyecto
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/projectsActualizar proyecto
PATCH /api/projects/{projectId}Eliminar proyecto
DELETE /api/projects/{projectId}Elimina el proyecto de forma lógica (movido a la papelera).
Clonar proyecto
POST /api/projects/{projectId}/cloneClona un proyecto público (con todos sus modelos) en tu área de trabajo. Requiere una sesión activa en el navegador de la plataforma; no disponible a través de una clave API.
Icono del proyecto
Cargar un icono de proyecto (formulario multipart con archivo de imagen):
POST /api/projects/{projectId}/iconEliminar el icono del proyecto:
DELETE /api/projects/{projectId}/iconAmbos requieren una sesión activa en el navegador de la plataforma; no disponibles a través de una clave API.
API de modelos
Gestiona modelos YOLO entrenados: consulta métricas, descarga pesos, ejecuta inferencia y exporta a otros formatos. Consulta la documentación de Modelos.
Listar modelos
GET /api/modelsParámetros de consulta:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
projectId | cadena | Sí | ID del proyecto (obligatorio) |
fields | cadena | No | Conjunto de campos: summary, charts |
ids | cadena | No | IDs de modelo separados por comas |
limit | int | No | Resultados máximos (predeterminado 20, máximo 100) |
Listar modelos completados
GET /api/models/completedDevuelve los modelos que han terminado de entrenarse (para su uso en selectores de modelos y despliegue).
Obtener modelo
GET /api/models/{modelId}Crear modelo
POST /api/modelsCuerpo JSON:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
projectId | cadena | Sí | ID del proyecto de destino |
slug | cadena | No | Slug de URL (alfanumérico en minúsculas/guiones) |
name | cadena | No | Nombre visible (máximo 100 caracteres) |
description | cadena | No | Descripción del modelo (máximo 1000 caracteres) |
task | cadena | No | Tipo de tarea (detect, segment, pose, obb, classify) |
Las cargas de archivos de modelo .pt se gestionan por separado. Usa la interfaz 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 de modelo
GET /api/models/{modelId}/filesDevuelve URLs de descarga firmadas para los archivos del modelo.
Clonar modelo
POST /api/models/{modelId}/cloneClona un modelo público a uno de tus proyectos. Requiere una sesión activa en el navegador de la plataforma; no está disponible mediante clave API.
Cuerpo:
{
"targetProjectSlug": "my-project",
"modelName": "cloned-model",
"description": "Cloned from public model",
"owner": "team-username"
}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
targetProjectSlug | cadena | Sí | Slug del proyecto de destino |
modelName | cadena | No | Nombre para el modelo clonado |
description | cadena | No | Descripción del modelo |
owner | cadena | No | Nombre de usuario del equipo (para clonar áreas de trabajo) |
Rastrear descarga
POST /api/models/{modelId}/track-downloadRastrea las analíticas de descarga del modelo.
Ejecutar inferencia
POST /api/models/{modelId}/predictFormulario multiparte:
| 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 (predeterminado: 0.7) |
imgsz | int | Tamaño de imagen en píxeles (predeterminado: 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/predictRespuesta:
{
"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/tokenEsta ruta la utiliza la pestaña de predicción dentro de la aplicación para emitir tokens de inferencia de corta duración para llamadas directas del navegador al servicio de predicción (menor latencia, sin proxy API). Requiere una sesión activa en el navegador de la plataforma y no está disponible mediante clave API. Para una inferencia programática, llama a POST /api/models/{modelId}/predict con tu clave API.
Calentar modelo
POST /api/models/{modelId}/predict/warmupLa ruta de calentamiento la utiliza la pestaña de predicción para precargar los pesos de un modelo en el servicio de predicción antes de la primera inferencia del usuario. Requiere una sesión activa en el navegador de la plataforma y no está disponible mediante clave API.
API de entrenamiento
Inicia el entrenamiento de YOLO en GPUs en la nube (24 tipos de GPU desde RTX 2000 Ada hasta B300) y supervisa el progreso en tiempo real. Consulta la documentación 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]Iniciar entrenamiento
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/startLos tipos de GPU disponibles incluyen rtx-4090, a100-80gb-pcie, a100-80gb-sxm, h100-sxm, rtx-pro-6000, b300 y otros. Consulta Entrenamiento en la Nube para ver la lista completa con precios.
Obtener estado del entrenamiento
GET /api/models/{modelId}/trainingDevuelve el estado, las métricas y el progreso actuales del trabajo de entrenamiento de un modelo. Los proyectos públicos son accesibles de forma anónima; los proyectos privados requieren una sesión activa en el navegador de la plataforma (esta ruta no acepta autenticación mediante clave API).
Cancelar entrenamiento
DELETE /api/models/{modelId}/trainingFinaliza la instancia de computación en ejecución y marca el trabajo como cancelado. Requiere una sesión activa en el navegador de la plataforma; no está disponible mediante clave API.
API de despliegues
Despliega modelos en endpoints de inferencia dedicados con comprobaciones de estado y supervisión. Los nuevos despliegues utilizan escala a cero por defecto, y la API acepta un objeto resources opcional. Consulta la documentación de Endpoints.
Solo GET /api/deployments, POST /api/deployments, GET /api/deployments/{deploymentId} y DELETE /api/deployments/{deploymentId} admiten autenticación mediante clave API. Las subrutas predict, health, logs, metrics, start y stop requieren una sesión activa en el navegador de la plataforma; son proxies de conveniencia para la interfaz dentro de la aplicación. Para una inferencia programática, llama directamente a la URL del endpoint del despliegue (por ejemplo, https://predict-abc123.run.app/predict) con tu clave API. Los endpoints dedicados no están limitados por tasa.
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/deploymentsParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
modelId | cadena | Filtrar por modelo |
status | cadena | Filtrar por estado |
limit | int | Resultados máximos (predeterminado: 20, máximo: 100) |
owner | cadena | Nombre de usuario del propietario del área de trabajo |
Crear despliegue
POST /api/deploymentsCuerpo:
{
"modelId": "model_abc123",
"name": "my-deployment",
"region": "us-central1",
"resources": {
"cpu": 1,
"memoryGi": 2,
"minInstances": 0,
"maxInstances": 1
}
}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
modelId | cadena | Sí | ID del modelo a desplegar |
name | cadena | Sí | Nombre del despliegue |
region | cadena | Sí | Región de despliegue |
resources | objeto | No | Configuración de recursos (cpu, memoryGi, minInstances, maxInstances) |
Crea un endpoint de inferencia dedicado en la región especificada. El endpoint es accesible globalmente a través de una URL única.
El diálogo de despliegue envía actualmente valores predeterminados fijos de cpu=1, memoryGi=2, minInstances=0 y maxInstances=1. La ruta de la API acepta un objeto resources, pero los límites del plan establecen minInstances en 0 y maxInstances en 1.
Elige una región cercana a tus usuarios para obtener la latencia más baja. La interfaz 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}/startReanuda un despliegue detenido.
Detener despliegue
POST /api/deployments/{deploymentId}/stopPausa un despliegue en ejecución (detiene la facturación).
Comprobación de estado
GET /api/deployments/{deploymentId}/healthDevuelve el estado de salud del endpoint de despliegue.
Ejecutar inferencia en despliegue
POST /api/deployments/{deploymentId}/predictEnvía una imagen directamente a un endpoint de despliegue para la inferencia. Funcionalmente equivalente a la predicción de modelo, pero enrutado a través del endpoint dedicado para una menor latencia.
Formulario multiparte:
| 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 (predeterminado: 0.7) |
imgsz | int | Tamaño de imagen en píxeles (predeterminado: 640) |
Obtener métricas
GET /api/deployments/{deploymentId}/metricsDevuelve métricas de recuento de solicitudes, latencia y tasa de error con datos de minigráficos.
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
range | cadena | Rango de tiempo: 1h, 6h, 24h (predeterminado), 7d, 30d |
sparkline | cadena | Establece en true para datos optimizados de minigráficos para la vista del panel de control |
Obtener registros
GET /api/deployments/{deploymentId}/logsParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
severity | cadena | Filtro separado por comas: DEBUG, INFO, WARNING, ERROR, CRITICAL |
limit | int | Número de entradas (predeterminado: 50, máximo: 200) |
pageToken | cadena | Token de paginación de la respuesta anterior |
API de monitorización
GET /api/monitoring es una ruta exclusiva de la interfaz de usuario y requiere una sesión de navegador activa en la plataforma. No acepta autenticación mediante clave API. Consulta las métricas de despliegue individuales a través de las rutas por despliegue (que también requieren sesión de navegador) o utiliza las exportaciones de Cloud Monitoring en el servicio Cloud Run desplegado para el acceso mediante programación.
Métricas agregadas
GET /api/monitoringDevuelve métricas agregadas de todos los despliegues del usuario: total de solicitudes, despliegues activos, tasa de errores y latencia media.
API de exportación
Convierte modelos a formatos optimizados como ONNX, TensorRT, CoreML y TFLite para el despliegue en el borde (edge). Consulta la documentación de despliegue.
Listar exportaciones
GET /api/exportsParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
modelId | cadena | ID del modelo (obligatorio) |
status | cadena | Filtrar por estado |
limit | int | Resultados máximos (predeterminado: 20, máximo: 100) |
Crear exportación
POST /api/exportsCuerpo:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
modelId | cadena | Sí | ID del modelo de origen |
format | cadena | Sí | Formato de exportación (ver tabla más abajo) |
gpuType | cadena | Condicional | Obligatorio cuando el format es engine (TensorRT) |
args | objeto | No | Argumentos de exportación (imgsz, half, dynamic, etc.) |
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/exportsFormatos admitidos:
| Formato | Valor | Caso de uso |
|---|---|---|
| ONNX | onnx | Inferencia multiplataforma |
| TorchScript | torchscript | Despliegue de PyTorch |
| OpenVINO | openvino | Hardware de Intel |
| TensorRT | engine | Optimización para NVIDIA GPU |
| CoreML | coreml | Dispositivos Apple |
| TFLite | tflite | Dispositivos móviles y embebidos |
| 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 de Alibaba |
| RKNN | rknn | NPU Rockchip |
| IMX | imx | Sensor Sony IMX500 |
| Axelera | axelera | Aceleradores Axelera AI |
| ExecuTorch | executorch | Entorno de ejecución Meta ExecuTorch |
Obtener estado de exportación
GET /api/exports/{exportId}Cancelar exportación
DELETE /api/exports/{exportId}Seguimiento de descarga de exportación
POST /api/exports/{exportId}/track-downloadAPI de actividad
Consulta un feed de acciones recientes en tu cuenta: ejecuciones de entrenamiento, subidas y más. Consulta la documentación de actividad.
Las rutas de actividad funcionan mediante solicitudes autenticadas por el navegador desde la interfaz de usuario de la plataforma. No están expuestas como una API pública, no aceptan autenticación mediante clave API y las estructuras de ruta a continuación se documentan solo como referencia. Utiliza el feed de actividad en la interfaz de la plataforma para ver, marcar o archivar eventos.
Listar actividad
GET /api/activityPará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 Archivado, false para la Bandeja de entrada |
search | cadena | Búsqueda que no distingue entre mayúsculas y minúsculas en campos de eventos |
Marcar eventos como vistos
POST /api/activity/mark-seenCuerpo:
{
"all": true
}O pasa IDs específicos:
{
"eventIds": ["EVENT_ID_1", "EVENT_ID_2"]
}Archivar eventos
POST /api/activity/archiveCuerpo:
{
"all": true,
"archive": true
}O pasa IDs específicos:
{
"eventIds": ["EVENT_ID_1", "EVENT_ID_2"],
"archive": false
}API de papelera
Ver y restaurar elementos eliminados. Los elementos se eliminan permanentemente después de 30 días. Consulta la documentación de la papelera.
Listar papelera
GET /api/trashParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
type | cadena | 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 | cadena | Nombre de usuario del propietario del área de trabajo |
Restaurar elemento
POST /api/trashCuerpo:
{
"id": "item_abc123",
"type": "dataset"
}Eliminar elemento permanentemente
DELETE /api/trashCuerpo:
{
"id": "item_abc123",
"type": "dataset"
}La eliminación permanente no se puede deshacer. El recurso y todos los datos asociados se eliminarán.
Vaciar papelera
DELETE /api/trash/emptyElimina permanentemente todos los elementos de la papelera.
DELETE /api/trash/empty requiere una sesión de navegador autenticada y no está disponible mediante clave API. Utiliza el botón Vaciar papelera en la interfaz de usuario.
API de facturación
Consulta tu saldo de créditos, compra créditos, ve el historial de transacciones y configura la recarga automática. Consulta la documentación de facturación.
Billing amounts use cents (creditsCents) where 100 = $1.00.
Obtener saldo
GET /api/billing/balanceParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
owner | cadena | Nombre de usuario del propietario del área de trabajo |
Respuesta:
{
"creditsCents": 2500,
"plan": "free",
"cashBalance": 25,
"creditBalance": 0,
"reservedAmount": 0,
"totalBalance": 25
}Obtener resumen de uso
GET /api/billing/usage-summaryDevuelve detalles del plan, límites y métricas de uso.
Obtener transacciones
GET /api/billing/transactionsDevuelve el historial de transacciones (las más recientes primero).
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
owner | cadena | Nombre de usuario del propietario del área de trabajo |
Crear sesión de pago
POST /api/billing/checkout-sessionCuerpo:
{
"amount": 25,
"owner": "team-username"
}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
amount | número | Sí | Importe en dólares (5 $-1000 $) |
owner | cadena | No | Nombre de usuario del equipo para recargas de 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-checkoutCrea una sesión de pago para la actualización a la suscripción Pro.
Cuerpo:
{
"planId": "pro",
"billingCycle": "monthly",
"owner": "team-username"
}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
planId | cadena | Sí | Plan al que suscribirse (pro) |
billingCycle | cadena | No | Ciclo de facturación: monthly (predeterminado) o yearly |
owner | cadena | No | Nombre de usuario del equipo para actualizaciones de espacio de trabajo (requiere rol de administrador) |
Cancela o reanuda la suscripción
DELETE /api/billing/subscription-checkoutCancela una suscripción Pro al final del periodo por defecto. Envía {"resume": true} para reanudar una cancelación ya programada antes de que finalice el periodo de facturación.
Cuerpo:
{
"resume": true
}Recarga automática
Añade créditos automáticamente cuando el saldo cae por debajo de un umbral.
Obtener configuración de recarga automática
GET /api/billing/auto-topupParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
owner | cadena | Nombre de usuario del propietario del área de trabajo |
Actualizar configuración de recarga automática
PATCH /api/billing/auto-topupCuerpo:
{
"enabled": true,
"thresholdCents": 500,
"amountCents": 2500
}Métodos de pago
Listar métodos de pago
GET /api/billing/payment-methodsCrear intento de configuración
POST /api/billing/payment-methods/setupDevuelve un secreto de cliente para añadir un nuevo método de pago.
Establecer método de pago predeterminado
POST /api/billing/payment-methods/defaultCuerpo:
{
"paymentMethodId": "pm_123"
}Actualizar información de facturación
PATCH /api/billing/payment-methodsCuerpo:
{
"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
Consulta el desglose del uso de tu almacenamiento por categoría (datasets, modelos, exportaciones) y observa tus elementos de mayor tamaño.
Las rutas de almacenamiento requieren una sesión activa del navegador en la plataforma y no son accesibles mediante una clave de API. Utiliza la página Settings > Profile en la interfaz de usuario para obtener desgloses interactivos.
Obtener información de almacenamiento
GET /api/storageRespuesta:
{
"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 de subida
Sube archivos directamente al almacenamiento en la nube mediante URLs firmadas para transferencias rápidas y fiables. Utiliza un flujo de dos pasos: obtén una URL firmada y luego sube el archivo. Consulta la Data documentation.
Obtener URL de subida firmada
POST /api/upload/signed-urlSolicita 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 | cadena | Tipo de activo: models, datasets, images, videos |
assetId | cadena | ID del activo de destino |
filename | cadena | Nombre de archivo original |
contentType | cadena | 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"
}Completar subida
POST /api/upload/completeNotifica a la plataforma que la subida de un archivo se ha completado para que pueda comenzar a procesarlo.
Cuerpo:
{
"datasetId": "abc123",
"objectPath": "datasets/abc123/images/my-image.jpg",
"filename": "my-image.jpg",
"contentType": "image/jpeg",
"size": 5242880
}API de claves API
Gestiona tus claves API para acceso programático. Consulta la API Keys documentation.
Listar claves API
GET /api/api-keysCrear clave API
POST /api/api-keysCuerpo:
{
"name": "training-server"
}Eliminar clave API
DELETE /api/api-keysParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
keyId | cadena | ID de la clave API a revocar |
Ejemplo:
curl -X DELETE \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/api-keys?keyId=KEY_ID"API de equipos y miembros
Crea espacios de trabajo de equipo, invita a miembros y gestiona roles para colaborar. Consulta la Teams documentation.
Listar equipos
GET /api/teamsCrear equipo
POST /api/teams/createCuerpo:
{
"username": "my-team",
"fullName": "My Team"
}Listar miembros
GET /api/membersDevuelve los miembros del espacio de trabajo actual.
Invitar miembro
POST /api/membersCuerpo:
{
"email": "user@example.com",
"role": "editor"
}| Rol | Permisos |
|---|---|
viewer | Acceso de solo lectura a los recursos del espacio de trabajo |
editor | Crear, editar y eliminar recursos |
admin | Gestionar miembros, facturación y todos los recursos (solo asignable por el propietario del equipo) |
El owner del equipo es el creador y no puede ser invitado. La propiedad se transfiere por separado mediante POST /api/members/transfer-ownership. Consulta Teams para obtener detalles completos sobre los roles.
Actualizar rol de miembro
PATCH /api/members/{userId}Eliminar miembro
DELETE /api/members/{userId}Transferir propiedad
POST /api/members/transfer-ownershipInvitaciones
Aceptar invitación
POST /api/invites/acceptObtener información de invitación
GET /api/invites/infoParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
token | cadena | Token de invitación |
Revocar invitación
DELETE /api/invites/{inviteId}Reenviar invitación
POST /api/invites/{inviteId}/resendAPI de Explore
Busca y explora datasets públicos y proyectos compartidos por la comunidad. Consulta la Explore documentation.
Buscar contenido público
GET /api/explore/searchParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
q | cadena | Consulta de búsqueda |
type | cadena | Tipo de recurso: all (por defecto), projects, datasets |
sort | cadena | Orden de clasificación: stars (por defecto), newest, oldest, name-asc, name-desc, count-desc, count-asc |
offset | int | Desplazamiento de paginación (por defecto: 0). Los resultados devuelven 20 elementos por página. |
Datos de la barra lateral
GET /api/explore/sidebarDevuelve contenido curado para la barra lateral de Explore.
APIs de usuario y ajustes
Gestiona tu perfil, claves API, uso de almacenamiento y ajustes de privacidad de datos. Consulta la Settings documentation.
Obtener usuario por nombre de usuario
GET /api/usersParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
username | cadena | Nombre de usuario a buscar |
Seguir o dejar de seguir a un usuario
PATCH /api/usersCuerpo:
{
"username": "target-user",
"followed": true
}Comprobar disponibilidad de nombre de usuario
GET /api/username/checkParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
username | cadena | Nombre de usuario a comprobar |
suggest | bool | Opcional: true para incluir una sugerencia si ya está ocupado |
Ajustes
GET /api/settings
POST /api/settingsObtener o actualizar los ajustes del perfil de usuario (nombre visible, biografía, enlaces sociales, etc.).
Icono de perfil
POST /api/settings/icon
DELETE /api/settings/iconSube o elimina el avatar del perfil.
Onboarding
POST /api/onboardingCompleta el flujo de onboarding (configurar región de datos, nombre de usuario).
API de GDPR
Solicita una exportación de todos tus datos o elimina permanentemente tu cuenta. Consulta la Settings documentation.
Obtener estado del trabajo de GDPR
GET /api/gdprParámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
jobId | cadena | ID del trabajo de GDPR a comprobar |
Devuelve el estado del trabajo. Para trabajos de exportación completados, la respuesta incluye una downloadUrl.
Iniciar flujo de exportación o eliminación
POST /api/gdprCuerpo:
{
"action": "export"
}{
"action": "delete",
"confirmationWord": "DELETE"
}Opcional para espacios de trabajo de equipo:
{
"action": "delete",
"confirmationWord": "DELETE",
"teamUsername": "my-team"
}La eliminación de la cuenta es permanente y no se puede deshacer. Se borrarán todos los datos, modelos y despliegues.
Códigos de error
| Código | Estado HTTP | Descripción |
|---|---|---|
UNAUTHORIZED | 401 | Clave API no válida o ausente |
FORBIDDEN | 403 | Permisos insuficientes |
NOT_FOUND | 404 | Recurso no encontrado |
VALIDATION_ERROR | 400 | Datos de solicitud no válidos |
RATE_LIMITED | 429 | Demasiadas solicitudes |
INTERNAL_ERROR | 500 | Error del servidor |
Integración con Python
Para una integración más sencilla, utiliza el paquete Python de Ultralytics, que gestiona automáticamente la autenticación, las subidas y el streaming de métricas en tiempo real.
Instalación y configuración
pip install ultralyticsVerifica la instalación:
yolo checkLa integración de la plataforma requiere ultralytics>=8.4.35. Las versiones inferiores NO funcionarán con la plataforma.
Autenticación
yolo settings api_key=YOUR_API_KEYUso de Datasets de la plataforma
Referencia conjuntos de datos con URIs 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,
)Formato de URI:
| Patrón | Descripción |
|---|---|
ul://username/datasets/slug | Dataset |
ul://username/project-name | Proyecto |
ul://username/project/model-name | Modelo específico |
ul://ultralytics/yolo26/yolo26n | Modelo oficial |
Envío a la plataforma
Envía resultados a un proyecto de la plataforma:
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",
)Qué se sincroniza:
- Métricas de entrenamiento (tiempo real)
- Pesos finales del modelo
- Gráficos de validación
- Salida de la consola
- Métricas del sistema
Ejemplos de API
Carga un modelo desde la plataforma:
# Your own model
model = YOLO("ul://username/project/model-name")
# Official model
model = YOLO("ul://ultralytics/yolo26/yolo26n")Ejecuta 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 probabilitiesExporta 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/datasets/my-dataset")
print(f"mAP50: {metrics.box.map50}")
print(f"mAP50-95: {metrics.box.map}")Webhooks
La plataforma utiliza webhooks internos para transmitir métricas de entrenamiento en tiempo real desde el SDK de Python de ultralytics (ejecutándose en GPUs en la nube o en máquinas remotas/locales) de vuelta a la plataforma: pérdida por época, mAP, estadísticas del sistema y estado de finalización. Estos webhooks están autenticados mediante el webhookSecret HMAC proporcionado por trabajo de entrenamiento y no están destinados a ser consumidos por aplicaciones de usuario.
Todos los planes: El progreso del entrenamiento a través del SDK de ultralytics (métricas en tiempo real, notificaciones de finalización) funciona automáticamente en todos los planes; simplemente establece project=username/my-project name=my-run al entrenar y el SDK transmitirá los eventos de vuelta a la plataforma. No se requiere registro de webhooks por parte del usuario.
Las suscripciones a webhooks orientadas al usuario (devoluciones de llamada POST a una URL que tú controles) están en la hoja de ruta de Enterprise y no están disponibles actualmente. Mientras tanto, consulta GET /api/models/{modelId}/training para conocer el estado o usa el feed de actividad en la interfaz de usuario.
Preguntas frecuentes
¿Cómo pagino grandes resultados?
La mayoría de los puntos finales utilizan un parámetro limit para controlar cuántos resultados se devuelven por solicitud:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/datasets?limit=50"Los puntos finales de Actividad y Papelera también admiten un parámetro page para la paginación basada en páginas:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/activity?page=2&limit=20"El punto final de búsqueda Explore 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 utilizar la API sin un SDK?
Sí, toda la funcionalidad está disponible a través de REST. El SDK de Python es una envoltura de conveniencia que añade características como el streaming de métricas en tiempo real y las subidas automáticas de modelos. También puedes explorar todos los puntos finales de forma interactiva en platform.ultralytics.com/api/docs.
¿Existen bibliotecas de cliente para la API?
Actualmente, utiliza el paquete Python de Ultralytics o realiza solicitudes HTTP directas. Se planean bibliotecas de cliente oficiales para otros lenguajes.
¿Cómo gestiono los límites de tasa?
Utiliza la cabecera Retry-After de la respuesta 429 para esperar la cantidad de tiempo adecuada:
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 IDs de recursos se devuelven cuando creas recursos a través de la API. También puedes encontrarlos en la URL de la plataforma:
https://platform.ultralytics.com/username/project/model-name
^^^^^^^^ ^^^^^^^ ^^^^^^^^^^
username project modelUtiliza los puntos finales de lista para buscar por nombre o filtrar por proyecto.