Référence de l'API REST
La plateforme Ultralytics fournit une API REST complète pour un accès programmatique aux jeux de données, modèles, entraînements et déploiements.

# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasetsExplore la référence complète et interactive de l'API dans la documentation de l'API de la plateforme Ultralytics.
Aperçu de l'API
L'API est organisée autour des ressources principales de la plateforme :
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| Ressource | Description | Opérations clés |
|---|---|---|
| Jeux de données | Collections d'images étiquetées | CRUD, images, étiquettes, export, versions, clone |
| Projets | Espaces de travail d'entraînement | CRUD, clone, icône |
| Modèles | Points de contrôle entraînés | CRUD, prédiction, téléchargement, clone, export |
| Déploiements | Points de terminaison d'inférence dédiés | CRUD, démarrage/arrêt, métriques, journaux, état de santé |
| Exports | Travaux de conversion de format | Création, statut, téléchargement |
| Entraînement | Travaux d'entraînement sur GPU dans le cloud | Démarrage, statut, annulation |
| Facturation | Crédits et abonnements | Solde, recharge, méthodes de paiement |
| Équipes | Collaboration en espace de travail | Membres, invitations, rôles |
Authentification
Les API de ressources telles que les jeux de données, projets, modèles, entraînement, exports et prédictions utilisent l'authentification par clé API. Les points de terminaison publics (lister les jeux de données publics, projets et modèles) prennent en charge l'accès en lecture anonyme sans clé. Les itinéraires orientés vers le compte — incluant l'activité, les paramètres, les équipes, la facturation et les flux RGPD — nécessitent actuellement une session de navigateur authentifiée et ne sont pas disponibles via une clé API.
Obtenir une clé API
- Go to
Settings>API Keys - Click
Create Key - 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_KEYLes clés API utilisent le format ul_ suivi de 40 caractères hexadécimaux. Garde ta clé secrète -- ne la soumets jamais au contrôle de version et ne la partage pas publiquement.
Exemple
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasetsURL de base
Tous les points de terminaison de l'API utilisent :
https://platform.ultralytics.com/api
Limites de débit
L'API applique des limites de débit par clé API (fenêtre glissante, basée sur Upstash Redis) pour se protéger contre les abus tout en gardant une utilisation légitime sans restriction. Le trafic anonyme est en outre protégé par les contrôles d'abus au niveau de la plateforme Vercel.
Lorsque tu es limité, l'API renvoie 429 avec des métadonnées de nouvelle tentative :
Retry-After: 12
X-RateLimit-Reset: 2026-02-21T12:34:56.000ZLimites par clé API
Les limites de débit 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 :
| Point de terminaison | Limite | S'applique à |
|---|---|---|
| Par défaut | 100 requêtes/min | Tous les points de terminaison non listés ci-dessous (lister, obtenir, créer, mettre à jour, supprimer) |
| Entraînement | 10 requêtes/min | Démarrage des travaux d'entraînement dans le cloud (POST /api/training/start) |
| Télécharger | 10 requêtes/min | Téléversements de fichiers, URLs signées et ingestion de jeux de données |
| Prédiction | 20 requêtes/min | Inférence de modèle partagé (POST /api/models/{id}/predict) |
| Exporter | 20 requêtes/min | Exports de format de modèle (POST /api/exports), exports NDJSON de jeux de données et création de version |
| Téléchargement | 30 requêtes/min | Téléchargements de fichiers de poids de modèle (GET /api/models/{id}/download) |
| Dédié | Illimité | Points de terminaison dédiés — ton propre service, sans limites d'API |
Chaque catégorie a 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. Lorsque tu déploies un modèle vers un point de terminaison dédié, les requêtes vers cette URL de point de terminaison (par ex. https://predict-abc123.run.app/predict) vont directement à ton service dédié sans limitation de débit de la part de la plateforme. Tu paies pour le calcul, tu obtiens donc le débit de ta configuration de service dédiée plutôt que les limites de l'API partagée.
When you receive a 429 status code, wait for Retry-After (or until X-RateLimit-Reset) before retrying. See the rate limit FAQ for an exponential backoff implementation.
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"
}| Statut HTTP | Signification |
|---|---|
200 | Succès |
201 | Créé |
400 | Requête invalide |
401 | Authentification requise |
403 | Permissions insuffisantes |
404 | Ressource non trouvée |
409 | Conflit (doublon) |
429 | Limite de débit dépassée |
500 | Erreur serveur |
API des jeux de données
Crée, navigue et gère des jeux de données d'images étiquetées pour l'entraînement de modèles YOLO. Consulte la documentation des jeux de données.
Lister les jeux de données
GET /api/datasetsParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
username | string | Filtrer par nom d'utilisateur |
slug | string | Récupérer un dataset unique par slug |
limit | int | Éléments par page (par défaut : 20, max : 500) |
owner | string | Nom d'utilisateur du propriétaire de l'espace de travail |
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 complets du dataset, y compris les métadonnées, les noms de classes et les nombres par split.
Créer un dataset
POST /api/datasetsCorps :
{
"slug": "my-dataset",
"name": "My Dataset",
"task": "detect",
"description": "A custom detection dataset",
"visibility": "private",
"classNames": ["person", "car"]
}Valeurs task valides : detect, segment, classify, pose, obb.
Mettre à jour un dataset
PATCH /api/datasets/{datasetId}Corps (mise à jour partielle) :
{
"name": "Updated Name",
"description": "New description",
"visibility": "public"
}Supprimer un dataset
DELETE /api/datasets/{datasetId}Suppression logique du dataset (déplacé vers la corbeille, récupérable pendant 30 jours).
Cloner un dataset
POST /api/datasets/{datasetId}/cloneCrée une copie du dataset avec toutes ses images et étiquettes. Seuls les datasets publics peuvent être clonés. Nécessite une session de navigateur active sur la plateforme — non disponible via une clé API.
Corps (tous les champs sont optionnels) :
{
"name": "cloned-dataset",
"description": "My cloned dataset",
"visibility": "private",
"owner": "team-username"
}Exporter un dataset
GET /api/datasets/{datasetId}/exportRenvoie 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ètre | Type | Description |
|---|---|---|
v | integer | Numéro de version (indexé à partir de 1). Si omis, renvoie la dernière exportation (non mise en cache). |
Réponse :
{
"downloadUrl": "https://storage.example.com/export.ndjson?signed=...",
"cached": true
}Créer une version de dataset
POST /api/datasets/{datasetId}/exportCréer un nouveau snapshot numéroté du dataset. Réservé au propriétaire. La version capture le nombre actuel d'images, de classes, d'annotations et la répartition des splits, puis génère et stocke une exportation NDJSON immuable.
Corps de la requête :
{
"description": "Added 500 training images"
}Tous les champs sont optionnels. 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}/exportMettre à jour la description d'une version existante. Réservé au propriétaire.
Corps de la requête :
{
"version": 2,
"description": "Fixed mislabeled classes"
}Réponse :
{
"ok": true
}Obtenir les statistiques de classe
GET /api/datasets/{datasetId}/class-statsRenvoie la distribution des classes, la carte thermique de localisation et les statistiques de dimension. Les résultats sont mis en cache pendant 5 minutes maximum.
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
}Obtenir les modèles entraînés sur le dataset
GET /api/datasets/{datasetId}/modelsRenvoie les modèles 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
}Annotation automatique du dataset
POST /api/datasets/{datasetId}/predictExécute une 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 des images non annotées.
Corps :
| Champ | Type | Requis | Description |
|---|---|---|---|
imageHash | string | Oui | Hachage de l'image à annoter |
modelId | string | Non | ID du modèle à utiliser pour l'inférence |
confidence | float | Non | Seuil de confiance (par défaut : 0,25) |
iou | float | Non | Seuil IoU (par défaut : 0,45) |
Ingestion de dataset
POST /api/datasets/ingestCrée un job d'ingestion de dataset pour traiter les fichiers ZIP ou TAR téléchargés, y compris .tar.gz et .tgz, contenant des images et des étiquettes.
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]Images du dataset
Lister les images
GET /api/datasets/{datasetId}/imagesParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
split | string | Filtrer par split : train, val, test |
offset | int | Décalage de pagination (par défaut : 0) |
limit | int | Éléments par page (par défaut : 50, max : 5000) |
sort | string | Ordre 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 datasets >100k images) |
hasLabel | string | Filtrer par statut d'étiquette (true ou false) |
hasError | string | Filtrer par statut d'erreur (true ou false) |
search | string | Rechercher par nom de fichier ou hachage d'image |
includeThumbnails | string | Inclure les URLs de miniatures signées (par défaut : true) |
includeImageUrls | string | Inclure les URLs complètes des images signées (par défaut : false) |
Obtenir les URLs d'image signées
POST /api/datasets/{datasetId}/images/urlsObtenir des URLs signées pour un lot de hachages d'image (pour l'affichage dans le navigateur).
Supprimer une image
DELETE /api/datasets/{datasetId}/images/{hash}Obtenir les étiquettes d'une image
GET /api/datasets/{datasetId}/images/{hash}/labelsRenvoie les annotations et les noms de classes pour une image spécifique.
Mettre à jour les étiquettes d'une image
PUT /api/datasets/{datasetId}/images/{hash}/labelsCorps :
{
"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] }
]
}Les coordonnées des étiquettes utilisent des valeurs normalisées YOLO entre 0 et 1. Les boîtes englobantes (BBox) 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 groupées sur les images
Déplacer des images entre les splits (train/val/test) au sein d'un dataset :
PATCH /api/datasets/{datasetId}/images/bulkSuppression groupée d'images :
DELETE /api/datasets/{datasetId}/images/bulkAPI Projets
Organise tes modèles en projets. Chaque modèle appartient à un projet. Voir la documentation des projets.
Lister les projets
GET /api/projectsParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
username | string | Filtrer par nom d'utilisateur |
limit | int | Éléments par page |
owner | string | Nom d'utilisateur du propriétaire de l'espace de travail |
Obtenir un projet
GET /api/projects/{projectId}Créer un projet
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/projectsMettre à jour un projet
PATCH /api/projects/{projectId}Supprimer un projet
DELETE /api/projects/{projectId}Suppression logique du projet (déplacé vers la corbeille).
Cloner un projet
POST /api/projects/{projectId}/cloneClone un projet public (avec tous ses modèles) dans ton espace de travail. Nécessite une session de navigateur active sur la plateforme — non disponible via une clé API.
Icône du projet
Téléverser une icône de projet (formulaire multipart avec fichier image) :
POST /api/projects/{projectId}/iconSupprimer l'icône du projet :
DELETE /api/projects/{projectId}/iconLes deux nécessitent une session de navigateur active sur la plateforme — non disponible via une clé API.
API Modèles
Gère tes modèles YOLO entraînés — consulte les métriques, télécharge les poids, exécute l'inférence et exporte vers d'autres formats. Voir la documentation des modèles.
Lister les modèles
GET /api/modelsParamètres de requête :
| Paramètre | Type | Requis | Description |
|---|---|---|---|
projectId | string | Oui | ID du projet (requis) |
fields | string | Non | Ensemble de champs : summary, charts |
ids | string | Non | IDs de modèles séparés par des virgules |
limit | int | Non | Nombre max de résultats (par défaut 20, max 100) |
Lister les modèles terminés
GET /api/models/completedRenvoie les modèles dont l'entraînement est terminé (pour une utilisation dans les sélecteurs de modèles et le déploiement).
Obtenir un modèle
GET /api/models/{modelId}Créer un modèle
POST /api/modelsCorps JSON :
| Champ | Type | Requis | Description |
|---|---|---|---|
projectId | string | Oui | ID du projet cible |
slug | string | Non | Slug d'URL (alphanumérique minuscule/tirets) |
name | string | Non | Nom d'affichage (max 100 caractères) |
description | string | Non | Description du modèle (max 1000 caractères) |
task | string | Non | Type de tâche (detect, segment, pose, obb, classify) |
Les téléversements de fichiers modèle .pt sont gérés séparément. Utilise l'interface utilisateur de la plateforme pour glisser-déposer les fichiers modèle sur un projet.
Mettre à jour le modèle
PATCH /api/models/{modelId}Supprimer le modèle
DELETE /api/models/{modelId}Télécharger les fichiers modèle
GET /api/models/{modelId}/filesRenvoie des URL de téléchargement signées pour les fichiers modèle.
Cloner le modèle
POST /api/models/{modelId}/cloneClone un modèle public vers l'un de tes projets. Nécessite une session de navigateur active sur la plateforme — non disponible via une clé API.
Corps :
{
"targetProjectSlug": "my-project",
"modelName": "cloned-model",
"description": "Cloned from public model",
"owner": "team-username"
}| Champ | Type | Requis | Description |
|---|---|---|---|
targetProjectSlug | string | Oui | Slug du projet de destination |
modelName | string | Non | Nom pour le modèle cloné |
description | string | Non | Description du modèle |
owner | string | Non | Nom d'utilisateur de l'équipe (pour le clonage d'espace de travail) |
Suivre le téléchargement
POST /api/models/{modelId}/track-downloadSuis les analyses de téléchargement de modèle.
Exécuter l'inférence
POST /api/models/{modelId}/predictFormulaire multipart :
| Champ | Type | Description |
|---|---|---|
file | fichier | Fichier image (JPEG, PNG, WebP) |
conf | float | Seuil de confiance (par défaut : 0,25) |
iou | float | Seuil IoU (par défaut : 0.7) |
imgsz | int | Taille de l'image en pixels (par défaut : 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/predictRéponse :
{
"images": [
{
"shape": [1080, 1920],
"results": [
{
"class": 0,
"name": "person",
"confidence": 0.92,
"box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
}
]
}
],
"metadata": {
"imageCount": 1
}
}Obtenir un jeton de prédiction
POST /api/models/{modelId}/predict/tokenCette route est utilisée par l'onglet Predict de l'application pour émettre des jetons d'inférence à courte durée de vie pour des appels directs navigateur → service de prédiction (latence plus faible, pas de proxy API). Elle nécessite une session de navigateur active sur la plateforme et n'est pas disponible via une clé API. Pour une inférence programmatique, appelle POST /api/models/{modelId}/predict avec ta clé API.
Pré-chauffage du modèle
POST /api/models/{modelId}/predict/warmupLa route de pré-chauffage est utilisée par l'onglet Predict pour précharger les poids d'un modèle sur le service de prédiction avant la première inférence de l'utilisateur. Elle nécessite une session de navigateur active sur la plateforme et n'est pas disponible via une clé API.
API d'entraînement
Lance l'entraînement YOLO sur des GPU cloud (24 types de GPU du RTX 2000 Ada au B300) et surveille la progression en temps réel. Voir la documentation de l'entraînement cloud.
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]Démarrer l'entraînement
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/startLes types de GPU disponibles incluent rtx-4090, a100-80gb-pcie, a100-80gb-sxm, h100-sxm, rtx-pro-6000, b300, et d'autres. Voir Entraînement cloud pour la liste complète avec les tarifs.
Obtenir le statut de l'entraînement
GET /api/models/{modelId}/trainingRenvoie le statut actuel du job d'entraînement, les métriques et la progression d'un modèle. Les projets publics sont accessibles de manière anonyme ; les projets privés nécessitent une session de navigateur active sur la plateforme (cette route n'accepte pas l'authentification par clé API).
Annuler l'entraînement
DELETE /api/models/{modelId}/trainingTermine l'instance de calcul en cours et marque le job comme annulé. Nécessite une session de navigateur active sur la plateforme — non disponible via une clé API.
API Déploiements
Déploie des modèles sur des points de terminaison d'inférence dédiés avec des contrôles de santé et une surveillance. Les nouveaux déploiements utilisent par défaut le scale-to-zero, et l'API accepte un objet resources optionnel. Voir la documentation des points de terminaison.
Seules GET /api/deployments, POST /api/deployments, GET /api/deployments/{deploymentId}, et DELETE /api/deployments/{deploymentId} prennent en charge l'authentification par clé API. Les sous-routes predict, health, logs, metrics, start, et stop nécessitent une session de navigateur active sur la plateforme — ce sont des proxys pratiques pour l'interface de l'application. Pour une inférence programmatique, appelle directement l'URL du point de terminaison du déploiement (par ex., 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] --> B[Deploying]
B --> C[Ready]
C -->|stop| D[Stopped]
D -->|start| C
C -->|delete| E[Deleted]
D -->|delete| E
C -->|predict| F[Inference Results]Lister les déploiements
GET /api/deploymentsParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
modelId | string | Filtrer par modèle |
status | string | Filtrer par statut |
limit | int | Nombre max de résultats (par défaut : 20, max : 100) |
owner | string | Nom d'utilisateur du propriétaire de l'espace de travail |
Créer un déploiement
POST /api/deploymentsCorps :
{
"modelId": "model_abc123",
"name": "my-deployment",
"region": "us-central1",
"resources": {
"cpu": 1,
"memoryGi": 2,
"minInstances": 0,
"maxInstances": 1
}
}| Champ | Type | Requis | Description |
|---|---|---|---|
modelId | string | Oui | ID du modèle à déployer |
name | string | Oui | Nom du déploiement |
region | string | Oui | Région de déploiement |
resources | objet | Non | Configuration 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.
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 API accepte un objet resources, mais les limites du plan plafonnent minInstances à 0 et maxInstances à 1.
Choisis une région proche de tes utilisateurs pour une latence minimale. L'interface de la plateforme affiche les estimations de latence pour les 43 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}/startReprend un déploiement arrêté.
Arrêter un déploiement
POST /api/deployments/{deploymentId}/stopSuspend un déploiement en cours (arrête la facturation).
Contrôle de santé
GET /api/deployments/{deploymentId}/healthRenvoie le statut de santé du point de terminaison de déploiement.
Exécuter l'inférence sur le déploiement
POST /api/deployments/{deploymentId}/predictEnvoie une image directement à un point de terminaison de déploiement pour inférence. Fonctionnellement équivalent à la prédiction de modèle, mais routé via le point de terminaison dédié pour une latence plus faible.
Formulaire multipart :
| Champ | Type | Description |
|---|---|---|
file | fichier | Fichier image (JPEG, PNG, WebP) |
conf | float | Seuil de confiance (par défaut : 0,25) |
iou | float | Seuil IoU (par défaut : 0.7) |
imgsz | int | Taille de l'image en pixels (par défaut : 640) |
Obtenir les métriques
GET /api/deployments/{deploymentId}/metricsRenvoie le nombre de requêtes, la latence et les métriques de taux d'erreur avec des données sparkline.
Paramètres de requête :
| Paramètre | Type | Description |
|---|---|---|
range | string | Plage temporelle : 1h, 6h, 24h (par défaut), 7d, 30d |
sparkline | string | Défini sur true pour des données sparkline optimisées pour la vue tableau de bord |
Obtenir les journaux
GET /api/deployments/{deploymentId}/logsParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
severity | string | Filtre séparé par des virgules : DEBUG, INFO, WARNING, ERROR, CRITICAL |
limit | int | Nombre d'entrées (par défaut : 50, max : 200) |
pageToken | string | Jeton de pagination de la réponse précédente |
API de surveillance
GET /api/monitoring est une route réservée à l'interface utilisateur et nécessite une session de navigateur active sur la plateforme. Elle n'accepte pas l'authentification par clé API. Interroge les métriques de déploiement individuelles via les routes par déploiement (qui sont également réservées aux sessions de navigateur) ou utilise les Cloud Monitoring exports sur le service Cloud Run déployé pour un accès par programmation.
Métriques agrégées
GET /api/monitoringRenvoie les métriques agrégées pour tous les déploiements utilisateur : nombre total de requêtes, déploiements actifs, taux d'erreur et latence moyenne.
API d'exportation
Convertis tes modèles vers des formats optimisés comme ONNX, TensorRT, CoreML et TFLite pour un déploiement en périphérie. Consulte la documentation de déploiement.
Lister les exportations
GET /api/exportsParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
modelId | string | ID du modèle (requis) |
status | string | Filtrer par statut |
limit | int | Nombre max de résultats (par défaut : 20, max : 100) |
Créer une exportation
POST /api/exportsCorps :
| Champ | Type | Requis | Description |
|---|---|---|---|
modelId | string | Oui | ID du modèle source |
format | string | Oui | Format d'exportation (voir tableau ci-dessous) |
gpuType | string | Conditionnel | Requis si format est engine (TensorRT) |
args | objet | Non | Arguments d'exportation (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/exportsFormats pris en charge :
| Format | Valeur | Cas d'utilisation |
|---|---|---|
| ONNX | onnx | Inférence multiplateforme |
| TorchScript | torchscript | Déploiement PyTorch |
| OpenVINO | openvino | Matériel Intel |
| TensorRT | engine | Optimisation GPU NVIDIA |
| CoreML | coreml | Appareils Apple |
| TFLite | tflite | Mobile et embarqué |
| TF SavedModel | saved_model | TensorFlow Serving |
| TF GraphDef | pb | Graphe figé TensorFlow |
| PaddlePaddle | paddle | Baidu PaddlePaddle |
| NCNN | ncnn | Réseau de neurones mobile |
| Edge TPU | edgetpu | Appareils Google Coral |
| TF.js | tfjs | Inférence dans le navigateur |
| MNN | mnn | Inférence mobile Alibaba |
| RKNN | rknn | NPU Rockchip |
| IMX | imx | Capteur Sony IMX500 |
| Axelera | axelera | Accélérateurs Axelera AI |
| ExecuTorch | executorch | Runtime Meta ExecuTorch |
Obtenir l'état de l'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-downloadAPI d'activité
Consulte le flux des actions récentes sur ton compte : entraînements, téléversements et plus. Consulte la documentation d'activité.
Les routes d'activité sont alimentées par des requêtes authentifiées via le navigateur depuis l'interface utilisateur de la plateforme. Elles ne sont pas exposées en tant qu'API publique, n'acceptent pas l'authentification par clé API, et les structures de routes ci-dessous ne sont documentées qu'à titre de référence. Utilise le flux d'activité dans l'interface de la plateforme pour afficher, marquer ou archiver des événements.
Lister l'activité
GET /api/activityParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
limit | int | Taille de page (par défaut : 20, max : 100) |
page | int | Numéro de page (par défaut : 1) |
archived | booléen | true pour l'onglet Archive, false pour la boîte de réception |
search | string | Recherche insensible à la casse dans les champs d'événement |
Marquer les événements comme vus
POST /api/activity/mark-seenCorps :
{
"all": true
}Ou passe des IDs spécifiques :
{
"eventIds": ["EVENT_ID_1", "EVENT_ID_2"]
}Archiver les événements
POST /api/activity/archiveCorps :
{
"all": true,
"archive": true
}Ou passe des IDs spécifiques :
{
"eventIds": ["EVENT_ID_1", "EVENT_ID_2"],
"archive": false
}API de corbeille
Affiche et restaure les éléments supprimés. Les éléments sont définitivement supprimés après 30 jours. Consulte la documentation de la corbeille.
Lister la corbeille
GET /api/trashParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
type | string | Filtre : all, project, dataset, model |
page | int | Numéro de page (par défaut : 1) |
limit | int | Éléments par page (par défaut : 50, max : 200) |
owner | string | Nom d'utilisateur du propriétaire de l'espace de travail |
Restaurer un élément
POST /api/trashCorps :
{
"id": "item_abc123",
"type": "dataset"
}Supprimer définitivement l'élément
DELETE /api/trashCorps :
{
"id": "item_abc123",
"type": "dataset"
}La suppression définitive ne peut pas être annulée. La ressource et toutes les données associées seront supprimées.
Vider la corbeille
DELETE /api/trash/emptySupprime définitivement tous les éléments de la corbeille.
DELETE /api/trash/empty nécessite une session de navigateur authentifiée et n'est pas disponible via une clé API. Utilise plutôt le bouton Vider la corbeille dans l'interface.
API de facturation
Vérifie ton solde de crédits, achète des crédits, consulte ton historique de transactions et configure le rechargement automatique. Consulte la documentation de facturation.
Billing amounts use cents (creditsCents) where 100 = $1.00.
Obtenir le solde
GET /api/billing/balanceParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
owner | string | Nom d'utilisateur du propriétaire de l'espace de travail |
Réponse :
{
"creditsCents": 2500,
"plan": "free",
"cashBalance": 25,
"creditBalance": 0,
"reservedAmount": 0,
"totalBalance": 25
}Obtenir le résumé d'utilisation
GET /api/billing/usage-summaryRenvoie les détails du forfait, les limites et les métriques d'utilisation.
Obtenir les transactions
GET /api/billing/transactionsRenvoie l'historique des transactions (le plus récent en premier).
Paramètres de requête :
| Paramètre | Type | Description |
|---|---|---|
owner | string | Nom d'utilisateur du propriétaire de l'espace de travail |
Créer une session de paiement
POST /api/billing/checkout-sessionCorps :
{
"amount": 25,
"owner": "team-username"
}| Champ | Type | Requis | Description |
|---|---|---|---|
amount | nombre | Oui | Montant en dollars (5 $ à 1000 $) |
owner | string | Non | Nom d'utilisateur de l'équipe pour les rechargements d'espace de travail (nécessite un rôle administrateur) |
Crée une session de paiement pour l'achat de crédits.
Créer un paiement d'abonnement
POST /api/billing/subscription-checkoutCrée une session de paiement pour la mise à niveau vers l'abonnement Pro.
Corps :
{
"planId": "pro",
"billingCycle": "monthly",
"owner": "team-username"
}| Champ | Type | Requis | Description |
|---|---|---|---|
planId | string | Oui | Forfait auquel s'abonner (pro) |
billingCycle | string | Non | Cycle de facturation : monthly (par défaut) ou yearly |
owner | string | Non | Nom d'utilisateur de l'équipe pour les mises à niveau de l'espace de travail (nécessite un rôle administrateur) |
Annuler ou reprendre l'abonnement
DELETE /api/billing/subscription-checkoutAnnule par défaut un abonnement Pro à la fin de la période. Envoie {"resume": true} pour reprendre une annulation déjà programmée avant la fin de la période de facturation.
Corps :
{
"resume": true
}Recharge automatique
Ajoute automatiquement des crédits lorsque le solde tombe en dessous d'un seuil.
Obtenir la configuration du rechargement automatique
GET /api/billing/auto-topupParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
owner | string | Nom d'utilisateur du propriétaire de l'espace de travail |
Mettre à jour la configuration du rechargement automatique
PATCH /api/billing/auto-topupCorps :
{
"enabled": true,
"thresholdCents": 500,
"amountCents": 2500
}Méthodes de paiement
Lister les méthodes de paiement
GET /api/billing/payment-methodsCréer une intention de configuration
POST /api/billing/payment-methods/setupRenvoie un secret client pour ajouter une nouvelle méthode de paiement.
Définir la méthode de paiement par défaut
POST /api/billing/payment-methods/defaultCorps :
{
"paymentMethodId": "pm_123"
}Mettre à jour les informations de facturation
PATCH /api/billing/payment-methodsCorps :
{
"name": "Jane Doe",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postal_code": "94105",
"country": "US"
}
}Supprimer une méthode de paiement
DELETE /api/billing/payment-methods/{id}API de stockage
Vérifie le détail de ton utilisation du stockage par catégorie (jeux de données, modèles, exportations) et vois tes éléments les plus volumineux.
Les routes de stockage nécessitent une session de navigateur active sur la plateforme et ne sont pas accessibles via une clé API. Utilise la page Settings > Profile dans l'interface utilisateur pour des analyses détaillées.
Obtenir les informations de stockage
GET /api/storageRé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"
}
]
}
}API de téléchargement
Télécharge des fichiers directement vers le stockage cloud en utilisant des URL signées pour des transferts rapides et fiables. Utilise un flux en deux étapes : obtenir une URL signée, puis télécharger le fichier. Consulte la documentation sur les données.
Obtenir une URL de téléchargement signée
POST /api/upload/signed-urlDemande 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 gros fichiers.
Corps :
{
"assetType": "images",
"assetId": "abc123",
"filename": "my-image.jpg",
"contentType": "image/jpeg",
"totalBytes": 5242880
}| Champ | Type | Description |
|---|---|---|
assetType | string | Type d'actif : models, datasets, images, videos |
assetId | string | ID de l'actif cible |
filename | string | Nom de fichier original |
contentType | string | Type MIME |
totalBytes | int | Taille du fichier en octets |
Réponse :
{
"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"
}Terminer le téléchargement
POST /api/upload/completeNotifie la plateforme qu'un téléchargement de fichier est terminé afin qu'elle puisse commencer le traitement.
Corps :
{
"datasetId": "abc123",
"objectPath": "datasets/abc123/images/my-image.jpg",
"filename": "my-image.jpg",
"contentType": "image/jpeg",
"size": 5242880
}API des clés API
Gère tes clés API pour un accès par programme. Consulte la documentation des clés API.
Lister les clés API
GET /api/api-keysCréer une clé API
POST /api/api-keysCorps :
{
"name": "training-server"
}Supprimer une clé API
DELETE /api/api-keysParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
keyId | string | ID de la clé API à révoquer |
Exemple :
curl -X DELETE \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/api-keys?keyId=KEY_ID"API des équipes et membres
Crée des espaces de travail d'équipe, invite des membres et gère les rôles pour la collaboration. Consulte la documentation des équipes.
Lister les équipes
GET /api/teamsCréer une équipe
POST /api/teams/createCorps :
{
"username": "my-team",
"fullName": "My Team"
}Lister les membres
GET /api/membersRenvoie les membres de l'espace de travail actuel.
Inviter un membre
POST /api/membersCorps :
{
"email": "user@example.com",
"role": "editor"
}| Rôle | Autorisations |
|---|---|
viewer | Accès en lecture seule aux ressources de l'espace de travail |
editor | Créer, modifier et supprimer des ressources |
admin | Gérer les membres, la facturation et toutes les ressources (assignable uniquement par le propriétaire de l'équipe) |
Le owner de l'équipe est le créateur et ne peut pas être invité. Le transfert du propriétaire s'effectue séparément via POST /api/members/transfer-ownership. Consulte Teams 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-ownershipInvitations
Accepter l'invitation
POST /api/invites/acceptObtenir les informations de l'invitation
GET /api/invites/infoParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
token | string | Jeton d'invitation |
Révoquer l'invitation
DELETE /api/invites/{inviteId}Renvoyer l'invitation
POST /api/invites/{inviteId}/resendAPI d'exploration
Recherche et consultation des jeux de données et projets publics partagés par la communauté. Consulte la documentation d'exploration.
Rechercher du contenu public
GET /api/explore/searchParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
q | string | Requête de recherche |
type | string | Type de ressource : all (par défaut), projects, datasets |
sort | string | Ordre de tri : stars (par défaut), newest, oldest, name-asc, name-desc, count-desc, count-asc |
offset | int | Décalage de pagination (par défaut : 0). Les résultats renvoient 20 éléments par page. |
Données de la barre latérale
GET /api/explore/sidebarRenvoie du contenu sélectionné pour la barre latérale d'exploration.
API utilisateur et paramètres
Gère ton profil, tes clés API, ton utilisation du stockage et tes paramètres de confidentialité des données. Consulte la documentation des paramètres.
Obtenir l'utilisateur par nom d'utilisateur
GET /api/usersParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
username | string | Nom d'utilisateur à rechercher |
Suivre ou ne plus suivre un utilisateur
PATCH /api/usersCorps :
{
"username": "target-user",
"followed": true
}Vérifier la disponibilité d'un nom d'utilisateur
GET /api/username/checkParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
username | string | Nom d'utilisateur à vérifier |
suggest | booléen | Optionnel : true pour inclure une suggestion s'il est déjà pris |
Paramètres
GET /api/settings
POST /api/settingsObtenir ou mettre à jour les paramètres du profil utilisateur (nom affiché, biographie, liens sociaux, etc.).
Icône de profil
POST /api/settings/icon
DELETE /api/settings/iconTélécharger ou supprimer l'avatar du profil.
Intégration
POST /api/onboardingTerminer le processus d'intégration (définir la région des données, le nom d'utilisateur).
API RGPD
Demande une exportation de toutes tes données ou supprime définitivement ton compte. Consulte la documentation des paramètres.
Obtenir le statut d'une tâche RGPD
GET /api/gdprParamètres de requête :
| Paramètre | Type | Description |
|---|---|---|
jobId | string | ID de la tâche RGPD à vérifier |
Renvoie le statut de la tâche. Pour les tâches d'exportation terminées, la réponse inclut une downloadUrl.
Démarrer le flux d'exportation ou de suppression
POST /api/gdprCorps :
{
"action": "export"
}{
"action": "delete",
"confirmationWord": "DELETE"
}Optionnel pour les espaces de travail d'équipe :
{
"action": "delete",
"confirmationWord": "DELETE",
"teamUsername": "my-team"
}La suppression d'un compte est permanente et ne peut pas être annulée. Toutes les données, modèles et déploiements seront supprimés.
Codes d'erreur
| Code | Statut HTTP | Description |
|---|---|---|
UNAUTHORIZED | 401 | Clé API invalide ou manquante |
FORBIDDEN | 403 | Permissions insuffisantes |
NOT_FOUND | 404 | Ressource non trouvée |
VALIDATION_ERROR | 400 | Données de requête invalides |
RATE_LIMITED | 429 | Trop de requêtes |
INTERNAL_ERROR | 500 | Erreur serveur |
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 le streaming de métriques en temps réel.
Installation et configuration
pip install ultralyticsVérifie l'installation :
yolo checkL'intégration à la plateforme nécessite ultralytics>=8.4.35. Les versions inférieures ne fonctionneront PAS avec la plateforme.
Authentification
yolo settings api_key=YOUR_API_KEYUtilisation des jeux de données de la plateforme
Référence les datasets avec des 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 de l'URI :
| Modèle | Description |
|---|---|
ul://username/datasets/slug | Dataset |
ul://username/project-name | Projet |
ul://username/project/model-name | Modèle spécifique |
ul://ultralytics/yolo26/yolo26n | Modè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
- Sortie console
- Métriques système
Exemples d'API
Charger 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écuter l'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 probabilitiesExporter le modèle :
# 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)Validation :
metrics = model.val(data="ul://username/datasets/my-dataset")
print(f"mAP50: {metrics.box.map50}")
print(f"mAP50-95: {metrics.box.map}")Webhooks
La plateforme utilise des webhooks internes pour diffuser les métriques d'entraînement en temps réel depuis le SDK Python ultralytics (s'exécutant sur des GPU cloud ou des machines distantes/locales) vers la plateforme — perte par époque, mAP, statistiques système et statut d'achèvement. Ces webhooks sont authentifiés via le webhookSecret HMAC fourni pour chaque travail d'entraînement et ne sont pas destinés à être consommés par des applications utilisateur.
Tous les plans : La progression de l'entraînement via le SDK ultralytics (métriques en temps réel, notifications d'achèvement) fonctionne automatiquement sur chaque plan — définis simplement project=username/my-project name=my-run lors de l'entraînement et le SDK envoie les événements à la plateforme. Aucun enregistrement de webhook côté utilisateur n'est requis.
Les abonnements aux webhooks côté utilisateur (callbacks POST vers une URL que tu contrôles) sont sur la roadmap Enterprise et ne sont pas disponibles actuellement. En attendant, interroge GET /api/models/{modelId}/training pour le statut ou utilise le flux d'activité dans l'interface utilisateur.
FAQ
Comment paginer les grands résultats ?
La plupart des endpoints utilisent un paramètre limit pour contrôler combien de résultats sont renvoyés par requête :
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/datasets?limit=50"Les endpoints Activité et Corbeille prennent également en charge un paramètre page pour une 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 de recherche Explore 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 ?
Oui, toutes les fonctionnalités sont disponibles via REST. Le SDK Python est un wrapper pratique qui ajoute des fonctionnalités comme le streaming de métriques en temps réel et les téléchargements automatiques de modèles. Tu peux également explorer tous les endpoints de manière interactive sur platform.ultralytics.com/api/docs.
Existe-t-il des bibliothèques clientes API ?
Actuellement, utilise le package Python Ultralytics ou effectue des requêtes HTTP directes. Des bibliothèques clientes officielles pour d'autres langages sont prévues.
Comment gérer les limites de débit (rate limits) ?
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 Exception("Rate limit exceeded")Comment trouver l'ID de mon modèle ou de mon dataset ?
Les ID de ressources sont renvoyés lorsque tu crées des ressources via l'API. Tu peux aussi les trouver dans l'URL de la plateforme :
https://platform.ultralytics.com/username/project/model-name
^^^^^^^^ ^^^^^^^ ^^^^^^^^^^
username project modelUtilise les endpoints de liste pour rechercher par nom ou filtrer par projet.