YOLO Vision 2026:

مرجع REST API#

توفر Ultralytics Platform واجهة برمجة تطبيقات (REST API) شاملة للوصول البرمجي إلى مجموعات البيانات، النماذج، التدريب، وعمليات النشر.

Ultralytics Platform Interactive API Documentation

بدء التشغيل السريع
# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://platform.ultralytics.com/api/datasets
مستندات API التفاعلية

استكشف مرجع واجهة برمجة التطبيقات التفاعلي الكامل في Ultralytics Platform API docs.

نظرة عامة على API#

تم تنظيم API حول موارد المنصة الأساسية:

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
الموردالوصفالعمليات الرئيسية
مجموعات البياناتمجموعات الصور المصنفةCRUD، صور، تسميات، تصدير، إصدارات، استنساخ
المشاريعمساحات عمل التدريبCRUD، استنساخ، أيقونة
النماذجنقاط التحقق المدربةCRUD، تنبؤ، تنزيل، استنساخ، تصدير
عمليات النشرنقاط نهاية الاستدلال المخصصةCRUD، تشغيل/إيقاف، مقاييس، سجلات، حالة
عمليات التصديروظائف تحويل التنسيقإنشاء، حالة، تنزيل
التدريبوظائف تدريب Cloud GPUبدء، حالة، إلغاء
الفوترةالأرصدة والاستخدامالرصيد، الاستخدام، والمعاملات
الفرقالتعاون في مساحة العملمساحات العمل، الأعضاء، والأدوار

المصادقة#

تستخدم واجهات برمجة تطبيقات الموارد (Resource APIs) المصادقة عبر مفتاح API، بما في ذلك إدارة فئات مجموعات البيانات وتقسيمها، والنسخ، والتدريب، والتصدير، والنشر، وعمليات قراءة الحساب المدعومة. تدعم نقاط النهاية العامة الوصول المجهول حيثما أشير إلى ذلك. تُستثنى مسارات التطبيق المخصصة للمتصفح فقط.

الحصول على مفتاح API#

  1. انتقل إلى Settings > API Keys
  2. انقر على Create Key
  3. انسخ المفتاح الذي تم إنشاؤه

راجع API Keys للحصول على تعليمات تفصيلية.

رأس التفويض#

قم بتضمين مفتاح API الخاص بك في جميع الطلبات:

Authorization: Bearer YOUR_API_KEY
تنسيق مفتاح API

تستخدم مفاتيح واجهة برمجة التطبيقات التنسيق ul_ متبوعاً بـ 40 حرفاً ست عشرياً. حافظ على سرية مفتاحك — لا تقم أبدًا بإدراجـه في نظام التحكم في الإصدارات أو مشاركته علنًا.

مثال#

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

عنوان URL الأساسي#

تستخدم جميع نقاط نهاية API:

https://platform.ultralytics.com/api

حدود المعدل#

تفرض واجهة برمجة التطبيقات (API) حدوداً تعتمد على نافذة منزلقة مدعومة بـ Upstash Redis لكل مفتاح API. تستخدم كل مسار الفئة المطابقة أدناه.

عند تجاوز الحد المسموح به، ترجع واجهة برمجة التطبيقات 429 مع بيانات التعريف الخاصة بإعادة المحاولة:

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

حدود كل مفتاح API#

يتم تطبيق حدود المعدل تلقائيًا بناءً على نقطة النهاية التي يتم استدعاؤها. تحتوي العمليات المكلفة على حدود أكثر صرامة لمنع إساءة الاستخدام، بينما تشترك عمليات CRUD القياسية في حد افتراضي سخي:

الفئةالحدينطبق على
Default100 طلب/دقيقةالمسارات غير المعينة لأي فئة أدناه
Training10 طلبات/دقيقةبدء التدريب السحابي
Upload10 طلبات/دقيقةعناوين URL الموقعة للرفع، وإتمام الرفع، واستيعاب مجموعات البيانات
Predict20 طلب/دقيقةاستدلال النموذج والنشر من خلال مسارات واجهة برمجة تطبيقات المنصة (Platform API)
التصدير20 طلب/دقيقةمسارات تصدير النماذج ومسارات تصدير/إصدار مجموعات البيانات
Download30 طلب/دقيقةتنزيلات ملفات النماذج
تعديل (Mutation)10 طلبات/دقيقةإنشاء الفرق، وتغييرات تكامل التخزين، ومفاتيح واجهة برمجة التطبيقات (API)، والأعضاء، والدعوات، وبدء/إيقاف النشر
الفواتير5 طلبات/دقيقةمسارات الشحن التلقائي وإتمام الاشتراك
ترطيب البيانات (Hydrate)20 طلب/دقيقةترطيب مجموعة مختارة من صور مجموعة البيانات
التجميع (Clustering)10 طلبات/دقيقةتجميع صور مجموعة البيانات

كل فئة لديها عداد مستقل لكل مفتاح API. على سبيل المثال، إجراء 20 طلب تنبؤ لا يؤثر على مخصصاتك الافتراضية البالغة 100 طلب/دقيقة.

نقاط النهاية المخصصة (غير محدودة)#

