# Data Operation

### UploadData

**上传数据到数据集**

用户往数据集中上传数据。

1. 获取上传数据凭证
2. 直传数据到oss

#### GetPolicy

获取上传凭证

**请求路径**

> GET /v1/datasets/{id}/policies

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th width="150">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>否</td><td>数据集分割区</td></tr><tr><td>isInternal</td><td>bool</td><td>否</td><td>是否返回内网上传地址</td></tr><tr><td>expired</td><td>int</td><td>否</td><td>令牌过期时间，以秒为单位，不可为负，默认60, 大于300会按照300处理</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/policies?expired=60&draftNumber=1' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
	"result": {
		"OSSAccessKeyId": "OSSACCESSKEYID",
		"Signature": "QbkCDeZtX37gb2zoemel3VCxz3k=",
		"policy": "eyJjb25kaXRpb25zIjpbWyJzdGFydHMtd2l0aCIsIiRrZXkiLCI4ZjgzNWVlOWNmZWIwZDRlZjBkMmQyODJmOTdlNzM1OS9jOTQ4YTY0NC03NTJjLTRkOTItOTI3Yi1mNjkwYzYyZGM5Y2YvIl1dLCJleHBpcmF0aW9uIjoiMjAyMC0xMS0xM1QwMzozNjo1OVoifQ==",
		"success_action_status": "200",
        "multipleUploadLimit": 10
	},
	"extra": {
        "backendType": "oss",
		"host": "https://content-store-fat-version.oss-cn-qingdao.aliyuncs.com",
        "objectPrefix": ""
	},
	"expireAt": 1605238559
}
```

***

#### 根据获取的凭证前端直传

获取的result直接反序列化，进行oss直传即可，extra host是访问地址

**请求路径**

> POST 源自从policy接口获取的result字段"extra"中的"host"

**请求参数**

**body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>OSSAccessKeyId</td><td>string</td><td>是</td><td>与之前获取的凭证返回值OSSAccessKeyId一致</td></tr><tr><td>Signature</td><td>string</td><td>是</td><td>与之前获取的凭证返回值Signature一致</td></tr><tr><td>policy</td><td>string</td><td>是</td><td>与之前的获取凭证返回的policy一致</td></tr><tr><td>key</td><td>string</td><td>是</td><td>之前的获取凭证返回的objectPrefix + 计算文件的cheksum值。用sha1加密算法获取文件checksum值</td></tr><tr><td>file</td><td>file</td><td>是</td><td>文件</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST 'https://content-store-version.oss-cn-qingdao.aliyuncs.com' \
--form 'OSSAccessKeyId=OSSACCESSKEYID' \
--form 'Signature=jVbcWO5v4Ujm7duQX+gqb0UBT2E=' \
--form 'policy=eyJjb25kaXRpb25zIjpbWyJzdGFydHMtd2l0aCIsIiRrZXkiLCJlNWEyN2FlOGI3NDM4N2NlMjA4YTI2YjVjMzBjZGI2MS9mNDhjOGY3ZC0xOGVmLTQ2OGEtYjA2ZS0yNzg5MzQ3MDVhNTMvLnNlZ21lbnQvZGF5VGVzdC9kYXlTZXF1ZW5jZTAxLy5zZWdtZW50X2VuZC8iXV0sImV4cGlyYXRpb24iOiIyMDIwLTEyLTE0VDA5OjAwOjI1WiJ9' \
--form 'key={objectPrefix}{checksum}' \
--form 'file=@/{localFile}'
```

**返回结果**

```
# 响应状态
HttpStatus 204
# 响应结果
返回为空
{}
```

***

#### PutCallback

上传完毕回调

**请求路径**

> PUT /v1/datasets/{id}/callback

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>checksum</td><td>string</td><td>是</td><td>上传的文件的checksum,用sha1加密算法获取文件checksum值</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>是</td><td>远程的文件路径，例如a.jpg</td></tr><tr><td>sensorName</td><td>string</td><td>否</td><td>融合类数据上传必传，传感器名称</td></tr><tr><td>frameId</td><td>string</td><td>否</td><td>融合类数据上传必传,帧id, ulid格式，参考 https://github.com/oklog/ulid</td></tr><tr><td>timestamp</td><td>float</td><td>否</td><td>融合类数据上传非必传</td></tr><tr><td>label</td><td>map</td><td>否</td><td>该文件的标注标签信息，具体可参考uploadLabel</td></tr><tr><td>fileSize</td><td>int</td><td>否</td><td>文件大小, 若未传，服务端将计算文件大小</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/callback' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "draftNumber": "1",
  "remotePath": "car1.jpg",
  "checksum": "b9676b075dff6d3333bbebb7cdd154f3631bb926",
  "frameId": "01D78XYFJ1PRM1WPBCBT3VHMNV",
  "segmentName": "car",
  "sensorName": "camera_car",
  "timestamp": 1532402934,
  "label":{},
  "fileSize": 10
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

#### MultiPutCallback

上传完毕批量回调

**请求路径**

