Tham chiếu REST API#
Ultralytics Platform cung cấp REST API để truy cập theo chương trình vào các tập dữ liệu, hình ảnh, dự án, model, quá trình huấn luyện, xuất dữ liệu và triển khai.

# List the datasets owned by a workspace
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/datasets/YOUR_USERNAMEMọi endpoint bên dưới liệt kê lệnh gọi client.<resource>.<method>(...) từ SDK
ultralytics-platform, được tạo từ cùng một
contract với tài liệu tham khảo này.
Trang này là hướng dẫn chi tiết về API. Tài liệu tham khảo được tạo tự động và luôn cập nhật nằm tại platform.ultralytics.com/api/docs, và tài liệu OpenAPI 3.2 có thể đọc bằng máy để vận hành tài liệu đó được công bố tại platform.ultralytics.com/openapi.json. Cả hai đều được tạo trực tiếp từ hợp đồng phía máy chủ, vì vậy chúng là nguồn thông tin chính thức bất cứ khi nào trang này và lược đồ không khớp.
Tổng quan về API#
API được tổ chức xoay quanh các tài nguyên cốt lõi của Platform:
graph LR
A[API Key]:::start --> B[Datasets]:::proc
A --> C[Projects]:::proc
B -->|images| G[Images]:::proc
C -->|contains| D[Models]:::proc
B -->|train on| D
D -->|deploy| E[Deployments]:::proc
D -->|export| F[Exports]:::proc
classDef start fill:#4CAF50,color:#fff
classDef proc fill:#2196F3,color:#fff| Tài nguyên | Mô tả | Các thao tác chính |
|---|---|---|
| Tập dữ liệu | Các bộ sưu tập hình ảnh được gán nhãn | CRUD, tiếp nhận, phiên bản, lớp, phân tách, nhân bản |
| Images | Hình ảnh và nhãn riêng lẻ | Đọc, chú thích, di chuyển phần phân tách, xóa, tự động chú thích |
| Dự án | Không gian làm việc của model | CRUD, nhân bản |
| Models | Các checkpoint đã huấn luyện | CRUD, dự đoán, tải xuống, nhân bản, trạng thái huấn luyện |
| Huấn luyện | Các tác vụ huấn luyện trên GPU đám mây | Khả năng sẵn có của GPU, bắt đầu, tiến độ, hủy |
| Xuất bản | Các tác vụ chuyển đổi định dạng | Tạo, liệt kê, trạng thái, hủy |
| Triển khai | Các endpoint suy luận chuyên dụng | Tạo, bắt đầu/dừng/thay thế, dự đoán, chỉ số, nhật ký |
| Trash | Tài nguyên đã xóa mềm | Liệt kê, khôi phục, xóa vĩnh viễn |
| Storage | Tích hợp lưu trữ đám mây | Kết nối, khám phá, duyệt, ngắt kết nối |
| Account | Gói dịch vụ, tín dụng, dung lượng lưu trữ, hồ sơ | Tóm tắt tài khoản, API key, mức sử dụng dung lượng lưu trữ, tra cứu người dùng |
| Thanh toán | Mức sử dụng gói dịch vụ và sổ cái | Tóm tắt sử dụng, giao dịch |
| Explore | Tìm kiếm nội dung công khai | Tìm kiếm dự án và tập dữ liệu |
Xác thực#
Hầu hết các endpoint đều yêu cầu API key. Các endpoint hiển thị nội dung công khai — đọc tập dữ liệu, dự án hoặc model công khai, liệt kê hình ảnh tập dữ liệu công khai, chạy suy luận trên một model công khai hoặc tìm kiếm trong Explore — cũng chấp nhận các yêu cầu ẩn danh và chỉ đơn giản là trả về nhiều dữ liệu hơn khi cung cấp key.
Nhận API Key#
- Chuyển đến
Settings>API Keys - Nhấp
Create Key - Sao chép key đã tạo
Xem API Keys để biết hướng dẫn chi tiết.
Tiêu đề ủy quyền (Authorization Header)#
Bao gồm API key của bạn dưới dạng bearer token:
Authorization: Bearer YOUR_API_KEYAPI key có tiền tố theo nghĩa đen là ul_ theo sau là 40 ký tự thập lục phân, tổng cộng 43 ký tự (ví dụ: ul_a1b2c3d4e5f6789012345678901234567890abcd). Các yêu cầu bị thiếu header, có key sai định dạng hoặc key đã bị thu hồi sẽ trả về 401. Giữ bí mật key của bạn -- không bao giờ commit key lên hệ thống quản lý phiên bản hoặc chia sẻ công khai.
Ví dụ#
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://platform.ultralytics.com/api/account/summaryBase URL#
Tất cả các API endpoint sử dụng:
https://platform.ultralytics.com/apiĐường dẫn tài nguyên#
Tài nguyên được định địa chỉ bằng chính các tên dễ đọc đối với con người xuất hiện trong các URL của Platform, chứ không phải bằng ID cơ sở dữ liệu:
| Tài nguyên | Đường dẫn | Ví dụ |
|---|---|---|
| Tập dữ liệu (Dataset) | /api/datasets/{owner}/{dataset} | /api/datasets/acme-vision/warehouse |
| Dự án | /api/projects/{owner}/{project} | /api/projects/acme-vision/inspection |
| Mô hình | /api/models/{owner}/{project}/{model} | /api/models/acme-vision/inspection/v3 |
| Triển khai | /api/deployments/{owner}/{deployment} | /api/deployments/acme-vision/edge-1 |
| Hình ảnh | /api/images/{imageId} | /api/images/65f1c0a2b3d4e5f601234567 |
{owner}là tên người dùng cá nhân hoặc handle không gian làm việc của nhóm: 4-32 ký tự, chữ và số viết thường có dấu gạch ngang đơn giữa các phân đoạn.{dataset},{project},{model}và{deployment}tuân theo cùng một mẫu chữ thường phân tách bằng dấu gạch ngang, tối đa 128 ký tự.{imageId}và{exportId}là các ID thập lục phân có độ dài 24 ký tự do API trả về.- Đổi tên tài nguyên thông qua
PATCHsẽ thay đổi cả tên hiển thịnamevà tên URL cùng lúc, và phản hồi sẽ trả về tên URL hiện tại để bạn có thể tiếp tục theo dõi.
Không có tham số truy vấn owner. Các đường dẫn có phạm vi không gian làm việc mang chủ sở hữu trong đường dẫn, và các endpoint có phạm vi tài khoản (/api/account/summary, /api/api-keys, /api/storage, /api/billing/*, /api/trash, /api/integrations/buckets) hoạt động trên không gian làm việc đã cấp API key. Để thực hiện thao tác trên không gian làm việc của nhóm, hãy sử dụng API key được tạo trong không gian làm việc đó.
Giới hạn tốc độ (Rate Limits)#
API thực thi các giới hạn cửa sổ trượt (sliding-window) cho mỗi API key. Mỗi route thuộc về một danh mục và mỗi danh mục có một bộ đếm độc lập, do đó 20 yêu cầu dự đoán sẽ không làm tiêu tốn định mức mặc định của bạn.
| Danh mục | Giới hạn | Áp dụng cho |
|---|---|---|
| Mặc định | 100 yêu cầu/phút | Mọi route không được liệt kê bên dưới |
| Training | 10 yêu cầu/phút | POST /api/training/start |
| Tải lên (Upload) | 10 yêu cầu/phút | URL tải lên có chữ ký, hoàn tất tải lên và nạp tập dữ liệu |
| Predict | 20 yêu cầu/phút | Inference mô hình và triển khai thông qua các tuyến đường Platform API |
| Xuất | 20 yêu cầu/phút | Các tuyến đường xuất mô hình và xuất/phiên bản tập dữ liệu |
| Tải xuống (Download) | 30 yêu cầu/phút | Tải xuống tệp mô hình |
| Mutation | 10 yêu cầu/phút | Liệt kê API key, kết nối hoặc khám phá lưu trữ đám mây và các hành động triển khai PATCH |
| Hydrate | 20 yêu cầu/phút | POST /api/datasets/{owner}/{dataset}/images (lấy một tập hợp hình ảnh đã chọn) |
| Clustering | 10 yêu cầu/phút | GET /api/datasets/{owner}/{dataset}/images/clustering |
Các route Platform chỉ dành cho trình duyệt, chẳng hạn như thanh toán và quản lý nhóm, có giới hạn riêng không áp dụng cho lưu lượng truy cập bằng API key.
Khi bị điều tiết (throttled), API sẽ trả về 429 kèm theo cả header và JSON body:
Retry-After: 12
X-RateLimit-Reset: 2026-02-21T12:34:56.000Z{
"error": "Rate limit exceeded",
"retryAfter": 12,
"resetAt": "2026-02-21T12:34:56.000Z"
}Endpoint chuyên dụng (Không giới hạn)#
Dedicated endpoints không tuân theo giới hạn tốc độ API-key của Platform khi bạn gọi trực tiếp serviceUrl của bản triển khai (ví dụ: https://predict-abc123.run.app/predict). Thông lượng sau đó sẽ phụ thuộc vào cấu hình dịch vụ đã triển khai.
Khi bạn nhận được 429, hãy đợi Retry-After giây (hoặc cho đến X-RateLimit-Reset) trước khi thử lại. Xem rate limit FAQ để biết cách triển khai thuật toán backoff theo hàm mũ.
Định dạng phản hồi#
Phản hồi thành công#
Phản hồi là các đối tượng JSON với các trường dành riêng cho tài nguyên. Không có envelope chung: các endpoint danh sách trả về một tập hợp có tên đi kèm với số lượng, và các thao tác thay đổi trả về các định danh đã thay đổi.
{
"datasets": [{ "id": "65f1c0a2b3d4e5f601234567", "owner": "acme-vision", "dataset": "warehouse" }],
"total": 1,
"region": "us"
}Các phản hồi mang dữ liệu cũng bao gồm region (us, eu hoặc ap), là vùng lưu trữ cho không gian làm việc đó.
Phản hồi lỗi#
Mọi phản hồi lỗi đều là một đối tượng JSON với thông báo error:
{
"error": "Dataset not found"
}| Mã trạng thái HTTP | Ý nghĩa |
|---|---|
200 | Thành công |
201 | Đã tạo |
202 | Đã chấp nhận, công việc tiếp tục diễn ra không đồng bộ |
400 | Đường dẫn, truy vấn hoặc request body không hợp lệ |
401 | Thiếu hoặc xác thực không hợp lệ |
402 | Không đủ tín dụng (huấn luyện) |
403 | Không đủ quyền, gói dịch vụ hoặc hạn mức |
404 | Không tìm thấy tài nguyên |
409 | Xung đột với trạng thái hiện tại (tên trùng lặp, tác vụ đang chạy) |
413 | Dữ liệu đầu vào dự đoán quá lớn |
422 | Các lớp model không khớp với tập dữ liệu (tự động chú thích) |
429 | Đã vượt quá giới hạn tốc độ (rate limit) |
500 | Lỗi máy chủ |
502 | Nhà cung cấp thượng nguồn hoặc lệnh gọi dịch vụ đã thất bại |
503 | Dịch vụ phụ thuộc tạm thời không khả dụng |
Phân trang#
Kiểu phân trang phụ thuộc vào tập hợp:
| Kiểu | Endpoints | Tham số |
|---|---|---|
| Chỉ giới hạn (Limit) | Danh sách tập dữ liệu, dự án, model, xuất dữ liệu, triển khai | limit |
| Offset và limit | Hình ảnh tập dữ liệu, phân cụm hình ảnh, tìm kiếm Explore | offset, limit, cộng với hasMore trong phản hồi |
| Con trỏ (Cursor) | Hình ảnh tập dữ liệu (tập dữ liệu lớn) | cursor, includeTotal, cộng với nextCursor |
| Số trang | Thùng rác | page, limit, cộng với totalPages |
| Mã thông báo trang mờ (Opaque page token) | Nhật ký triển khai | pageToken, cộng với nextPageToken |
Datasets API#
Tạo, duyệt và quản lý các tập dữ liệu hình ảnh được gán nhãn để huấn luyện các YOLO model. Xem tài liệu Datasets.
Liệt kê Datasets#
GET /api/datasets/{owner}Python SDK: client.datasets.list(owner)
Trả về các tập dữ liệu công khai của chủ sở hữu, cộng với các tập dữ liệu riêng tư khi key của bạn có quyền xem không gian làm việc đó.
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
limit | int | Số lượng tập dữ liệu tối đa trả về (mặc định: 1000, tối đa: 1000) |
includeSamples | boolean | Bao gồm hình ảnh xem trước mẫu (mặc định: true) |
includeImageUrls | boolean | Bao gồm các URL dự phòng hình ảnh mẫu kích thước đầy đủ (mặc định: false) |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://platform.ultralytics.com/api/datasets/acme-vision?limit=10&includeSamples=false"Phản hồi (Response):
{
"datasets": [
{
"id": "65f1c0a2b3d4e5f601234567",
"owner": "acme-vision",
"dataset": "warehouse",
"name": "Warehouse",
"task": "detect",
"visibility": "private",
"imageCount": 1000,
"classCount": 2,
"classNames": ["person", "forklift"],
"splits": { "train": 800, "val": 200, "test": 0, "labeled": 1000 },
"annotationCount": 5400,
"starCount": 3,
"isStarred": false,
"status": "ready",
"createdAt": "2026-01-15T10:00:00Z",
"updatedAt": "2026-01-16T08:30:00Z"
}
],
"total": 1,
"region": "us"
}Lấy Dataset#
GET /api/datasets/{owner}/{dataset}Python SDK: client.datasets.retrieve(owner, dataset)
Trả về đối tượng tập dữ liệu đầy đủ dưới khóa dataset, bao gồm classNames, splits, versions, source và đối tượng metadata do người dùng định nghĩa.
Tạo Dataset#
POST /api/datasetsPython SDK: client.datasets.create(dataset=..., name=...)
Body:
{
"dataset": "warehouse",
"name": "Warehouse",
"task": "detect",
"description": "Forklift and pedestrian safety dataset",
"classNames": ["person", "forklift"],
"visibility": "private",
"metadata": { "location": "factory-1", "reviewed": true },
"owner": "acme-vision"
}| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
dataset | string | Có | Tên tập dữ liệu được sử dụng trong URL của Platform (chữ thường, phân tách bằng dấu gạch ngang, tối đa 128 ký tự) |
name | string | Có | Tên hiển thị (tối đa 100 ký tự) |
description | string | Không | Mô tả (tối đa 1000 ký tự) |
task | string | Không | Loại tác vụ (mặc định: detect) |
classNames | array | Không | Tên lớp theo thứ tự chỉ mục (tối đa 25.000) |
format | string | Không | Định dạng chú thích: yolo (mặc định), coco, raw, ndjson |
visibility | string | Không | public hoặc private |
tags | array | Không | Tối đa 50 thẻ (tag), mỗi thẻ 50 ký tự |
license | string | Không | Mã định danh giấy phép tập dữ liệu |
metadata | đối tượng | Không | Metadata JSON tùy chỉnh |
owner | string | Không | Handle không gian làm việc nhóm; mặc định là không gian làm việc cá nhân của bạn |
Các giá trị task hợp lệ khi tạo hoặc cập nhật dataset: detect, segment, semantic, depth, classify,
pose, và obb. Các dataset chiều sâu không có class nào.
Phản hồi (201):
{
"id": "65f1c0a2b3d4e5f601234567",
"owner": "acme-vision",
"dataset": "warehouse",
"region": "us"
}Cập nhật Dataset#
PATCH /api/datasets/{owner}/{dataset}Python SDK: client.datasets.update(owner, dataset)
Body (cập nhật một phần):
{
"name": "Warehouse Safety",
"description": "New description",
"visibility": "public",
"metadata": { "location": "factory-2", "reviewed": true }
}Các trường được chấp nhận: name, description, visibility, metadata, tags, classNames, classColors, format, task, license, iconColor, iconLetter và starred. Gửi một đối tượng metadata trống ({}) để xóa siêu dữ liệu tùy chỉnh. Các khóa siêu dữ liệu được giới hạn ở 128 ký tự và đối tượng được tuần tự hóa giới hạn ở 500.000 ký tự.
Phản hồi (Response):
{
"success": true,
"dataset": "warehouse-safety"
}Việc đổi tên sẽ thay đổi tên URL, vì vậy hãy sử dụng giá trị dataset được trả về cho các yêu cầu tiếp theo.
Xóa Dataset#
DELETE /api/datasets/{owner}/{dataset}Python SDK: client.datasets.delete(owner, dataset)
Di chuyển tập dữ liệu vào thùng rác, nơi nó có thể được khôi phục trong vòng 30 ngày.
Sao chép (Clone) Dataset#
POST /api/datasets/{owner}/{dataset}/clonePython SDK: client.datasets.clone(owner, dataset)
Sao chép một tập dữ liệu có thể truy cập, cùng với hình ảnh và nhãn của tập dữ liệu đó, vào không gian làm việc cá nhân hoặc không gian làm việc nhóm của bạn.
Body tùy chọn (tất cả các trường đều không bắt buộc):
{
"dataset": "warehouse-copy",
"name": "Warehouse Copy",
"description": "Cloned for experimentation",
"visibility": "private",
"license": "CC-BY-4.0",
"owner": "acme-vision"
}Phản hồi (201): id, owner, dataset, name, imageCount, classCount và region. Các tập dữ liệu được hỗ trợ bởi nguồn lưu trữ được kết nối sẽ trả về 409 vì các tệp của chúng không bị sao chép.
Tải xuống bản xuất tập dữ liệu#
GET /api/datasets/{owner}/{dataset}/exportPython SDK: client.datasets.export(owner, dataset)
Trả về một URL tải xuống NDJSON đã được ký. Bỏ qua v để xuất trạng thái hiện tại của tập dữ liệu, tái sử dụng bản xuất được lưu vào bộ nhớ đệm khi không có gì thay đổi kể từ khi nó được tạo.
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
v | integer | Số phiên bản đã lưu (bắt đầu từ 1). Bỏ qua cho tập dữ liệu hiện tại. |
Phản hồi (Response):
{
"downloadUrl": "https://storage.googleapis.com/...&signature=...",
"cached": true
}Yêu cầu một phiên bản cụ thể trả về downloadUrl và version thay vì cached.
Tạo Phiên bản Dataset#
POST /api/datasets/{owner}/{dataset}/exportPython SDK: client.datasets.create_export(owner, dataset)
Tạo một bản chụp (snapshot) được đánh số không thể thay đổi của tập dữ liệu và lưu trữ tệp xuất NDJSON của bản đó. Yêu cầu quyền truy cập chỉnh sửa.
Phần thân (tùy chọn):
{
"description": "Added 500 training images"
}Phản hồi (Response):
{
"version": 3,
"downloadUrl": "https://storage.googleapis.com/...&signature=...",
"reused": false
}reused là true khi tập dữ liệu không thay đổi kể từ phiên bản trước và bản chụp đó được trả về thay thế.
Cập nhật Mô tả Phiên bản#
PATCH /api/datasets/{owner}/{dataset}/exportPython SDK: client.datasets.update_export(owner, dataset, version=..., description=...)
Body:
{
"version": 2,
"description": "Fixed mislabeled classes"
}Phản hồi: {"ok": true}
Khôi phục phiên bản tập dữ liệu#
POST /api/datasets/{owner}/{dataset}/restorePython SDK: client.datasets.restore(owner, dataset, version=...)
Tái tạo lại các hình ảnh, chú thích và lớp từ phiên bản đã lưu mà không cần sao chép các byte hình ảnh.
Body:
{
"version": 2
}Phản hồi: {"version": 2, "imageCount": 1000}
Lấy Thống Kê Tập Dữ Liệu#
GET /api/datasets/{owner}/{dataset}/class-statsPython SDK: client.datasets.class_stats(owner, dataset)
Trả về số lượng chú thích theo từng lớp, biểu đồ histogram của hình ảnh và chú thích, cùng với bản đồ nhiệt (heatmap). Các tập dữ liệu lớn sẽ được lấy mẫu, trong trường hợp đó sampleSize sẽ báo cáo số lượng hình ảnh đã đóng góp.
Phản hồi (rút gọn):
{
"classes": [{ "classId": 0, "count": 1500, "imageCount": 450 }],
"imageStats": {
"widthHistogram": [{ "bin": 640, "count": 120, "size": 1 }],
"heightHistogram": [{ "bin": 480, "count": 95, "size": 1 }],
"pointsHistogram": [{ "bin": 4, "count": 200, "size": 1 }],
"formatDistribution": { "jpg": 900, "png": 100 },
"fileSizeHistogram": [{ "bin": 250000, "count": 300, "size": 50000 }],
"objectsPerImageHistogram": [{ "bin": 5, "count": 210, "size": 1 }],
"bboxWidthHistogram": [{ "bin": 120, "count": 340, "size": 20 }],
"bboxHeightHistogram": [{ "bin": 90, "count": 300, "size": 20 }]
},
"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", "forklift"],
"cached": true,
"sampleSize": null
}Quản lý Lớp (Classes)#
Hợp nhất các lớp (gán lại các chú thích cho một lớp mục tiêu, sau đó xóa các lớp nguồn):
POST /api/datasets/{owner}/{dataset}/classes/mergePython SDK: client.datasets.merge_classes(owner, dataset, source_class_ids=..., target_class_id=...)
{
"sourceClassIds": [2, 4],
"targetClassId": 1
}Xóa các lớp (các chú thích của chúng bị xóa và ID các lớp còn lại dịch chuyển xuống dưới):
POST /api/datasets/{owner}/{dataset}/classes/deletePython SDK: client.datasets.delete_classes(owner, dataset, class_ids=...)
{
"classIds": [2, 4]
}Cả hai thao tác đều trả về success, classNames và classColors đã cập nhật, cùng với bản tóm tắt những gì đã thay đổi (mergedClassIds và targetClassId, hoặc deletedClassIds và deletedAnnotations).
Do các ID còn lại dịch chuyển sau khi hợp nhất hoặc xóa, các thao tác này không có tính lũy đẳng (idempotent). Hãy lấy lại tập dữ liệu để nhận các chỉ mục lớp hiện tại trước khi thực hiện thao tác lớp khác.
Phân bổ lại Tập dữ liệu (Splits)#
POST /api/datasets/{owner}/{dataset}/splits/redistributePython SDK: client.datasets.redistribute_splits(owner, dataset, train=..., val=..., test=...)
Phân bổ lại ngẫu nhiên các hình ảnh giữa các tập chia tách (splits). Ba tỷ lệ phần trăm phải tổng cộng bằng 100.
{
"train": 80,
"val": 20,
"test": 0
}Phản hồi: success, số lượng kết quả splits, và modified (số lượng hình ảnh đã di chuyển).
Embeddings tập dữ liệu#
GET /api/datasets/{owner}/{dataset}/embeddings
POST /api/datasets/{owner}/{dataset}/embeddings
DELETE /api/datasets/{owner}/{dataset}/embeddingsPython SDK: client.datasets.embeddings(owner, dataset), client.datasets.create_embeddings(owner, dataset),
client.datasets.delete_embeddings(owner, dataset)
GET trả về tóm tắt phân tích (analyzedAt, embeddingsCount, latestImageAt, activeJob). POST xếp hàng đợi phân tích embedding và trả về 202 kèm theo jobId. DELETE hủy tác vụ đang chạy và trả về ID tác vụ đã hủy hoặc null.
Phân cụm hình ảnh#
GET /api/datasets/{owner}/{dataset}/images/clusteringPython SDK: client.datasets.clustering(owner, dataset)
Trả về bố cục UMAP 2D từ một phân tích đã hoàn thành, được phân trang với offset và limit (mặc định và tối đa 50.000). Mỗi mục có id, umapX, umapY, split, classIds, width, height, bytes, labelCount, và missing.
Liệt Kê Các Model Được Đào Tạo Trên Tập Dữ Liệu#
GET /api/datasets/{owner}/{dataset}/modelsPython SDK: client.datasets.models(owner, dataset)
Phản hồi (Response):
{
"models": [
{
"id": "65f1c0a2b3d4e5f601234599",
"owner": "acme-vision",
"project": "inspection",
"model": "v3",
"name": "v3",
"status": "completed",
"task": "detect",
"epochs": 100,
"bestEpoch": 87,
"metrics": { "mAP50": 0.85, "mAP50-95": 0.72, "precision": 0.88, "recall": 0.81 },
"startedAt": "2026-01-14T22:00:00Z",
"completedAt": "2026-01-15T10:00:00Z",
"createdAt": "2026-01-14T21:55:00Z"
}
],
"count": 1
}Liệt Kê Hình Ảnh Tập Dữ Liệu#
GET /api/datasets/{owner}/{dataset}/imagesPython SDK: client.datasets.images(owner, dataset)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
limit | int | Số lượng hình ảnh tối đa trả về (mặc định: 50, tối đa: 5000) |
offset | int | Số hình ảnh cần bỏ qua (mặc định: 0) |
cursor | string | ID hình ảnh cuối cùng từ trang trước, dùng cho phân trang dạng con trỏ (cursor pagination) |
includeTotal | boolean | Bao gồm tổng số lượng khớp (mặc định: true) |
split | string | Lọc theo phân chia: train, val, test |
hasLabel | boolean | Lọc theo trạng thái chú thích |
hasError | boolean | Lọc theo trạng thái lỗi xử lý |
classIds | string | Các ID lớp ngăn cách bằng dấu phẩy; trả về những hình ảnh chứa bất kỳ lớp nào trong số đó |
search | string | Khớp chuỗi con trên tên tệp và metadata tùy chỉnh (tối đa 200 ký tự) |
sort | string | newest (mặc định), oldest, name-asc, name-desc, height-asc, height-desc, width-asc, width-desc, size-asc, size-desc, labels-asc, labels-desc |
includeThumbnails | boolean | Bao gồm các URL hình thu nhỏ có chữ ký (mặc định: true) |
includeImageUrls | boolean | Bao gồm các URL hình ảnh kích thước đầy đủ có chữ ký (mặc định: false) |
includeLabels | boolean | Bao gồm các chú thích xem trước bị giới hạn (mặc định: false) |
Phản hồi (Response):
{
"images": [
{
"id": "65f1c0a2b3d4e5f601234567",
"hash": "9f2c1d4b6a8e0f3c5d7b9a1e2f4c6d8b",
"ext": "jpg",
"name": "aisle-04.jpg",
"thumbnailUrl": "https://storage.googleapis.com/...&signature=...",
"width": 1920,
"height": 1080,
"split": "train",
"labelCount": 6,
"bytes": 284213,
"error": null
}
],
"total": 1000,
"hasMore": true,
"classes": ["person", "forklift"],
"errorCount": 0,
"nextCursor": "65f1c0a2b3d4e5f601234567"
}Lấy hình ảnh đã chọn#
POST /api/datasets/{owner}/{dataset}/imagesPython SDK: client.datasets.selected_images(owner, dataset, image_ids=...)
Trả về cùng hình dạng hình ảnh cho tối đa 1.000 ID hình ảnh được cung cấp, và chấp nhận các tham số truy vấn URL và bộ lọc giống như thao tác liệt kê.
{
"imageIds": ["65f1c0a2b3d4e5f601234567", "65f1c0a2b3d4e5f601234568"]
}Nạp Dữ Liệu Vào Tập Dữ Liệu#
POST /api/datasets/{owner}/{dataset}/ingestPython SDK: client.datasets.ingest(owner, dataset, body=...)
Xử lý một lượt tải lên đã hoàn tất, một lưu trữ từ xa (remote archive), hoặc một nguồn lưu trữ được kết nối vào một tập dữ liệu hiện có. Cung cấp chính xác một nguồn:
| Trường (Field) | Loại | Mô tả |
|---|---|---|
sessionId | string | Phiên tải lên từ POST /api/upload/signed-url, đã hoàn tất |
sourceUrl | string | URL HTTP hoặc HTTPS công khai của tệp ZIP, TAR, TAR.GZ, TGZ hoặc NDJSON (tối đa 4096 ký tự) |
reference | đối tượng | Nguồn được kết nối: lưu trữ đám mây (provider: "cloud", integrationId, target, prefix) hoặc On Premise (provider: "local", keyId, root, prefix) |
targetSplit | string | train, val, hoặc test; ghi đè cấu trúc phân tách của tệp lưu trữ |
conflictPolicy | string | skip, keep_both, hoặc replace khi xảy ra xung đột tên tệp hoặc nội dung |
classMapping | đối tượng | Ánh xạ tên lớp đầu vào tới chỉ mục lớp, tên lớp hiện có hoặc tên lớp mới, hoặc null để bỏ qua |
imageMetadata | đối tượng | Metadata tùy chỉnh được khóa bằng đường dẫn tương đối trong tệp lưu trữ của mỗi hình ảnh hoặc giá trị NDJSON file |
Các phiên tải lên được liên kết với một tập dữ liệu bằng assetId được truyền tới POST /api/upload/signed-url, và tính năng nạp dữ liệu sẽ từ chối phiên thuộc về một tập dữ liệu khác.
Phần thân (tệp lưu trữ đã tải lên):
{
"sessionId": "session_abc123",
"targetSplit": "train"
}Phần thân (tệp lưu trữ từ xa hoặc NDJSON):
{
"sourceUrl": "https://example.com/my-dataset.zip"
}Phần thân (nhập nhãn trong lần nạp dữ liệu sau):
{
"sessionId": "session_abc123",
"classMapping": { "person": 0, "automobile": "forklift", "background": null }
}Phần thân (đính kèm metadata cho mỗi hình ảnh):
{
"sessionId": "session_abc123",
"imageMetadata": {
"airbus-wing.jpg": { "aircraft": { "family": "A350" }, "inspectionStatus": "reviewed" },
"images/tail.jpg": { "aircraft": { "family": "A320" }, "inspectionSeverity": 2 }
}
}Khóa metadata phải khớp với đường dẫn đã chuẩn hóa bên trong tệp lưu trữ, bao gồm cả thư mục. Đối với các tệp nhập NDJSON, mỗi bản ghi có thể mang đối tượng metadata của riêng nó, đối tượng này có ưu tiên cao hơn mục nhập imageMetadata khớp. Đường dẫn lưu trữ được giới hạn ở 1.024 ký tự, khóa metadata cấp cao nhất ở 128 ký tự, và mỗi đối tượng metadata — cũng như toàn bộ bản đồ imageMetadata — được giới hạn ở 500.000 ký tự được tuần tự hóa.
Lần nạp dữ liệu đầu tiên tự động tạo các lớp từ tệp lưu trữ. Trong các lần nạp dữ liệu sau, các lớp trong tệp lưu trữ bị bỏ khỏi classMapping sẽ quay về khớp không phân biệt chữ hoa chữ thường với các lớp tập dữ liệu hiện có. Các nhãn chỉ bị bỏ qua đối với các lớp được ánh xạ rõ ràng tới null hoặc không có lớp hiện có phù hợp.
Phản hồi (201):
{
"jobId": "65f1c0a2b3d4e5f6012345aa",
"status": "queued"
}graph LR
A[POST /api/datasets]:::start --> B[POST /api/upload/signed-url]:::proc
B --> C[PUT archive to signed URL]:::proc
C --> D[POST /api/upload/complete]:::proc
D --> E["POST /api/datasets/{owner}/{dataset}/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:#fffTải lên một hình ảnh kèm theo siêu dữ liệu sử dụng Python
Đoạn mã tương tự xử lý một nhóm hình ảnh: thêm nhiều tệp hơn vào tệp ZIP và các mục tương ứng vào imageMetadata.
import io
import zipfile
from pathlib import Path
import requests
api = "https://platform.ultralytics.com/api"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
owner, dataset = "acme-vision", "warehouse"
dataset_id = "65f1c0a2b3d4e5f601234567" # id returned by POST /api/datasets
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/{owner}/{dataset}/ingest",
headers=headers,
json={
"sessionId": upload["sessionId"],
"imageMetadata": {
"airbus-wing.jpg": {
"aircraft": {"family": "A350", "section": "wing"},
"inspectionStatus": "reviewed",
}
},
},
)
ingest.raise_for_status()
print(ingest.json())API Hình Ảnh#
Kiểm tra, chú thích, di chuyển và xóa hình ảnh tập dữ liệu bằng ID hình ảnh 24 ký tự của chúng. Xem Tài liệu chú thích.
Lấy Hình Ảnh#
GET /api/images/{imageId}Python SDK: client.images.retrieve(image_id)
Trả về metadata (tùy chỉnh, do người dùng định nghĩa), properties (tên tệp, mã băm, kích thước, tập chia tách, số lượng, dấu thời gian), labels, và classNames của tập dữ liệu.
Cập Nhật Hình Ảnh#
PATCH /api/images/{imageId}Python SDK: client.images.update(image_id, body=...)
Thay thế hoặc các chú thích hoặc metadata tùy chỉnh — hãy gửi một trong hai hình dạng, không gửi cả hai.
Phần thân (chú thích):
{
"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] }
]
}Phần thân (metadata):
{
"metadata": { "location": "strasbourg", "reviewed": true }
}Tọa độ nhãn sử dụng các giá trị đã chuẩn hóa của YOLO trong khoảng từ 0 đến 1. Bounding box sử dụng [x_center, y_center, width, height]. Nhãn phân đoạn (segmentation) sử dụng segments, một danh sách phẳng gồm các đỉnh đa giác [x1, y1, x2, y2, ...]. Nhãn tư thế (pose) sử dụng keypoints ở một hình dạng phẳng đồng nhất: các cặp [x1, y1, x2, y2, ...] hoặc các bộ ba [x1, y1, v1, x2, y2, v2, ...], trong đó trạng thái hiển thị theo quy ước sử dụng 0, 1 hoặc 2. Các hộp định hướng (oriented box) sử dụng các góc obb. Tọa độ được lưu được làm tròn đến 5 chữ số thập phân và một hình ảnh chấp nhận tối đa 10.000 chú thích.
Xóa hình ảnh#
DELETE /api/images/{imageId}Python SDK: client.images.delete(image_id)
Xóa vĩnh viễn một hình ảnh và các chú thích của hình ảnh đó.
Tự Động Chú Thích Hình Ảnh#
POST /api/images/{imageId}/predictPython SDK: client.images.predict(image_id, model_id=...)
Chạy suy luận YOLO trên hình ảnh và trả về các chú thích được dự đoán. Thao tác này không lưu chúng — hãy ghi lại kết quả bằng PATCH /api/images/{imageId} khi bạn hài lòng với chúng.
| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
modelId | string | Có | URI model đủ điều kiện, ul://{owner}/{project}/{model} |
confidence | float | Không | Ngưỡng độ tin cậy, 0.01 – 1.0 (mặc định: 0.25) |
iou | float | Không | Ngưỡng IoU cho non-maximum suppression, 0.0 – 0.95 (mặc định: 0.7) |
Phản hồi: success, predictions (các đối tượng chú thích), modelUsed, và inferenceTime. Model có các lớp không khớp với tập dữ liệu sẽ trả về 422.
Di Chuyển Hàng Loạt Hình Ảnh#
PATCH /api/images/bulkPython SDK: client.images.update_bulk(image_ids=..., split=...)
Di chuyển tối đa 1.000 hình ảnh từ tập dữ liệu này sang một tập chia tách khác.
{
"imageIds": ["65f1c0a2b3d4e5f601234567"],
"split": "val",
"conflictPolicy": "skip"
}Xung đột tên tệp hoặc nội dung trả về 409 cho đến khi bạn chọn conflictPolicy cho toàn bộ giỏ (basket-wide) là skip, keep_both, hoặc replace. Phản hồi báo cáo modifiedCount, skippedCount, và targetSplit.
Xóa Hàng Loạt Hình Ảnh#
DELETE /api/images/bulkPython SDK: client.images.delete_bulk(image_ids=...)
{
"imageIds": ["65f1c0a2b3d4e5f601234567", "65f1c0a2b3d4e5f601234568"]
}Xóa tối đa 1.000 hình ảnh từ một tập dữ liệu duy nhất và trả về deletedCount và deletedImageIds.
Lấy URL Hình ảnh Đã ký#
POST /api/images/urlsPython SDK: client.images.urls(image_ids=...)
Trả về các URL có chữ ký tạm thời cho tối đa 100 ID hình ảnh từ một tập dữ liệu.
{
"imageIds": ["65f1c0a2b3d4e5f601234567"]
}Phản hồi: urls và thumbnails, cả hai đều được khóa theo ID hình ảnh.
Projects API#
Tổ chức các model của bạn thành các dự án (projects). Mỗi model thuộc về một dự án. Xem Tài liệu dự án.
Liệt kê Project#
GET /api/projects/{owner}Python SDK: client.projects.list(owner)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
limit | int | Số lượng dự án tối đa trả về (mặc định: 20, tối đa: 500) |
Lấy Project#
GET /api/projects/{owner}/{project}Python SDK: client.projects.retrieve(owner, project)
Trả về đối tượng project, mảng models chứa các bản tóm tắt theo từng model (trạng thái, chỉ số, số epoch, weights, tham số huấn luyện), và isOwner.
Tạo Project#
POST /api/projectsPython SDK: client.projects.create(project=..., name=...)
| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
project | string | Có | Tên dự án được sử dụng trong các URL Platform |
name | string | Có | Tên hiển thị (tối đa 100 ký tự) |
description | string | Không | Mô tả (tối đa 1000 ký tự) |
visibility | string | Không | public hoặc private |
tags | array | Không | Tối đa 50 thẻ (tags) |
license | string | Không | Mã định danh giấy phép dự án |
metadata | đối tượng | Không | Metadata JSON tùy chỉnh |
owner | string | Không | Handle không gian làm việc nhóm; mặc định là không gian làm việc cá nhân của bạn |
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"project": "inspection",
"name": "Inspection",
"description": "Detection experiments",
"metadata": {"department": "manufacturing", "cost_center": "cv-01"}
}' \
https://platform.ultralytics.com/api/projectsPhản hồi (201): id, owner, project, region.
Cập nhật Project#
PATCH /api/projects/{owner}/{project}Python SDK: client.projects.update(owner, project)
Các trường được chấp nhận: name, description, visibility, metadata, tags, license, archived, iconColor, iconLetter, viewPreferences, và starred.
{
"metadata": { "department": "research", "program": "inspection" }
}Gửi một đối tượng metadata trống ({}) để xóa nó. Metadata dự án sử dụng cùng giới hạn 128 ký tự cho khóa và 500.000 ký tự cho đối tượng được tuần tự hóa như metadata tập dữ liệu.
Xóa Project#
DELETE /api/projects/{owner}/{project}Python SDK: client.projects.delete(owner, project)
Di chuyển dự án và các model của dự án vào thùng rác, trả về cascadedModels.
Clone Dự án#
POST /api/projects/{owner}/{project}/clonePython SDK: client.projects.clone(owner, project)
Nhân bản (clone) một dự án có thể truy cập và các model đã hoàn thành của dự án đó. Phần thân tùy chọn chấp nhận project, name, description, visibility, license, và điểm đến owner.
API Models#
Quản lý các model YOLO đã được huấn luyện — xem các chỉ số, tải xuống weights, chạy suy luận và theo dõi quá trình huấn luyện. Xem Tài liệu model.
Liệt Kê Các Model Trong Một Dự Án#
GET /api/models/{owner}/{project}Python SDK: client.models.list(owner, project)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
limit | int | Số lượng model tối đa trả về (mặc định: 20, tối đa: 100) |
Lấy Model#
GET /api/models/{owner}/{project}/{model}Python SDK: client.models.retrieve(owner, project, model)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
analysis | int | Đặt thành 1 để trả về phân tích xác thực theo từng hình ảnh thay vì model |
Phản hồi mặc định chứa đối tượng model — trạng thái, tác vụ, các chỉ số, trainArgs, trainResults, classNames, computeCost, metadata, và nhiều thông tin khác — cộng với isOwner.
Tạo Model#
POST /api/modelsPython SDK: client.models.create(body=...)
Tạo một bản ghi model chưa được huấn luyện mà bạn có thể đính kèm weights vào hoặc tiến hành huấn luyện.
| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
project | string | Có | Tên dự án đích |
owner | string | Không | Workspace handle; mặc định là không gian làm việc cá nhân của bạn |
model | string | Không | Tên model được sử dụng trong các URL Platform; được tạo tự động khi bỏ trống |
name | string | Không | Tên hiển thị (chỉ được chấp nhận kèm theo model) |
description | string | Không | Mô tả (tối đa 1000 ký tự) |
task | string | Không | detect, segment, semantic, depth, classify, pose, hoặc obb |
metadata | đối tượng | Không | Metadata JSON tùy chỉnh |
trainArgs | đối tượng | Không | Các tham số huấn luyện cần ghi lại |
metrics | đối tượng | Không | Các chỉ số như mAP50, mAP50-95, precision, recall |
epochs | number | Không | Số lượng epoch cho một model đã được huấn luyện |
version | string | Không | Nhãn phiên bản (tối đa 50 ký tự) |
Phản hồi (201): id, owner, project, model, region.
Để đính kèm weights .pt, hãy yêu cầu một URL tải lên có chữ ký với assetType: "models" và id của model này làm assetId, PUT tệp tới URL đã trả về, sau đó gọi POST /api/upload/complete với sessionId được trả về.
Cập nhật Model#
PATCH /api/models/{owner}/{project}/{model}Python SDK: client.models.update(owner, project, model)
Các trường được chấp nhận bao gồm name, description, color, metadata, status, license, datasetSlug, trainArgs, trainResults, epochs, bestEpoch, bestFitness, version, trainingError, và starred.
{
"metadata": { "release": "candidate-3", "reviewed": true }
}metadata tùy chỉnh tách biệt với các trường do quá trình huấn luyện quản lý như trainArgs, environment, và trainResults, đồng thời sử dụng các giới hạn kích thước giống như metadata tập dữ liệu.
Xóa Model#
DELETE /api/models/{owner}/{project}/{model}Python SDK: client.models.delete(owner, project, model)
Chuyển mô hình vào thùng rác trong vòng 30 ngày.
Tải xuống các tệp Model#
GET /api/models/{owner}/{project}/{model}/filesPython SDK: client.models.files(owner, project, model)
Trả về các URL có chữ ký có thời hạn ngắn cho trọng số của mô hình.
{
"files": [
{
"name": "best.pt",
"size": 6534127,
"downloadUrl": "https://storage.googleapis.com/...&signature=..."
}
]
}Sao chép (Clone) Model#
POST /api/models/{owner}/{project}/{model}/clonePython SDK: client.models.clone(owner, project, model, project_body=...)
Sao chép một mô hình có thể truy cập vào một dự án hiện có.
{
"owner": "acme-vision",
"project": "inspection",
"model": "v3-copy",
"name": "V3 Copy",
"description": "Cloned from a public model"
}| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
project | string | Có | Tên dự án đích |
owner | string | Không | Không gian làm việc đích; mặc định là không gian cá nhân của bạn |
model | string | Không | Tên mô hình đích |
name | string | Không | Tên hiển thị đích |
description | string | Không | Mô tả cho bản sao |
Chạy Inference#
POST /api/models/{owner}/{project}/{model}/predictPython SDK: client.models.predict(owner, project, model, body=...)
Các mô hình công khai có thể được suy luận mà không cần xác thực. Các mô hình riêng tư và được chia sẻ yêu cầu khóa API có quyền truy cập vào dự án gốc.
Multipart Form:
| Tham số | Loại | Mặc định | Phạm vi | Mô tả |
|---|---|---|---|---|
file | tệp | - | - | Tệp hình ảnh hoặc video (bắt buộc trừ khi source được thiết lập) |
conf | float | 0.25 | 0.01 – 1.0 | Ngưỡng độ tin cậy tối thiểu |
iou | float | 0.7 | 0.0 – 0.95 | Ngưỡng NMS IoU |
imgsz | int | 640 | 32 – 1280 | Kích thước hình ảnh đầu vào tính bằng pixel |
normalize | bool | false | - | Trả về tọa độ BBox dưới dạng 0 – 1 |
decimals | int | 5 | 0 – 10 | Độ chính xác thập phân cho các giá trị tọa độ |
bits | int | 8 | 8, 12, 16 | Lượng tử hóa bản đồ độ sâu, chỉ dành cho model độ sâu |
source | string | - | - | URL hình ảnh hoặc chuỗi base64 (thay thế cho file) |
Cung cấp file hoặc source. Các mô hình độ sâu cũng chấp nhận bits (8, 12, hoặc 16) để chọn lượng tử hóa PNG của bản đồ độ sâu. Các yêu cầu vượt quá giới hạn đầu vào của dịch vụ sẽ trả về 413.
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@image.jpg" \
-F "conf=0.5" \
https://platform.ultralytics.com/api/models/acme-vision/inspection/v3/predictPhản hồi (Response):
Mỗi mục trong images chứa shape, speed, results, và đối với các tác vụ dự đoán dày đặc, một tải trọng PNG semantic_mask hoặc depth (các giá trị độ sâu là pixel × max / divisor, với ước số 255 cho bản đồ 8-bit mặc định và 65535 khi bits là 12 hoặc 16). Đối tượng metadata báo cáo số lượng hình ảnh, thời gian thực thi, tác vụ và phiên bản dịch vụ. Các đường dẫn mô hình nội bộ không bao giờ được trả về.
{
"images": [
{
"shape": [1080, 1920],
"speed": { "preprocess": 2.1, "inference": 12.4, "postprocess": 1.3 },
"results": [
{
"class": 0,
"name": "person",
"confidence": 0.92,
"box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
}
]
}
],
"metadata": {
"imageCount": 1,
"functionTimeAlive": 184.2,
"functionTimeCall": 0.31,
"task": "detect",
"version": { "ultralytics": "8.4.120" }
}
}Kiểm tra Tiến trình Huấn luyện#
GET /api/models/{owner}/{project}/{model}/trainingPython SDK: client.models.training(owner, project, model)
Trả về job, chứa trạng thái, tiến trình epoch, thời gian, chi tiết tính toán, tham số huấn luyện, số liệu epoch và chi tiết lỗi an toàn, hoặc null khi mô hình chưa từng được huấn luyện. Các mô hình trong dự án công khai có thể đọc mà không cần xác thực.
Hủy huấn luyện#
DELETE /api/models/{owner}/{project}/{model}/trainingPython SDK: client.models.delete_training(owner, project, model)
Chấm dứt phiên bản tính toán đang chạy và đánh dấu công việc đã bị hủy. Trả về 409 khi quá trình huấn luyện không còn hoạt động.
API Training#
Khởi chạy quá trình huấn luyện YOLO trên GPU đám mây và theo dõi tiến trình trong thời gian thực. Xem Tài liệu Huấn luyện Đám mây.
graph LR
A[POST /api/training/start]:::start --> B[Job Created]:::proc
B --> C{Training}:::decide
C -->|progress| D[GET .../training]:::proc
C -->|cancel| E[DELETE .../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:#fffLấy trạng thái khả dụng của GPU#
GET /api/training/gpu-availabilityPython SDK: client.training.gpu_availability()
Trả về trạng thái kho hàng hiện tại được khóa bằng ID GPU. Công khai và không cần xác thực; truyền managed=true để bao gồm dung lượng huấn luyện được quản lý, vốn yêu cầu khóa API.
Bắt đầu huấn luyện#
POST /api/training/startPython SDK: client.training.start(model_id=..., train_args=...)
| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
modelId | string | Có | ID của mô hình cần huấn luyện |
trainArgs | đối tượng | Có | Các tham số huấn luyện YOLO; model, data và epochs là bắt buộc |
gpuType | string | Không | GPU đám mây để sử dụng (mặc định: rtx-4090) |
captureDatasetVersion | boolean | Không | Lưu phiên bản tập dữ liệu bất biến cho lần chạy này (mặc định: false) |
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"modelId": "65f1c0a2b3d4e5f601234599",
"gpuType": "rtx-4090",
"trainArgs": {
"model": "yolo26n.pt",
"data": "ul://acme-vision/datasets/warehouse",
"epochs": 100,
"imgsz": 640,
"batch": 16
}
}' \
https://platform.ultralytics.com/api/training/startPhản hồi (Response):
{
"modelId": "65f1c0a2b3d4e5f601234599",
"status": "starting",
"gpuType": "rtx-4090",
"estimatedCost": { "pricePerHour": 0.69, "gpuMemoryGb": 24 },
"billing": {
"estimatedCostCents": 138,
"estimatedCostDisplay": "$1.38",
"balanceCents": 2500
}
}Quá trình huấn luyện trả về 402 khi số dư tín dụng của bạn quá thấp và 503 khi không có dung lượng cho GPU được yêu cầu.
Có sẵn 26 loại GPU, từ rtx-2000-ada đến b300, bao gồm rtx-4090, l40s, a100-80gb-pcie, a100-80gb-sxm, rtx-pro-6000, h100-sxm, h200-sxm và b200. Xem Huấn luyện Đám mây để biết danh sách đầy đủ kèm theo giá cả.
API Xuất#
Chuyển đổi mô hình sang các định dạng được tối ưu hóa như ONNX, TensorRT, CoreML và LiteRT để triển khai trên thiết bị biên. Xem Tài liệu Triển khai.
Danh sách Xuất#
GET /api/models/{owner}/{project}/{model}/exportsPython SDK: client.exports.list(owner, project, model)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
status | string | Lọc theo queued, starting, running, completed, failed hoặc cancelled |
limit | int | Số lượng xuất tối đa cần trả về (mặc định: 20, tối đa: 100) |
Tạo Xuất#
POST /api/models/{owner}/{project}/{model}/exportsPython SDK: client.exports.create(owner, project, model, format=...)
| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
format | string | Có | Định dạng xuất đích (xem bảng bên dưới) |
gpuType | string | Có điều kiện | Bắt buộc khi format là engine; hãy sử dụng GPU hoặc mục tiêu Jetson được hỗ trợ |
args | đối tượng | Không | Tùy chọn xuất: imgsz, quantize, dynamic, simplify, opset, conf, iou, batch, workspace, nms, end2end, optimize, keras và name (mục tiêu thiết bị cho các định dạng RKNN, QNN, Hailo và Ascend) |
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"format": "onnx", "args": {"imgsz": 640, "quantize": 16}}' \
https://platform.ultralytics.com/api/models/acme-vision/inspection/v3/exportsPhản hồi (201): id, format, status (queued hoặc running), gpuType, region. Một bản xuất tương đương đang được thực hiện sẽ trả về 409.
Các định dạng được hỗ trợ:
Sử dụng đối số format từ bảng xuất được chia sẻ bên dưới. PyTorch là định dạng nguồn và không phải là mục tiêu xuất API.
| Định dạng | Đối số format | Mô hình | Metadata | Tham số |
|---|---|---|---|---|
| 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 |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, batch, quantize |
Lấy trạng thái xuất#
GET /api/models/{owner}/{project}/{model}/exports/{exportId}Python SDK: client.exports.retrieve(owner, project, model, export_id)
Trả về đối tượng export với status, format, args, gpuType, dấu thời gian và — sau khi hoàn thành — đối tượng file chứa size, downloadUrl và downloadFilename.
Hủy hoặc Xóa Bản xuất#
DELETE /api/models/{owner}/{project}/{model}/exports/{exportId}Python SDK: client.exports.delete(owner, project, model, export_id)
Hủy một bản xuất đang hoạt động hoặc xóa một bản xuất đã hoàn thành cùng với tệp của nó. Phản hồi báo cáo kết quả đã xảy ra:
{
"success": true,
"action": "cancelled"
}API Deployments#
Triển khai mô hình tới các điểm cuối suy luận chuyênδ dụng với các kiểm tra trạng thái và giám sát. Xem Tài liệu Điểm cuối.
graph LR
A[Create]:::start --> B[Deploying]:::proc
B --> C[Ready]:::out
C -->|action stop| D[Stopped]:::extern
C -->|action replace| B
D -->|action 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:#fffLiệt kê các bản triển khai#
GET /api/deployments/{owner}Python SDK: client.deployments.list(owner)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
status | string | creating, deploying, ready, stopping, stopped hoặc failed |
model | string | Lọc theo {project}/{model}, ví dụ inspection/v3 |
limit | int | Số lượng triển khai tối đa cần trả về (mặc định: 20, tối đa: 100) |
Người gọi ẩn danh phải lọc theo một mô hình công khai; việc liệt kê toàn bộ không gian làm việc yêu cầu xác thực.
Tạo bản triển khai#
POST /api/deployments/{owner}Python SDK: client.deployments.create(owner, project=..., model=..., deployment=..., name=..., region=...)
Body:
{
"project": "inspection",
"model": "v3",
"deployment": "edge-1",
"name": "Edge 1",
"region": "us-central1"
}| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
project | string | Có | Dự án chứa mô hình |
model | string | Có | Mô hình cần triển khai |
deployment | string | Có | Tên triển khai được sử dụng trong các URL của Platform |
name | string | Có | Tên hiển thị |
region | string | Có | Một trong 42 khu vực triển khai được hỗ trợ |
Phản hồi (201): id, deployment, status (creating), message và region.
CPU, bộ nhớ và việc mở rộng quy mô phiên bản được quản lý bởi Platform từ các giới hạn gói của bạn, và yêu cầu tạo không chấp nhận cấu hình tài nguyên. Các giá trị hiện tại được trả về trong đối tượng resources trên mọi lần đọc triển khai.
Chọn một khu vực gần với người dùng của bạn để có độ trễ thấp nhất. Giao diện Platform hiển thị ước tính độ trễ cho tất cả 42 khu vực có sẵn.
Lấy bản triển khai#
GET /api/deployments/{owner}/{deployment}Python SDK: client.deployments.retrieve(owner, deployment)
Trả về đối tượng deployment với status, statusMessage, region, serviceUrl và resources.
Khởi động, Dừng hoặc Thay thế một Triển khai#
PATCH /api/deployments/{owner}/{deployment}Python SDK: client.deployments.update(owner, deployment, body=...)
Một trường action duy nhất chọn thao tác:
{ "action": "start" }Việc thay thế sẽ triển khai một phiên bản sửa đổi mới trong khi vẫn giữ nguyên ID triển khai, khu vực và URL điểm cuối; phiên bản sửa đổi hiện tại vẫn hoạt động nếu việc triển khai thất bại. Mô hình thay thế phải là một mô hình đã hoàn thành với trọng số mà khóa của bạn có thể truy cập. Các hoạt động hoàn thành trả về 200 với status ready hoặc stopped; các hoạt động vẫn đang triển khai trả về 202 với deploying hoặc stopping.
Xóa bản triển khai#
DELETE /api/deployments/{owner}/{deployment}Python SDK: client.deployments.delete(owner, deployment)
Xóa vĩnh viễn điểm cuối suy luận.
Kiểm tra tình trạng#
GET /api/deployments/{owner}/{deployment}/healthPython SDK: client.deployments.health(owner, deployment)
Gửi tín hiệu ping và làm nóng điểm cuối, trả về healthy, latencyMs và mã status thượng nguồn.
Chạy Suy luận trên một Triển khai#
POST /api/deployments/{owner}/{deployment}/predictPython SDK: client.deployments.predict(owner, deployment, body=...)
Định tuyến hình ảnh hoặc video qua điểm cuối chuyên dụng. Các hợp đồng yêu cầu và phản hồi khớp với suy luận mô hình.
Multipart Form:
| Tham số | Loại | Mặc định | Phạm vi | Mô tả |
|---|---|---|---|---|
file | tệp | - | - | Tệp hình ảnh hoặc video (bắt buộc trừ khi source được thiết lập) |
conf | float | 0.25 | 0.01 – 1.0 | Ngưỡng độ tin cậy tối thiểu |
iou | float | 0.7 | 0.0 – 0.95 | Ngưỡng NMS IoU |
imgsz | int | 640 | 32 – 1280 | Kích thước hình ảnh đầu vào tính bằng pixel |
normalize | bool | false | - | Trả về tọa độ BBox dưới dạng 0 – 1 |
decimals | int | 5 | 0 – 10 | Độ chính xác thập phân cho các giá trị tọa độ |
bits | int | 8 | 8, 12, 16 | Lượng tử hóa bản đồ độ sâu, chỉ dành cho model độ sâu |
source | string | - | - | URL hình ảnh hoặc chuỗi base64 (thay thế cho file) |
Lấy số liệu#
GET /api/deployments/{owner}/{deployment}/metricsPython SDK: client.deployments.metrics(owner, deployment)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
range | string | 1h, 6h, 24h (mặc định), 7d hoặc 30d |
sparkline | boolean | Trả về tóm tắt bảng điều khiển nhỏ gọn thay vì chuỗi đầy đủ (mặc định: false) |
Phản hồi đầy đủ chứa summary (tổng số yêu cầu, tỷ lệ lỗi, độ trễ trung bình và p50/p95/p99) và timeSeries (yêu cầu, lỗi, độ trễ, CPU, bộ nhớ, số lượng phiên bản). Phản hồi biểu đồ thu nhỏ trả về requests24h, totalRequests, errorRate và avgLatencyMs.
Lấy nhật ký (logs)#
GET /api/deployments/{owner}/{deployment}/logsPython SDK: client.deployments.logs(owner, deployment)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
severity | string | Phân tách bằng dấu phẩy: DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY |
limit | int | Các mục cần trả về (mặc định: 50, tối đa: 200) |
pageToken | string | Mã thông báo phân trang từ phản hồi trước đó |
API Thùng rác#
Xem, khôi phục và xóa vĩnh viễn các dự án, tập dữ liệu và mô hình đã bị xóa mềm. Các mục được xóa tự động sau 30 ngày. Xem Tài liệu Thùng rác.
Liệt kê thùng rác#
GET /api/trashPython SDK: client.lifecycle.trash()
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
type | string | all (mặc định), project, dataset hoặc model |
page | int | Số trang (mặc định: 1) |
limit | int | Các mục trên mỗi trang (mặc định: 50, tối đa: 200) |
Phản hồi bao gồm items (mỗi cái có daysRemaining), total, page, limit, totalPages và summary với tổng số theo loại.
Khôi phục mục#
POST /api/trashPython SDK: client.lifecycle.restore(id=..., type=...)
{
"id": "65f1c0a2b3d4e5f601234567",
"type": "dataset"
}Khôi phục một dự án cũng khôi phục các mô hình đã bị đưa vào thùng rác cùng với nó, được báo cáo là restoredModels.
Xóa Vĩnh viễn#
DELETE /api/trashPython SDK: client.lifecycle.delete_trash(body=...)
Xóa một mục:
{
"id": "65f1c0a2b3d4e5f601234567",
"type": "dataset"
}Hoặc làm trống toàn bộ thùng rác:
{
"all": true
}Phản hồi báo cáo deletedCount, cộng với cascadedModels và survivingDeployments khi có liên quan.
Việc xóa vĩnh viễn không thể được hoàn tác. Tài nguyên và tất cả dữ liệu liên quan sẽ bị xóa.
API Tải lên#
Tải tệp trực tiếp lên bộ nhớ đám mây bằng cách sử dụng các URL có chữ ký. Việc hoàn tất quá trình tải lên mô hình sẽ đính kèm trọng số của nó; việc hoàn tất quá trình tải lên lưu trữ tập dữ liệu sẽ ghi lại phiên, mà sau đó bạn chuyển cho quá trình nạp tập dữ liệu. Xem Tài liệu Dữ liệu.
Lấy Signed URL Tải lên#
POST /api/upload/signed-urlPython SDK: client.upload.signed_url(body=...)
Body:
{
"assetType": "datasets",
"assetId": "65f1c0a2b3d4e5f601234567",
"filename": "warehouse.zip",
"contentType": "application/zip",
"totalBytes": 52428800
}| Trường (Field) | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
assetType | string | Có | datasets, models, images hoặc videos |
assetId | string | Có | ID của tập dữ liệu hoặc mô hình đích |
filename | string | Có | Tên tệp gốc (tối đa 256 ký tự) |
contentType | string | Có | Loại MIME |
totalBytes | number | Có | Kích thước tệp tính bằng byte |
Khi assetType là datasets, filename phải kết thúc bằng .zip, .tar, .tar.gz, .tgz hoặc .ndjson. Đóng gói các hình ảnh rời rạc thành một tệp lưu trữ trước khi tải lên.
Phản hồi (Response):
{
"sessionId": "session_abc123",
"uploadUrl": "https://storage.googleapis.com/...&signature=...",
"expiresAt": "2026-02-22T12:00:00Z"
}Tải tệp lên bằng yêu cầu PUT tới uploadUrl, sử dụng cùng Content-Type mà bạn đã khai báo.
Hoàn tất Tải lên#
POST /api/upload/completePython SDK: client.upload.complete(session_id=...)
{
"sessionId": "session_abc123",
"checksum": "<optional sha-256 hex>"
}Phản hồi: success và đối tượng file với size và contentType. Đối với các mô hình, thao tác này đính kèm trọng số; đối với các tệp lưu trữ tập dữ liệu, hãy gọi nạp dữ liệu tiếp theo để bắt đầu xử lý.
API Tích hợp Bộ nhớ#
Kết nối các tài khoản Google Cloud Storage, Amazon S3 hoặc Azure Blob Storage chỉ đọc và duyệt qua chúng như các nguồn tập dữ liệu. Xem Tài liệu Tích hợp.
Liệt kê Tích hợp#
GET /api/integrations/bucketsPython SDK: client.storage_integrations.list()
Trả về integrations, mỗi cái có id, provider, credentialIdentity, targets và createdAt. Thông tin xác thực không bao giờ được trả về.
Khám phá Vị trí#
POST /api/integrations/buckets/discoverPython SDK: client.storage_integrations.discover(body=...)
Liệt kê các bucket hoặc container có thể đọc được bằng thông tin xác thực được cung cấp, mà không lưu chúng.
{
"provider": "gcs",
"credentials": {
"client_email": "svc@project.iam.gserviceaccount.com",
"private_key": "-----BEGIN PRIVATE KEY-----\n...",
"project_id": "my-project"
}
}Phản hồi: {"targets": ["my-bucket", "another-bucket"]}
Kết nối Bộ nhớ#
POST /api/integrations/bucketsPython SDK: client.storage_integrations.create(body=...)
Các định dạng thông tin xác thực giống như khám phá, cộng với một mảng targets bắt buộc gồm 1-50 tên bucket hoặc container. Trả về 201 với tích hợp đã lưu. Thông tin xác thực S3 tạm thời (khóa truy cập ASIA) bị từ chối.
Duyệt qua Đối tượng#
GET /api/integrations/buckets/{id}/objectsPython SDK: client.storage_integrations.objects(id, target=...)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
target | string | Có | Tên bucket hoặc container |
prefix | string | Không | Tiền tố thư mục (tối đa 1024 ký tự) |
cursor | string | Không | Con trỏ phân trang của nhà cung cấp từ trang trước |
Trả về entries (mỗi kind là folder hoặc file) và một cursor tùy chọn cho trang tiếp theo.
Ngắt kết nối Bộ nhớ#
DELETE /api/integrations/buckets/{id}Python SDK: client.storage_integrations.delete(id)
Xóa thông tin xác thực đã lưu mà không làm mất dữ liệu của nhà cung cấp. Các tập dữ liệu được kết nối vẫn hiển thị, nhưng các tệp của chúng vẫn không khả dụng cho đến khi cùng một tài khoản bộ nhớ được kết nối lại. Yêu cầu quyền truy cập quản trị viên không gian làm việc.
API Nhập Tập dữ liệu#
Nhập các tập dữ liệu từ các dịch vụ của bên thứ ba. Xem Tích hợp Roboflow.
Xem trước một quy trình nhập Roboflow#
POST /api/integrations/roboflow/previewPython SDK: client.datasets.preview_roboflow(api_key=...)
Giải quyết khóa API Roboflow thành kế hoạch nhập: chi tiết workspace, newDatasets sẽ được nhập, số lượng dự án bị bỏ qua, không được hỗ trợ và chưa được giải quyết, bytesTotal, và hạn mức storage của bạn. Khóa API Roboflow được đọc từ phần body và không được lưu giữ.
{
"apiKey": "ROBOFLOW_API_KEY"
}Nhập từ Roboflow#
POST /api/integrations/roboflow/importPython SDK: client.datasets.import_roboflow(api_key=..., items=...)
Đưa vào hàng đợi các tác vụ lấy dữ liệu cho tối đa 500 phiên bản dự án Roboflow đã chọn, sử dụng các mục được trả về từ bản xem trước.
{
"apiKey": "ROBOFLOW_API_KEY",
"items": [
{
"workspace": "my-workspace",
"projectId": "warehouse-safety",
"projectName": "Warehouse Safety",
"projectType": "object-detection",
"latestVersion": 4
}
]
}Phản hồi (201): Các mảng imported, failed, và skipped. Việc nhập yêu cầu dung lượng lưu trữ trống, và mỗi tập dữ liệu phải phù hợp với giới hạn kích thước mỗi lần nhập trong gói của bạn.
API Tài khoản#
Kiểm tra tài khoản Platform, khóa, bộ nhớ và hồ sơ công khai của bạn. Xem Tài liệu cài đặt.
Tóm tắt tài khoản#
GET /api/account/summaryPython SDK: client.account.summary()
Trả về gói, số dư tín dụng và số lượng tài nguyên cho workspace đã cấp khóa.
{
"username": "acme-vision",
"name": "Acme Vision",
"accountType": "team",
"plan": "pro",
"creditsCents": 2500,
"counts": { "projects": 4, "datasets": 7, "models": 21 },
"teams": []
}teams được điền sẵn cho các phiên trình duyệt. Các phản hồi bằng khóa API trả về danh sách trống, vì khóa đã được giới hạn trong một workspace duy nhất.
Liệt kê các API Keys#
GET /api/api-keysPython SDK: client.account.api_keys()
Trả về keys với keyId, name, keyPrefix, và createdAt cho workspace của khóa. Các yêu cầu được xác thực bằng khóa API chỉ nhận siêu dữ liệu; các giá trị khóa đầy đủ được hiển thị cho chủ sở hữu workspace trong Cài đặt > Khóa API trên Giao diện Platform, đây cũng là nơi tạo và thu hồi khóa.
Kiểm tra Mức sử dụng Lưu trữ#
GET /api/storagePython SDK: client.account.storage()
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
details | boolean | Bao gồm mười đối tượng tiêu thụ dung lượng lưu trữ lớn nhất (mặc định: false) |
Phản hồi (Response):
{
"tier": "pro",
"usage": {
"storage": { "current": 1073741824, "limit": 107374182400, "percent": 1.0 },
"datasets": { "current": 536870912, "limit": 107374182400, "percent": 0.5 }
},
"breakdown": {
"byCategory": {
"datasets": { "bytes": 536870912, "count": 2 },
"models": { "bytes": 268435456, "count": 4 },
"exports": { "bytes": 268435456, "count": 3 }
},
"topItems": [
{
"_id": "65f1c0a2b3d4e5f601234567",
"name": "Warehouse",
"slug": "warehouse",
"sizeBytes": 536870912,
"type": "dataset"
}
]
},
"region": "us",
"username": "acme-vision",
"updatedAt": "2026-01-15T10:00:00Z"
}Lấy Hồ sơ Người dùng Công khai#
GET /api/usersPython SDK: client.account.profile(username=...)
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
username | string | Có | Tên người dùng cần tìm |
Trả về hồ sơ user công khai cùng với followerCount và, đối với người gọi đã xác thực, isFollowed.
Theo dõi hoặc Bỏ theo dõi Người dùng#
PATCH /api/usersPython SDK: client.account.follow(username=..., followed=...)
{
"username": "target-user",
"followed": true
}Phản hồi: followed và followerCount đã cập nhật.
API Thanh toán#
Kiểm tra mức sử dụng gói và sổ cái tín dụng của bạn. Xem Tài liệu thanh toán.
Số tiền thanh toán là các số nguyên tính bằng xu USD, trong đó 100 = $1.00.
Xem Gói và Mức sử dụng#
GET /api/billing/usage-summaryPython SDK: client.billing.usage_summary()
Trả về plan (ID, trạng thái, chu kỳ thanh toán, thời gian kết thúc kỳ), metrics (giới hạn lưu trữ và mức sử dụng), trainingCredit, features, creditsCents, và số lượng chỗ ngồi.
Xem Giao dịch#
GET /api/billing/transactionsPython SDK: client.billing.transactions()
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
from | string | Dấu thời gian giao dịch sớm nhất (ISO 8601) |
to | string | Dấu thời gian giao dịch mới nhất (ISO 8601) |
Mỗi giao dịch bao gồm id, type (chẳng hạn như purchase, training, monthly_grant, hoặc refund), amountCents, balanceAfter, createdAt, một receiptUrl tùy chọn, và ngữ cảnh mô hình cho các khoản phí huấn luyện. Chi tiết thanh toán nội bộ không bao giờ được trả về.
API Khám phá (Explore)#
Tìm kiếm các dự án công khai và tập dữ liệu được chia sẻ bởi cộng đồng. Xem Tài liệu khám phá.
Tìm kiếm Nội dung Công khai#
GET /api/explore/searchPython SDK: client.explore.search()
Tham số truy vấn (Query Parameters):
| Tham số | Loại | Mô tả |
|---|---|---|
q | string | Từ khóa tìm kiếm (tối đa 200 ký tự) |
type | string | all (mặc định), projects, hoặc datasets |
sort | string | newest (mặc định), oldest, stars, name-asc, name-desc, count-desc, count-asc |
offset | int | Kết quả bỏ qua (mặc định: 0) |
limit | int | Số kết quả tối đa cho mỗi loại tài nguyên (mặc định: 20, tối đa: 100) |
task | string | Bộ lọc tác vụ cách nhau bằng dấu phẩy: detect, segment, semantic, depth, classify, pose, obb |
author | string | Bộ lọc tên người dùng chủ sở hữu |
starred | boolean | Chỉ trả về nội dung được người gọi đã xác thực đánh dấu sao; yêu cầu khóa API |
Phản hồi: projects, datasets, và hasMore.
curl "https://platform.ultralytics.com/api/explore/search?type=datasets&task=detect&sort=stars&limit=20"Python SDK#
ultralytics-platform là một Python client có kiểu dữ liệu được tạo từ
contract OpenAPI, với một phương thức cho mỗi endpoint (client.datasets.list, client.models.predict,
client.exports.create, ...). Mọi phương thức đều nhận các tham số đường dẫn theo vị trí, các đầu vào khác dưới dạng đối số từ khóa,
và các tham số tùy chọn theo từng request timeout và extra_headers.
pip install "ultralytics-platform>=0.1.5" # Python 3.11+from ultralytics_platform import Platform
with Platform() as client: # reads ULTRALYTICS_API_KEY
dataset = client.datasets.retrieve("acme-vision", "warehouse")
images = client.datasets.images("acme-vision", "warehouse", limit=10)
export = client.exports.create("acme-vision", "inspection", "v3", format="onnx")AsyncPlatform cung cấp cây tài nguyên tương tự cho mã async/await, các phản hồi không thành công sẽ raise ngoại lệ APIError kèm theo
status_code, body, và json đã phân tích cú pháp, trong khi các lỗi kết nối sẽ raise APIConnectionError. Xem
kho lưu trữ SDK để biết README đầy đủ.
Tích hợp Python#
Đối với các quy trình huấn luyện và suy luận, hãy sử dụng gói Ultralytics Python, tính năng này xử lý tự động việc xác thực, tải lên và phát trực tuyến chỉ số thời gian thực.
Cài đặt & Thiết lập#
pip install "ultralytics>=8.4.120"Xác minh cài đặt:
yolo checkXác thực#
yolo login YOUR_API_KEYSử dụng tập dữ liệu (dataset) của Platform#
Tham chiếu các tập dữ liệu với các 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,
)Định dạng URI:
| Mẫu | Mô tả |
|---|---|
ul://username/datasets/slug | Tập dữ liệu (Dataset) |
ul://username/project-name | Dự án |
ul://username/project/model-name | Model cụ thể |
ul://ultralytics/yolo26/yolo26n | Model chính thức |
Đẩy dữ liệu lên Platform#
Gửi kết quả đến một dự án trên Platform:
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",
)Những gì được đồng bộ:
- Chỉ số huấn luyện (thời gian thực)
- Trọng số model cuối cùng
- Biểu đồ xác thực (validation)
- Đầu ra console
- Chỉ số hệ thống
Ví dụ về API#
Tải model từ Platform:
# Your own model
model = YOLO("ul://username/project/model-name")
# Official model
model = YOLO("ul://ultralytics/yolo26/yolo26n")Chạy suy luận (inference):
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 probabilitiesXuất model:
# 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 classificationXác thực (Validation):
metrics = model.val(data="ul://username/datasets/my-dataset")
print(f"mAP50: {metrics.box.map50}")
print(f"mAP50-95: {metrics.box.map}")Câu hỏi thường gặp#
Sử dụng các phân đoạn chủ sở hữu và tên giống như xuất hiện trong URL Platform. Một mô hình tại
https://platform.ultralytics.com/acme-vision/inspection/v3làGET /api/models/acme-vision/inspection/v3. Các ID cơ sở dữ liệu vẫn được trả về trong các phản hồi (dưới dạngid), và một số ít các route sử dụng chúng trực tiếp — route hình ảnh nhậnimageId, các bản tải lên nhậnassetId, vàPOST /api/training/startnhậnmodelId.Tùy thuộc vào bộ sưu tập. Hầu hết các endpoint danh sách đều chấp nhận
limit:curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://platform.ultralytics.com/api/datasets/acme-vision?limit=50"Hình ảnh tập dữ liệu, phân cụm và tìm kiếm Khám phá sử dụng
offsetvớilimitvà báo cáohasMore:curl "https://platform.ultralytics.com/api/explore/search?type=datasets&offset=20&limit=20&sort=stars"Các tập dữ liệu hình ảnh rất lớn được duyệt tốt nhất bằng con trỏ trả về dưới dạng
nextCursor:curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://platform.ultralytics.com/api/datasets/acme-vision/warehouse/images?limit=1000&includeTotal=false&cursor=LAST_IMAGE_ID"Thùng rác sử dụng
page, và nhật ký triển khai sử dụngpageTokenmờ được trả về dưới dạngnextPageToken.Có. Mọi thao tác trên trang này đều là một request HTTPS thuần túy, và toàn bộ contract được xuất bản dưới dạng OpenAPI 3.2 tại platform.ultralytics.com/openapi.json, mà bạn có thể cung cấp cho trình tạo client ở bất kỳ ngôn ngữ nào. Gói
ultralytics-platformchính xác là như vậy: một client có kiểu dữ liệu được tạo từ contract, trong khi góiultralyticsbổ sung tính năng phát trực tuyến chỉ số thời gian thực và tự động tải mô hình lên phía trên quá trình huấn luyện và suy luận. Các luồng tài khoản chỉ dành cho phiên trình duyệt, chẳng hạn như thanh toán và quản lý nhóm, vẫn nằm trong Platform UI.Sử dụng tiêu đề
Retry-Aftertừ phản hồi429để đợi đúng khoảng thời gian: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")404nghĩa là tài nguyên không tồn tại hoặc hoàn toàn không hiển thị đối với khóa của bạn.403nghĩa là tài nguyên đã được tìm thấy nhưng hành động đó cần quyền truy cập cao hơn quyền mà khóa của bạn có — quyền chỉnh sửa để sửa đổi tập dữ liệu, quyền chủ sở hữu để xóa bản triển khai, quyền quản trị để ngắt kết nối bộ nhớ, hoặc gói hoặc hạn mức cao hơn cho việc xuất và triển khai.Đọc các tập dữ liệu, dự án và mô hình công khai, bao gồm cả hình ảnh của chúng, URL hình ảnh đã ký, thống kê lớp, trạng thái nhúng, bố cục phân cụm và danh sách xuất; kiểm tra tiến trình huấn luyện trên một mô hình công khai; tải xuống các tệp của mô hình công khai; chạy suy luận trên một mô hình công khai; tra cứu hồ sơ người dùng công khai; liệt kê các triển khai được lọc theo một mô hình công khai; và tìm kiếm Khám phá.
GET /api/training/gpu-availabilityhoàn toàn công khai trừ khi bạn yêu cầu dung lượng được quản lý. Mọi thứ khác đều yêu cầu khóa, và việc cung cấp khóa trên một endpoint công khai cũng làm lộ các tài nguyên riêng tư của bạn.