نقاط النهاية المخصصة لا تخضع لحدود معدل استخدام مفتاح واجهة برمجة تطبيقات المنصة عندما تقوم باستدعاء عنوان URL لنقطة النهاية مباشرةً (على سبيل المثال، https://predict-abc123.run.app/predict). تعتمد الإنتاجية بعد ذلك على تكوين الخدمة المُنشَرَة.

التعامل مع حدود المعدل

عندما تتلقى رمز الحالة 429، انتظر لمدة Retry-After (أو حتى X-RateLimit-Reset) قبل إعادة المحاولة. راجع rate limit FAQ لمعرفة كيفية تنفيذ التراجع الأسي.

تنسيق الاستجابة#

استجابات النجاح#

تعيد الاستجابات JSON مع حقول خاصة بالمورد:

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

استجابات الخطأ#

{
    "error": "Dataset not found"
}
حالة HTTPالمعنى
200نجاح
201تم الإنشاء
400طلب غير صالح
401المصادقة مطلوبة
403أذونات غير كافية
404المورد غير موجود
409تعارض (مكرر)
429تم تجاوز حد المعدل
500خطأ في الخادم

API مجموعات البيانات#

إنشاء، تصفح، وإدارة مجموعات بيانات الصور المصنفة لتدريب نماذج YOLO. راجع Datasets documentation.

سرد مجموعات البيانات#

GET /api/datasets

معلمات الاستعلام:

المعاملالنوعالوصف
usernamestringالتصفية حسب اسم المستخدم
limitintالعناصر في كل صفحة (الافتراضي: 1000، الحد الأقصى: 1000)
ownerstringاسم مستخدم مالك مساحة العمل
includeImageUrlsbooleanتضمين عناوين URL لصور عينة موقعة بالحجم الكامل (الافتراضي: false)
includeSamplesbooleanاضبط false لاستبعاد صور العينات وتقليل حجم الاستجابة.
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/datasets?limit=10"

الاستجابة:

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

الحصول على مجموعة بيانات#

GET /api/datasets/{datasetId}

يعيد تفاصيل مجموعة البيانات بما في ذلك أسماء الفئات، وأعداد التقسيم، والخصائص الأخرى المُدارة بواسطة Platform. يتم تحميل البيانات الوصفية المخصصة بشكل منفصل من نقطة النهاية للبيانات الوصفية أدناه.

مرر username عندما يكون {datasetId} اسماً مختصراً لمجموعة بيانات بدلاً من المعرّف.

إنشاء مجموعة بيانات#

POST /api/datasets

الجسم (Body):

{
    "slug": "my-dataset",
    "name": "My Dataset",
    "task": "detect",
    "description": "A custom detection dataset",
    "metadata": { "location": "factory-1", "reviewed": true },
    "visibility": "private",
    "classNames": ["person", "car"]
}
المهام المدعومة

قيم task الصالحة: detect، segment، semantic، classify، pose، و obb.

الاستجابة:

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

تحديث مجموعة بيانات#

PATCH /api/datasets/{datasetId}

الجسم (تحديث جزئي):

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

أرسل كائن metadata فارغاً ({}) لمسح البيانات الوصفية المخصصة. يقتصر كائن البيانات الوصفية المُسلسل على 500,000 حرف، ويقتصر كل مفتاح في المستوى العلوي على 128 حرفاً.

الحصول على البيانات الوصفية لمجموعة البيانات#

GET /api/datasets/{datasetId}/metadata

يعيد كائن البيانات الوصفية المخصصة ومجموعة منسقة من أزواج الحقول/القيم المُدارة بواسطة Ultralytics وقراءة فقط. يتم استبعاد البيانات الوصفية المخصصة عمداً من حمولات مجموعة البيانات العادية. المصادقة والوصول إلى مساحة عمل مجموعة البيانات مطلوبان.

أيقونة مجموعة البيانات#

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

قم بتحميل أيقونة WebP بحجم يصل إلى 5 ميغابايت كحقل نموذج متعدد الأجزاء image، أو قم بإزالة الأيقونة الحالية.

حذف مجموعة بيانات#

DELETE /api/datasets/{datasetId}

يقوم بحذف مجموعة البيانات حذفاً ناعماً (تُنقل إلى trash، ويمكن استرجاعها لمدة 30 يوماً).

استنساخ مجموعة البيانات#

POST /api/datasets/{datasetId}/clone

ينشئ نسخة من مجموعة بيانات عامة، أو مملوكة، أو قابلة للتعديل داخل مساحة العمل مع جميع الصور والتصنيفات.

جسم الطلب الاختياري (جميع الحقول اختيارية):

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

تصدير مجموعة البيانات#

GET /api/datasets/{datasetId}/export

إرجاع استجابة JSON مع رابط تنزيل موقع لأحدث تصدير لمجموعة البيانات.

معلمات الاستعلام:

المعاملالنوعالوصف
vintegerرقم الإصدار (يبدأ من 1). إذا تم تخطيه، يتم إرجاع أحدث تصدير قابل للتعديل، مع إعادة استخدامه عندما لم تتغير مجموعة البيانات.

الاستجابة:

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

إنشاء إصدار مجموعة بيانات#

POST /api/datasets/{datasetId}/export

إنشاء لقطة إصدار مرقمة جديدة لمجموعة البيانات. يتطلب هذا صلاحيات محرر (Editor) أو أعلى. يلتقط الإصدار عدد الصور الحالي، وعدد الفئات، وعدد التعليقات التوضيحية، وتوزيع التقسيم، ثم ينشئ ويخزن تصدير NDJSON غير قابل للتغيير.

جسم الطلب:

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

جميع الحقول اختيارية. الحقل description هو تسمية يوفرها المستخدم للإصدار.

الاستجابة:

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

تحديث وصف الإصدار#

PATCH /api/datasets/{datasetId}/export

تحديث وصف إصدار موجود. يتطلب هذا صلاحيات محرر (Editor) أو أعلى.

جسم الطلب:

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

الاستجابة:

{
    "ok": true
}

استعادة إصدار مجموعة البيانات#

POST /api/datasets/{datasetId}/restore

إعادة بناء صور مجموعة البيانات، والتعليقات التوضيحية، والفئات من إصدار محفوظ دون نسخ بايتات الصور.

{
    "version": 2
}

الحصول على إحصائيات الفئة#

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

إرجاع توزيع الفئات، وخريطة الحرارة للموقع، وإحصائيات الأبعاد. يتم تخزين النتائج مؤقتًا لمدة تصل إلى 5 دقائق.

الاستجابة:

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

إدارة الفئات#

دمج الفئات (إعادة تعيين التعليقات التوضيحية من الفئات المصدر إلى فئة مستهدفة، ثم إزالة المصادر):

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

معرفات الفئات (Class IDs) مرتبطة بالموضع، لذا فإن الدمج ليس متماثلاً (idempotent). أعد جلب مجموعة البيانات قبل المحاولة مرة أخرى.

حذف الفئات:

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

إعادة توزيع التقسيمات#

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

إعادة تعيين الصور عشوائياً عبر تقسيمات التدريب، والتحقق، والاختبار. يجب أن يبلغ مجموع النسب المئوية 100.

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

تضمينات (Embeddings) مجموعة البيانات#

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

يقوم GET بإرجاع ملخص تحليل UMAP الحالي وحالة الوظيفة النشطة؛ ويقوم POST بوضع وظيفة تحليل التضمينات في قائمة الانتظار؛ ويقوم DELETE بإلغاء الوظيفة النشطة.

تجميع الصور#

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

إرجاع تخطيط UMAP ثنائي الأبعاد والبيانات الوصفية لكل صورة لعرض التشتت المجمع (مقسم إلى صفحات ومحدد المعدل).

الحصول على النماذج المدربة على مجموعة البيانات#

GET /api/datasets/{datasetId}/models

إرجاع النماذج التي تم تدريبها باستخدام مجموعة البيانات هذه.

الاستجابة:

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

التصنيف التلقائي لمجموعة البيانات#

POST /api/datasets/{datasetId}/predict

تشغيل استدلال YOLO على صور مجموعة البيانات لإنشاء التعليقات التوضيحية تلقائيًا. يستخدم نموذجًا محددًا للتنبؤ بالملصقات للصور غير المعلقة.

الجسم (Body):

الحقلالنوعمطلوبالوصف
imageHashstringنعمتجزئة (Hash) الصورة المراد إضافة تعليق توضيحي لها
modelIdstringلاالنموذج المراد استخدامه للاستدلال، كمعرّف URI من نوع ul:// (مثل ul://username/project/model). إذا تم تخطيه، يتم استخدام النموذج الافتراضي الخاص بمهمة مجموعة البيانات.
confidencefloatلاعتبة الثقة (الافتراضي: 0.25)
ioufloatلاعتبة IoU (الافتراضي: 0.7)

استيعاب مجموعة البيانات#

POST /api/datasets/ingest

إنشاء مهمة استيعاب مجموعة بيانات لمجموعة بيانات موجودة. يتم تمرير مجموعة بيانات الهدف دائماً كـ datasetId في جسم JSON، وليس في مسار عنوان URL.

يتطلب جسم الطلب datasetId بالإضافة إلى عنصر واحد فقط من sessionId (جلسة تحميل لأرشيف مُحَمَّل) أو sourceUrl (عنوان URL بعيد لملف ZIP، TAR، TAR.GZ، TGZ، أو NDJSON). أضف targetSplit الاختياري (train، val، أو test) لتجاوز هيكل التقسيم للأرشيف. لإرفاق بيانات مخصصة، استخدم imageMetadata، مفتاحياً بواسطة المسار النسبي الدقيق للأرشيف لكل صرة أو قيمة file لملف NDJSON.

بالنسبة للأرشيفات المُحَمَّلة، تكون جلسة التحميل مرتبطة مسبقاً بمجموعة البيانات بواسطة assetId المُمرَّر إلى POST /api/upload/signed-url؛ يتحقق الاستيعاب من أن assetId يتطابق مع جسم datasetId. تقوم إدخالات classMapping الاختيارية بربط كل اسم فئة وارد بفهرس فئة حالي يبدأ من الصفر، أو اسم فئة لإعادة استخدامه أو إنشائه، أو null لتخطي الفئة. بالنسبة لعمليات الاستيراد البعيدة لـ sourceUrl، أنشئ مجموعة البيانات أولاً، ثم مرر datasetId الخاص بها للاستيعاب.

النص (أرشيف مرفوع):

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

الجسم (صورة واحدة أو عدة صور مع البيانات الوصفية):

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

تستخدم الصور المحلية تدفق تحميل الأرشيف الحالي، بغض النظر عما إذا كان الأرشيف يحتوي على صورة واحدة أو صور متعددة. يجب أن يتطابق المفتاح مع المسار المُطَبَّع داخل الأرشيف، بما في ذلك المجلدات. بالنسبة لعمليات استيراد NDJSON، يمكن أن يحتوي سجل كل صورة بدلاً من ذلك على كائن metadata الخاص به. يحظى metadata الخاص بسجل معين بالأولوية على إدخال imageMetadata المتطابق.

البيانات الوصفية هي بتنسيق JSON وتدعم القيم المتداخلة. تقتصر مسارات الأرشيف على 1,024 حرفاً، ومفاتيح البيانات الوصفية ذات المستوى الأعلى على 128 حرفاً، وكل كائن بيانات وصفية على 500,000 حرف متسلسل. يقتصر خريطة imageMetadata الكاملة، أو البيانات الوصفية الفعالة المدمجة عبر استيراد NDJSON، أيضاً على 500,000 حرف متسلسل. يتم تضمين هذه القيود في interactive OpenAPI schema.

تحميل صورة واحدة مع البيانات الوصفية باستخدام Python

يتعامل نفس الكود مع مجموعة من الصور: أضف المزيد من الملفات إلى ملف ZIP وإدخالات متطابقة إلى 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())