> PUT /v1/datasets/{id}/multi/callback

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>objects</td><td>[]object</td><td>是</td><td>批量回调的object</td></tr><tr><td>  ├─checksum</td><td>string</td><td>是</td><td>上传的文件的checksum,用sha1加密算法获取文件checksum值</td></tr><tr><td>  ├─remotePath</td><td>string</td><td>是</td><td>远程的文件路径，例如a.jpg</td></tr><tr><td>  ├─sensorName</td><td>string</td><td>否</td><td>融合类数据上传必传，传感器名称</td></tr><tr><td>  ├─frameId</td><td>string</td><td>否</td><td>融合类数据上传必传,帧id, ulid格式，参考 https://github.com/oklog/ulid</td></tr><tr><td>  ├─timestamp</td><td>float</td><td>否</td><td>融合类数据上传非必传</td></tr><tr><td>  ├─label</td><td>map</td><td>否</td><td>该文件的标注标签信息，具体可参考uploadLabel</td></tr><tr><td>  ├─fileSize</td><td>int</td><td>否</td><td>文件大小, 若未传，服务端将计算文件大小</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/callback' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "draftNumber": "1",
  "segmentName": "car",
  "objects": [
        {
          "remotePath": "car1.jpg",
          "checksum": "b9676b075dff6d3333bbebb7cdd154f3631bb926",
          "frameId": "01D78XYFJ1PRM1WPBCBT3VHMNV",
          "sensorName": "camera_car",
          "timestamp": 1532402934,
          "label":{},
          "fileSize": 10
        }
  ]
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### CreateSegment

**创建segment**

> **POST** /v1/datasets/{id}/segments

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>move</td><td>bool</td><td>否</td><td>从已有剪切创建</td></tr><tr><td>copy</td><td>bool</td><td>否</td><td>从已有复制创建</td></tr><tr><td>multipleMove</td><td>bool</td><td>否</td><td>从多个已有剪切创建</td></tr><tr><td>multipleCopy</td><td>bool</td><td>否</td><td>从多个已有复制创建</td></tr></tbody></table>

**Body**

<table><thead><tr><th width="239">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>name</td><td>string</td><td>否</td><td>segment 名称, 当不是用已有操作时 不可为null,name中不可包含".","\"</td></tr><tr><td>description</td><td>string</td><td>否</td><td>segment 描述</td></tr><tr><td>strategy</td><td>string</td><td>否</td><td>当不是用已有操作时移动重名时的策略，可选项有：abort，override 和 skip，缺省为 abort</td></tr><tr><td>segmentName</td><td>string</td><td>否</td><td>目标数据分段名, 从已有单个创建时使用</td></tr><tr><td>segmentNames</td><td>string[]</td><td>否</td><td>目标数据分段名, 从已有多个创建时使用</td></tr><tr><td>source</td><td>object</td><td>否</td><td>来源数据分段, 从已有单个创建时使用且必须</td></tr><tr><td>  ├─ segmentName</td><td>string</td><td>否</td><td>分区名</td></tr><tr><td>  ├─ id</td><td>string</td><td>否</td><td>数据集id</td></tr><tr><td>  ├─ draftNumber</td><td>int</td><td>否</td><td>草稿编号</td></tr><tr><td>  ├─ commit</td><td>string</td><td>否</td><td>commitId或者commit的tag</td></tr><tr><td>source</td><td>object</td><td>否</td><td>来源数据分段, 从已有多个创建时使用且必须</td></tr><tr><td>  ├─ segmentName</td><td>string[]</td><td>否</td><td>分区名 列表</td></tr><tr><td>  ├─ id</td><td>string</td><td>否</td><td>数据集id</td></tr><tr><td>  ├─ draftNumber</td><td>int</td><td>否</td><td>草稿编号</td></tr><tr><td>  ├─ commit</td><td>string</td><td>否</td><td>commitId或者commit的tag</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/segments'\
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
        "draftNumber":1,
        "name": "graviti",
        "description": "this is a segment"
    }'
```

**返回结果**

```
# 响应状态
HttpStatus 201
# 响应结果
{}
```

### DeleteSegment

**删除Segment**

> **DELETE** /v1/datasets/{id}/segments

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/segments' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber":1,
    "segmentName": "car",
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListSegment

**获取数据集segment**

> **GET** /v1/datasets/{id}/segments

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最多128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认update_at（更新时间）, 目前支持create_at（创建时间）和update_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/segments?commit=v1&offset=0&limit=2'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
{
  "segments": [
    {
        "name": "car",
        "description": "this is car"
    },
    {
        "name": "graviti",
        "description": "this is a segment"
    }
  ],
  "offset": 0,
  "recordSize": 2,
  "totalCount": 10
}
```

### UploadLabelCatalog

**上传labelCatalog**

