---
title: "Create Version"
method: POST
path: "/datasets/{dataset_id}/versions"
tags: ["datasets"]
---

# Create Version

`POST /datasets/{dataset_id}/versions`

## Request

- Base URL: `https://api.os3robotics.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.os3robotics.com/datasets/{dataset_id}/versions`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

## Path parameters

- `dataset_id` string, uuid, required

## Request body

- union
  - VersionIn
    - `files` FileDecl[], required
      - `path` string, required
      - `sha256` string, required
      - `bytes` integer, required
    - `provenance` Provenance: Who recorded a robot dataset version: the robot as traces name it (os3.trace_identity.v1 `robot_ref`), the operator, the customer id the recording carries and the recorder's own dataset id on the robot (`source_ref`); and the robot's calibration identity it was recorded with (the sha256 of its follower and camera calibration files), which a model version trained on it records.
      - `robot_ref` string, required
      - `operator_id` string, required
      - `customer_id` string, nullable
      - `source_ref` string, nullable
      - `calibration_sha256` string, nullable
  - SelectionIn: The next version keeps every episode of sealed version `from_version` but those in `drop`, each with why it is left out.
    - `from_version` integer, required
    - `drop` Drop[], required
      - `episode_index` integer, required
      - `reason` string, required
      - `filter` string, nullable
  - CompositeIn: The next version combines these sealed versions, in order: LeRobot v3 versions, or LLM versions of one objective (rlvr ones of one recipe). Give every source a `weight` (its probability is its weight over their sum: the share of a job's draws that come from it) or none, and then a `weighting`: `none` (the job samples the combined episodes or examples as it samples any version) or `equal` (a weight of 1 each); without one, the weighting of the workspace's pipeline defaults. RL task sets (rlvr) may instead state a `solved_share`: the share of an RFT or GRPO run's task draws that come from the sources marked `solved` (tasks the task's RL already solves, kept so it does not forget them), the rest from the others, each source of a group an equal part of its group's share; no weights or weighting then.
    - `sources` CompositeSource[], required
      - `dataset_id` string, uuid, required
      - `version` integer, required
      - `weight` number, nullable
      - `solved` boolean
    - `weighting` 'none' | 'equal', nullable
    - `solved_share` number, nullable

## Response `201`

Successful Response

- Version
  - `id` string, uuid, required
  - `dataset_id` string, uuid, required
  - `version` integer, required
  - `container` string, required
  - `account` string, required
  - `status` string, required
  - `files` StoredFile[], required
    - `path` string, required
    - `sha256` string, required
    - `bytes` integer, required
  - `provenance` object, nullable, required
  - `objective` string, nullable
  - `recipe` string, nullable
  - `manifest_path` string, nullable, required
  - `manifest_sha256` string, nullable, required
  - `file_count` integer, nullable, required
  - `total_bytes` integer, nullable, required
  - `created_at` string, date-time, required
  - `sealed_at` string, date-time, nullable, required
  - `selection` object, nullable
  - `selection_error` string, nullable
  - `harness_traces` object, nullable
  - `imported_from` object, nullable
  - `composite` object, nullable
  - `seal_requested_at` string, date-time, nullable
  - `seal_error` string, nullable
  - `derived` object, nullable
  - `uploads` object[], nullable
  - `read_url` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/os3robotics/apis/os3-api.md) - [All operations](https://skmtc.dev/os3robotics/apis/os3-api/llms.txt) - [OpenAPI document](https://skmtc.dev/os3robotics/apis/os3-api/revisions/af32cd4f14bb?raw)