النص (أرشيف عن بُعد أو NDJSON):

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

النص البرمجي (للإدخال اللاحق، استيراد التسميات):

{
    "datasetId": "dataset_abc123",
    "sessionId": "session_abc123",
    "classMapping": { "person": 0, "automobile": "car", "background": null }
}
تعيين الفئات

ينشئ الاستيعاب الأول الفئات من الأرشيف تلقائياً. في عمليات الاستيعاب اللاحقة، تعود فئات الأرشيف المستبعدة من classMapping أولاً إلى مطابقة غير حساسة لحالة الأحرف مع فئات مجموعة البيانات الحالية. يتم تخطي التسميات فقط للفئات المرصودة صراحةً إلى null أو التي ليس لها فئة حالية مطابقة.

الاستجابة:

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

صور مجموعة البيانات#

سرد الصور#

GET /api/datasets/{datasetId}/images

معلمات الاستعلام:

المعاملالنوعالوصف
splitstringالتصفية حسب التقسيم: train، val، test
offsetintإزاحة الترقيم (الافتراضي: 0)
limitintالعناصر في كل صفحة (الافتراضي: 50، الحد الأقصى: 5000)
sortstringترتيب الفرز: newest، oldest، name-asc، name-desc، height-asc، height-desc، width-asc، width-desc، size-asc، size-desc، labels-asc، labels-desc (بعضها معطل لمجموعات بيانات الصور التي تزيد عن 100 ألف)
hasLabelstringالتصفية حسب حالة التسمية (true أو false)
hasErrorstringالتصفية حسب حالة الخطأ (true أو false)
searchstringمطابقة الجزء النصي على اسم الملف ومفاتيح البيانات الوصفية المخصصة، والقيم العددية، ومدخلات المصفوفة (لا يتم مطابقة القيم المتداخلة في الكائنات الفرعية)؛ سلسلة ست عشرية مكونة من 32 حرفاً هي بحث دقيق عن تجزئة الصورة
classIdsstringمعرفات الفئات مفصولة بفواصل؛ يقوم بإرجاع الصور التي تحتوي على أي من الفئات المحددة
includeThumbnailsstringتضمين عناوين URL للصور المصغرة الموقعة (الافتراضي: true)
includeImageUrlsstringتضمين عناوين URL للصور الكاملة الموقعة (الافتراضي: false)

الحصول على الصور المحددة#

POST /api/datasets/{datasetId}/images

يعيد نفس شكل الصورة لما يصل إلى 1000 معرف صورة مقدم. يقبل نفس عناصر التحكم في الرابط والاستعلام عن التصنيفات كما في عملية القائمة.