> **PUT** /v1/datasets/{id}/labels/catalogs

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th width="235">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>catalog</td><td>map</td><td>是</td><td>标注类型。<br><strong>key:</strong><br>CLASSIFICATION: 分类标注<br>BOX2D: 2D 框标注<br>BOX3D: 3D 框标注<br>POLYGON2D: 2D 多边形标注<br>POLYLINE2D: 2D 折线标注<br>KEYPOINTS2D: 2D 关键点标注<br>CUBOID2D: 2D 立体框标注<br>SENTENCE: 语音转写标注<br><strong>以上标注类型，每类标注类型都有自己的结构，具体可看示例或参考</strong><a href="https://tensorbay-python-sdk.graviti.com/en/latest/reference/label_format/index.html"><strong>标签格式</strong></a><strong>，请严格遵循该标注类型格式传值</strong></td></tr><tr><td>├─description</td><td>string</td><td>否</td><td>描述</td></tr><tr><td>├─categoryDelimiter</td><td>string</td><td>否</td><td>用于分割category父子关系的分割符，缺省为不支持父子关系，推荐分隔符为"."</td></tr><tr><td>├─isTracking</td><td>bool</td><td>否</td><td>是否是追踪</td></tr><tr><td>├─categories</td><td>object[]</td><td>否</td><td>item 类型: object，category 列表，包含所有 category 信息</td></tr><tr><td>       ├─name</td><td>string</td><td>是</td><td>category 名称</td></tr><tr><td>       ├─description</td><td>string</td><td>否</td><td>category 描述</td></tr><tr><td>├─attributes</td><td>object[]</td><td>否</td><td>item 类型，包含属性相关信息</td></tr><tr><td>      ├─name</td><td>string</td><td>是</td><td>attribute 名称</td></tr><tr><td>      ├─type</td><td>string/string[]</td><td>否</td><td>attribute type:<strong>string, boolean, integer, number, array, null</strong>,例如"interger", ["integer", "null"]</td></tr><tr><td>      ├─minimum</td><td>float</td><td>否</td><td>属性值最小值，当属性为数字时该字段定义了其最小值(闭区间)</td></tr><tr><td>      ├─maximum</td><td>float</td><td>否</td><td>属性值最大值，当属性为数字时该字段定义了其最大值(闭区间)</td></tr><tr><td>      ├─description</td><td>string</td><td>否</td><td>属性描述</td></tr><tr><td>      ├─enum</td><td>string[]</td><td>否</td><td>属性值选项，表示该属性所有的可能的选项</td></tr><tr><td>      ├─parentCategories</td><td>string[]</td><td>否</td><td>关联类别，表示该属性隶属于哪些类别，为空则表示全局属性</td></tr><tr><td>      ├─items</td><td>object[]</td><td>否</td><td>item类型,多选属性定义，(当"type"字段为"array"时，表示多选属性)</td></tr><tr><td>            ├─type</td><td>string/string[]</td><td>否</td><td>多选属性值类型:<strong>string, boolean, integer, number, array, null</strong>,例如"interger", ["integer", "null"]</td></tr><tr><td>            ├─minimum</td><td>float</td><td>否</td><td>多选属性值最小值(闭区间)</td></tr><tr><td>            ├─maximum</td><td>float</td><td>否</td><td>多选属性值最大值(闭区间)</td></tr><tr><td>            ├─enum</td><td>string[]</td><td>否</td><td>多选属性值选项，表示该属性所有的可能的选项</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels/catalogs'\
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "draftNumber": 1,
  "BOX2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "BOX3D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "CLASSIFICATION": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog"
  },
  "CUBOID2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "KEYPOINTS2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false,
    "keypoints": [
      {
        "description": "this is key point",
        "names": [
          "ear",
          "leg",
          "mouse"
        ],
        "number": 3,
        "parentCategories": [],
        "skeleton": [
          [
            0,
            1
          ],
          [
            1,
            2
          ]
        ],
        "visible": "1"
      }
    ]
  },
  "POLYGON2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "POLYLINE2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "SENTENCE": {
    "attributes": [
      {
        "description": "this is a description of attribute",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "items": {
          "enum": [
            "red",
            "blue",
            "green"
          ],
          "maximum": 10,
          "minimum": 0,
          "type": {}
        },
        "maximum": 10,
        "minimum": 0,
        "name": "color",
        "parentCategories": [],
        "type": {}
      }
    ],
    "description": "this is a description of label catalog",
    "isSample": false,
    "lexicon": "[[\"啊\", \"aa\", \"a1\"], [\"阿婆\": \"aa\", \"a1\", \"p\", \"o2\"], [\"爱\", \"aa\", \"ai4\"], [\"爱祖国\",\"aa\", \"ai4\", \"z\", \"u3\", \"g\", \"uo2\"]]",
    "sampleRate": 32
  }
}'
```

**返回结果**

```
HttpStatus 200
{}
```

### GetLabelCatalog

**获取数据集标签目录**

> **GET** /v1/datasets/{id}/labels/catalogs

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels/catalogs?commit=v1'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "catalog": {
    "BOX2D": {
      "attributes": [
        {
          "name": "color"
        }
      ],
      "categories": [
        {
          "description": "hello",
          "name": "car"
        }
      ]
    }
  }
}
```

### UploadSensor

**上传sensor**

