Passer au contenu

REST API

Ultralytics fournit une REST API complète REST API l'accès programmatique aux ensembles de données, aux modèles, à la formation et aux déploiements.

Démarrage rapide

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

# Run inference on a model
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@image.jpg" \
  https://platform.ultralytics.com/api/models/MODEL_ID/predict

Authentification

Toutes les requêtes API nécessitent une authentification via une clé API.

Obtenir une clé API

  1. Allez dans Paramètres > Clés API
  2. Cliquez sur Créer une clé
  3. Copiez la clé générée.

Consultez la section Clés API pour obtenir des instructions détaillées.

En-tête d'autorisation

Incluez votre clé API dans toutes les requêtes :

Authorization: Bearer ul_your_api_key_here

Exemple

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

URL de base

Tous les points de terminaison API utilisent :

https://platform.ultralytics.com/api

Limites de débit

PlanDemandes/MinuteDemandes/jour
Gratuit601,000
Pro30050,000
EntreprisePersonnaliséPersonnalisé

Les en-têtes de limitation de débit sont inclus dans les réponses :

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 55
X-RateLimit-Reset: 1640000000

Format de réponse

Toutes les réponses sont au format JSON :

{
  "success": true,
  "data": { ... },
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 100
  }
}

Réponses d'erreur

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid dataset ID",
    "details": { ... }
  }
}

API des ensembles de données

Lister les ensembles de données

GET /api/datasets

Paramètres de requête :

ParamètreTypeDescription
pageintNuméro de page (par défaut : 1)
limitintÉléments par page (par défaut : 20)
taskchaîneFiltrer par type de tâche

Réponse :

{
    "success": true,
    "data": [
        {
            "id": "dataset_abc123",
            "name": "my-dataset",
            "slug": "my-dataset",
            "task": "detect",
            "imageCount": 1000,
            "classCount": 10,
            "visibility": "private",
            "createdAt": "2024-01-15T10:00:00Z"
        }
    ]
}

Obtenir l'ensemble de données

GET /api/datasets/{datasetId}

Créer un ensemble de données

POST /api/datasets

Corps :

{
    "name": "my-dataset",
    "task": "detect",
    "description": "A custom detection dataset"
}

Supprimer l'ensemble de données

DELETE /api/datasets/{datasetId}

Exporter l'ensemble de données

POST /api/datasets/{datasetId}/export

Renvoie l'URL de téléchargement au format NDJSON.

API Projets

Liste des projets

GET /api/projects

Obtenir le projet

GET /api/projects/{projectId}

Créer un projet

POST /api/projects

Corps :

{
    "name": "my-project",
    "description": "Detection experiments"
}

Supprimer le projet

DELETE /api/projects/{projectId}

API des modèles

Liste des modèles

GET /api/models

Paramètres de requête :

ParamètreTypeDescription
projectIdchaîneFiltrer par projet
taskchaîneFiltrer par type de tâche

Obtenir le modèle

GET /api/models/{modelId}

Télécharger le modèle

POST /api/models

Formulaire en plusieurs parties :

ChampTypeDescription
filefichierModèle de fichier .pt
projectIdchaîneProjet cible
namechaîneNom du modèle

Supprimer le modèle

DELETE /api/models/{modelId}

Télécharger le modèle

GET /api/models/{modelId}/files

Renvoie les URL de téléchargement signées pour les fichiers de modèle.

Exécuter l'inférence

POST /api/models/{modelId}/predict

Formulaire en plusieurs parties :

ChampTypeDescription
filefichierFichier image
confflottantSeuil de confiance
iouflottantIoU

Réponse :

{
    "success": true,
    "predictions": [
        {
            "class": "person",
            "confidence": 0.92,
            "box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
        }
    ]
}

API de formation

Démarrer l'entraînement

POST /api/training/start

Corps :

{
    "modelId": "model_abc123",
    "datasetId": "dataset_xyz789",
    "epochs": 100,
    "imageSize": 640,
    "gpuType": "rtx-4090"
}

Obtenir le statut de formation

GET /api/models/{modelId}/training

Annuler la formation

DELETE /api/models/{modelId}/training

API de déploiements

Liste des déploiements

GET /api/deployments

Paramètres de requête :

ParamètreTypeDescription
modelIdchaîneFiltrer par modèle

Créer un déploiement

POST /api/deployments

Corps :

{
    "modelId": "model_abc123",
    "region": "us-central1",
    "minInstances": 0,
    "maxInstances": 10
}

Obtenir le déploiement

GET /api/deployments/{deploymentId}

Commencer le déploiement

POST /api/deployments/{deploymentId}/start

Arrêter le déploiement

POST /api/deployments/{deploymentId}/stop

Supprimer le déploiement

DELETE /api/deployments/{deploymentId}

Obtenir des mesures

GET /api/deployments/{deploymentId}/metrics

Obtenir les journaux

GET /api/deployments/{deploymentId}/logs

Paramètres de requête :

ParamètreTypeDescription
severitychaîneINFO, AVERTISSEMENT, ERREUR
limitintNombre d'entrées

API d'exportation

Exportations de listes

GET /api/exports

Créer une exportation

