YOLO Vision 2026 :

Référence de l'API REST#

Ultralytics Platform fournit une API REST complète pour l'accès programmatique aux jeux de données, aux modèles, à l'entraînement et aux déploiements.

Documentation interactive de l'API Ultralytics Platform

Démarrage rapide
# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://platform.ultralytics.com/api/datasets
Documentation interactive de l'API

Consulte la référence complète et interactive de l'API dans la documentation de l'API Ultralytics Platform.

Aperçu de l'API#

L'API est organisée autour des ressources principales de la plateforme :

graph LR
    A[API Key]:::start --> B[Datasets]:::proc
    A --> C[Projects]:::proc
    A --> D[Models]:::proc
    A --> E[Deployments]:::proc
    B -->|train on| D
    C -->|contains| D
    D -->|deploy to| E
    D -->|export| F[Exports]:::proc
    B -->|auto-annotate| B

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
RessourceDescriptionOpérations clés
Jeux de donnéesCollections d'images étiquetéesCRUD, images, étiquettes, exportation, versions, clonage
ProjetsEspaces de travail d'entraînementCRUD, clonage, icône
ModèlesPoints de contrôle entraînésCRUD, prédiction, téléchargement, clonage, exportation
DéploiementsPoints de terminaison d'inférence dédiésCRUD, démarrage/arrêt, métriques, journaux, état de santé
ExportationsTâches de conversion de formatCréation, état, téléchargement
EntraînementTâches d'entraînement sur GPU cloudDémarrage, état, annulation
FacturationCrédits et utilisationSolde, utilisation, transactions
ÉquipesCollaboration dans l'espace de travailEspaces de travail, membres, rôles

Authentification#

Les API de ressources utilisent l'authentification par clé API, incluant la gestion des classes et des divisions de jeux de données, le clonage, l'entraînement, les exportations, les déploiements et la lecture des comptes pris en charge. Les points de terminaison publics prennent en charge l'accès anonyme là où cela est indiqué. Les routes d'application accessibles uniquement par navigateur sont exclues.

Obtenir une clé API#

  1. Va sur Settings > API Keys
  2. Clique sur Create Key
  3. Copie la clé générée

Consulte les clés API pour des instructions détaillées.

En-tête d'autorisation#

Inclus ta clé API dans toutes les requêtes :

Authorization: Bearer YOUR_API_KEY
Format de clé API

Les clés API utilisent le format ul_ suivi de 40 caractères hexadécimaux. Garde ta clé secrète -- ne la valide jamais dans le contrôle de version et ne la partage pas publiquement.

Exemple#

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

URL de base#

Tous les points de terminaison de l'API utilisent :

https://platform.ultralytics.com/api

Limites de taux#

L'API applique des limites par clé API basées sur une fenêtre glissante et soutenues par Upstash Redis. Chaque route utilise la catégorie correspondante ci-dessous.

En cas de limitation du débit, l'API renvoie 429 avec des métadonnées de nouvelle tentative :

Retry-After: 12
X-RateLimit-Reset: 2026-02-21T12:34:56.000Z

Limites par clé API#

Les limites de taux sont appliquées automatiquement en fonction du point de terminaison appelé. Les opérations coûteuses ont des limites plus strictes pour éviter les abus, tandis que les opérations CRUD standard partagent une valeur par défaut généreuse :

CatégorieLimiteS'applique à
Par défaut100 requêtes/minRoutes non assignées à une catégorie ci-dessous
Training10 requêtes/minDémarrage de l'entraînement dans le cloud
Upload10 requêtes/minURL de téléchargement signées, finalisation des téléchargements et ingestion de jeux de données
Predict20 requêtes/minInférence de modèles et de déploiements via les routes de l'API de la plateforme
Exporter20 requêtes/minRoutes d'exportation de modèles et routes d'exportation/version de jeux de données
Download30 requêtes/minTéléchargements de fichiers de modèles
Mutation10 requêtes/minCréation d'équipe, modifications de l'intégration du stockage, clés API, membres, invitations et démarrage/arrêt du déploiement
Facturation5 requêtes/minRoutes de rechargement automatique et de paiement d'abonnement
Hydrater20 requêtes/minHydratation d'un ensemble sélectionné d'images de jeux de données
Clustering10 requêtes/minClustering d'images de jeux de données

Chaque catégorie dispose d'un compteur indépendant par clé API. Par exemple, effectuer 20 requêtes de prédiction n'affecte pas ton allocation par défaut de 100 requêtes/min.

Points de terminaison dédiés (illimité)#

Les points de terminaison dédiés ne sont pas soumis aux limites de débit de la clé API de la plateforme lorsque tu appelles directement l'URL du point de terminaison (par exemple, https://predict-abc123.run.app/predict). Le débit dépend alors de la configuration du service déployé.

Gestion des limites de taux

Lorsque tu reçois un code d'état 429, attends Retry-After (ou jusqu'à X-RateLimit-Reset) avant de réessayer. Consulte la FAQ sur la limite de débit pour une implémentation de repli exponentiel.

Format de réponse#

Réponses de succès#

Les réponses renvoient du JSON avec des champs spécifiques aux ressources :

{
    "datasets": [...],
    "total": 100
}

Réponses d'erreur#

{
    "error": "Dataset not found"
}
État HTTPSignification
200Succès
201Créé
400Requête invalide
401Authentification requise
403Autorisations insuffisantes
404Ressource non trouvée
409Conflit (doublon)
429Limite de taux d'utilisation d''API d'pass'e
500Erreur serveur

API Datasets#

Crée, parcours et gère des jeux de données d'images annotées pour entraîner des modèles YOLO. Consulte la documentation sur les jeux de données.

Lister les Datasets#

GET /api/datasets

Param'tres de requ'te :

