ultralytics-platform · git:20260827.fec0a9a · 2026-08-27 · sha256 98aa4d22cc3e5412

ultralytics-platform git:20260827.fec0a9aA

Immutable. This exact content is served forever at /api/v1/blob/98aa4d22cc3e5412.

---
name: ultralytics-platform
description: This skill should be used when user asks to "upload my model to Ultralytics Platform", "push this run to the platform", "upload a dataset to platform", "download a dataset from platform", "search platform datasets", "start cloud training", "train on platform GPUs", "export a model on platform", "deploy a model endpoint", "why is my run not showing on platform", or mentions platform.ultralytics.com, ul:// URIs, ultralytics-platform, or ULTRALYTICS_API_KEY.
---

# Ultralytics Platform

Use `ultralytics` for YOLO training and inference. Use the generated `ultralytics-platform` Python
SDK for API resource work. It follows the same contract as the live API and handles authentication,
typed responses, retries, and errors.

## Read the live contract

Before API work, check the generated [API reference](https://platform.ultralytics.com/api/docs) or
`GET https://platform.ultralytics.com/openapi.json`. Treat the live OpenAPI document as authoritative
when examples disagree. The shapes below match API and SDK v0.1.18, checked on 2026-08-27.

```bash
uv pip install -U "ultralytics-platform>=0.1.18"
export ULTRALYTICS_API_KEY=ul_... # Settings > API Keys
```

`Platform()` reads `ULTRALYTICS_API_KEY`. The `ultralytics` package also reads the key saved by
`yolo login`. Never print or commit a key.

## Choose the interface

| Goal                                                       | Interface                        |
| ---------------------------------------------------------- | -------------------------------- |
| Track a run that has not started                           | `ultralytics` training callback  |
| Train with a Platform dataset or model                     | `ultralytics` with a `ul://` URI |
| Manage datasets, models, training, exports, or deployments | `ultralytics-platform` SDK       |
| Use another language or inspect a new field                | Live OpenAPI                     |

### Live training and `ul://` URIs

Pass an owner-qualified project to stream a run:

```python
from ultralytics import YOLO

YOLO("yolo26n.pt").train(data="coco8.yaml", epochs=100, project="owner/project", name="run1")
```

`project=` is required. Without it, the callback exits before creating a Platform run. Use the
owner prefix for a team workspace.

```python
YOLO("ul://owner/project/model").train(data="ul://owner/datasets/dataset", epochs=100)
```

### SDK

Use a context manager and owner/name paths. Keep returned IDs for operations that require them,
including image operations, upload `assetId`, training `modelId`, and export IDs.

Responses have resource-specific shapes, not a generic envelope. Create calls return `id`, `owner`,
and the URL name at the top level. Detail calls wrap the resource under its type, such as `dataset`.
A rename changes the URL name, so use the name returned by the update response.

Read [references/recipes.md](references/recipes.md) for live-run diagnosis, finished-run upload,
dataset upload, and billable jobs.

## Invariants

- Confirm the target workspace with `client.account.summary()` and read the exact resource before a
  mutation. Team work requires an API key created in that workspace.
- A direct upload is signed URL, `PUT` with the returned `headers`, upload completion, then dataset
  ingest. Model uploads stop after completion.
- Dataset ingest accepts one source: `sessionId`, `sourceUrl`, or a connected-storage `reference`.
  Set `targetSplit` when every incoming image must enter one split.
- Top-level model `metrics` accepts only the contract's named summary metrics. Per-epoch
  `trainResults[].metrics` accepts numeric metric names from `results.csv`.
- On `429`, wait for `Retry-After` before retrying. Do not invent fixed sleeps.

## Cost and destructive actions

Cloud training, model exports, and deployments can spend credits. Get approval before calling
`client.training.start`, `client.exports.create`, or `client.deployments.create`, then report the
cost returned by the create response. Get approval before deletes. Resource deletes move projects,
datasets, and models to 30-day trash. `client.lifecycle.delete_trash` is permanent.