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

# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasetsاستكشف مرجع واجهة برمجة التطبيقات التفاعلي الكامل في 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#
- انتقل إلى
Settings>API Keys - انقر على
Create Key - انسخ المفتاح الذي تم إنشاؤه
راجع API Keys للحصول على تعليمات تفصيلية.
رأس التفويض#
قم بتضمين مفتاح API الخاص بك في جميع الطلبات:
Authorization: Bearer YOUR_API_KEYتستخدم مفاتيح واجهة برمجة التطبيقات التنسيق 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 القياسية في حد افتراضي سخي:
| الفئة | الحد | ينطبق على |
|---|---|---|
| Default | 100 طلب/دقيقة | المسارات غير المعينة لأي فئة أدناه |
| Training | 10 طلبات/دقيقة | بدء التدريب السحابي |
| Upload | 10 طلبات/دقيقة | عناوين URL الموقعة للرفع، وإتمام الرفع، واستيعاب مجموعات البيانات |
| Predict | 20 طلب/دقيقة | استدلال النموذج والنشر من خلال مسارات واجهة برمجة تطبيقات المنصة (Platform API) |
| التصدير | 20 طلب/دقيقة | مسارات تصدير النماذج ومسارات تصدير/إصدار مجموعات البيانات |
| Download | 30 طلب/دقيقة | تنزيلات ملفات النماذج |
| تعديل (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معلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
username | string | التصفية حسب اسم المستخدم |
limit | int | العناصر في كل صفحة (الافتراضي: 1000، الحد الأقصى: 1000) |
owner | string | اسم مستخدم مالك مساحة العمل |
includeImageUrls | boolean | تضمين عناوين URL لصور عينة موقعة بالحجم الكامل (الافتراضي: false) |
includeSamples | boolean | اضبط 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 مع رابط تنزيل موقع لأحدث تصدير لمجموعة البيانات.
معلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
v | integer | رقم الإصدار (يبدأ من 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):
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
imageHash | string | نعم | تجزئة (Hash) الصورة المراد إضافة تعليق توضيحي لها |
modelId | string | لا | النموذج المراد استخدامه للاستدلال، كمعرّف URI من نوع ul:// (مثل ul://username/project/model). إذا تم تخطيه، يتم استخدام النموذج الافتراضي الخاص بمهمة مجموعة البيانات. |
confidence | float | لا | عتبة الثقة (الافتراضي: 0.25) |
iou | float | لا | عتبة 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معلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
split | string | التصفية حسب التقسيم: train، val، test |
offset | int | إزاحة الترقيم (الافتراضي: 0) |
limit | int | العناصر في كل صفحة (الافتراضي: 50، الحد الأقصى: 5000) |
sort | string | ترتيب الفرز: newest، oldest، name-asc، name-desc، height-asc، height-desc، width-asc، width-desc، size-asc، size-desc، labels-asc، labels-desc (بعضها معطل لمجموعات بيانات الصور التي تزيد عن 100 ألف) |
hasLabel | string | التصفية حسب حالة التسمية (true أو false) |
hasError | string | التصفية حسب حالة الخطأ (true أو false) |
search | string | مطابقة الجزء النصي على اسم الملف ومفاتيح البيانات الوصفية المخصصة، والقيم العددية، ومدخلات المصفوفة (لا يتم مطابقة القيم المتداخلة في الكائنات الفرعية)؛ سلسلة ست عشرية مكونة من 32 حرفاً هي بحث دقيق عن تجزئة الصورة |
classIds | string | معرفات الفئات مفصولة بفواصل؛ يقوم بإرجاع الصور التي تحتوي على أي من الفئات المحددة |
includeThumbnails | string | تضمين عناوين URL للصور المصغرة الموقعة (الافتراضي: true) |
includeImageUrls | string | تضمين عناوين 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/bulkAPI المشاريع#
قم بتنظيم نماذجك في مشاريع. ينتمي كل نموذج إلى مشروع واحد. راجع Projects documentation.
سرد المشاريع#
GET /api/projectsمعلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
username | string | التصفية حسب اسم المستخدم |
limit | int | العناصر في كل صفحة |
owner | string | اسم مستخدم مالك مساحة العمل |
الحصول على مشروع#
GET /api/projects/{projectId}إنشاء مشروع#
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",
"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معلمات الاستعلام:
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
projectId | string | نعم | معرف المشروع (مطلوب) |
fields | string | لا | مجموعة الحقول: summary، charts |
ids | string | لا | معرفات النماذج مفصولة بفواصل |
limit | int | لا | الحد الأقصى للنتائج (الافتراضي 20، الحد الأقصى 100) |
سرد النماذج المكتملة#
GET /api/models/completedيعيد ما يصل إلى 1,000 نموذج بأوزان قابلة للاستخدام عبر جميع المشاريع للتدريب والنشر. مرر owner لمساحة عمل.
الحصول على نموذج#
GET /api/models/{modelId}إنشاء نموذج#
POST /api/modelsجسم JSON:
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
projectId | string | نعم | معرف المشروع المستهدف |
slug | string | لا | رابط URL (أحرف أبجدية رقمية صغيرة/واصلات) |
name | string | لا | اسم العرض (بحد أقصى 100 حرف) |
description | string | لا | وصف النموذج (بحد أقصى 1000 حرف) |
metadata | كائن | لا | بيانات JSON الوصفية المخصصة |
task | string | لا | نوع المهمة (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"
}| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
targetProjectSlug | string | نعم | رابط المشروع الوجهة |
modelName | string | لا | اسم النموذج المستنسخ |
description | string | لا | وصف النموذج |
owner | string | لا | اسم مستخدم الفريق (لاستنساخ مساحة العمل) |
تتبع التنزيل#
POST /api/models/{modelId}/track-downloadتتبع تحليلات تنزيل النموذج.
تشغيل الاستنتاج#
POST /api/models/{modelId}/predictيمكن التنبؤ بالنماذج العامة بدون مصادقة. تتطلب النماذج الخاصة والمشتركة مفتاح API مع صلاحية الوصول إلى المشروع الأصل.
نموذج Multipart:
| المعامل | النوع | الافتراضي | النطاق | الوصف |
|---|---|---|---|---|
file | ملف | - | - | ملف صورة أو فيديو (مطلوب ما لم يتم تعيين source) |
conf | float | 0.25 | 0.01 – 1.0 | الحد الأدنى لعتبة الثقة |
iou | float | 0.7 | 0.0 – 0.95 | عتبة NMS IoU |
imgsz | int | 640 | 32 – 1280 | حجم صورة الإدخال بالبكسل |
normalize | منطقي (bool) | false | - | إرجاع إحداثيات صندوق الإحاطة (bounding box) كـ 0 – 1 |
decimals | int | 5 | 0 – 10 | الدقة العشرية لقيم الإحداثيات |
source | string | - | - | عنوان 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/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/startتشمل أنواع وحدات معالجة الرسوميات المتاحة 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.
تقبل جميع مسارات النشر أدناه مصادقة مفتاح واجهة برمجة التطبيقات. للاستدلال عالي الإنتاجية، استدعِ عنوان 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معلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
modelId | string | التصفية حسب النموذج |
status | string | التصفية حسب الحالة |
limit | int | الحد الأقصى للنتائج (الافتراضي: 20، الحد الأقصى: 100) |
owner | string | اسم مستخدم مالك مساحة العمل |
إنشاء نشر#
POST /api/deploymentsالجسم (Body):
{
"modelId": "model_abc123",
"name": "my-deployment",
"region": "us-central1",
"resources": {
"cpu": 1,
"memoryGi": 2,
"minInstances": 0,
"maxInstances": 1
}
}| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
modelId | string | نعم | معرف النموذج للنشر |
name | string | نعم | اسم النشر |
region | string | نعم | منطقة النشر |
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) |
conf | float | 0.25 | 0.01 – 1.0 | الحد الأدنى لعتبة الثقة |
iou | float | 0.7 | 0.0 – 0.95 | عتبة NMS IoU |
imgsz | int | 640 | 32 – 1280 | حجم صورة الإدخال بالبكسل |
normalize | منطقي (bool) | false | - | إرجاع إحداثيات صندوق الإحاطة (bounding box) كـ 0 – 1 |
decimals | int | 5 | 0 – 10 | الدقة العشرية لقيم الإحداثيات |
source | string | - | - | عنوان URL لصورة أو سلسلة base64 (بديل لـ file) |
قم بتوفير إما file أو source. تستخدم الاستجابة نفس عقد الصورة والبيانات الوصفية كتنبؤ النموذج ولا ترجع أبداً مسار النموذج الداخلي.
الحصول على المقاييس#
GET /api/deployments/{deploymentId}/metricsإرجاع مقاييس عدد الطلبات، وزمن الانتقال، ومعدل الخطأ مع بيانات الرسوم البيانية المصغرة (sparkline).
معلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
range | string | نطاق الزمني: 1h، 6h، 24h (افتراضي)، 7d، 30d |
sparkline | string | اضبط على true لبيانات الخطوط الصغيرة (sparklines) المُحَسَّنة لعرض لوحة المعلومات |
الحصول على السجلات#
GET /api/deployments/{deploymentId}/logsمعلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
severity | string | عامل تصفية مفصول بفواصل: DEBUG، INFO، WARNING، ERROR، CRITICAL |
limit | int | عدد الإدخالات (افتراضي: 50، حد أقصى: 200) |
pageToken | string | رمز الترقيم من الاستجابة السابقة |
API التصدير#
تحويل النماذج إلى تنسيقات مُحَسَّنة مثل ONNX، TensorRT، CoreML، و LiteRT لنشر الحافة. راجع Deploy documentation.
سرد عمليات التصدير#
GET /api/exportsمعلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
modelId | string | معرف النموذج (مطلوب) |
status | string | التصفية حسب الحالة |
limit | int | الحد الأقصى للنتائج (الافتراضي: 20، الحد الأقصى: 100) |
إنشاء تصدير#
POST /api/exportsالجسم (Body):
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
modelId | string | نعم | معرف النموذج المصدر |
format | string | نعم | تنسيق التصدير (انظر الجدول أدناه) |
gpuType | string | شرطي | مطلوب عندما يكون 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 | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz، quantize، dynamic، simplify، opset، nms، batch، data، fraction، device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz، quantize، dynamic، nms، batch، data، fraction، device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz، quantize، dynamic، simplify، opset، workspace، nms، batch، data، fraction، device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz، keras، quantize، opset، nms، batch، data، fraction، device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz، batch، device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz، batch، dynamic، quantize، simplify، opset، nms، device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz، batch، name، quantize، simplify، opset، data، fraction، device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz، batch، device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz، batch، name، quantize، simplify، opset، data، fraction، device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz، name، quantize، data، fraction، simplify، conf، iou |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
الحصول على حالة التصدير#
GET /api/exports/{exportId}إلغاء التصدير#
DELETE /api/exports/{exportId}تتبع تنزيل التصدير#
POST /api/exports/{exportId}/track-downloadAPI النشاط#
عرض موجز للإجراءات الحديثة على حسابك — عمليات التشغيل، التحميلات، والمزيد. راجع Activity documentation.
تقبل جميع مسارات النشاط أدناه المصادقة عبر مفتاح API.
سرد النشاط#
GET /api/activityمعلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
limit | int | حجم الصفحة (الافتراضي: 20، الحد الأقصى: 100) |
page | int | رقم الصفحة (الافتراضي: 1) |
archived | boolean | true لعلامة تبويب الأرشيف، false لعلبة الوارد |
search | string | بحث غير حساس لحالة الأحرف في حقول الحدث |
start | التاريخ | تضمين الأحداث في أو بعد هذا التاريخ |
end | التاريخ | تضمين الأحداث في أو قبل هذا التاريخ |
export | boolean | إرجاع جميع الأحداث المطابقة بصيغة JSON |
owner | string | اسم مستخدم مساحة العمل |
تحديد الأحداث كمقروءة#
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معلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
type | string | عامل تصفية: all، project، dataset، model |
page | int | رقم الصفحة (الافتراضي: 1) |
limit | int | العناصر في كل صفحة (الافتراضي: 50، الحد الأقصى: 200) |
owner | string | اسم مستخدم مالك مساحة العمل |
استعادة العنصر#
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).
واجهة برمجة تطبيقات التخزين#
تحقق من تفاصيل استخدام التخزين حسب الفئة (مجموعات البيانات، النماذج، الصادرات) واطلع على أكبر عناصرك.
يقبل GET /api/storage مصادقة مفتاح واجهة برمجة التطبيقات. استخدم صفحة Settings > Profile للحصول على نفس التفصيل التفاعلي.
الحصول على معلومات التخزين#
GET /api/storageمعلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
details | boolean | اضبط على true لتضمين topItems (أكبر مجموعات البيانات، النماذج، الصادرات). |
owner | string | اسم مستخدم مساحة العمل. |
الاستجابة:
{
"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
}| الحقل | النوع | الوصف |
|---|---|---|
assetType | string | نوع الأصول: models، datasets، images، videos |
assetId | string | معرف الأصل المستهدف |
filename | string | اسم الملف الأصلي |
contentType | string | نوع MIME |
totalBytes | int | حجم الملف بالبايت |
الاستجابة:
{
"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معلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
keyId | string | معرف مفتاح API المراد إلغاؤه |
owner | string | اسم مستخدم اختياري لمساحة العمل. |
مثال:
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معلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
q | string | استعلام البحث |
type | string | نوع المورد: all (افتراضي)، projects، datasets |
sort | string | ترتيب الفرز: newest (افتراضي)، stars، oldest، name-asc، name-desc، count-desc، count-asc |
offset | int | إزاحة الترقيم (افتراضي: 0). تعيد النتائج 20 عنصراً في كل صفحة. |
task | string | اختياري: أنواع مهام YOLO المفصولة بفواصل لتصفية مجموعات البيانات (detect، segment، semantic، classify، pose، obb) |
author | string | عامل تصفية اسم مستخدم المالك الاختياري. |
starred | boolean | اضبط true لإرجاع المحتوى المميز بنجمة للمتصل المُصادَق عليه؛ يتطلب مفتاح واجهة برمجة تطبيقات. |
بيانات الشريط الجانبي#
GET /api/explore/sidebarإرجاع محتوى منسق للشريط الجانبي للاستكشاف.
واجهات برمجة تطبيقات المستخدم والإعدادات#
إدارة ملفك الشخصي، مفاتيح واجهة برمجة التطبيقات، استخدام التخزين، ومساحات عمل الفريق. راجع Settings documentation.
ملخص الحساب#
GET /api/account/summaryيعيد خطة الحساب المصادق، ورصيد الائتمان، وعدد الموارد، ومساحات عمل الفريق.
الحصول على مستخدم بواسطة اسم المستخدم#
GET /api/usersمعلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
username | string | اسم المستخدم للبحث عنه |
متابعة أو إلغاء متابعة مستخدم#
PATCH /api/usersالجسم (Body):
{
"username": "target-user",
"followed": true
}التحقق من توفر اسم المستخدم#
GET /api/username/checkمعلمات الاستعلام:
| المعامل | النوع | الوصف |
|---|---|---|
username | string | اسم المستخدم للتحقق منه |
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 المقابل لنموذج، أو مجموعة بيانات، أو مشروع، أو نشر، أو مورد آخر.