# 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
}
```