{
    "imageIds": ["IMAGE_OBJECT_ID"]
}

الحصول على روابط الصور الموقعة#

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

الحصول على روابط موقعة لمجموعة من تجزئات الصور (للعرض في المتصفح).

حذف صورة#

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

الحصول على ملصقات الصور#

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

إرجاع التعليقات التوضيحية وأسماء الفئات لصورة معينة.

تحديث ملصقات الصور#

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

الجسم (Body):

{
    "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] }
    ]
}
تنسيق الإحداثيات

تستخدم إحداثيات التسمية قيم YOLO المُطَبَّعَة بين 0 و 1. تستخدم مربعات الإحاطة [x_center, y_center, width, height]. تستخدم تسميات التجزئة segments، وهي قائمة مسطحة لرؤوس المضلع [x1, y1, x2, y2, ...].

عمليات الصور الجماعية#

نقل الصور بين التقسيمات (train/val/test) داخل مجموعة البيانات:

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

حذف الصور بشكل جماعي:

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

API المشاريع#

قم بتنظيم نماذجك في مشاريع. ينتمي كل نموذج إلى مشروع واحد. راجع Projects documentation.

سرد المشاريع#

GET /api/projects

معلمات الاستعلام:

المعاملالنوعالوصف
usernamestringالتصفية حسب اسم المستخدم
limitintالعناصر في كل صفحة
ownerstringاسم مستخدم مالك مساحة العمل

الحصول على مشروع#

GET /api/projects/{projectId}

إنشاء مشروع#

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

تحديث مشروع#

PATCH /api/projects/{projectId}

الجسم (تحديث جزئي):

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

أرسل كائن metadata فارغاً ({}) لمسحه. تستخدم البيانات الوصفية للمشروع نفس حدود مفتاح المستوى العلوي البالغة 128 حرفاً وحدود الكائن المُسلسل البالغة 500,000 حرف مثل بيانات مجموعة البيانات الوصفية.

الحصول على البيانات الوصفية للمشروع#

GET /api/projects/{projectId}/metadata

يعيد كائن البيانات الوصفية المخصصة وأزواج الحقول/القيم المُدارة بواسطة Ultralytics ذات القراءة فقط. المصادقة والوصول إلى مساحة عمل المشروع مطلوبان.

حذف مشروع#

DELETE /api/projects/{projectId}

يحذف المشروع حذفاً ناعماً (يُنقل إلى trash).

استنساخ مشروع#

POST /api/projects/{projectId}/clone

يقوم بنسخ مشروع مساحة عمل عام، مملوك، أو قابل للتعديل ونماذجه إلى حسابك أو مساحة عملك. يقبل جسم JSON اختياري تجاوزات name، slug، description، visibility، license، ووجهة owner.

أيقونة المشروع#

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

قم بتحميل أيقونة WebP بحجم يصل إلى 5 ميغابايت كحقل نموذج متعدد الأجزاء image، أو قم بإزالة الأيقونة الحالية.


API النماذج#

إدارة نماذج YOLO المُدَرَّبَة — عرض المقاييس، تنزيل الأوزان، تشغيل الاستدلال، والتصدير إلى تنسيقات أخرى. راجع Models documentation.

سرد النماذج#

GET /api/models

معلمات الاستعلام:

المعاملالنوعمطلوبالوصف
projectIdstringنعممعرف المشروع (مطلوب)
fieldsstringلامجموعة الحقول: summary، charts
idsstringلامعرفات النماذج مفصولة بفواصل
limitintلاالحد الأقصى للنتائج (الافتراضي 20، الحد الأقصى 100)

سرد النماذج المكتملة#

GET /api/models/completed

يعيد ما يصل إلى 1,000 نموذج بأوزان قابلة للاستخدام عبر جميع المشاريع للتدريب والنشر. مرر owner لمساحة عمل.

الحصول على نموذج#

GET /api/models/{modelId}

إنشاء نموذج#

POST /api/models

جسم JSON:

الحقلالنوعمطلوبالوصف
projectIdstringنعممعرف المشروع المستهدف
slugstringلارابط URL (أحرف أبجدية رقمية صغيرة/واصلات)
namestringلااسم العرض (بحد أقصى 100 حرف)
descriptionstringلاوصف النموذج (بحد أقصى 1000 حرف)
metadataكائنلابيانات JSON الوصفية المخصصة
taskstringلانوع المهمة (detect، segment، semantic، depth، pose، obb، classify)
رفع ملف النموذج

لإرفاق أوزان .pt، اطلب عنوان URL تحميل موقعاً مع assetType: models ومعرّف هذا النموذج كـ assetId، قم بتحميل الملف، ثم استدعِ POST /api/upload/complete مع sessionId المُعَاد.

تحديث نموذج#

PATCH /api/models/{modelId}

الجسم (تحديث جزئي):

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

أرسل كائن metadata فارغاً ({}) لمسحه. بيانات النموذج الوصفية المخصصة منفصلة عن معلومات النموذج المملوكة للتدريب، وتفاصيل البيئة، ووسائط التدريب، وتستخدم نفس حدود الكائن المُسلسل ومفاتيح المستوى العلوي مثل بيانات مجموعة البيانات الوصفية.

الحصول على البيانات الوصفية للنموذج#

GET /api/models/{modelId}/metadata

يعيد كائن البيانات الوصفية المخصصة وأزواج الحقول/القيم المُدارة بواسطة Ultralytics ذات القراءة فقط. المصادقة والوصول إلى مساحة عمل النموذج مطلوبان.

حذف نموذج#

DELETE /api/models/{modelId}

تنزيل ملفات النموذج#

GET /api/models/{modelId}/files

إرجاع روابط تنزيل موقعة لملفات النموذج.

استنساخ نموذج#

POST /api/models/{modelId}/clone

استنسخ نموذجاً عاماً، أو مملوكاً، أو قابلاً للتعديل في مساحة العمل إلى أحد مشاريعك.

الجسم (Body):

{
    "targetProjectSlug": "my-project",
    "modelName": "cloned-model",
    "description": "Cloned from public model",
    "owner": "team-username"
}
الحقلالنوعمطلوبالوصف
targetProjectSlugstringنعمرابط المشروع الوجهة
modelNamestringلااسم النموذج المستنسخ
descriptionstringلاوصف النموذج
ownerstringلااسم مستخدم الفريق (لاستنساخ مساحة العمل)

تتبع التنزيل#

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

تتبع تحليلات تنزيل النموذج.

تشغيل الاستنتاج#

POST /api/models/{modelId}/predict