POST /api/exports

Corps :

{
    "modelId": "model_abc123",
    "format": "onnx"
}

Formats pris en charge :

onnx, torchscript, openvino, tensorrt, coreml, tflite, saved_model, graphdef, paddle, ncnn, edgetpu, tfjs, mnn, rknn, imx, axelera, executorch

Obtenir le statut d'exportation

GET /api/exports/{exportId}

API d'activité

Suivez et gérez les événements liés à l'activité de votre compte.

Activité de liste

GET /api/activity

Paramètres de requête :

ParamètreTypeDescription
startDatechaîneFiltrer par date (ISO)
endDatechaîneFiltre à ce jour (ISO)
searchchaîneRechercher dans les messages d'événement

Marquer les événements vus

POST /api/activity/mark-seen

Archives des événements

POST /api/activity/archive

API Trash

Gérer les ressources supprimées de manière temporaire (conservation pendant 30 jours).

Liste Corbeille

GET /api/trash

Restaurer l'élément

POST /api/trash

Corps :

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

Vider la corbeille

POST /api/trash/empty

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

API de facturation

Gérer les crédits et les abonnements.

Obtenir l'équilibre

GET /api/billing/balance

Réponse :

{
    "success": true,
    "data": {
        "cashBalance": 5000000,
        "creditBalance": 20000000,
        "reservedAmount": 0,
        "totalBalance": 25000000
    }
}

Micro-USD

Tous les montants sont exprimés en micro-USD (1 000 000 = 1,00 $) pour une comptabilité précise.

Obtenir le résumé d'utilisation

GET /api/billing/usage-summary

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

Créer une session de paiement

POST /api/billing/checkout-session

Corps :

{
    "amount": 25
}

Crée une session de paiement Stripe pour un achat par carte de crédit (5 $ à 1 000 $).

Créer un paiement par abonnement

POST /api/billing/subscription-checkout

Crée une session de paiement Stripe pour l'abonnement Pro.

Créer une session du portail

POST /api/billing/portal-session

Renvoie l'URL vers le portail de facturation Stripe pour la gestion des abonnements.

Obtenir l'historique des paiements

GET /api/billing/payments

Renvoie la liste des transactions de paiement provenant de Stripe.

API de stockage

Obtenir des informations sur le stockage

GET /api/storage

Réponse :

{
    "success": true,
    "data": {
        "used": 1073741824,
        "limit": 107374182400,
        "percentage": 1.0
    }
}

API RGPD

Points de terminaison conformes au RGPD pour l'exportation et la suppression des données.

Exporter/Supprimer les données du compte

POST /api/gdpr

Corps :

{
    "action": "export"
}
ActionDescription
exportTélécharger toutes les données du compte
deleteSupprimer le compte et toutes les données

Action irréversible

La suppression du compte est définitive et irréversible. Toutes les données, tous les modèles et tous les déploiements seront supprimés.

Clés API API

Liste des clés API

GET /api/api-keys

Créer une clé API

POST /api/api-keys

Corps :

{
    "name": "training-server",
    "scopes": ["training", "models"]
}

Supprimer la clé API

DELETE /api/api-keys/{keyId}

Codes d'erreur

CodeDescription
UNAUTHORIZEDClé API invalide ou manquante
FORBIDDENAutorisations insuffisantes
NOT_FOUNDRessource introuvable
VALIDATION_ERRORDonnées de requête non valides
RATE_LIMITEDTrop de demandes
INTERNAL_ERRORErreur serveur

Assistance SDK

Pour faciliter l'intégration, utilisez lePython Ultralytics .

Exigences relatives à la version du package

L'intégration à la plateforme nécessite ultralytics>= 8.4.0. Les versions antérieures ne fonctionneront PAS avec la plateforme.

pip install "ultralytics>=8.4.0"
import os

from ultralytics import YOLO

# Set API key
os.environ["ULTRALYTICS_API_KEY"] = "ul_your_key"

# Train with Platform integration
model = YOLO("yolo11n.pt")
model.train(data="ul://username/datasets/my-dataset", project="username/my-project", name="experiment-1", epochs=100)

Webhooks

Les webhooks informent votre serveur des événements de la plateforme :

ÉvénementDescription
training.startedFormation commencée
training.epochÉpoque terminée
training.completedFormation terminée
training.failedÉchec de la formation
export.completedPrêt à l'exportation

La configuration des webhooks est disponible dans les forfaits Entreprise.

FAQ

Comment paginer des résultats volumineux ?

Utilisez page et limit paramètres :

GET /api/datasets?page=2 &
limit=50

Puis-je utiliser l'API sans SDK ?

Oui, toutes les fonctionnalités sont disponibles via REST. Le SDK est un wrapper pratique.

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

Actuellement, utilisez lePython Ultralytics ou effectuez 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 ?

Mettre en œuvre un recul exponentiel :

import time


def api_request_with_retry(url, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url)
        if response.status_code != 429:
            return response
        wait = 2**attempt
        time.sleep(wait)
    raise Exception("Rate limit exceeded")


📅 Créé il y a 0 jour ✏️ Mis à jour il y a 0 jour
glenn-jocher

Commentaires