> **POST** /v1/datasets/{id}/sensors

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th width="248.79397659696906">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>name</td><td>string</td><td>是</td><td>sensor 名称</td></tr><tr><td>type</td><td>string</td><td>是</td><td>sensor 类型</td></tr><tr><td>description</td><td>string</td><td>否</td><td>描述</td></tr><tr><td>extrinsics</td><td>object</td><td>否</td><td>sensor 外参</td></tr><tr><td>├─rotation</td><td>object</td><td>否</td><td>旋转矩阵</td></tr><tr><td>       ├─w</td><td>float</td><td>是</td><td>w</td></tr><tr><td>       ├─x</td><td>float</td><td>是</td><td>x</td></tr><tr><td>       ├─y</td><td>float</td><td>是</td><td>y</td></tr><tr><td>       ├─z</td><td>float</td><td>是</td><td>z</td></tr><tr><td>├─translation</td><td>object</td><td>否</td><td>平移矩阵</td></tr><tr><td>       ├─x</td><td>float</td><td>是</td><td>x</td></tr><tr><td>       ├─y</td><td>float</td><td>是</td><td>y</td></tr><tr><td>       ├─z</td><td>float</td><td>是</td><td>z</td></tr><tr><td>intrinsics</td><td>object</td><td>否</td><td>sensr 内参（仅相机类设备需要提供内参）</td></tr><tr><td>├─cameraMatrix</td><td>object</td><td>否</td><td></td></tr><tr><td>       ├─cx</td><td>float</td><td>是</td><td>cx</td></tr><tr><td>       ├─cy</td><td>float</td><td>是</td><td>cy</td></tr><tr><td>       ├─fx</td><td>float</td><td>是</td><td>fx</td></tr><tr><td>       ├─fy</td><td>float</td><td>是</td><td>fy</td></tr><tr><td>       ├─skew</td><td>float</td><td>否</td><td>skew</td></tr><tr><td>├─distortionCoefficients</td><td>object</td><td>否</td><td>畸变系数 (p1, p2, k1, k2, k3,还可以有"k4", "k5", "k6"等等，给的越多计算越精确)</td></tr><tr><td>       ├─p1</td><td>float</td><td>否</td><td>p1</td></tr><tr><td>       ├─p2</td><td>float</td><td>否</td><td>p2</td></tr><tr><td>       ├─k1</td><td>float</td><td>否</td><td>k1</td></tr><tr><td>       ├─k2</td><td>float</td><td>否</td><td>k2</td></tr><tr><td>       ├─k3</td><td>float</td><td>否</td><td>k3</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/sensors' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "description": "This is a example camera sensor",
  "extrinsics": {
    "rotation": {
      "w": 0.6924185592174665,
      "x": -0.7031619420114925,
      "y": -0.11648342771943819,
      "z": 0.11203317912370753
    },
    "translation": {
      "x": 1.03569100218,
      "y": 0.484795032713,
      "z": 1.59097014818
    }
  },
  "intrinsics": {
    "cameraMatrix": {
      "cx": 1256.7414812095406,
      "cy": 492.7757465151356,
      "fx": 1256.7414812095406,
      "fy": 792.1125740759628,
      "skew": 122.7757465151356
    },
    "distortionCoefficients": {
      "k1": 0.12,
      "k2": 0.33,
      "k3": 0.13,
      "k4": 0.93,
      "k5": 0.23,
      "p1": 1,
      "p2": 0.3
    }
  },
  "name": "camera_01",
  "segmentName": "car",
  "type": "CAMERA"
}'
```

**返回结果**

```
HttpStatus 200
{}
```

### DeleteSensor

**删除sensor**

> **DELETE** /v1/datasets/{id}/sensors

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>sensorName</td><td>string</td><td>是</td><td>sensor 名称</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/sensors' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber": 1,
    "segmentName": "car",
    "sensorName": "sensor1",
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListSensor

**获取sensor**

> **GET** /v1/datasets/{id}/sensors

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/sensors?segmentName=car&commit=v1' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "segmentName": "car",
    "sensors": [
        {
            "name": "sensor1",
            "type": "camera",
            "extrinsics": {
                "rotation": {
                    "w": 1.1,
                    "x": 1.2,
                    "y": 1.3,
                    "z": 1.4
                },
                "translation": {
                    "x": 1.2,
                    "y": 1.3,
                    "z": 1.4
                }
            },
            "intrinsics": {
                "cameraMatrix": {
                    "cx": 1.1,
                    "cy": 1.2,
                    "fx": 1.1,
                    "fy": 1.2,
                    "skew": 1.3
                },
                "distortionCoefficient": {
                    "k1": 1.4,
                    "k2": 1.5,
                    "k3": 1.6,
                    "k4": 1.7,
                    "k5": 1.8,
                    "k6": 1.9,
                    "p1": 1.2,
                    "p2": 1.3
                }
            },
            "description": "this is a sensor"
        },
        {
            "name": "sensor2",
            "type": "camera",
            "extrinsics": {
                "rotation": {
                    "w": 1.1,
                    "x": 1.2,
                    "y": 1.3,
                    "z": 1.4
                },
                "translation": {
                    "x": 1.2,
                    "y": 1.3,
                    "z": 1.4
                }
            },
            "intrinsics": {
                "cameraMatrix": {
                    "cx": 1.1,
                    "cy": 1.2,
                    "fx": 1.1,
                    "fy": 1.2,
                    "skew": 1.3
                },
                "distortionCoefficient": {
                    "k1": 1.4,
                    "k2": 1.5,
                    "k3": 1.6,
                    "k4": 1.7,
                    "k5": 1.8,
                    "k6": 1.9,
                    "p1": 1.2,
                    "p2": 1.3
                }
            },
            "description": "this is a sensor"
        }
    ]
}
```

### ListData

**获取数据集数据列表**

> **GET** /v1/datasets/{id}/data

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最高128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data?draftNumber=1&segmentName=car'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

普通数据集