يمكن التنبؤ بالنماذج العامة بدون مصادقة. تتطلب النماذج الخاصة والمشتركة مفتاح API مع صلاحية الوصول إلى المشروع الأصل.

نموذج Multipart:

المعاملالنوعالافتراضيالنطاقالوصف
fileملف--ملف صورة أو فيديو (مطلوب ما لم يتم تعيين source)
conffloat0.250.01 – 1.0الحد الأدنى لعتبة الثقة
ioufloat0.70.0 – 0.95عتبة NMS IoU
imgszint64032 – 1280حجم صورة الإدخال بالبكسل
normalizeمنطقي (bool)false-إرجاع إحداثيات صندوق الإحاطة (bounding box) كـ 0 – 1
decimalsint50 – 10الدقة العشرية لقيم الإحداثيات
sourcestring--عنوان URL لصورة أو سلسلة base64 (بديل لـ file)

قم بتوفير إما file أو source. الحد الأقصى لحجم التحميل هو 100 ميغابايت.

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

الاستجابة:

تحتوي الاستجابات على shape لكل صورة، speed، results، وبيانات خريطة بكسل كثيفة اختيارية (خريطة فئة دلالية، أو خريطة عمق حيث يكون depth = pixel × max / divisor — مقسوم 255 لخريطة 8 بت الافتراضية، 65535 مع bits=12|16)، بالإضافة إلى metadata مع عدد الصور، توقيت الوظيفة، المهمة، وإصدارات الخدمة. لا يتم إرجاع مسارات النموذج الداخلية أبداً.