ParamètreTypeDescription
usernamecha'ne de caract'resFiltrer par nom d'utilisateur
limitentierArticles par page (d'faut : 1000, max : 1000)
ownercha'ne de caract'resNom d'utilisateur du propri'taire de l'espace de travail
includeImageUrlsbooléenInclure des URL d'images d'exemple signées en taille réelle (par défaut : false)
includeSamplesbooléenDéfinit false pour omettre les images d'exemple et réduire la taille de la réponse.
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/datasets?limit=10"

R'ponse :

{
    "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"
}

Obtenir un Dataset#

GET /api/datasets/{datasetId}

Renvoie les détails du dataset, y compris les noms de classes, les nombres de splits et d'autres propriétés gérées par la plateforme. Les métadonnées personnalisées sont chargées séparément à partir de l'endpoint de métadonnées ci-dessous.

Passe username lorsque {datasetId} est un identifiant (slug) de jeu de données plutôt qu'un ID.

Cr'er un Dataset#

POST /api/datasets

Corps :

{
    "slug": "my-dataset",
    "name": "My Dataset",
    "task": "detect",
    "description": "A custom detection dataset",
    "metadata": { "location": "factory-1", "reviewed": true },
    "visibility": "private",
    "classNames": ["person", "car"]
}
Tâches prises en charge

Valeurs task valides : detect, segment, semantic, classify, pose et obb.

R'ponse :

{
    "datasetId": "dataset_abc123",
    "slug": "my-dataset",
    "region": "us"
}

Mettre ' jour le Dataset#

PATCH /api/datasets/{datasetId}

Corps (mise ' jour partielle) :

{
    "name": "Updated Name",
    "description": "New description",
    "metadata": { "location": "factory-2", "reviewed": true },
    "visibility": "public"
}

Envoie un objet metadata vide ({}) pour effacer les métadonnées personnalisées. L'objet de métadonnées sérialisé est limité à 500 000 caractères et chaque clé de niveau supérieur est limitée à 128 caractères.

Obtenir les métadonnées du dataset#

GET /api/datasets/{datasetId}/metadata

Renvoie l'objet de métadonnées personnalisées ainsi qu'un ensemble sélectionné de paires champ/valeur gérées par Ultralytics en lecture seule. Les métadonnées personnalisées sont intentionnellement omises des charges utiles normales du dataset. L'authentification et l'accès à l'espace de travail du dataset sont requis.

Icône du jeu de données#

POST /api/datasets/{datasetId}/icon
DELETE /api/datasets/{datasetId}/icon

Télécharge une icône WebP allant jusqu'à 5 Mo en tant que champ de formulaire multipart image, ou supprime l'icône actuelle.

Supprimer le Dataset#

DELETE /api/datasets/{datasetId}

Supprime logiquement le jeu de données (déplacé vers la corbeille, récupérable pendant 30 jours).

Cloner un dataset#

POST /api/datasets/{datasetId}/clone

Crée une copie d'un jeu de données public, appartenant à l'utilisateur ou modifiable, avec toutes les images et étiquettes.

Corps optionnel (tous les champs sont facultatifs) :

{
    "name": "cloned-dataset",
    "slug": "cloned-dataset",
    "description": "My cloned dataset",
    "visibility": "private",
    "license": "AGPL-3.0",
    "owner": "team-username"
}

Exporter le Dataset#

GET /api/datasets/{datasetId}/export

Renvoie une r'ponse JSON avec une URL de t'l'chargement sign'e pour la derni're exportation du dataset.

Param'tres de requ'te :

ParamètreTypeDescription
ventierNuméro de version (indexé à partir de 1). S'il est omis, renvoie la dernière exportation modifiable, en la réutilisant lorsque le jeu de données n'a pas changé.

R'ponse :

{
    "downloadUrl": "https://storage.example.com/export.ndjson?signed=...",
    "cached": true
}

Cr'er une version de Dataset#

POST /api/datasets/{datasetId}/export

Crée un nouvel instantané de version numérotée du jeu de données. Cela nécessite un accès Éditeur ou supérieur. La version capture le nombre actuel d'images, le nombre de classes, le nombre d'annotations et la distribution des répartitions, puis génère et stocke une exportation NDJSON immuable.

Corps de la requ'te :

{
    "description": "Added 500 training images"
}

Tous les champs sont facultatifs. Le champ description est une étiquette fournie par l'utilisateur pour la version.

R'ponse :

{
    "version": 3,
    "downloadUrl": "https://storage.example.com/v3.ndjson?signed=..."
}

Mettre ' jour la description de la version#

PATCH /api/datasets/{datasetId}/export

Met à jour la description d'une version existante. Cela nécessite un accès Éditeur ou supérieur.

Corps de la requ'te :

{
    "version": 2,
    "description": "Fixed mislabeled classes"
}

R'ponse :

{
    "ok": true
}

Restaurer la version du jeu de données#

POST /api/datasets/{datasetId}/restore

Reconstruit les images, annotations et classes du jeu de données à partir d'une version sauvegardée sans copier les octets d'image.

{
    "version": 2
}

Obtenir les statistiques de classe#

GET /api/datasets/{datasetId}/class-stats

Renvoie la distribution des classes, la carte thermique de localisation et les statistiques de dimension. Les r'sultats sont mis en cache jusqu' ' 5 minutes.

R'ponse :

{
    "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
}

Gérer les classes#

Fusionner les classes (réattribuer les annotations des classes sources à une cible, puis supprimer les sources) :

POST /api/datasets/{datasetId}/classes/merge
{
    "sourceClassIds": [2, 4],
    "targetClassId": 1
}

Les ID de classe sont positionnels, donc la fusion n'est pas idempotente. Récupère à nouveau le jeu de données avant de réessayer.

Supprimer des classes :

POST /api/datasets/{datasetId}/classes/delete
{
    "classIds": [2, 4]
}

Redistribuer les splits#

POST /api/datasets/{datasetId}/splits/redistribute

Réaffecte aléatoirement les images entre les divisions d'entraînement, de validation et de test. Les pourcentages doivent totaliser 100.

{
    "train": 80,
    "val": 20,
    "test": 0
}

Plongements de jeu de données#

GET /api/datasets/{datasetId}/embeddings
POST /api/datasets/{datasetId}/embeddings
DELETE /api/datasets/{datasetId}/embeddings

GET renvoie le résumé actuel de l'analyse UMAP et le statut du travail actif ; POST met en file d'attente un travail d'analyse de plongements ; DELETE annule le travail actif.

Clustering d'images#

GET /api/datasets/{datasetId}/images/clustering

Renvoie la disposition 2D UMAP et les métadonnées par image pour la vue en nuage de points de clustering (paginé et limité en débit).

Obtenir les mod'les entra'n's sur le dataset#

GET /api/datasets/{datasetId}/models

Renvoie les mod'les qui ont 't' entra'n's en utilisant ce dataset.

R'ponse :

{
    "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
}

Auto-annotation du Dataset#

POST /api/datasets/{datasetId}/predict

Ex'cute l'inf'rence YOLO sur les images du dataset pour g'n'rer automatiquement des annotations. Utilise un mod'le s'lectionn' pour pr'dire les 'tiquettes pour les images non annot'es.

Corps :

ChampTypeRequisDescription
imageHashcha'ne de caract'resOuiHash de l'image ' annoter
modelIdcha'ne de caract'resNonModèle à utiliser pour l'inférence, sous la forme d'un URI ul:// (par exemple, ul://username/project/model). S'il est omis, le modèle par défaut spécifique à la tâche du jeu de données est utilisé.
confidenceflottantNonSeuil de confiance (d'faut : 0.25)
iouflottantNonSeuil d'IoU (d'faut : 0.7)

Ingestion de Dataset#

POST /api/datasets/ingest

Crée un travail d'ingestion de jeu de données pour un jeu de données existant. Le jeu de données cible est toujours transmis sous la forme datasetId dans le corps JSON, et non dans le chemin de l'URL.

Le corps de la requête nécessite datasetId ainsi qu'exactement l'un des éléments suivants : sessionId (une session de téléchargement d'une archive téléversée) ou sourceUrl (une URL ZIP, TAR, TAR.GZ, TGZ ou NDJSON distante). Ajoute targetSplit (train, val ou test) en option pour remplacer la structure de division de l'archive. Pour joindre des métadonnées personnalisées, utilise imageMetadata, indexé par le chemin exact relatif à l'archive de chaque image ou par la valeur NDJSON file.

Pour les archives téléversées, la session de téléchargement est déjà liée au jeu de données par le paramètre assetId passé à POST /api/upload/signed-url ; l'ingestion valide que assetId correspond au corps datasetId. Des entrées classMapping optionnelles associent chaque nom de classe entrant à un index de classe existant commençant à zéro, à un nom de classe à réutiliser ou à créer, ou à null pour ignorer la classe. Pour les importations distantes sourceUrl, crée d'abord le jeu de données, puis passe son datasetId à l'ingestion.

Corps (archive téléchargée) :

{
    "datasetId": "dataset_abc123",
    "sessionId": "session_abc123",
    "targetSplit": "train"
}

Corps (une ou plusieurs images avec métadonnées) :

{
    "datasetId": "dataset_abc123",
    "sessionId": "session_abc123",
    "imageMetadata": {
        "airbus-wing.jpg": { "aircraft": { "family": "A350" }, "inspectionStatus": "reviewed" },
        "images/tail.jpg": { "aircraft": { "family": "A320" }, "inspectionSeverity": 2 }
    }
}

Les images locales utilisent le flux de téléchargement d'archive existant, que l'archive contienne une ou plusieurs images. La clé doit correspondre au chemin normalisé à l'intérieur de l'archive, y compris les dossiers. Pour les importations NDJSON, chaque enregistrement d'image peut à la place contenir son propre objet metadata. L'élément local à l'enregistrement metadata a la priorité sur une entrée correspondante imageMetadata.

Les métadonnées sont au format JSON et prennent en charge les valeurs imbriquées. Les chemins d'archive sont limités à 1 024 caractères, les clés de métadonnées de niveau supérieur à 128 caractères et chaque objet de métadonnées à 500 000 caractères sérialisés. La table complète imageMetadata, ou les métadonnées effectives combinées d'une importation NDJSON, est également limitée à 500 000 caractères sérialisés. Ces contraintes sont incluses dans le schéma OpenAPI interactif.

Télécharger une image avec des métadonnées à l'aide de Python

Le même code gère un groupe d'images : ajoute d'autres fichiers au fichier ZIP et des entrées correspondantes à imageMetadata.

import io
import zipfile
from pathlib import Path

import requests

api = "https://platform.ultralytics.com/api"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
dataset_id = "dataset_abc123"
image_path = Path("airbus-wing.jpg")

archive = io.BytesIO()
with zipfile.ZipFile(archive, "w", zipfile.ZIP_DEFLATED) as zf:
    zf.write(image_path, image_path.name)
data = archive.getvalue()

signed = requests.post(
    f"{api}/upload/signed-url",
    headers=headers,
    json={
        "assetType": "datasets",
        "assetId": dataset_id,
        "filename": "images.zip",
        "contentType": "application/zip",
        "totalBytes": len(data),
    },
)
signed.raise_for_status()
upload = signed.json()

requests.put(upload["uploadUrl"], headers={"Content-Type": "application/zip"}, data=data).raise_for_status()
requests.post(
    f"{api}/upload/complete",
    headers=headers,
    json={"sessionId": upload["sessionId"]},
).raise_for_status()

ingest = requests.post(
    f"{api}/datasets/ingest",
    headers=headers,
    json={
        "datasetId": dataset_id,
        "sessionId": upload["sessionId"],
        "imageMetadata": {
            "airbus-wing.jpg": {
                "aircraft": {"family": "A350", "section": "wing"},
                "inspectionStatus": "reviewed",
            }
        },
    },
)
ingest.raise_for_status()
print(ingest.json())

Corps (archive distante ou NDJSON) :

{
    "datasetId": "dataset_abc123",
    "sourceUrl": "https://example.com/my-dataset.zip"
}

Corps (ingestion ultérieure, importation d'étiquettes) :

{
    "datasetId": "dataset_abc123",
    "sessionId": "session_abc123",
    "classMapping": { "person": 0, "automobile": "car", "background": null }
}
Mappage de classes

La première ingestion crée automatiquement des classes à partir de l'archive. Lors des ingestions ultérieures, les classes d'archive omises de classMapping font d'abord l'objet d'une correspondance insensible à la casse avec les classes de jeux de données existantes. Les étiquettes sont ignorées uniquement pour les classes explicitement associées à null ou sans classe existante correspondante.

R'ponse :

{
    "jobId": "job_abc123",
    "datasetId": "dataset_abc123",
    "status": "queued"
}
graph LR
    A[POST /api/datasets]:::start --> B[POST /api/upload/signed-url]:::proc
    B --> C[Upload archive to signed URL]:::proc
    C --> D[POST /api/upload/complete]:::proc
    D --> E[POST /api/datasets/ingest]:::proc
    E --> F[Process archive]:::proc
    F --> G[Dataset ready]:::out

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef out fill:#9C27B0,color:#fff

Images du Dataset#

Lister les images#

GET /api/datasets/{datasetId}/images

Param'tres de requ'te :

ParamètreTypeDescription
splitcha'ne de caract'resFiltrer par division : train, val, test
offsetentierD'calage de pagination (d'faut : 0)
limitentierArticles par page (d'faut : 50, max : 5000)
sortcha'ne de caract'resOrdre de tri : newest, oldest, name-asc, name-desc, height-asc, height-desc, width-asc, width-desc, size-asc, size-desc, labels-asc, labels-desc (certains désactivés pour les jeux de données de plus de 100 000 images)
hasLabelcha'ne de caract'resFiltrer par statut d'étiquetage (true ou false)
hasErrorcha'ne de caract'resFiltrer par statut d'erreur (true ou false)
searchcha'ne de caract'resCorrespondance de sous-chaîne sur le nom de fichier et les clés de métadonnées personnalisées, les valeurs scalaires et les entrées de tableau (les valeurs imbriquées dans des sous-objets ne sont pas mises en correspondance) ; une chaîne hexadécimale de 32 caractères correspond à une recherche exacte de hachage d'image
classIdscha'ne de caract'resIDs de classe séparés par des virgules ; renvoie les images contenant l'une des classes spécifiées
includeThumbnailscha'ne de caract'resInclure des URL de miniatures signées (par défaut : true)
includeImageUrlscha'ne de caract'resInclure des URL d'images complètes signées (par défaut : false)

Obtenir les images sélectionnées#

POST /api/datasets/{datasetId}/images

Renvoie la même forme d'image pour un maximum de 1 000 ID d'images fournis. Elle accepte les mêmes contrôles de requête d'URL et d'étiquettes que l'opération de liste.

{
    "imageIds": ["IMAGE_OBJECT_ID"]
}

Obtenir les URLs d'images sign'es#

POST /api/datasets/{datasetId}/images/urls

Obtenir des URLs sign'es pour un lot de hashes d'images (pour l'affichage dans le navigateur).

Supprimer l'image#

DELETE /api/datasets/{datasetId}/images/{hash}

Obtenir les 'tiquettes d'image#

GET /api/datasets/{datasetId}/images/{hash}/labels

Renvoie les annotations et les noms de classes pour une image sp'cifique.

Mettre ' jour les 'tiquettes d'image#

PUT /api/datasets/{datasetId}/images/{hash}/labels

Corps :

{
    "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] }
    ]
}
Format des coordonn'es

Les coordonnées des étiquettes utilisent des valeurs normalisées YOLO comprises entre 0 et 1. Les boîtes englobantes (bounding boxes) utilisent [x_center, y_center, width, height]. Les étiquettes de segmentation utilisent segments, une liste aplatie de sommets de polygone [x1, y1, x2, y2, ...].

Op'rations en masse sur les images#

D'placer des images entre les divisions (train/val/test) au sein d'un dataset :

PATCH /api/datasets/{datasetId}/images/bulk

Suppression en masse d'images :

DELETE /api/datasets/{datasetId}/images/bulk

API Projets#

Organise tes modèles en projets. Chaque modèle appartient à un seul projet. Consulte la documentation sur les projets.

Lister les projets#

GET /api/projects

Param'tres de requ'te :

ParamètreTypeDescription
usernamecha'ne de caract'resFiltrer par nom d'utilisateur
limitentierArticles par page
ownercha'ne de caract'resNom d'utilisateur du propri'taire de l'espace de travail

Obtenir un projet#

GET /api/projects/{projectId}

Cr'er un projet#

POST /api/projects
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-project",
    "slug": "my-project",
    "description": "Detection experiments",
    "metadata": {"department": "manufacturing", "cost_center": "cv-01"}
  }' \
  https://platform.ultralytics.com/api/projects

Mettre ' jour un projet#

PATCH /api/projects/{projectId}

Corps (mise ' jour partielle) :

{
    "metadata": { "department": "research", "program": "inspection" }
}

Envoie un objet metadata vide ({}) pour l'effacer. Les métadonnées du projet utilisent les mêmes limites de clé de niveau supérieur de 128 caractères et d'objet sérialisé de 500 000 caractères que les métadonnées du dataset.

Obtenir les métadonnées du projet#

GET /api/projects/{projectId}/metadata

Renvoie l'objet de métadonnées personnalisées et les paires champ/valeur gérées par Ultralytics en lecture seule. L'authentification et l'accès à l'espace de travail du projet sont requis.

Supprimer un projet#

DELETE /api/projects/{projectId}

Supprime logiquement le projet (déplacé vers la corbeille).

Cloner un projet#

POST /api/projects/{projectId}/clone

Clone un projet d'espace de travail public, possédé ou modifiable ainsi que ses modèles dans ton compte ou ton espace de travail. Un corps JSON optionnel accepte les remplacements de name, slug, description, visibility, license et de la destination owner.

Ic'ne du projet#

POST /api/projects/{projectId}/icon
DELETE /api/projects/{projectId}/icon

Télécharge une icône WebP allant jusqu'à 5 Mo en tant que champ de formulaire multipart image, ou supprime l'icône actuelle.


API Modèles#

Gère les modèles YOLO entraînés — affiche les métriques, télécharge les poids, exécute des inférences et exporte vers d'autres formats. Consulte la documentation sur les modèles.

Lister les modèles#

GET /api/models

Param'tres de requ'te :

ParamètreTypeRequisDescription
projectIdcha'ne de caract'resOuiID du projet (requis)
fieldscha'ne de caract'resNonEnsemble de champs : summary, charts
idscha'ne de caract'resNonIDs de modèles séparés par des virgules
limitentierNonNombre max de résultats (par défaut 20, max 100)

Lister les modèles terminés#

GET /api/models/completed

Renvoie jusqu'à 1 000 modèles dotés de poids utilisables dans tous les projets pour l'entraînement et le déploiement. Passe owner pour un espace de travail.

Obtenir un modèle#

GET /api/models/{modelId}

Créer un modèle#

POST /api/models

Corps JSON :

ChampTypeRequisDescription
projectIdcha'ne de caract'resOuiID du projet cible
slugcha'ne de caract'resNonSlug d'URL (alphanumérique minuscule/tirets)
namecha'ne de caract'resNonNom d'affichage (max 100 caractères)
descriptioncha'ne de caract'resNonDescription du modèle (max 1000 caractères)
metadataobjetNonMétadonnées JSON personnalisées
taskcha'ne de caract'resNonType de tâche (detect, segment, semantic, depth, pose, obb, classify)
Téléchargement de fichier de modèle

Pour joindre des poids .pt, demande une URL de téléchargement signée avec assetType: models et l'ID de ce modèle en tant que assetId, télécharge le fichier, puis appelle POST /api/upload/complete avec la valeur sessionId renvoyée.

Mettre à jour un modèle#

PATCH /api/models/{modelId}

Corps (mise ' jour partielle) :

{
    "metadata": { "release": "candidate-3", "reviewed": true }
}

Envoie un objet metadata vide ({}) pour l'effacer. Les métadonnées personnalisées du modèle sont distinctes des informations du modèle gérées par l'entraînement, des détails de l'environnement et des arguments d'entraînement, et utilisent les mêmes limites d'objet sérialisé et de clé de niveau supérieur que les métadonnées du dataset.

Obtenir les métadonnées du modèle#

GET /api/models/{modelId}/metadata

Renvoie l'objet de métadonnées personnalisées et les paires champ/valeur gérées par Ultralytics en lecture seule. L'authentification et l'accès à l'espace de travail du modèle sont requis.

Supprimer un modèle#

DELETE /api/models/{modelId}

Télécharger les fichiers du modèle#

GET /api/models/{modelId}/files

Renvoie des URLs de téléchargement signées pour les fichiers du modèle.

Cloner un modèle#

POST /api/models/{modelId}/clone

Clone un modèle public, appartenant à l'utilisateur ou modifiable, vers l'un de tes projets.

Corps :

{
    "targetProjectSlug": "my-project",
    "modelName": "cloned-model",
    "description": "Cloned from public model",
    "owner": "team-username"
}
ChampTypeRequisDescription
targetProjectSlugcha'ne de caract'resOuiSlug du projet de destination
modelNamecha'ne de caract'resNonNom pour le modèle cloné
descriptioncha'ne de caract'resNonDescription du modèle
ownercha'ne de caract'resNonNom d'utilisateur de l'équipe (pour le clonage d'espace de travail)

Suivre le téléchargement#

POST /api/models/{modelId}/track-download

Suis les analyses de téléchargement du modèle.

Exécute l'inférence#

POST /api/models/{modelId}/predict

Les modèles publics peuvent être prédits sans authentification. Les modèles privés et partagés nécessitent une clé API avec accès au projet parent.

Formulaire Multipart :

ParamètreTypeDéfautPlageDescription
filefichier--Fichier image ou vidéo (requis sauf si source est défini)
confflottant0.250.01 – 1.0Seuil de confiance minimum
iouflottant0.70.0 – 0.95Seuil IoU NMS
imgszentier64032 – 1280Taille de l'image d'entrée en pixels
normalizeboolfalse-Retourne les coordonnées des boîtes englobantes entre 0 et 1
decimalsentier50 – 10Précision décimale pour les valeurs de coordonnées
sourcecha'ne de caract'res--URL d'image ou chaîne en base64 (alternative à file)

Fournis soit file, soit source. La taille de téléchargement maximale est de 100 Mo.

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

R'ponse :

Les réponses contiennent, pour chaque image, shape, speed, results et des données de carte de pixels denses optionnelles (une carte de classes sémantiques ou une carte de profondeur où depth = pixel × max / divisor — diviseur 255 pour la carte 8 bits par défaut, 65535 avec bits=12|16), ainsi que metadata avec le nombre d'images, le temps d'exécution de la fonction, la tâche et les versions du service. Les chemins de modèles internes ne sont jamais renvoyés.

{
    "images": [
        {
            "shape": [1080, 1920],
            "results": [
                {
                    "class": 0,
                    "name": "person",
                    "confidence": 0.92,
                    "box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
                }
            ]
        }
    ],
    "metadata": {
        "imageCount": 1
    }
}

API d'entraînement#

Lance l'entraînement YOLO sur des GPU cloud (26 types de GPU allant du RTX 2000 Ada au B300) et surveille la progression en temps réel. Consulte la documentation sur l'entraînement dans le cloud.

graph LR
    A[POST /training/start]:::start --> B[Job Created]:::proc
    B --> C{Training}:::decide
    C -->|progress| D[GET /models/id/training]:::proc
    C -->|cancel| E[DELETE /models/id/training]:::error
    C -->|complete| F[Model Ready]:::out
    F --> G[Deploy or Export]:::proc

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef decide fill:#FF9800,color:#fff
    classDef out fill:#9C27B0,color:#fff
    classDef error fill:#F44336,color:#fff

Démarrer l'entraînement#

POST /api/training/start
curl -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
Types de GPU

Les types de GPU disponibles incluent rtx-4090, a100-80gb-pcie, a100-80gb-sxm, h100-sxm, rtx-pro-6000, b300 et d'autres. Consulte Entraînement dans le cloud pour obtenir la liste complète avec les tarifs.

Obtenir la disponibilité GPU#

GET /api/training/gpu-availability

Renvoie l'état actuel du stock de GPU (High, Medium, Low ou null) indexé par ID de type de GPU. Public, aucune authentification requise ; mis en cache pendant 5 minutes.

Obtenir le statut de l'entraînement#

GET /api/models/{modelId}/training

Renvoie le statut actuel du travail d'entraînement, les métriques, la progression, le timing, les détails du GPU et les erreurs. Les projets publics sont accessibles sans authentification ; les projets privés et partagés nécessitent une clé API avec accès.

Annuler l'entraînement#

DELETE /api/models/{modelId}/training

Termine l'instance de calcul en cours d'exécution et marque le travail comme annulé.


API de déploiements#

Déploie des modèles sur des points de terminaison d'inférence dédiés avec des vérifications d'état et de la surveillance. Par défaut, les nouveaux déploiements utilisent la mise à l'échelle automatique jusqu'à zéro, et l'API accepte un objet resources optionnel. Consulte la documentation sur les points de terminaison.

Prise en charge des clés API par route

Toutes les routes de déploiement ci-dessous acceptent l'authentification par clé API. Pour une inférence à haut débit, appelle directement l'URL du point de terminaison du déploiement (par exemple, https://predict-abc123.run.app/predict) avec ta clé API. Les points de terminaison dédiés ne sont pas limités en débit.

graph LR
    A[Create]:::start --> B[Deploying]:::proc
    B --> C[Ready]:::out
    C -->|stop| D[Stopped]:::extern
    D -->|start| C
    C -->|delete| E[Deleted]:::error
    D -->|delete| E
    C -->|predict| F[Inference Results]:::out

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef out fill:#9C27B0,color:#fff
    classDef error fill:#F44336,color:#fff
    classDef extern fill:#607D8B,color:#fff

Lister les déploiements#

GET /api/deployments

Param'tres de requ'te :

ParamètreTypeDescription
modelIdcha'ne de caract'resFiltrer par modèle
statuscha'ne de caract'resFiltrer par statut
limitentierNombre max de résultats (par défaut : 20, max : 100)
ownercha'ne de caract'resNom d'utilisateur du propri'taire de l'espace de travail

Créer un déploiement#

POST /api/deployments

Corps :

{
    "modelId": "model_abc123",
    "name": "my-deployment",
    "region": "us-central1",
    "resources": {
        "cpu": 1,
        "memoryGi": 2,
        "minInstances": 0,
        "maxInstances": 1
    }
}
ChampTypeRequisDescription
modelIdcha'ne de caract'resOuiID du modèle à déployer
namecha'ne de caract'resOuiNom du déploiement
regioncha'ne de caract'resOuiRégion du déploiement
resourcesobjetNonConfiguration des ressources (cpu, memoryGi, minInstances, maxInstances)

Crée un point de terminaison d'inférence dédié dans la région spécifiée. Le point de terminaison est accessible mondialement via une URL unique.

Ressources par défaut

La boîte de dialogue de déploiement soumet actuellement des valeurs par défaut fixes de cpu=1, memoryGi=2, minInstances=0 et maxInstances=1. La route de l'API accepte un objet resources, mais les limites du forfait plafonnent minInstances à 0 et maxInstances à 1.

Sélection de la région

Choisis une région proche de tes utilisateurs pour une latence minimale. L'interface utilisateur de la plateforme affiche des estimations de latence pour les 42 régions disponibles.

Obtenir un déploiement#

GET /api/deployments/{deploymentId}

Supprimer un déploiement#

DELETE /api/deployments/{deploymentId}

Démarrer un déploiement#

POST /api/deployments/{deploymentId}/start

Reprend un déploiement arrêté.

Arrêter un déploiement#

POST /api/deployments/{deploymentId}/stop

Arrête de traiter les requêtes en définissant les instances minimales et maximales du service à zéro.

Vérification de santé#

GET /api/deployments/{deploymentId}/health

Renvoie le statut de santé du point de terminaison de déploiement.

Exécuter l'inférence sur le déploiement#

POST /api/deployments/{deploymentId}/predict

Envoie une image directement à un point de terminaison de déploiement pour inférence. Fonctionnellement équivalent à la prédiction de modèle, mais acheminé via le point de terminaison dédié pour une latence plus faible.

Formulaire Multipart :

ParamètreTypeDéfautPlageDescription
filefichier--Fichier image ou vidéo (requis sauf si source est défini)
confflottant0.250.01 – 1.0Seuil de confiance minimum
iouflottant0.70.0 – 0.95Seuil IoU NMS
imgszentier64032 – 1280Taille de l'image d'entrée en pixels
normalizeboolfalse-Retourne les coordonnées des boîtes englobantes entre 0 et 1
decimalsentier50 – 10Précision décimale pour les valeurs de coordonnées
sourcecha'ne de caract'res--URL d'image ou chaîne en base64 (alternative à file)

Fournis soit file, soit source. La réponse utilise le même contrat d'image et de métadonnées que la prédiction de modèle et ne renvoie jamais le chemin du modèle interne.

Obtenir les métriques#

GET /api/deployments/{deploymentId}/metrics

Renvoie les nombres de requêtes, la latence et les métriques de taux d'erreur avec des données de sparkline.

Param'tres de requ'te :

ParamètreTypeDescription
rangecha'ne de caract'resPlage de dates : 1h, 6h, 24h (par défaut), 7d, 30d
sparklinecha'ne de caract'resDéfini sur true pour obtenir des données de mini-graphique (sparkline) optimisées pour l'affichage dans le tableau de bord

Obtenir les logs#

GET /api/deployments/{deploymentId}/logs

Param'tres de requ'te :

ParamètreTypeDescription
severitycha'ne de caract'resFiltre séparé par des virgules : DEBUG, INFO, WARNING, ERROR, CRITICAL
limitentierNombre d'entrées (par défaut : 50, max : 200)
pageTokencha'ne de caract'resJeton de pagination de la réponse précédente

API d'exportation#

Convertis des modèles vers des formats optimisés tels que ONNX, TensorRT, CoreML et LiteRT pour le déploiement en périphérie (edge). Consulte la documentation sur le déploiement.

Lister les exportations#

GET /api/exports

Param'tres de requ'te :

ParamètreTypeDescription
modelIdcha'ne de caract'resID du modèle (requis)
statuscha'ne de caract'resFiltrer par statut
limitentierNombre max de résultats (par défaut : 20, max : 100)

Créer une exportation#

POST /api/exports

Corps :

ChampTypeRequisDescription
modelIdcha'ne de caract'resOuiID du modèle source
formatcha'ne de caract'resOuiFormat d'exportation (voir tableau ci-dessous)
gpuTypecha'ne de caract'resConditionnelRequis lorsque format est engine ; utilise une cible GPU ou Jetson prise en charge
argsobjetNonArguments d'exportation (imgsz, quantize, 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/exports

Formats pris en charge :

Utilise l'argument format du tableau d'exportation partagé ci-dessous. PyTorch est le format source et ne constitue pas une cible d'exportation de l'API.

FormatArgument formatModèleMétadonnéesArguments
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms

Obtenir le statut d'exportation#

GET /api/exports/{exportId}

Annuler l'exportation#

DELETE /api/exports/{exportId}

Suivre le téléchargement de l'exportation#

POST /api/exports/{exportId}/track-download

API d'activité#

Consulte le fil d'actualité des actions récentes sur ton compte — exécutions d'entraînement, téléversements, etc. Consulte la documentation sur l'activité.

Prise en charge des clés API par route

Toutes les routes d'activité ci-dessous acceptent l'authentification par clé API.

Lister l'activité#

GET /api/activity

Param'tres de requ'te :

ParamètreTypeDescription
limitentierTaille de la page (défaut : 20, max : 100)
pageentierNuméro de page (défaut : 1)
archivedbooléentrue pour l'onglet Archive, false pour la Boîte de réception
searchcha'ne de caract'resRecherche insensible à la casse dans les champs d'événement
startdateInclure les événements à cette date ou après
enddateInclure les événements à cette date ou avant
exportbooléenRenvoyer tous les événements correspondants sous forme de JSON
ownercha'ne de caract'resNom d'utilisateur de l'espace de travail

Marquer les événements comme vus#

POST /api/activity/mark-seen

Corps :

{
    "all": true
}

Ou passe des IDs spécifiques :

{
    "eventIds": ["EVENT_ID_1", "EVENT_ID_2"]
}

Passe le paramètre de requête optionnel owner pour marquer des événements dans un espace de travail.

Archiver les événements#

POST /api/activity/archive

Corps :

{
    "all": true,
    "archive": true
}

Ou passe des IDs spécifiques :

{
    "eventIds": ["EVENT_ID_1", "EVENT_ID_2"],
    "archive": false
}

Passe le paramètre de requête optionnel owner pour archiver ou restaurer des événements de l'espace de travail.


API de corbeille#

Affichez et restaurez les éléments supprimés. Les éléments sont définitivement supprimés après 30 jours. Consulte la documentation sur la corbeille.

Lister la corbeille#

GET /api/trash

Param'tres de requ'te :

ParamètreTypeDescription
typecha'ne de caract'resFiltre : all, project, dataset, model
pageentierNuméro de page (défaut : 1)
limitentierÉléments par page (défaut : 50, max : 200)
ownercha'ne de caract'resNom d'utilisateur du propri'taire de l'espace de travail

Restaurer l'élément#

POST /api/trash

Corps :

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

Supprimer définitivement l'élément#

DELETE /api/trash

Corps :

{
    "id": "item_abc123",
    "type": "dataset"
}
Irréversible

La suppression permanente ne peut pas être annulée. La ressource et toutes les données associées seront supprimées.

Vider la corbeille#

DELETE /api/trash/empty

Supprime définitivement tous les éléments dans la corbeille.

Authentification

DELETE /api/trash/empty accepte l'authentification par clé API et supprime définitivement chaque élément de la corbeille du compte ou de l'espace de travail sélectionné.


API de facturation#

Vérifie ton solde de crédits, l'utilisation de ton forfait et ton historique des transactions. Consulte la documentation sur la facturation.

Les points de terminaison du solde et des transactions acceptent un paramètre de requête optionnel owner contenant le nom d'utilisateur du propriétaire de l'espace de travail.

Unités monétaires

Les montants de facturation utilisent des centimes (creditsCents) où 100 = $1.00.

Obtenir le solde#

GET /api/billing/balance

R'ponse :

{
    "creditsCents": 2500,
    "plan": "free"
}

Obtenir le résumé de l'utilisation#

GET /api/billing/usage-summary

Renvoie les détails du plan, les limites et les métriques d'utilisation.

Obtenir les transactions#

GET /api/billing/transactions

Renvoie l'historique des transactions (les plus récentes en premier).

Les transactions incluent des champs de grand livre destinés au client tels que le montant, le solde résultant, la date, le contexte de modèle optionnel et l'URL du reçu. Les notes internes, les ID de paiement/remboursement Stripe et les clés d'idempotence ne sont pas renvoyés.


API de stockage#

Vérifie la répartition de ton utilisation du stockage par catégorie (datasets, modèles, exports) et identifie tes éléments les plus volumineux.

Accès par clé API

GET /api/storage accepte l'authentification par clé API. Utilise la page Paramètres > Profil pour obtenir la même ventilation interactive.

Obtenir les informations de stockage#

GET /api/storage

Param'tres de requ'te :

ParamètreTypeDescription
detailsbooléenDéfini sur true pour inclure topItems (les plus grands jeux de données, modèles et exportations).
ownercha'ne de caract'resNom d'utilisateur de l'espace de travail.

R'ponse :

{
    "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"
            }
        ]
    }
}

Intégrations de stockage cloud#

Connecte et parcours les intégrations de stockage GCS, S3 ou Azure Blob en lecture seule :

GET /api/integrations/buckets
POST /api/integrations/buckets
POST /api/integrations/buckets/discover
GET /api/integrations/buckets/{id}/objects

Les quatre opérations acceptent le paramètre de requête optionnel owner pour un espace de travail. La navigation dans les objets accepte également le paramètre requis target ainsi que les paramètres optionnels prefix et fournisseur cursor. Les corps de requêtes de connexion et de découverte utilisent les schémas d'identifiants du fournisseur dans la référence OpenAPI interactive ; les identifiants ne sont jamais renvoyés.


API de téléchargement#

Télécharge des fichiers directement vers le stockage cloud à l'aide d'URL signées pour des transferts rapides et fiables. La fin du téléchargement d'un modèle y associe ses poids. La fin du téléchargement d'une archive de jeu de données enregistre la session ; passe ce sessionId à POST /api/datasets/ingest pour lancer le traitement. Consulte la documentation sur les données.

Obtenir une URL de téléchargement signée#

POST /api/upload/signed-url

Demande une URL signée pour télécharger un fichier directement vers le stockage cloud. L'URL signée contourne le serveur API pour les transferts de fichiers volumineux.

Corps :

{
    "assetType": "datasets",
    "assetId": "dataset_abc123",
    "filename": "my-dataset.zip",
    "contentType": "application/zip",
    "totalBytes": 52428800
}
ChampTypeDescription
assetTypecha'ne de caract'resType d'actif : models, datasets, images, videos
assetIdcha'ne de caract'resID de l'asset cible
filenamecha'ne de caract'resNom de fichier original
contentTypecha'ne de caract'resType MIME
totalBytesentierTaille du fichier en octets

R'ponse :

{
    "sessionId": "session_abc123",
    "uploadUrl": "https://storage.example.com/...",
    "expiresAt": "2026-02-22T12:00:00Z"
}

Terminer le téléchargement#

POST /api/upload/complete

Notifie la plateforme qu'un téléchargement de fichier est terminé. Pour les modèles, cela associe les poids téléchargés. Pour les archives de jeux de données, cela vérifie et enregistre la session de téléchargement ; appelle POST /api/datasets/ingest ensuite pour lancer le traitement du jeu de données.

Corps :

{
    "sessionId": "session_abc123",
    "checksum": "<optional sha-256 hex>"
}

API d'intégrations#

Importe des jeux de données depuis des services tiers. Consulte la documentation sur les intégrations.

Prévisualiser l'importation Roboflow#

POST /api/integrations/roboflow/preview

Résout une clé API Roboflow en un plan d'importation en masse : informations sur l'espace de travail, quels projets seraient nouvellement importés, nombre de versions déjà importées (ignorées) et types de projets non pris en charge. La clé API Roboflow est transmise dans le corps et n'est pas persistée.

Importer depuis Roboflow#

POST /api/integrations/roboflow/import

Mettre en file d'attente des travaux d'ingestion de jeu de données pour importer les projets Roboflow sélectionnés dans ton espace de travail. Nécessite de l'espace de stockage disponible, et chaque jeu de données doit respecter la limite de taille par importation de ton plan.


API des clés API#

Gère tes clés API pour l'accès programmatique. Consulte la documentation sur les clés API.

Lister les clés API#

GET /api/api-keys

Les clients authentifiés par clé API reçoivent les métadonnées de la clé, mais jamais les valeurs des clés existantes déchiffrées. Une clé nouvellement créée est renvoyée une seule fois par POST /api/api-keys.

Passe le paramètre de requête optionnel owner pour gérer les clés d'un espace de travail où tu possèdes un accès d'éditeur.

Créer une clé API#

POST /api/api-keys

Corps :

{
    "name": "training-server"
}

Supprimer une clé API#

DELETE /api/api-keys

Param'tres de requ'te :

ParamètreTypeDescription
keyIdcha'ne de caract'resID de la clé API à révoquer
ownercha'ne de caract'resNom d'utilisateur optionnel de l'espace de travail.

Exemple :

curl -X DELETE \
  -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/api-keys?keyId=KEY_ID"

API des équipes et des membres#

Crée des espaces de travail d'équipe, invite des membres et gère les rôles pour la collaboration. Consulte la documentation sur les équipes.

Lister les équipes#

GET /api/teams

Créer une équipe#

POST /api/teams/create

Corps :

{
    "username": "my-team",
    "fullName": "My Team"
}

Lister les membres#

GET /api/members

Renvoie les membres de l'espace de travail actuel.

Inviter un membre#

POST /api/members

Corps :

{
    "email": "user@example.com",
    "role": "editor"
}
Rôles des membres
RôlePermissions
viewerAccès en lecture seule aux ressources de l'espace de travail
editorCréer, modifier et supprimer des ressources
adminGérer les membres, la facturation et toutes les ressources (assignable uniquement par le propriétaire de l'équipe)

L'équipe owner correspond au créateur et ne peut pas être invitée. Le propriétaire est transféré séparément via POST /api/members/transfer-ownership. Consulte Équipes pour tous les détails sur les rôles.

Mettre à jour le rôle d'un membre#

PATCH /api/members/{userId}

Supprimer un membre#

DELETE /api/members/{userId}

Transférer la propriété#

POST /api/members/transfer-ownership

Explorer l'API#

Recherche et parcours des jeux de données et des projets publics partagés par la communauté. Consulte la documentation sur l'exploration.

Rechercher du contenu public#

GET /api/explore/search

Param'tres de requ'te :

ParamètreTypeDescription
qcha'ne de caract'resRequête de recherche
typecha'ne de caract'resType de ressource : all (par défaut), projects, datasets
sortcha'ne de caract'resOrdre de tri : newest (par défaut), stars, oldest, name-asc, name-desc, count-desc, count-asc
offsetentierDécalage de pagination (par défaut : 0). Les résultats renvoient 20 éléments par page.
taskcha'ne de caract'resOptionnel : types de tâches YOLO séparés par des virgules pour filtrer les jeux de données (detect, segment, semantic, classify, pose, obb)
authorcha'ne de caract'resFiltre de nom d'utilisateur optionnel du propriétaire.
starredbooléenDéfini sur true pour renvoyer le contenu favori de l'appelant authentifié ; nécessite une clé API.

Données de la barre latérale#

GET /api/explore/sidebar

Renvoie du contenu sélectionné pour la barre latérale Explore.


API utilisateur et paramètres#

Gère ton profil, tes clés API, ton utilisation du stockage et tes espaces de travail d'équipe. Consulte la documentation sur les paramètres.

Résumé du compte#

GET /api/account/summary

Renvoie le forfait du compte authentifié, le solde de crédits, le nombre de ressources et les espaces de travail d'équipe.

Obtenir l'utilisateur par nom d'utilisateur#

GET /api/users

Param'tres de requ'te :

ParamètreTypeDescription
usernamecha'ne de caract'resNom d'utilisateur à rechercher

Suivre ou ne plus suivre un utilisateur#

PATCH /api/users

Corps :

{
    "username": "target-user",
    "followed": true
}

Vérifier la disponibilité du nom d'utilisateur#

GET /api/username/check

Param'tres de requ'te :

ParamètreTypeDescription
usernamecha'ne de caract'resNom d'utilisateur à vérifier
suggestboolOptionnel : true pour inclure une suggestion s'il est déjà pris

Paramètres#

GET /api/settings
POST /api/settings

Obtenir ou mettre à jour les paramètres du profil utilisateur (nom d'affichage, bio, liens sociaux, etc.).

Icône de l'espace de travail#

POST /api/settings/icon
DELETE /api/settings/icon

Télécharge une icône de profil/d'espace de travail WebP allant jusqu'à 5 Mo en tant que champ de formulaire multipart image, ou supprime-la. Passe owner en option pour un espace de travail d'équipe.


Intégration Python#

Pour une intégration plus simple, utilise le package Python Ultralytics qui gère automatiquement l'authentification, les téléchargements et la diffusion de métriques en temps réel.

Installation et configuration#

pip install "ultralytics>=8.4.104"

Vérifie l'installation :

yolo check

Authentification#

yolo login YOUR_API_KEY

Utilisation des datasets de la plateforme#

Référence les jeux de données avec les 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,
)

Format d'URI :

ModèleDescription
ul://username/datasets/slugJeu de données
ul://username/project-nameProjet
ul://username/project/model-nameModèle spécifique
ul://ultralytics/yolo26/yolo26nModèle officiel

Envoi vers la plateforme#

Envoie les résultats vers un projet de la plateforme :

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",
)

Ce qui est synchronisé :

  • Métriques d'entraînement (temps réel)
  • Poids finaux du modèle
  • Graphiques de validation
  • La sortie console
  • Métriques système

Exemples d'API#

Charge un modèle depuis la plateforme :

# Your own model
model = YOLO("ul://username/project/model-name")

# Official model
model = YOLO("ul://ultralytics/yolo26/yolo26n")

Exécute une inférence :

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

Exporte un modèle :

# Export to ONNX
model.export(format="onnx", imgsz=640, quantize=16)

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

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

Validation :

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

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

FAQ#

Comment paginer de grands résultats ?#

La plupart des points de terminaison utilisent un paramètre limit pour contrôler le nombre de résultats renvoyés par requête :

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/datasets?limit=50"

Les points de terminaison Activité et Corbeille prennent également en charge un paramètre page pour la pagination basée sur les pages :

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/activity?page=2&limit=20"

L'endpoint Explore Search utilise offset au lieu de page, avec une taille de page fixe de 20 :

curl "https://platform.ultralytics.com/api/explore/search?type=datasets&offset=20&sort=stars"

Puis-je utiliser l'API sans SDK ?#

Les opérations REST publiques documentées ci-dessus sont disponibles sans le SDK Python. Le SDK est un wrapper de commodité qui ajoute des fonctionnalités telles que la diffusion de métriques en temps réel et les téléchargements automatiques de modèles. Tu peux explorer le contrat lisible par machine de manière interactive sur platform.ultralytics.com/api/docs ; les flux de compte réservés à la session de navigateur restent dans l'UI de la Platform.

Existe-t-il des bibliothèques clientes API ?#

Utilise le paquet Python Ultralytics ou effectue des requêtes HTTP directes depuis n'importe quel langage.

Comment gérer les limites de débit ?#

Utilise l'en-tête Retry-After de la réponse 429 pour attendre la durée appropriée :

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 RuntimeError("Rate limit exceeded")

Comment trouver l'ID de mon modèle ou de mon dataset ?#

Les identifiants de ressources sont renvoyés par les réponses API de création, de liste et de récupération. Les URL des pages de la plateforme utilisent des slugs lisibles par l'homme, et non des identifiants de base de données :

https://platform.ultralytics.com/username/project/model-name
                                  ^^^^^^^^ ^^^^^^^ ^^^^^^^^^^
                                  username project   model

Utilise les endpoints de liste pour trouver le _id correspondant pour un modèle, un jeu de données, un projet, un déploiement ou une autre ressource.

Commentaires