```
{
    "segmentName": "car",
    "type": 0,
    "data": [{"remotePath": "car.jpg."}],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

融合数据集

```
{
    "segmentName": "car",
    "type": 1,
    "data": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "frameIndex": 1,
            "frame": [
                {
                    "sensorname": "camera_car",
                    "remotePath": "fusion_data_car3.jpg",
                    "timestamp":1609430401,
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### ListDataDetails

**获取数据集数据详情列表**

> **GET** /v1/datasets/{id}/data/details

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>数据路径名</td></tr><tr><td>isInternal</td><td>bool</td><td>否</td><td>是否返回内网上传地址</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最高128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data/details?draftNumber=1&segmentName=car'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

普通数据集

```
{
    "segmentName": "car",
    "type": 0,
    "dataDetails": [{"remotePath": "car.jpg."}],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

融合数据集

```
{
    "segmentName": "car",
    "type": 1,
    "dataDetails": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "frameIndex": 1,
            "frame": [
                {
                    "sensorname": "camera_car",
                    "remotePath": "fusion_data_car3.jpg",
                    "timestamp":1609430401,
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### ListDataUri

**获取数据资源地址**

> **GET** /v1/datasets/{id}/data/urls

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>数据路径，若传值，则查询具体此数据的url</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>数据所在分区</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最高128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>isInternal</td><td>bool</td><td>否</td><td>是否返回内网地址</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认按照名字（remotePath）排序, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data/urls?draftNumber=1&remotePath=graviti.jpg&segmentName=car' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "offset": 0,
    "recordSize": 5,
    "totalCount": 5,
    "segmentName": "car",
    "urls": [
        {
            "remotePath": "第二段_00000010.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00000010.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=DJbZOXSF1FSBQT4wEv69O%2B3OhyI%3D&versionId=CAEQPRiBgMD1o.mEshciIDk4ZmZkMWM2NmQ5ZTQ1NWRhNTBmZDZjNzJjNjM4OGRl"
        },
        {
            "remotePath": "第二段_00040820.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00040820.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=DihdFjHDtE3xEyIx3eGbTmN%2B%2Bzc%3D&versionId=CAEQPRiBgMD_pOmEshciIGFjYjVjY2FjYmZkMzRjYjVhZTQ5ZjQxZWMwMzhkOTMx"
        },
        {
            "remotePath": "第二段_00040890.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00040890.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=pwhm9liDx9%2BbDp2VlPghd1Kw0as%3D&versionId=CAEQPRiBgMD0pemEshciIGExZDdlOTBjMmQxMDQxMmFiM2QxMTAzNmU3N2I5ODFk"
        },
        {
            "remotePath": "第二段_00040900.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00040900.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=GpvY%2BJqbX7qKA70E7t58bRVn%2FcI%3D&versionId=CAEQPRiBgMC9p.mEshciIGY2YzIzNGZmM2EyZDQwMzZiODc4MzNmMmVlY2E0MTAy"
        },
        {
            "remotePath": "第二段_00040940.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00040940.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=TguAbiIM0pjWFse1S0MQRUbMuBg%3D&versionId=CAEQPRiBgIDLqemEshciIGM2YmRkZGJlNmY2OTQ5NmViNTEzMDg0NjFmNjczNmYw"
        }
    ]
}
```

融合数据集

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "segmentName": "car",
    "type": 1,
    "data": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "frameIndex": 1,
            "frame": [
                {
                    "sensorname": "camera_car",
                    "remotePath": "第二段_00000010.jpg",
                    "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00000010.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=DJbZOXSF1FSBQT4wEv69O%2B3OhyI%3D&versionId=CAEQPRiBgMD1o.mEshciIDk4ZmZkMWM2NmQ5ZTQ1NWRhNTBmZDZjNzJjNjM4OGRl"
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### ListMaskUrls

**获取标注url列表**

> **GET** /v1/datasets/{id}/masks/urls

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>数据路径名</td></tr><tr><td>maskType</td><td>string</td><td>是</td><td>mask 标注类型，可选项有 "SEMANTIC_MASK", "INSTANCE_MASK" 和 "PANOPTIC_MASK"</td></tr><tr><td>isInternal</td><td>bool</td><td>否</td><td>是否返回内网上传地址</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最高128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/masks/urls?draftNumber=1&segmentName=car&maskType=SEMANTIC_MASK'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "offset": 0,
    "recordSize": 5,
    "totalCount": 5,
    "segmentName": "car",
    "urls": ["url1","url2"]
}
```

融合数据集

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "segmentName": "car",
    "type": 1,
    "data": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "frameIndex": 1,
            "frame": [
                {
                    "sensorname": "camera_car",
                    "remotePath": "第二段_00000010.jpg",
                    "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00000010.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=DJbZOXSF1FSBQT4wEv69O%2B3OhyI%3D&versionId=CAEQPRiBgMD1o.mEshciIDk4ZmZkMWM2NmQ5ZTQ1NWRhNTBmZDZjNzJjNjM4OGRl"
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### GetDataUrls

**根据path获取数据资源地址**

> **POST** /v1/datasets/{id}/data/urls-by-paths

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>commit</td><td>string</td><td>是</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>remotePaths</td><td>map</td><td>是</td><td>根据数据分段名分组的数据路径，键为数据分段名，值为数据路径列表</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data/urls-by-paths' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "commit":"main",
  "remotePaths":{
    "segment1":["cat.png","dog.png"]
  }
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "urls":{
    "segment1":{
      cat.png":"https://content-store-prod-version.oss-cn-shanghai.aliyuncs.com/d984afcf439bf3d8.jpg"
    }
  }
}
```

### GetTotalSize

**获取所有文件大小**

> **GET** /v1/datasets/{id}/total-size

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>commit</td><td>string</td><td>是</td><td>commit id 或者 commit tag 或者 branch name</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/total-size?commit=main' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "totalSize":66712051577
}
```

### ListCloudFiles

**获取云端文件列表**

> **GET** /v1/cloud/{configName}/files

**请求参数**

**Path**

| 名称         | 是否必须 | 描述       |
| ---------- | ---- | -------- |
| configName | 是    | 授权云存储配置名 |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>prefix</td><td>string</td><td>否</td><td>授权云存储前缀名</td></tr><tr><td>marker</td><td>string</td><td>否</td><td>翻页标示符</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>查询结果的数量</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/cloud/aws1/files'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "cloudFiles": ["xxxx","yyyy"],
  "truncated": false,
  "nextMarker": "zzzz"
}
```

### GetCloudFileUrl

**获取云端文件列表**

> **GET** /v1/cloud/{configName}/files/urls

**请求参数**

**Path**

| 名称         | 是否必须 | 描述       |
| ---------- | ---- | -------- |
| configName | 是    | 授权云存储配置名 |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>filePath</td><td>string</td><td>是</td><td>数据远端路径</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/cloud/aws1/files/urls?filePath=xxx'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "url":"example.com/example.jpg"
}
```

### CloudCallback

**获取云端文件列表**

> **PUT** /v1/datasets/{id}/multi/cloud-callback

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>segmentName</td><td>string</td><td>是</td><td>数据分段名</td></tr><tr><td>deleteSource</td><td>bool</td><td>是</td><td>是否删除源文件</td></tr><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>objects</td><td>object[]</td><td>是</td><td>对应的数据信息</td></tr><tr><td>├─cloudPath</td><td>string</td><td>是</td><td>数据所在云存储路径</td></tr><tr><td>├─remotePath</td><td>string</td><td>是</td><td>数据远端路径</td></tr><tr><td>├─sensorName</td><td>string</td><td>否</td><td>传感器名称，融合类数据上传必传</td></tr><tr><td>├─frameId</td><td>string</td><td>是</td><td>融合数据帧 ID, ulid 格式，参考 https://github.com/oklog/ulid, 融合类数据上传必传</td></tr><tr><td>├─label</td><td>map</td><td>是</td><td>该文件的标注标签信息，具体可参考uploadLabel</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/4a9e62ea88fd47b9b4b5f6bbbfe8ef64/multi/cloud-callback'\
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "segmentName": "car",
  "draftNumber": 1,
  "objects":[
    {
      "label": {
        "BOX2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "box2d": {
              "xmax": 10,
              "xmin": 1,
              "ymax": 18,
              "ymin": 6
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "BOX3D": [
          {
            "attributes": {
              "color": "blue"
            },
            "box3d": {
              "rotation": {
                "w": 1,
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              },
              "size": {
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              },
              "translation": {
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              }
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "CLASSIFICATION": {
          "attributes": {
            "color": "blue"
          },
          "category": "car"
        },
        "CUBOID2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "cuboid2d": {
              "back": [
                {
                  "x": 1,
                  "y": 2
                },
                {
                  "x": 1.1,
                  "y": 2.1
                },
                {
                  "x": 1.2,
                  "y": 2.2
                },
                {
                  "x": 1.3,
                  "y": 2.3
                }
              ],
              "front": [
                {
                  "x": 1,
                  "y": 2
                },
                {
                  "x": 1.1,
                  "y": 2.1
                },
                {
                  "x": 1.2,
                  "y": 2.2
                },
                {
                  "x": 1.3,
                  "y": 2.3
                }
              ]
            },
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "KEYPOINTS2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "keypoints2d": [
              {
                "v": 1.3,
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "POLYGON2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "polygon2d": [
              {
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "POLYLINE2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "polyline2d": [
              {
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "SENTENCE": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "phone": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ],
            "sentence": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ],
            "spell": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ]
          }
        ]
      }
    }
  ]
}
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### UploadLabel

**上传标签**

> **PUT** /v1/datasets/{id}/labels

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>是</td><td>对应的资源</td></tr><tr><td>label</td><td>map</td><td>是</td><td>标签。<br>key:<br>CLASSIFICATION: 分类标注<br>BOX2D: 2D 框标注<br>BOX3D: 3D 框标注<br>POLYGON2D: 2D 多边形标注<br>POLYLINE2D: 2D 折线标注<br>KEYPOINTS2D: 2D 关键点标注<br>CUBOID2D: 2D 立体框标注<br>SENTENCE: 语音转写标注<br><strong>每种key对应的value格式内容请参考请求示例，请严格按照对应格式传递参数</strong></td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "remotePath": "car1.jpg",
  "segmentName": "car",
  "draftNumber": 1,
  "label": {
    "BOX2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "box2d": {
          "xmax": 10,
          "xmin": 1,
          "ymax": 18,
          "ymin": 6
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5"
      }
    ],
    "BOX3D": [
      {
        "attributes": {
          "color": "blue"
        },
        "box3d": {
          "rotation": {
            "w": 1,
            "x": 1.1,
            "y": 1.2,
            "z": 1.3
          },
          "size": {
            "x": 1.1,
            "y": 1.2,
            "z": 1.3
          },
          "translation": {
            "x": 1.1,
            "y": 1.2,
            "z": 1.3
          }
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5"
      }
    ],
    "CLASSIFICATION": {
      "attributes": {
        "color": "blue"
      },
      "category": "car"
    },
    "CUBOID2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "cuboid2d": {
          "back": [
            {
              "x": 1,
              "y": 2
            },
            {
              "x": 1.1,
              "y": 2.1
            },
            {
              "x": 1.2,
              "y": 2.2
            },
            {
              "x": 1.3,
              "y": 2.3
            }
          ],
          "front": [
            {
              "x": 1,
              "y": 2
            },
            {
              "x": 1.1,
              "y": 2.1
            },
            {
              "x": 1.2,
              "y": 2.2
            },
            {
              "x": 1.3,
              "y": 2.3
            }
          ]
        },
        "instance": "400a7ec7faa643e38e7ab220463bc4b5"
      }
    ],
    "KEYPOINTS2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5",
        "keypoints2d": [
          {
            "v": 1.3,
            "x": 1.1,
            "y": 1.2
          }
        ]
      }
    ],
    "POLYGON2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5",
        "polygon2d": [
          {
            "x": 1.1,
            "y": 1.2
          }
        ]
      }
    ],
    "POLYLINE2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5",
        "polyline2d": [
          {
            "x": 1.1,
            "y": 1.2
          }
        ]
      }
    ],
    "SENTENCE": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5",
        "phone": [
          {
            "begin": "b",
            "end": "e",
            "text": "hello"
          }
        ],
        "sentence": [
          {
            "begin": "b",
            "end": "e",
            "text": "hello"
          }
        ],
        "spell": [
          {
            "begin": "b",
            "end": "e",
            "text": "hello"
          }
        ]
      }
    ]
  }
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListLabel

**获取数据集标签**

> **GET** /v1/datasets/{id}/labels

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最多128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>remotePath</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels?draftNumber=1&offset=0&limit=1&segmentName=car'\
--header 'x-token: {your_accesskey}'
```

**返回结果** 普通数据集

```
# 响应状态
HttpStatus 200
{
    "segmentName": "car",
    "type": 0,
    "labels": [
        {
           "remotePath": "data_car.jpg",
           "label": {
           
           } 
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

融合数据集

```
# 响应状态
HttpStatus 200
{
    "segmentName": "car"
    "type": 1,
    "labels": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "order": 1,
            "frame": [
                {
                    "sensorName": "camera_car",
                    "remotePath": "fusion_data_car2.jpg",
                    "timestamp":1609430400,
                    "label": {
                    
                    }
                },
                 {
                    "sensorname": "camera_car",
                    "remotePath": "fusion_data_car3.jpg",
                    "timestamp":1609430401,
                    "label": {
                        
                    }
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### MultiUploadLabel

**批量上传标签**

> **PUT** /v1/datasets/{id}/multi/data/labels

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>objects</td><td>object[]</td><td>是</td><td>对应的数据信息</td></tr><tr><td>├─remotePath</td><td>string</td><td>是</td><td>对应的资源</td></tr><tr><td>├─label</td><td>map</td><td>是</td><td>该文件的标注标签信息，具体可参考uploadLabel</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/multi/data/labels' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "segmentName": "car",
  "draftNumber": 1,
  "objects":[
    {
      "remotePath": "car1.jpg",
      "label": {
        "BOX2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "box2d": {
              "xmax": 10,
              "xmin": 1,
              "ymax": 18,
              "ymin": 6
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "BOX3D": [
          {
            "attributes": {
              "color": "blue"
            },
            "box3d": {
              "rotation": {
                "w": 1,
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              },
              "size": {
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              },
              "translation": {
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              }
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "CLASSIFICATION": {
          "attributes": {
            "color": "blue"
          },
          "category": "car"
        },
        "CUBOID2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "cuboid2d": {
              "back": [
                {
                  "x": 1,
                  "y": 2
                },
                {
                  "x": 1.1,
                  "y": 2.1
                },
                {
                  "x": 1.2,
                  "y": 2.2
                },
                {
                  "x": 1.3,
                  "y": 2.3
                }
              ],
              "front": [
                {
                  "x": 1,
                  "y": 2
                },
                {
                  "x": 1.1,
                  "y": 2.1
                },
                {
                  "x": 1.2,
                  "y": 2.2
                },
                {
                  "x": 1.3,
                  "y": 2.3
                }
              ]
            },
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "KEYPOINTS2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "keypoints2d": [
              {
                "v": 1.3,
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "POLYGON2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "polygon2d": [
              {
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "POLYLINE2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "polyline2d": [
              {
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "SENTENCE": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "phone": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ],
            "sentence": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ],
            "spell": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ]
          }
        ]
      }
    }
  ]
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### GetLabelStatistics

**获取数据集标签数据**

> **GET** /v1/datasets/{id}/labels/statistics

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels/statistics?commit=v1'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "labelStatistics": {
    "CLASSIFICATION":{
        "attributes":null,
        "categories":[
            {
                "attributes":null,
                "name":"0",
                "quantity":6903
            }
        ],
        "quantity":69999
    }
  }
}
```

### ConvertLabelFromAli

**从阿里转换标签数据**

> **POST** /v1/datasets/{id}/convert-labels

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>commit</td><td>string</td><td>是</td><td>提交 ID</td></tr><tr><td>labelUrl</td><td>string</td><td>是</td><td>标签下载链接</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/convert-labels'\
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "commit": "ajhfk2hjk3h89u3i',
    "labelUrl": "https://abc.xyz/ajdfls"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "taskId":"6d3a420485984e37abd10436fc4c41de"
}
```

### DeleteData

**删除data**

> **DELETE** /v1/datasets/{id}/data

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>是</td><td>需要删除的数据远端的路径列表</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/segments' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber": 1,
    "segmentName": "test",
    "remotePath": "car1.jpg"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### OperateData

**操作data**

> **POST** /v1/datasets/{id}/data

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>move</td><td>bool</td><td>否</td><td>从已有剪切创建</td></tr><tr><td>copy</td><td>bool</td><td>否</td><td>从已有复制创建</td></tr><tr><td>multipleMove</td><td>bool</td><td>否</td><td>从多个已有剪切创建</td></tr><tr><td>multipleCopy</td><td>bool</td><td>否</td><td>从多个已有复制创建</td></tr></tbody></table>

**Body**

<table><thead><tr><th width="224.7142857142857">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>否</td><td>segment 名称,</td></tr><tr><td>strategy</td><td>string</td><td>否</td><td>移动重名时的策略，可选项有：abort，override 和 skip，缺省为 abort</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>数据远端路径, 单个操作时使用</td></tr><tr><td>remotePaths</td><td>string[]</td><td>否</td><td>数据远端路径列表, 多个操作时使用</td></tr><tr><td>source</td><td>object</td><td>是</td><td>来源数据, 单个操作时使用</td></tr><tr><td>  ├─ segmentName</td><td>string</td><td>否</td><td>分区名</td></tr><tr><td>  ├─ remotePath</td><td>string</td><td>否</td><td>数据远端路径</td></tr><tr><td>  ├─ id</td><td>string</td><td>否</td><td>数据集id</td></tr><tr><td>  ├─ draftNumber</td><td>int</td><td>否</td><td>草稿编号</td></tr><tr><td>  ├─ commit</td><td>string</td><td>否</td><td>commitId或者commit的tag</td></tr><tr><td>source</td><td>object</td><td>否</td><td>来源数据分段, 多个操作时使用</td></tr><tr><td>  ├─ segmentName</td><td>string</td><td>否</td><td>分区名</td></tr><tr><td>  ├─ remotePaths</td><td>string[]</td><td>否</td><td>数据远端路径列表</td></tr><tr><td>  ├─ id</td><td>string</td><td>否</td><td>数据集id</td></tr><tr><td>  ├─ draftNumber</td><td>int</td><td>否</td><td>草稿编号</td></tr><tr><td>  ├─ commit</td><td>string</td><td>否</td><td>commitId或者commit的tag</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data?copy=true' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber": 1,
    "segmentName": "test",
    "remotePath": "car1.jpg",
    "source":{
      "remotePath": "carold.jpg",      
      "draftNumber": 1,
      "segmentName": "test",
      "remotePath": "car1.jpg",
      "id": "154e35bae8954f09969ef8c9445efd2c"
    }
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### DeleteFrame

**删除frame**

> **DELETE** /v1/datasets/{id}/frames

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>frameId</td><td>string</td><td>是</td><td>需要删除的融合数据帧的 ULID</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/frames' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber": 1,
    "segmentName": "test",
    "frameId": "00000009RGDGYHFNXRR8QF2DHJ"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### GetDiff

**获取两版本差异**

> **GET** /v1/datasets/{id}/diffs/{baseHead}

**请求参数**

**Path**

<table><thead><tr><th>名称</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>是</td><td>数据集ID</td></tr><tr><td>baseHead</td><td>是</td><td>格式为 commit-commitId/draft-draftNumber...commit-commitId/draft-draftNumber,<br>后者没传默认找父提交，目前只需要支持与父提交的比较</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/diffs/draft-1' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "action":"",
    "segments":{
        "stats":{
            "total":1,
            "additions":0,
            "deletions":0,
            "modifications":1
        }
    },
    "notes":{
        "action":""
    },
    "catalog":{
        "action":""
    },
    "data":{
        "stats":{
            "total":13,
            "additions":0,
            "deletions":13,
            "modifications":0
        }
    }
}
```

### ListSegmentDiffs

**获取两版本segment差异列表**

> **GET** /v1/datasets/{id}/diffs/{baseHead}/segments

**请求参数**

**Path**

<table><thead><tr><th>名称</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>是</td><td>数据集ID</td></tr><tr><td>baseHead</td><td>是</td><td>格式为 commit-commitId/draft-draftNumber...commit-commitId/draft-draftNumber,<br>后者没传默认找父提交，目前只需要支持与父提交的比较</td></tr></tbody></table>

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最多128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/diffs/draft-1/segments' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "segments":[
        {
            "name":"v1.0-mini_scene-0061",
            "action":"modify",
            "data":{
                "stats":{
                    "total":13,
                    "additions":0,
                    "deletions":13,
                    "modifications":0
                }
            },
            "sensor":{
                "action":""
            }
        }
    ],
    "offset":0,
    "recordSize":1,
    "totalCount":1
}
```

### GetSegmentDiff

**获取两版本segment差异**

> **GET** /v1/datasets/{id}/diffs/{baseHead}/segments/{segmentName}

**请求参数**

**Path**

<table><thead><tr><th>名称</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>是</td><td>数据集ID</td></tr><tr><td>baseHead</td><td>是</td><td>格式为 commit-commitId/draft-draftNumber...commit-commitId/draft-draftNumber,<br>后者没传默认找父提交，目前只需要支持与父提交的比较</td></tr><tr><td>segmentName</td><td>是</td><td>数据分段名</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/diffs/draft-1/segments/v1.0-mini_scene-0061' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "name":"v1.0-mini_scene-0061",
    "action":"modified",
    "data":{
        "stats":{
            "total":13,
            "additions":0,
            "deletions":13,
            "modifications":0
        }
    },
    "sensor":{
        "action":""
    }
}
```

### ListDataDiffs

**获取两版本数据差异**

> **GET** /v1/datasets/{id}/diffs/{baseHead}/segments/{segmentName}/data

**请求参数**

**Path**

<table><thead><tr><th>名称</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>是</td><td>数据集ID</td></tr><tr><td>baseHead</td><td>是</td><td>格式为 commit-commitId/draft-draftNumber...commit-commitId/draft-draftNumber,<br>后者没传默认找父提交，目前只需要支持与父提交的比较</td></tr><tr><td>segmentName</td><td>是</td><td>数据分段名</td></tr></tbody></table>

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最多128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/diffs/draft-1/segments/v1.0-mini_scene-0061/data' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "data":[
        {
            "remotePath":"n015-2018-07-24-11-22-45+0800__CAM_BACK_LEFT__1532402927647423.jpg",
            "action":"delete",
            "file":{
                "action":"delete"
            },
            "label":{
                "action":"unmodify"
            }
        }
    ],
    "offset":0,
    "recordSize":13,
    "totalCount":13
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.graviti.cn/dev-doc/tools/api-center/data-operation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