{
    "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 التدريب#

أطلق تدريب YOLO على وحدات معالجة الرسوميات السحابية (26 نوع وحدة معالجة رسوميات من RTX 2000 Ada إلى B300) وراقب التقدم في الوقت الفعلي. راجع Cloud Training documentation.

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

بدء التدريب#

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
أنواع GPU

تشمل أنواع وحدات معالجة الرسوميات المتاحة rtx-4090، a100-80gb-pcie، a100-80gb-sxm، h100-sxm، rtx-pro-6000، b300، وغيرها. راجع Cloud Training للحصول على القائمة الكاملة مع الأسعار.

الحصول على توفر GPU#

GET /api/training/gpu-availability

يعيد حالة مخزون وحدة معالجة الرسوميات الحالية (High، Medium، Low، أو null) مفتاحياً حسب معرّف نوع وحدة معالجة الرسوميات. عام، لا يتطلب مصادقة؛ مخزن مؤقتاً لمدة 5 دقائق.

الحصول على حالة التدريب#

GET /api/models/{modelId}/training

يعيد حالة وظيفة التدريب الحالية، والمقاييس، والتقدم، والتوقيت، وتفاصيل GPU، والأخطاء. يمكن الوصول إلى المشاريع العامة بدون مصادقة؛ وتتطلب المشاريع الخاصة والمشتركة مفتاح API مع صلاحية الوصول.

إلغاء التدريب#

DELETE /api/models/{modelId}/training

ينهي مثيل الحوسبة قيد التشغيل ويضع علامة على الوظيفة كملغاة.


API النشر#

انشر النماذج على نقاط نهاية استدلال مخصصة مع عمليات فحص الحالة والمراقبة. تستخدم عمليات النشر الجديدة التحجيم إلى الصفر افتراضياً، وتقبل واجهة برمجة التطبيقات كائن resources اختيارياً. راجع Endpoints documentation.

دعم مفتاح API حسب المسار

تقبل جميع مسارات النشر أدناه مصادقة مفتاح واجهة برمجة التطبيقات. للاستدلال عالي الإنتاجية، استدعِ عنوان URL الخاص بنقطة نهاية النشر (على سبيل المثال، https://predict-abc123.run.app/predict) مباشرةً باستخدام مفتاح واجهة برمجة التطبيقات الخاص بك. Dedicated endpoints لا تخضع لحدود المعدل.

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

سرد عمليات النشر#

GET /api/deployments

معلمات الاستعلام:

المعاملالنوعالوصف
modelIdstringالتصفية حسب النموذج
statusstringالتصفية حسب الحالة
limitintالحد الأقصى للنتائج (الافتراضي: 20، الحد الأقصى: 100)
ownerstringاسم مستخدم مالك مساحة العمل

إنشاء نشر#

POST /api/deployments

الجسم (Body):

{
    "modelId": "model_abc123",
    "name": "my-deployment",
    "region": "us-central1",
    "resources": {
        "cpu": 1,
        "memoryGi": 2,
        "minInstances": 0,
        "maxInstances": 1
    }
}
الحقلالنوعمطلوبالوصف
modelIdstringنعممعرف النموذج للنشر
namestringنعماسم النشر
regionstringنعممنطقة النشر
resourcesكائنلاتكوين الموارد (cpu، memoryGi، minInstances، maxInstances)

إنشاء نقطة نهاية استدلال مخصصة في المنطقة المحددة. نقطة النهاية متاحة عالمياً عبر رابط URL فريد.

الموارد الافتراضية

يرسل مربع حوار النشر حالياً القيم الافتراضية الثابتة لـ cpu=1، memoryGi=2، minInstances=0، و maxInstances=1. يقبل مسار واجهة برمجة التطبيقات كائن resources، ولكن حدود الخطة تحد من minInstances عند 0 و maxInstances عند 1.

اختيار المنطقة

اختر منطقة قريبة من مستخدميك للحصول على أقل زمن انتقال ممكن. تعرض واجهة مستخدم المنصة تقديرات زمن الانتقال لجميع المناطق الـ 42 المتاحة.

الحصول على نشر#

GET /api/deployments/{deploymentId}

حذف نشر#

DELETE /api/deployments/{deploymentId}

بدء نشر#

POST /api/deployments/{deploymentId}/start

استئناف عملية نشر متوقفة.

إيقاف نشر#

POST /api/deployments/{deploymentId}/stop

إيقاف تلبية الطلبات عن طريق تعيين الحد الأدنى والحد الأقصى لنسخ الخدمة إلى الصفر.

فحص الصحة#

GET /api/deployments/{deploymentId}/health

إرجاع حالة صحة نقطة نهاية النشر.

تشغيل الاستدلال على النشر#

POST /api/deployments/{deploymentId}/predict

إرسال صورة مباشرة إلى نقطة نهاية النشر للاستدلال. يعادل وظيفياً استدلال النموذج، ولكن يتم توجيهه عبر نقطة النهاية المخصصة لزمن انتقال أقل.

نموذج Multipart:

المعاملالنوعالافتراضيالنطاقالوصف
fileملف--ملف صورة أو فيديو (مطلوب ما لم يتم تعيين source)
conffloat0.250.01 – 1.0الحد الأدنى لعتبة الثقة
ioufloat0.70.0 – 0.95عتبة NMS IoU
imgszint64032 – 1280حجم صورة الإدخال بالبكسل
normalizeمنطقي (bool)false-إرجاع إحداثيات صندوق الإحاطة (bounding box) كـ 0 – 1
decimalsint50 – 10الدقة العشرية لقيم الإحداثيات
sourcestring--عنوان URL لصورة أو سلسلة base64 (بديل لـ file)

قم بتوفير إما file أو source. تستخدم الاستجابة نفس عقد الصورة والبيانات الوصفية كتنبؤ النموذج ولا ترجع أبداً مسار النموذج الداخلي.

الحصول على المقاييس#

GET /api/deployments/{deploymentId}/metrics

إرجاع مقاييس عدد الطلبات، وزمن الانتقال، ومعدل الخطأ مع بيانات الرسوم البيانية المصغرة (sparkline).

معلمات الاستعلام:

المعاملالنوعالوصف
rangestringنطاق الزمني: 1h، 6h، 24h (افتراضي)، 7d، 30d
sparklinestringاضبط على true لبيانات الخطوط الصغيرة (sparklines) المُحَسَّنة لعرض لوحة المعلومات

الحصول على السجلات#

GET /api/deployments/{deploymentId}/logs

معلمات الاستعلام:

المعاملالنوعالوصف
severitystringعامل تصفية مفصول بفواصل: DEBUG، INFO، WARNING، ERROR، CRITICAL
limitintعدد الإدخالات (افتراضي: 50، حد أقصى: 200)
pageTokenstringرمز الترقيم من الاستجابة السابقة

API التصدير#

تحويل النماذج إلى تنسيقات مُحَسَّنة مثل ONNX، TensorRT، CoreML، و LiteRT لنشر الحافة. راجع Deploy documentation.

سرد عمليات التصدير#

GET /api/exports

معلمات الاستعلام:

المعاملالنوعالوصف
modelIdstringمعرف النموذج (مطلوب)
statusstringالتصفية حسب الحالة
limitintالحد الأقصى للنتائج (الافتراضي: 20، الحد الأقصى: 100)

إنشاء تصدير#

POST /api/exports

الجسم (Body):

الحقلالنوعمطلوبالوصف
modelIdstringنعممعرف النموذج المصدر
formatstringنعمتنسيق التصدير (انظر الجدول أدناه)
gpuTypestringشرطيمطلوب عندما يكون format هو engine؛ استخدم GPU or Jetson target مدعوماً
argsكائنلاوسائط التصدير (imgsz، quantize، dynamic، إلخ)
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

التنسيقات المدعومة:

استخدم وسيط format من جدول التصدير المشترك أدناه. PyTorch هو تنسيق المصدر وليس هدف تصصدير لواجهة برمجة التطبيقات.

التنسيقوسيط formatالنموذجالبيانات الوصفيةالوسائط (Arguments)
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

الحصول على حالة التصدير#

GET /api/exports/{exportId}

إلغاء التصدير#

DELETE /api/exports/{exportId}

تتبع تنزيل التصدير#

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

API النشاط#

عرض موجز للإجراءات الحديثة على حسابك — عمليات التشغيل، التحميلات، والمزيد. راجع Activity documentation.

دعم مفتاح API حسب المسار

تقبل جميع مسارات النشاط أدناه المصادقة عبر مفتاح API.

سرد النشاط#

GET /api/activity

معلمات الاستعلام:

المعاملالنوعالوصف
limitintحجم الصفحة (الافتراضي: 20، الحد الأقصى: 100)
pageintرقم الصفحة (الافتراضي: 1)
archivedbooleantrue لعلامة تبويب الأرشيف، false لعلبة الوارد
searchstringبحث غير حساس لحالة الأحرف في حقول الحدث
startالتاريختضمين الأحداث في أو بعد هذا التاريخ
endالتاريختضمين الأحداث في أو قبل هذا التاريخ
exportbooleanإرجاع جميع الأحداث المطابقة بصيغة JSON
ownerstringاسم مستخدم مساحة العمل

تحديد الأحداث كمقروءة#

POST /api/activity/mark-seen

الجسم (Body):

{
    "all": true
}

أو قم بتمرير معرفات محددة:

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

مرر وسيط الاستعلام الاختياري owner لتحديد الأحداث في مساحة عمل.

أرشفة الأحداث#

POST /api/activity/archive

الجسم (Body):

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

أو قم بتمرير معرفات محددة:

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

مرر وسيط الاستعلام الاختياري owner لأرشفة أو استعادة أحداث مساحة العمل.


API سلة المهملات#

عرض واستعادة العناصر المحذوفة. تتم إزالة العناصر نهائياً بعد 30 يوماً. راجع Trash documentation.

سرد سلة المهملات#

GET /api/trash

معلمات الاستعلام:

المعاملالنوعالوصف
typestringعامل تصفية: all، project، dataset، model
pageintرقم الصفحة (الافتراضي: 1)
limitintالعناصر في كل صفحة (الافتراضي: 50، الحد الأقصى: 200)
ownerstringاسم مستخدم مالك مساحة العمل

استعادة العنصر#

POST /api/trash

الجسم (Body):

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

حذف العنصر نهائياً#

DELETE /api/trash

الجسم (Body):

{
    "id": "item_abc123",
    "type": "dataset"
}
لا رجعة فيه

لا يمكن التراجع عن الحذف النهائي. سيتم إزالة المورد وجميع البيانات المرتبطة به.

إفراغ سلة المهملات#

DELETE /api/trash/empty

حذف جميع العناصر في سلة المهملات نهائياً.

المصادقة

يقبل DELETE /api/trash/empty مصادقة مفتاح واجهة برمجة التطبيقات ويحذف نهائياً كل عنصر في سلة مهملات الحساب أو مساحة العمل المحددة.


API الفوترة#

تحقق من رصيد رصيدك، استخدام الخطة، وسجل المعاملات. راجع Billing documentation.

تقبل نقاط نهاية الرصيد والمعاملات وسيط استعلام اختياري owner مع اسم مستخدم مالك مساحة العمل.

وحدات العملة

تستخدم مبالغ الفوترة سنتات (creditsCents) حيث يكون 100 = $1.00.

الحصول على الرصيد#

GET /api/billing/balance

الاستجابة:

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

الحصول على ملخص الاستخدام#

GET /api/billing/usage-summary

إرجاع تفاصيل الخطة والحدود ومقاييس الاستخدام.

الحصول على المعاملات#

GET /api/billing/transactions

إرجاع سجل المعاملات (الأحدث أولاً).

تتضمن المعاملات حقول دفتر الأستاذ الموجهة للعملاء مثل المبلغ، والرصيد الناتج، والتاريخ، وسياق النموذج الاختياري، ورابط الإيصال. لا يتم إرجاع الملاحظات الداخلية، أو معرفات الدفع/الاسترداد الخاصة بـ Stripe، أو مفاتيح التماثل (idempotency keys).


واجهة برمجة تطبيقات التخزين#

تحقق من تفاصيل استخدام التخزين حسب الفئة (مجموعات البيانات، النماذج، الصادرات) واطلع على أكبر عناصرك.

الوصول عبر مفتاح API

يقبل GET /api/storage مصادقة مفتاح واجهة برمجة التطبيقات. استخدم صفحة Settings > Profile للحصول على نفس التفصيل التفاعلي.

الحصول على معلومات التخزين#

GET /api/storage

معلمات الاستعلام:

المعاملالنوعالوصف
detailsbooleanاضبط على true لتضمين topItems (أكبر مجموعات البيانات، النماذج، الصادرات).
ownerstringاسم مستخدم مساحة العمل.

الاستجابة:

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

تكاملات التخزين السحابي#

اتصل وتصفح تكاملات تخزين GCS، أو S3، أو Azure Blob للقراءة فقط:

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

تقبل جميع العمليات الأربع وسيط الاستعلام الاختياري owner لمساحة عمل. يقبل تصفح الكائنات أيضاً target المطلوب بالإضافة إلى وسائط الاستعلام الاختيارية prefix ومزود الخدمة cursor. تستخدم أجسام طلبات الاتصال والاكتشاف مخططات بيانات اعتماد المزود في مرجع OpenAPI التفاعلي؛ لا يتم إرجاع بيانات الاعتماد أبداً.


واجهة برمجة تطبيقات الرفع#

قم بتحميل الملفات مباشرة إلى التخزين السحابي باستخدام عناوين URL الموقعة لنقل سريع وموثوق. يؤدي إكمال تحميل النموذج إلى إرفاق أوزانه. يؤدي إكمال تحميل أرشيف مجموعة البيانات إلى تسجيل الجلسة؛ مرر هذا sessionId إلى POST /api/datasets/ingest لبدء المعالجة. راجع Data documentation.

الحصول على عنوان URL موقع للرفع#

POST /api/upload/signed-url

طلب عنوان URL موقع لرفع ملف مباشرة إلى التخزين السحابي. يتجاوز عنوان URL الموقع خادم API لعمليات نقل الملفات الكبيرة.

الجسم (Body):

{
    "assetType": "datasets",
    "assetId": "dataset_abc123",
    "filename": "my-dataset.zip",
    "contentType": "application/zip",
    "totalBytes": 52428800
}
الحقلالنوعالوصف
assetTypestringنوع الأصول: models، datasets، images، videos
assetIdstringمعرف الأصل المستهدف
filenamestringاسم الملف الأصلي
contentTypestringنوع MIME
totalBytesintحجم الملف بالبايت

الاستجابة:

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

إكمال الرفع#

POST /api/upload/complete

أبلغ المنصة بأن تحميل الملف قد اكتمل. بالنسبة للنماذج، يؤدي هذا إلى إرفاق الأوزان المُحَمَّلة. بالنسبة لأرشيفات مجموعات البيانات، يتحقق هذا من جلسة التحميل ويسجلها؛ استدعِ POST /api/datasets/ingest بعد ذلك لبدء معالجة مجموعة البيانات.

الجسم (Body):

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

واجهة برمجة تطبيقات عمليات التكامل (Integrations API)#

استيراد مجموعات البيانات من خدمات الطرف الثالث. راجع Integrations documentation.

معاينة استيراد Roboflow#

POST /api/integrations/roboflow/preview

تحويل مفتاح Roboflow API إلى خطة استيراد مجمعة: معلومات مساحة العمل، والمشاريع التي سيتم استيرادها حديثاً، وعدد الإصدارات التي تم استيرادها بالفعل (تم تخطيها)، وأنواع المشاريع غير المدعومة. يتم تمرير مفتاح Roboflow API في النص ولا يتم حفظه.

استيراد من Roboflow#

POST /api/integrations/roboflow/import

وضع وظائف استيعاب مجموعة البيانات في قائمة الانتظار لاستيراد مشاريع Roboflow المحددة إلى مساحة العمل الخاصة بك. يتطلب مساحة تخزين كافية، ويجب أن تتناسب كل مجموعة بيانات مع حد الحجم لكل استيراد في خطتك.


واجهة برمجة تطبيقات مفاتيح API#

إدارة مفاتيح واجهة برمجة التطبيقات الخاصة بك للوصول البرمجي. راجع API Keys documentation.

سرد مفاتيح API#

GET /api/api-keys

تتلقى العميلات المصادقة بمفتاح واجهة برمجة التطبيقات بيانات التعريف للمفتاح، ولا تتلقى أبداً قيم المفاتيح الحالية مفكوكة التشفير. يتم إرجاع المفتاح المُنشأ حديثاً مرة واحدة بواسطة POST /api/api-keys.

مرر وسيط الاستعلام الاختياري owner لإدارة المفاتيح لمساحة عمل تتمتع فيها بحق الوصول كمحرر.

إنشاء مفتاح API#

POST /api/api-keys

الجسم (Body):

{
    "name": "training-server"
}

حذف مفتاح API#

DELETE /api/api-keys

معلمات الاستعلام:

المعاملالنوعالوصف
keyIdstringمعرف مفتاح API المراد إلغاؤه
ownerstringاسم مستخدم اختياري لمساحة العمل.

مثال:

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

واجهة برمجة تطبيقات الفرق والأعضاء#

إنشاء مساحات عمل الفريق، دعوة الأعضاء، وإدارة الأدوار للتعاون. راجع Teams documentation.

سرد الفرق#

GET /api/teams

إنشاء فريق#

POST /api/teams/create

الجسم (Body):

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

سرد الأعضاء#

GET /api/members

إرجاع أعضاء مساحة العمل الحالية.

دعوة عضو#

POST /api/members

الجسم (Body):

{
    "email": "user@example.com",
    "role": "editor"
}
أدوار الأعضاء
الدورالأذونات
viewerوصول للقراءة فقط إلى موارد مساحة العمل
editorإنشاء، تحرير، وحذف الموارد
adminإدارة الأعضاء، الفواتير، وجميع الموارد (لا يمكن تعيينه إلا من قبل مالك الفريق)

منشئ الفريق owner هو المنشئ ولا يمكن دعوته. يتم نقل المالك بشكل منفصل عبر POST /api/members/transfer-ownership. راجع Teams لمعرفة تفاصيل الأدوار الكاملة.

تحديث دور العضو#

PATCH /api/members/{userId}

إزالة عضو#

DELETE /api/members/{userId}

نقل الملكية#

POST /api/members/transfer-ownership

واجهة برمجة تطبيقات الاستكشاف#

البحث وتصفح مجموعات البيانات والمشاريع العامة التي تشاركها المجتمع. راجع Explore documentation.

البحث في المحتوى العام#

GET /api/explore/search

معلمات الاستعلام:

المعاملالنوعالوصف
qstringاستعلام البحث
typestringنوع المورد: all (افتراضي)، projects، datasets
sortstringترتيب الفرز: newest (افتراضي)، stars، oldest، name-asc، name-desc، count-desc، count-asc
offsetintإزاحة الترقيم (افتراضي: 0). تعيد النتائج 20 عنصراً في كل صفحة.
taskstringاختياري: أنواع مهام YOLO المفصولة بفواصل لتصفية مجموعات البيانات (detect، segment، semantic، classify، pose، obb)
authorstringعامل تصفية اسم مستخدم المالك الاختياري.
starredbooleanاضبط true لإرجاع المحتوى المميز بنجمة للمتصل المُصادَق عليه؛ يتطلب مفتاح واجهة برمجة تطبيقات.

بيانات الشريط الجانبي#

GET /api/explore/sidebar

إرجاع محتوى منسق للشريط الجانبي للاستكشاف.


واجهات برمجة تطبيقات المستخدم والإعدادات#

إدارة ملفك الشخصي، مفاتيح واجهة برمجة التطبيقات، استخدام التخزين، ومساحات عمل الفريق. راجع Settings documentation.

ملخص الحساب#

GET /api/account/summary

يعيد خطة الحساب المصادق، ورصيد الائتمان، وعدد الموارد، ومساحات عمل الفريق.

الحصول على مستخدم بواسطة اسم المستخدم#

GET /api/users

معلمات الاستعلام:

المعاملالنوعالوصف
usernamestringاسم المستخدم للبحث عنه

متابعة أو إلغاء متابعة مستخدم#

PATCH /api/users

الجسم (Body):

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

التحقق من توفر اسم المستخدم#

GET /api/username/check

معلمات الاستعلام:

المعاملالنوعالوصف
usernamestringاسم المستخدم للتحقق منه
suggestمنطقي (bool)اختياري: true لتضمين اقتراح إذا كان الاسم مأخوذاً

الإعدادات#

GET /api/settings
POST /api/settings

الحصول على إعدادات ملف تعريف المستخدم أو تحديثها (اسم العرض، السيرة الذاتية، روابط التواصل الاجتماعي، إلخ).

أيقونة مساحة العمل#

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

قم بتحميل أيقونة ملف شخصي/مساحة عمل WebP بحجم يصل إلى 5 ميغابايت كحقل نموذج متعدد الأجزاء image، أو قم بإزالتها. مرر owner الاختياري لمساحة عمل فريق.


التكامل مع Python#

للتكامل بشكل أسهل، استخدم حزمة Ultralytics Python التي تتعامل مع المصادقة، والتحميلات، وبث المقاييس في الوقت الفعلي تلقائياً.

التثبيت والإعداد#

pip install "ultralytics>=8.4.104"

التحقق من التثبيت:

yolo check

المصادقة#

yolo login YOUR_API_KEY

استخدام مجموعات بيانات المنصة#

الإشارة إلى مجموعات البيانات بمعرّفات 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,
)

تنسيق URI:

النمطالوصف
ul://username/datasets/slugمجموعة البيانات
ul://username/project-nameمشروع
ul://username/project/model-nameنموذج محدد
ul://ultralytics/yolo26/yolo26nنموذج رسمي

النشر إلى المنصة#

إرسال النتائج إلى مشروع على المنصة:

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

ما الذي تتم مزامنته:

  • مقاييس التدريب (في الوقت الفعلي)
  • أوزان النموذج النهائية
  • مخططات التحقق
  • مخرجات وحدة التحكم
  • مقاييس النظام

أمثلة API#

تحميل نموذج من المنصة:

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

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

تشغيل الاستدلال:

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

تصدير النموذج:

# 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

التحقق:

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

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

الأسئلة الشائعة#

كيف يمكنني استخدام الترقيم للصفحات (pagination) للنتائج الكبيرة؟#

تستخدم معظم نقاط النهاية وسيط limit للتحكم في عدد النتائج المُعَادَة لكل طلب:

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

تدعم نقاط نهاية النشاط وسلة المهملات أيضاً وسيط page للترقيم القائم على الصفحات:

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

تستخدم نقطة نهاية البحث واستكشاف البيانات offset بدلاً من page، مع حجم صفحة ثابت يبلغ 20:

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

هل يمكنني استخدام API بدون SDK؟#

عمليات REST العامة الموثقة أعلاه متاحة بدون Python SDK. حزمة SDK هي غلاف ملائم يضيف ميزات مثل بث المقاييس في الوقت الفعلي وتحميل النماذج التلقائي. يمكنك استكشاف العقد القابل للقراءة آلياً بشكل تفاعلي على platform.ultralytics.com/api/docs؛ بينما تظل تدفقات الحساب المقتصرة على جلسة المتصفح في واجهة مستخدم المنصة.

هل توجد مكتبات عميل لـ API؟#

استخدم حزمة Ultralytics Python أو قم بإجراء طلبات HTTP مباشرة من أي لغة.

كيف أتعامل مع حدود المعدل (rate limits)؟#

استخدم ترويسة Retry-After من استجابة 429 للانتظار للمدة الزمنية المناسبة:

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

كيف أجد معرف النموذج أو مجموعة البيانات الخاص بي؟#

يتم إرجاع معرفات الموارد (Resource IDs) بواسطة استجابات واجهة برمجة التطبيقات للإنشاء والقرد والعرض. تستخدم عناوين URL لصفحات المنصة أسماءً قابلة للقراءة للبشر وليست معرفات قاعدة بيانات:

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

استخدم نقاط نهاية القائمة للبحث عن _id المقابل لنموذج، أو مجموعة بيانات، أو مشروع، أو نشر، أو مورد آخر.

التعليقات