# Overview

This is the official document for Eagle API. By releasing Eagle's API, we hope that every user could make the most of these functions and develop more personalized plugins or add-ons to address various needs. In this document, along with the exhaustive introduction to the Eagle API, we also provided some examples for reference to inspire users to make creative plugins on basis of these scripts.

> Remark: By using Eagle API and its derivatives, you represent and warrant that you have read and agree to our [User Agreement](https://en.eagle.cool/eula) and [Privacy Policy](https://en.eagle.cool/privacy).

### Server <a href="#ll9fq" id="ll9fq"></a>

Eagle is a local based application, the Eagle API server will start up when Eagle App is opened, hence you'd have to open Eagle App first to gain access to all function of Eagle API.

### Format <a href="#oxnmu" id="oxnmu"></a>

All API server will start-up upon opening Eagle App, the default listening port is `41595`, i.e. `http://localhost:41595/` . Results returned will be in `JSON` format.

### CORS <a href="#id-8ju4d" id="id-8ju4d"></a>

If you want to use Eagle API in webpages via script extensions like 'Tampermonkey', please call through `GM_xmlhttprequest` to circumvent security policies related to Cross-Origin Resource Sharing.

```javascript
GM_xmlhttpRequest({
    url: EAGLE_IMPORT_API_URL,
    method: "POST",
    data: JSON.stringify({ items: images, folderId: pageInfo.folderId }),
    onload: function(response) {}
});
```

### Limitation <a href="#pixpq" id="pixpq"></a>

Eagle 1.11 Build21 (Released on 2020/06/17) or the latter version is required to gain access to Eagle API.

The performance of the API server is dependant on the device you are currently running Eagle. There is no limit on the number of calls since all connections were done locally. Almost every add-item API function have a respective version for adding multiple items, we suggest you use the multiple ones if you intend to add lots of files.

### Submit Feature Requests <a href="#ovjdu" id="ovjdu"></a>

The Eagle API has provided most of the functions you would need to create/add items, if you find API insufficient or incapable under some circumstances, feel free to submit your feature request!

**Mail to:** <services@eagle.cool>\
**Title:** Feature Request for Eagle API: A brief description of the requested feature.\
**Content:** Please describe the script or extension you are developing, and advise more detail about why the proposed feature is necessary.


# /api/application/info

`GET` Get detailed information on the Eagle App currently running. In most cases, this could be used to determine whether certain functions are available on the user's device.

**Sample Code:**

```javascript
var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("http://localhost:41595/api/application/info", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": {
        "version": "1.11.0",
        "prereleaseVersion": null,
        "buildVersion": "20200612",
        "execPath": "/Users/augus/Projects/Eagle App/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Helper (Renderer).app/Contents/MacOS/Electron Helper (Renderer)",
        "platform": "darwin"
    }
}
```


# /api/folder/create

**`POST`** Create a folder. The created folder will be put at the bottom of the folder list of the current library.

| Parameter  | Description             |
| ---------- | ----------------------- |
| folderName | The name of the Folder  |
| parent     | ID of the parent folder |

**Sample Code:**

```javascript
var data = {
    "folderName": "The Folder Name"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/folder/create", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results returned:**

```javascript
{
    "status": "success",
    "data": {
        "id": "KBJJSMMVF9WYL",
        "name": "The Folder Name",
        "images": [],
        "folders": [],
        "modificationTime": 1592409993367,
        "imagesMappings": {},
        "tags": [],
        "children": [],
        "isExpand": true
    }
}
```


# /api/folder/rename

**`POST`**  Rename the specified folder.

| Parameter | Description                |
| --------- | -------------------------- |
| folderId  | The folder's ID            |
| newName   | The new name of the folder |

**Sample Code:**

```javascript
var data = {
    "folderId": "KBHOIWCUO6U9I",
    "newName": "New Folder Name"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/folder/rename", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": {
        "id": "KBJJSMMVF9WYL",
        "name": "New Folder Name",
        "images": [],
        "folders": [],
        "modificationTime": 1592409993367,
        "imagesMappings": {},
        "tags": [],
        "children": [],
        "isExpand": true,
        "size": 30,
        "vstype": "folder",
        "styles": {
            "depth": 0,
            "first": false,
            "last": false
        },
        "isVisible": true,
        "$$hashKey": "object:765",
        "newFolderName": "The Folder Name",
        "editable": false,
        "pinyin": "New Folder Name"
    }
}
```


# /api/folder/update

**`POST`**  Update the specified folder.

| Parameter      | Description                                                   |
| -------------- | ------------------------------------------------------------- |
| folderId       | The folder's ID                                               |
| newName        | The new name of the folder                                    |
| newDescription | The new description of the folder                             |
| newColor       | "red","orange","green","yellow","aqua","blue","purple","pink" |

**Sample Code:**

```javascript
var data = {
    "folderId": "KMUFMKTBHINM4",
    "newName": "New Name",
    "newDescription": "New Description",
    "newColor": "red"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/folder/update", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": {
        "id": "KMUFMKTBHINM4",
        "name": "New Name",
        "description": "New Description",
        "images": [],
        "folders": [],
        "modificationTime": 1592409993367,
        "imagesMappings": {},
        "tags": [],
        "children": [],
        "isExpand": true,
        "size": 30,
        "vstype": "folder",
        "styles": {
            "depth": 0,
            "first": false,
            "last": false
        },
        "isVisible": true,
        "$$hashKey": "object:765",
        "editable": false,
    }
}
```


# /api/folder/list

**`GET`** Get the list of folders of the current library.

**Sample Code:**

```javascript
var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("http://localhost:41595/api/folder/list", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": [
        {
            "id": "JMHB2Y3Y3AA75",
            "name": "UI Design",
            "description": "",
            "children": [],
            "modificationTime": 1537854867502,
            "tags": [],
            "imageCount": 33,
            "descendantImageCount": 33,
            "pinyin": "UI Design",
            "extendTags": []
        },
        {
            "id": "JMHB2Y3Y3AA76",
            "name": "Post Design",
            "description": "",
            "children": [],
            "modificationTime": 1487586362384,
            "tags": [],
            "imageCount": 2800,
            "descendantImageCount": 2800,
            "pinyin": "Post Design",
            "extendTags": []
        },
        {
            "id": "JMHB2Y3Y3AA77",
            "name": "Movie Post Design",
            "description": "",
            "children": [],
            "modificationTime": 1487586529221,
            "tags": [],
            "imageCount": 449,
            "descendantImageCount": 449,
            "pinyin": "Movie Post Design",
            "extendTags": []
        },
        {
            "id": "JMHB2Y3Y3AA78",
            "name": "Business Card Design",
            "description": "",
            "children": [],
            "modificationTime": 1494390324202,
            "tags": [
                "Business Card"
            ],
            "imageCount": 1236,
            "descendantImageCount": 1236,
            "pinyin": "Business Card Design",
            "extendTags": [
                "Business Card"
            ]
        }
    ]
}
```


# /api/folder/listRecent

**`GET`** Get the list of folders recently used by the user.

**Sample Code:**

```javascript
var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("http://localhost:41595/api/folder/listRecent", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": [
        {
            "id": "KBCB8BK86WIW1",
            "name": "Industrial",
            "description": "",
            "children": [],
            "modificationTime": 1591972345736,
            "tags": [],
            "password": "",
            "passwordTips": "",
            "images": [],
            "isExpand": true,
            "newFolderName": "Industrial",
            "imagesMappings": {},
            "imageCount": 11,
            "descendantImageCount": 11,
            "pinyin": "GONGYEFENG",
            "extendTags": []
        },
        {
            "id": "KBBPIOY46SRWP",
            "name": "Scandinavian",
            "description": "",
            "children": [],
            "modificationTime": 1591773342438,
            "tags": [],
            "password": "",
            "passwordTips": "",
            "images": [],
            "isExpand": true,
            "newFolderName": "Scandinavian",
            "imagesMappings": {},
            "imageCount": 72,
            "descendantImageCount": 72,
            "pinyin": "BEIOUFENGGE",
            "extendTags": []
        }
    ]
}
```


# /api/item/addFromURL

**`POST`** Add an image from an address to Eagle App. If you intend to add multiple items in a row, we suggest you use `/api/item/addFromURLs`.

| Parameter        | Description                                                                                                         |
| ---------------- | ------------------------------------------------------------------------------------------------------------------- |
| url              | Required，the URL of the image to be added. Supports `http`、 `https`、 `base64`                                       |
| name             | Required，The name of the image to be added.                                                                         |
| website          | The Address of the source of the image                                                                              |
| tags             | Tags for the image.                                                                                                 |
| star             | The rating for the image.                                                                                           |
| annotation       | The annotation for the image.                                                                                       |
| modificationTime | The creation date of the image. The parameter can be used to alter the image's sorting order in Eagle.              |
| folderId         | If this parameter is defined, the image will be added to the corresponding folder.                                  |
| headers          | Optional, customize the HTTP headers properties, this could be used to circumvent the security of certain websites. |

**Sample Code:**

```javascript
var data = {
    "url": "https://cdn.dribbble.com/users/674925/screenshots/12020761/media/6420a7ec85751c11e5254282d6124950.png",
    "name": "Work",
    "website": "https://dribbble.com/shots/12020761-Work",
    "tags": ["Illustration", "Design"],
    "modificationTime": 1591325171766,
  "headers": {
    "referer": "dribbble.com"
  }
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/addFromURL", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success"
}
```


# /api/item/addFromURLs

**`POST`** Add multiple images from URLs to Eagle App.

| Parameter | Description                                                                    |
| --------- | ------------------------------------------------------------------------------ |
| items     | The array object made up of multiple items (See the description below)         |
| folderId  | If the parameter is defined, images will be added to the corresponding folder. |

**Description of the Item parameter:**

| Parameter        | Description                                                                                                         |
| ---------------- | ------------------------------------------------------------------------------------------------------------------- |
| url              | Required，the URL of images to be added. Supports  `http`、 `https`、 `base64`                                         |
| name             | Required，The name of the images you to be added.                                                                    |
| website          | The Address of the source of images.                                                                                |
| annotation       | The annotation for the images.                                                                                      |
| tags             | Tags for the images.                                                                                                |
| modificationTime | The creation date of the images. The parameter can be used to alter the images' sorting order in Eagle.             |
| headers          | Optional, customize the HTTP headers properties, this could be used to circumvent the security of certain websites. |

**Sample Code:**

```javascript
var data = {
  "items": [
      {
        "url": "https://cdn.dribbble.com/users/674925/screenshots/12020761/media/6420a7ec85751c11e5254282d6124950.png",
          "name": "Work",
          "website": "https://dribbble.com/shots/12020761-Work",
          "tags": ["Illustration", "Design"],
          "modificationTime": 1591325171767,
      "headers": {
        "referer": "dribbble.com"
      }
      },
      {
          "url": "https://cdn.dribbble.com/users/674925/screenshots/12061400/media/71da9ba40c47f09d8cd6953d661e61fd.png",
          "name": "Work2",
          "website": "https://dribbble.com/shots/12061400-work2",
          "tags": ["Illustration", "Design"],
          "modificationTime": 1591325171766,
      "headers": {
        "referer": "dribbble.com"
      }
      }
  ],
  "folderId": "KAY6NTU6UYI5Qa"
};

var requestOptions = {
  method: 'POST',
    body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/addFromURLs", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success"
}
```


# /api/item/addFromPath

**`POST`** Add a local file to Eagle App. If you intend to add multiple items in a row, we suggest you use`/api/item/addFromPaths` <br>

| Parameter  | Description                                                                        |
| ---------- | ---------------------------------------------------------------------------------- |
| path       | Required, the path of the local file.                                              |
| name       | Required, the name of the image to be added.                                       |
| website    | The Address of the source of the image.                                            |
| annotation | The annotation for the image.                                                      |
| tags       | Tags for the image.                                                                |
| folderId   | If this parameter is defined, the image will be added to the corresponding folder. |

**Sample Code:**

```javascript
var data = {
    "path": "C://Users/User/Downloads/test.jpg",
    "name": "アルトリア･キャスター",
    "website": "https://www.pixiv.net/artworks/83585181",
    "tags": ["FGO", "アルトリア・キャスター"],
    "annotation": "久坂んむり",
    "folderId": "KEHB8I2C9F23H"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/addFromPath", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success"
}
```


# /api/item/addFromPaths

**`POST`** Add multiple local files to Eagle App.<br>

| Parameter  | Description                                                                        |
| ---------- | ---------------------------------------------------------------------------------- |
| path       | Required, the path of the local files.                                             |
| name       | Required, the name of images to be added.                                          |
| website    | The Address of the source of the images.                                           |
| annotation | The annotation for the images.                                                     |
| tags       | Tags for the images.                                                               |
| folderId   | If this parameter is defined, the image will be added to the corresponding folder. |

**Sample Code:**

```javascript
var data = {
    "items": [
        {
            "path": "C://Users/User/Downloads/test.jpg",
            "name": "アルトリア･キャスター",
            "website": "https://www.pixiv.net/artworks/83585181",
            "tags": ["FGO", "アルトリア・キャスター"],
            "annotation": "久坂んむり"
        },
        {
            "path": "C://Users/User/Downloads/test2.jpg",
            "name": "アルトリア･キャスター",
            "website": "https://www.pixiv.net/artworks/83585181",
            "tags": ["FGO", "アルトリア・キャスター"],
            "annotation": "久坂んむり"
        }
    ],
    "folderId": "KEHB8I2C9F23H"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/addFromPaths", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success"
}
```


# /api/item/addBookmark

**`POST`** Save the link in the URL form to Eagle App.

| Parameter        | Description                                                                                             |
| ---------------- | ------------------------------------------------------------------------------------------------------- |
| url              | Required, the link of the image to be saved. Supports `http`、 `https`、 `base64`                         |
| name             | Required, the name of the image to be added.                                                            |
| base64           | The thumbnail of the bookmark. Must be in base64 format.                                                |
| tags             | Tags for the image                                                                                      |
| modificationTime | The creation date of the images. The parameter can be used to alter the images' sorting order in Eagle. |
| folderId         | If this parameter is defined, the image will be added to the corresponding folder.                      |

**Sample Code:**

```javascript
var data = {
    "url": "https://www.pixiv.net/artworks/83585181",
    "name": "アルトリア･キャスター",
    "tags": ["FGO", "アルトリア・キャスター"],
    "base64": "data:image/jpeg;base64,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"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/addBookmark", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success"
}
```


# /api/item/info

**`GET`** Get Properties of the specified file, including the file name, tags, categorizations, folders, dimensions, etc.

| Parameter | Description    |
| --------- | -------------- |
| id        | ID of the file |

**Sample Code:**

```javascript
var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/info?id=KBHG6KA0Y5S9W", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": {
        "id": "KBKE04XSTXR7I",
        "name": "Rosto",
        "size": 21950,
        "ext": "jpg",
        "tags": [],
        "folders": [
            "KBKE0240V8OII"
        ],
        "isDeleted": false,
        "url": "https://www.pinterest.com/pin/380343131025657796/",
        "annotation": "",
        "modificationTime": 1592460728472,
        "width": 623,
        "height": 623,
        "noThumbnail": true,
        "lastModified": 1592460776990,
        "palettes": [
            {
                "color": [
                    132,
                    236,
                    244
                ],
                "ratio": 49,
                "$$hashKey": "object:604"
            },
            {
                "color": [
                    249,
                    220,
                    221
                ],
                "ratio": 24,
                "$$hashKey": "object:605"
            },
            {
                "color": [
                    250,
                    149,
                    150
                ],
                "ratio": 12,
                "$$hashKey": "object:606"
            },
            {
                "color": [
                    8,
                    45,
                    142
                ],
                "ratio": 11,
                "$$hashKey": "object:607"
            },
            {
                "color": [
                    189,
                    76,
                    91
                ],
                "ratio": 1.16,
                "$$hashKey": "object:608"
            },
            {
                "color": [
                    174,
                    214,
                    221
                ],
                "ratio": 0.39,
                "$$hashKey": "object:609"
            }
        ]
    }
}
```


# /api/item/thumbnail

**`GET`** Get the path of the thumbnail of the file specified. If you would like to get a batch of thumbnail paths, the combination of `Library path` + `Object ID`is recommended.

| Parameter | Description    |
| --------- | -------------- |
| id        | ID of the file |

**Sample Code:**

```javascript
var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/thumbnail?id=KBHG6KA0Y5S9W", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": "/Users/augus/Pictures/test.library/images/KBKE04XSTXR7I.info/Rosto.jpg"
}
```


# /api/item/list

**`GET`** Get items that match the filter condition.

| Parameter | Description                                                                                                              |
| --------- | ------------------------------------------------------------------------------------------------------------------------ |
| limit     | The number of items to be displayed. the default number is `200`                                                         |
| offset    | Offset a collection of results from the api. Start with `0`.                                                             |
| orderBy   | The sorting order.`CREATEDATE` , `FILESIZE` , `NAME` , `RESOLUTION` , add a minus sign for descending order: `-FILESIZE` |
| keyword   | Filter by the keyword                                                                                                    |
| ext       | Filter by the extension type, e.g.: `jpg` ,  `png`                                                                       |
| tags      | Filter by tags. Use `,` to divide different tags. E.g.: `Design, Poster`                                                 |
| folders   | Filter by Folders.  Use `,` to divide folder IDs. E.g.: `KAY6NTU6UYI5Q,KBJ8Z60O88VMG`                                    |

**Sample Code:**

```javascript
var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/list?orderBy=-RESOLUTION&limit=10&ext=svg&name=character&folders=KB90R2VNPHH3V&tags=test,test2", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": [
        {
            "id": "KB91GNOPDDVTH",
            "name": "running-man",
            "size": 36382,
            "ext": "svg",
            "tags": [],
            "folders": [
                "KB90QZMU641LI"
            ],
            "isDeleted": false,
            "url": "https://cn.eagle.cool/extensions",
            "annotation": "",
            "modificationTime": 1591774540009,
            "height": 166,
            "width": 203,
            "lastModified": 1591774540171,
            "palettes": [
                {
                    "color": [
                        236,
                        240,
                        242
                    ],
                    "ratio": 44
                },
                {
                    "color": [
                        66,
                        141,
                        250
                    ],
                    "ratio": 30
                },
                {
                    "color": [
                        32,
                        40,
                        72
                    ],
                    "ratio": 9
                },
                {
                    "color": [
                        233,
                        167,
                        20
                    ],
                    "ratio": 5
                },
                {
                    "color": [
                        84,
                        76,
                        132
                    ],
                    "ratio": 4.65
                },
                {
                    "color": [
                        134,
                        188,
                        244
                    ],
                    "ratio": 3.1
                },
                {
                    "color": [
                        245,
                        208,
                        159
                    ],
                    "ratio": 1.11
                },
                {
                    "color": [
                        36,
                        204,
                        252
                    ],
                    "ratio": 1.11
                },
                {
                    "color": [
                        20,
                        126,
                        158
                    ],
                    "ratio": 0.66
                }
            ]
        },
        {
            "id": "KB91IN6THODMA",
            "name": "running-man",
            "size": 36382,
            "ext": "svg",
            "tags": [],
            "folders": [
                "KB90R2VNPHH3V"
            ],
            "isDeleted": false,
            "url": "https://cn.eagle.cool/extensions",
            "annotation": "",
            "modificationTime": 1591774632677,
            "height": 166,
            "width": 203,
            "lastModified": 1591774632941,
            "palettes": [
                {
                    "color": [
                        236,
                        240,
                        242
                    ],
                    "ratio": 44
                },
                {
                    "color": [
                        66,
                        141,
                        250
                    ],
                    "ratio": 30
                },
                {
                    "color": [
                        32,
                        40,
                        72
                    ],
                    "ratio": 9
                },
                {
                    "color": [
                        233,
                        167,
                        20
                    ],
                    "ratio": 5
                },
                {
                    "color": [
                        84,
                        76,
                        132
                    ],
                    "ratio": 4.65
                },
                {
                    "color": [
                        134,
                        188,
                        244
                    ],
                    "ratio": 3.1
                },
                {
                    "color": [
                        245,
                        208,
                        159
                    ],
                    "ratio": 1.11
                },
                {
                    "color": [
                        36,
                        204,
                        252
                    ],
                    "ratio": 1.11
                },
                {
                    "color": [
                        20,
                        126,
                        158
                    ],
                    "ratio": 0.66
                }
            ]
        },
        {
            "id": "KB91IUWS7VJVF",
            "name": "running-man",
            "size": 36382,
            "ext": "svg",
            "tags": [],
            "folders": [
                "KB90QZMU641LI"
            ],
            "isDeleted": false,
            "url": "https://cn.eagle.cool/extensions",
            "annotation": "",
            "modificationTime": 1591774642684,
            "height": 166,
            "width": 203,
            "lastModified": 1591774643006,
            "palettes": [
                {
                    "color": [
                        236,
                        240,
                        242
                    ],
                    "ratio": 44
                },
                {
                    "color": [
                        66,
                        141,
                        250
                    ],
                    "ratio": 30
                },
                {
                    "color": [
                        32,
                        40,
                        72
                    ],
                    "ratio": 9
                },
                {
                    "color": [
                        233,
                        167,
                        20
                    ],
                    "ratio": 5
                },
                {
                    "color": [
                        84,
                        76,
                        132
                    ],
                    "ratio": 4.65
                },
                {
                    "color": [
                        134,
                        188,
                        244
                    ],
                    "ratio": 3.1
                },
                {
                    "color": [
                        245,
                        208,
                        159
                    ],
                    "ratio": 1.11
                },
                {
                    "color": [
                        36,
                        204,
                        252
                    ],
                    "ratio": 1.11
                },
                {
                    "color": [
                        20,
                        126,
                        158
                    ],
                    "ratio": 0.66
                }
            ]
        }
    ]
}
```


# /api/item/moveToTrash

**`POST`** Move items to trash.

| itemIds | Required |
| ------- | -------- |

**Sample Code:**

```javascript
var data = {
    "itemIds": ["KWLKGQW2HTHC7", "KWLOGLTX0FGHF"]
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/moveToTrash", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success"
}
```


# /api/item/refreshPalette

**`POST`** Re-analysis the color of the file. When changes to the original file were made, you can call this function to refresh the Color Analysis. <br>

| Parameter | Description   |
| --------- | ------------- |
| id        | The item's ID |

**Sample Code:**

```javascript
var data = {
    "id": "KBKE02W8V0YWD"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/refreshPalette", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success"
}
```


# /api/item/refreshThumbnail

**`POST`** Re-generate the thumbnail of the file used to display in the List.  When changes to the original file were made, you can call this function to re-generate the thumbnail, the color analysis will also be made.

| Parameter | Description   |
| --------- | ------------- |
| id        | The item's ID |

**Sample Code:**

```javascript
var data = {
    "id": "KBKE02W8V0YWD"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/refreshThumbnail", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Resuls Returned:**

```javascript
{
    "status": "success"
}
```


# /api/item/update

**`POST`** Modify data of specified fields of the item.&#x20;

**What tasks can be done with this function?**

* Text output from the external OCR Tools can be added as tags, annotations to the image, and serve as search conditions for later use.&#x20;
* The analysis result of the image generated by external Object Detection Tools can be added in the form of tags, and serve as a search condition.

**Fields that can be modified are listed as follows:**

| Parameter  | Description                                 |
| ---------- | ------------------------------------------- |
| id         | Required, the ID of the item to be modified |
| tags       | Optional, tags                              |
| annotation | Optional, annotations                       |
| url        | Optional, the source url                    |
| star       | Optional, ratings                           |

**Sample Code:**

```javascript
var data = {
    "id": "KBN1X9NHDZ99F",
  "tags": ["Design1", "Design2"],
  "annotation": "Awesome",
  "url": "https://dribbble/com",
  "star": 4
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/item/update", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": {
        "id": "KBN1X9NHDZ99F",
        "name": "Top Character Design Trends for 2019 Bold  Impressive",
        "size": 18447,
        "ext": "jpg",
        "tags": [
            "Design1",
            "Design2"
        ],
        "folders": [
            "KBJJSMMVF9WYL"
        ],
        "isDeleted": false,
        "url": "https://dribbble/com",
        "annotation": "Awesome",
        "modificationTime": 1592621841437,
        "width": 450,
        "height": 545,
        "noThumbnail": true,
        "lastModified": 1592625558780,
        "palettes": [
            {
                "color": [
                    251,
                    244,
                    221
                ],
                "ratio": 80,
                "$$hashKey": "object:678"
            },
            {
                "color": [
                    10,
                    185,
                    202
                ],
                "ratio": 7,
                "$$hashKey": "object:679"
            },
            {
                "color": [
                    26,
                    37,
                    64
                ],
                "ratio": 6,
                "$$hashKey": "object:680"
            },
            {
                "color": [
                    217,
                    83,
                    11
                ],
                "ratio": 4.42,
                "$$hashKey": "object:681"
            },
            {
                "color": [
                    242,
                    200,
                    172
                ],
                "ratio": 0.51,
                "$$hashKey": "object:682"
            },
            {
                "color": [
                    214,
                    170,
                    135
                ],
                "ratio": 0.44,
                "$$hashKey": "object:683"
            },
            {
                "color": [
                    154,
                    208,
                    220
                ],
                "ratio": 0.31,
                "$$hashKey": "object:684"
            }
        ],
        "star": 4
    }
}
```


# /api/library/info

**`GET`** Get detailed information of the library currently running. The function can be used to obtain details such as `All Folders`, `All Smart Folders,` `All Tag Groups`, `Quick Access` and etc.

**Sample Code:**

```javascript
var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("http://localhost:41595/api/library/info", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": {
        "folders": [
            {
                "id": "32455218-9e79-61ca-7e1d-034c0ed9f33b",
                "name": "Poster Design",
                "description": "",
                "children": [
                    {
                        "id": "c89b30aa-b951-080c-0139-c2ea3f1aa549",
                        "name": "Poster Design 2",
                        "description": "",
                        "children": [],
                        "modificationTime": 1487586529221,
                        "tags": [],
                        "iconColor": "orange",
                        "password": "",
                        "passwordTips": "",
                        "coverId": "850b5be2-73be-5ab5-d96b-d16d1c4baef4",
                        "orderBy": "MANUAL",
                        "sortIncrease": true
                    }
                ],
                "modificationTime": 1487586362385,
                "tags": [],
                "iconColor": "red",
                "password": "",
                "passwordTips": "",
                "coverId": "a387c5d6-5c27-4f1e-96d1-af7ae0256887",
                "orderBy": "MANUAL",
                "sortIncrease": true
            },
            {
                "id": "2589f314-4973-e688-7ae0-9ea59949fdca",
                "name": "Business Card Design",
                "description": "",
                "children": [],
                "modificationTime": 1494390324202,
                "tags": [
                    "Business Card"
                ],
                "iconColor": "yellow",
                "password": "",
                "passwordTips": "",
                "coverId": "9948622c-1734-cd31-cf64-af5284675b29"
            },
            {
                "id": "f912f591-000b-2be0-0bf4-e01229a36737",
                "name": "Industrial",
                "description": "",
                "children": [],
                "modificationTime": 1494396692476,
                "tags": [
                    "Industrial",
                    "Loft",
                    "Interior"
                ],
                "iconColor": "green",
                "password": "",
                "passwordTips": "",
                "coverId": "d18dad7d-6904-5e4d-1481-9335d675e66b",
                "orderBy": "MANUAL",
                "sortIncrease": true
            },
            {
                "id": "1b31d97a-3a4a-eaf8-4fa3-06701952055e",
                "name": "Urban Art",
                "description": "",
                "children": [],
                "modificationTime": 1494390919034,
                "tags": [
                    "Urban Art",
                    "Street Art"
                ],
                "iconColor": "aqua",
                "password": "",
                "passwordTips": ""
            },
            {
                "id": "046678f7-b671-940b-4bf8-e7496a0e08b5",
                "name": "Industrial Design",
                "description": "",
                "children": [],
                "modificationTime": 1494394412374,
                "tags": [],
                "iconColor": "blue",
                "password": "",
                "passwordTips": "",
                "coverId": "7cb9cf92-55e2-d94e-bbcd-e51471abace3"
            },
            {
                "id": "d0cb83e6-d5ce-b7b1-0d3d-51966a979870",
                "name": "Building Design",
                "description": "",
                "children": [],
                "modificationTime": 1494395202363,
                "tags": [],
                "iconColor": "purple",
                "password": "",
                "passwordTips": "",
                "coverId": "8acdd268-f7e8-26c0-d514-7bf85e11b2d3",
                "orderBy": "NAME",
                "sortIncrease": true
            },
            {
                "id": "JMMYPFRJEOWBE",
                "name": "Advertising Design",
                "description": "",
                "children": [],
                "modificationTime": 1538196878863,
                "tags": [],
                "iconColor": "pink",
                "password": "",
                "passwordTips": "",
                "orderBy": "MANUAL",
                "sortIncrease": true
            },
            {
                "id": "ecd7e099-956a-4c39-8cb7-c1ca3bbe165a",
                "name": "Cover Design",
                "description": "",
                "children": [],
                "modificationTime": 1524732016241,
                "tags": [],
                "password": "dHA2dTRjbDY=",
                "passwordTips": "my name"
            },
            {
                "id": "b2c109cc-d748-0056-f667-27c1d03d9b3a",
                "name": "Illustration Design",
                "description": "",
                "children": [
                    {
                        "id": "JTFIUSP4MVTZC",
                        "name": "Uncategorized",
                        "description": "",
                        "children": [],
                        "modificationTime": 1552984468168,
                        "tags": [],
                        "icon": "graph",
                        "password": "",
                        "passwordTips": "",
                        "coverId": "JSM0JZYBVPZNF",
                        "orderBy": "MANUAL",
                        "sortIncrease": true
                    },
                    {
                        "id": "K7ZNYYMVH1X2B",
                        "name": "Illustration - Avatars",
                        "description": "",
                        "children": [],
                        "modificationTime": 1584677336791,
                        "tags": [],
                        "icon": "graph",
                        "password": "",
                        "passwordTips": "",
                        "orderBy": "MANUAL",
                        "sortIncrease": true
                    },
                    {
                        "id": "9e3614ef-ce1d-ac93-af02-12ae1a595b87",
                        "name": "Illustration - Lucas Wakamatsu",
                        "description": "",
                        "children": [],
                        "modificationTime": 1514532502842,
                        "tags": [],
                        "icon": "graph",
                        "password": "",
                        "passwordTips": "",
                        "coverId": "da3054fd-94ee-1b2e-6ec5-bb9802f5c7a1",
                        "orderBy": "MANUAL",
                        "sortIncrease": true
                    },
                    {
                        "id": "fd95a640-55f9-ff15-54e0-155043e44348",
                        "name": "Illustration - UI Design Illustrations",
                        "description": "",
                        "children": [],
                        "modificationTime": 1514530884438,
                        "tags": [
                            "Textures"
                        ],
                        "icon": "graph",
                        "password": "",
                        "passwordTips": "",
                        "coverId": "JSDGCG1TQ2A2V",
                        "orderBy": "MANUAL",
                        "sortIncrease": true
                    },
                    {
                        "id": "5830a048-a19d-0af1-86ba-55723891b7a0",
                        "name": "Illustration - MBE Style",
                        "description": "",
                        "children": [],
                        "modificationTime": 1514530555940,
                        "tags": [],
                        "icon": "graph",
                        "password": "",
                        "passwordTips": "",
                        "coverId": "6d568f4b-be09-80ac-8989-fe6c1562f5f6"
                    },
                    {
                        "id": "JPWGXRBUZ722T",
                        "name": "Illustration - Weird",
                        "description": "",
                        "children": [],
                        "modificationTime": 1545302042778,
                        "tags": [],
                        "icon": "graph",
                        "password": "",
                        "passwordTips": "",
                        "coverId": "JPCI284T29QVM"
                    },
                    {
                        "id": "JVCGQNEBZCQWZ",
                        "name": "Illustration - Icons",
                        "description": "",
                        "children": [],
                        "modificationTime": 1557153081587,
                        "tags": [],
                        "icon": "graph",
                        "password": "",
                        "passwordTips": "",
                        "orderBy": "MANUAL",
                        "sortIncrease": true
                    }
                ],
                "modificationTime": 1514532718237,
                "tags": [],
                "icon": "graph",
                "password": "",
                "passwordTips": "",
                "coverId": "JS4CPCMWSQ4NT"
            }
        ],
        "smartFolders": [
            {
                "id": "JQQAV9CA71QSZ",
                "icon": "calendar-week",
                "name": "Last Week",
                "description": "",
                "modificationTime": 1542962230621,
                "conditions": [
                    {
                        "match": "OR",
                        "rules": [
                            {
                                "method": "within",
                                "property": "createTime",
                                "value": [
                                    7
                                ]
                            }
                        ]
                    }
                ],
                "orderBy": "FILESIZE",
                "sortIncrease": true
            },
            {
                "id": "b2ece90b-3692-4f85-a2c5-4b39b8c10206",
                "icon": "calendar-month",
                "name": "Last 30 Days",
                "description": "",
                "modificationTime": 1542998358475,
                "conditions": [
                    {
                        "match": "OR",
                        "rules": [
                            {
                                "method": "within",
                                "property": "createTime",
                                "value": [
                                    30
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "id": "7de0bdb8-3124-add7-4a1f-b51f126aa738",
                "name": "Red Posters",
                "description": "",
                "modificationTime": 1564766432167,
                "conditions": [
                    {
                        "$$hashKey": "object:7456",
                        "match": "AND",
                        "rules": [
                            {
                                "$$hashKey": "object:7462",
                                "method": "intersection",
                                "property": "tags",
                                "value": [
                                    "Poster"
                                ]
                            },
                            {
                                "$$hashKey": "object:7463",
                                "method": "similar",
                                "property": "color",
                                "value": "#ff2600"
                            }
                        ]
                    }
                ]
            },
            {
                "id": "JN03O08107BI0",
                "name": "Blue Posters",
                "description": "",
                "modificationTime": 1517283297754,
                "conditions": [
                    {
                        "match": "AND",
                        "rules": [
                            {
                                "method": "intersection",
                                "property": "tags",
                                "value": [
                                    "Poster"
                                ]
                            },
                            {
                                "method": "similar",
                                "property": "color",
                                "value": "#0096ff"
                            }
                        ]
                    }
                ],
                "orderBy": "RATING",
                "sortIncrease": false
            }
        ],
        "quickAccess": [
            {
                "type": "smartFolder",
                "id": "7de0bdb8-3124-add7-4a1f-b51f126aa738"
            }
        ],
        "tagsGroups": [
            {
                "id": "c549d2a8-c187-c612-617f-83fcef4976a2",
                "name": "Location",
                "tags": [
                    "Kitchen"
                ],
                "color": "yellow"
            },
            {
                "id": "549c0c05-414f-b114-4832-578e77d937ab",
                "name": "Movies",
                "tags": [
                    "Justas Galaburda2",
                    "Brave",
                    "Macbeth",
                    "Captain America",
                    "The Dead",
                    "Ant-Man",
                    "Missing Tags"
                ],
                "color": "red"
            },
            {
                "id": "1293781293891211321",
                "name": "Style",
                "tags": [
                    "Industry",
                    "Loft",
                    "Flat",
                    "Banner"
                ]
            },
            {
                "id": "129378129389128391",
                "name": "Designer",
                "tags": [
                    "Tadao Ando"
                ]
            },
            {
                "id": "02b1fcc3-c337-899d-ddec-c2aa88a0e518",
                "name": "Color",
                "tags": [
                    "Black",
                    "Yellow",
                    "Orange",
                    "Violet",
                    "Blue",
                    "Green"
                ]
            }
        ],
        "modificationTime": 1592461625783,
        "applicationVersion": "1.11.0"
    }
}
```


# /api/library/history

**`GET`** Get the list of libraries recently opened by the Application.&#x20;

**Sample Code:**

```javascript
var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("http://localhost:41595/api/library/history", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success",
    "data": [
        "/Users/augus/Google Drive/Design fields.library",
        "/Users/augus/Google Drive/Office Style.library",
        "/Users/augus/Google Drive/Design Assets.library"
    ]
}
```


# /api/library/switch

**`POST`** Switch the library currently opened by Eagle.

| Parameter   | Description             |
| ----------- | ----------------------- |
| libraryPath | The path of the library |

**Sample Code:**

```javascript
var data = {
    "libraryPath": "/Users/augus/Pictures/Design.library"
};

var requestOptions = {
  method: 'POST',
  body: JSON.stringify(data),
  redirect: 'follow'
};

fetch("http://localhost:41595/api/library/switch", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

**Results Returned:**

```javascript
{
    "status": "success"
}
```


# /api/library/icon

**`GET`** Obtain the icon of the specified Library.

| Parameter   | Description             |
| ----------- | ----------------------- |
| libraryPath | The path of the library |

**Sample Code:**

{% code overflow="wrap" %}

```javascript
const libraryPath = encodeURIComponent("/Users/augus/Pictures/Design.library");
const image = `http://localhost:41595/api/library/icon?libraryPath=${libraryPath}`;
```

{% endcode %}


# Using Eagle API with Tampermonkey

### Sample: Developing a batch import plugin for Pinterest with Tampermonkey Script and Eagle API

**CORS related issue**

If you want to use Eagle API in webpages via script extensions like 'Tampermonkey', please call through `GM_xmlhttprequest` to circumvent security policies related to Cross-Origin Resource Sharing.

```javascript
GM_xmlhttpRequest({
    url: EAGLE_IMPORT_API_URL,
    method: "POST",
    data: JSON.stringify({ items: images, folderId: pageInfo.folderId }),
    onload: function(response) {}
});
```

**Full Code:**

```javascript
// ==UserScript==
// @name                Save Pinterest images to Eagle

// @description         Launch a script on Pinterest that automatically scrolls the page and converts all images on the page into large images (with links, names) to be added to the Eagle App.

// @author              Augus
// @namespace           https://eagle.cool/
// @homepageURL         https://eagle.cool/
// @license             MIT License

// @match               https://www.pinterest.com/*
// @grant               GM_xmlhttpRequest
// @run-at              context-menu

// @date                06/16/2020
// @modified            06/16/2020
// @version             0.0.3

// ==/UserScript==


(function() {

    if (location.href.indexOf("pinterest.com") === -1) {
        alert("This script only works on pinterest.com.");
        return;
    }

    // Eagle API URL
    const EAGLE_SERVER_URL = "http://localhost:41595";
    const EAGLE_IMPORT_API_URL = `${EAGLE_SERVER_URL}/api/item/addFromURLs`;
    const EAGLE_CREATE_FOLDER_API_URL = `${EAGLE_SERVER_URL}/api/folder/create`;

    // Pinterest Rules
    const SELECTOR_IMAGE = "[data-grid-item] a img[srcset]";
    const SELECTOR_LINK = "[data-grid-item] a";
    const SELECTOR_SPINNER = `[aria-label="Board Pins grid"]`;

    var startTime = Date.now();     
    var scrollInterval;             
    var lastScrollPos;              
    var retryCount = 0;             
    var scrollDelay = 500;          
    var retryThreshold = 4;         
    var pageInfo = {
        imageCount: 0,
        imageSet: {},
        folderId: ""
    };

    // Create a folder
    var createFolder = function(folderName, callback) {
        GM_xmlhttpRequest({
            url: EAGLE_CREATE_FOLDER_API_URL,
            method: "POST",
            data: JSON.stringify({ folderName: folderName }),
            onload: function(response) {
                try {
                    var result = JSON.parse(response.response);
                    if (result.status === "success" && result.data && result.data.id) {
                        callback(undefined, result.data);
                    } else {
                        callback(true);
                    }
                } catch (err) {
                    callback(true);
                }
            }
        });
    };

    var scarollToTop = function() {
        window.scrollTo(0, 0);
        lastScrollPos = window.scrollY;
    };

    var scarollToBottom = function() {
        window.scrollTo(0, document.body.scrollHeight);
        lastScrollPos = window.scrollY;
    };

    var getImgs = function() {
        var imgs = [];
        var imgElements = Array.from(document.querySelectorAll(SELECTOR_IMAGE));

        imgElements = imgElements.filter(function(elem) {
            var src = elem.src;
            if (!pageInfo.imageSet[src]) {
                pageInfo.imageSet[src] = true;
                return true;
            }
            return false;
        });

        var getLink = function(img) {
            var links = Array.from(document.querySelectorAll(SELECTOR_LINK));
            for (var i = 0; i < links.length; i++) {
                if (links[i].contains(img)) {
                    return absolutePath(links[i].href);
                }
            }
            return "";
        };

        imgs = imgElements.map(function(elem, index) {
            pageInfo.imageCount++;
            return {
                name: elem.alt || "",
                url: getHighestResImg(elem) || elem.src, 
                website: getLink(elem), 
                modificationTime: startTime - pageInfo.imageCount
            }
        });

        return imgs;
    };

    var fetchImages = function() {
        var currentScrollPos = window.scrollY;
        scarollToBottom();
        
        if (lastScrollPos === currentScrollPos) {
            if (!document.querySelector(SELECTOR_SPINNER)) {
                retryCount++;
                if (retryCount >= retryThreshold) {
                    clearInterval(scrollInterval);
                    alert(`Scan completed, a total of ${pageInfo.imageCount} images have been added to Eagle App.`);
                }
            }
        }
        else {
            retryCount = 0;
            var images = getImgs();
            addImagesToEagle(images);
        }
    }

    var addImagesToEagle = function(images) {
        GM_xmlhttpRequest({
            url: EAGLE_IMPORT_API_URL,
            method: "POST",
            data: JSON.stringify({ items: images, folderId: pageInfo.folderId }),
            onload: function(response) {}
        });
    }

    function absolutePath(href) {
        if (href && href.indexOf(" ") > -1) {
            href = href.trim().split(" ")[0];
        }
        var link = document.createElement("a");
        link.href = href;
        return link.href;
    }

    function getHighestResImg(element) {
        if (element.getAttribute('srcset')) {
            let highResImgUrl = '';
            let maxRes = 0;
            let imgWidth, urlWidthArr;
            element.getAttribute('srcset').split(',').forEach((item) => {
                urlWidthArr = item.trim().split(' ');
                imgWidth = parseInt(urlWidthArr[1]);
                if (imgWidth > maxRes) {
                    maxRes = imgWidth;
                    highResImgUrl = urlWidthArr[0];
                }

            });
            return highResImgUrl;
        } else {
            return element.getAttribute('src');
        }
    }

    scarollToTop();

    var folderName = document.querySelector("h1") && document.querySelector("h1").innerText || "Pinterest";
    createFolder(folderName, function(err, folder) {
        if (folder) {
            pageInfo.folderId = folder.id;
            scrollInterval = setInterval(fetchImages, 1000);
        } else {
            alert("An error has occurred or the Eagle app is not open.");
        }
    });

})();
```


# Changelog

**Client version 3.0 Build23（2022-11-01）**

Adjusted /api/item/list, support `offset` parameter.

**Client version 2.0 Build40（2021-11-30）**

Added /api/item/moveToTrash

**Client version 2.0 Build28（2021-07-29）**

* Adjusted /api/folder/create, support create sub-folder.

**Client version 1.11 Build35（2020-09-07）**

* Added /api/item/addBookmark
* Adjusted /api/item/addFromPath and /api/item/addFromPaths, settings for more properties available.
* Adjusted /api/item/addFromURL, settings for  `headers` property of the item available.
* Adjusted /api/item/addFromURLs，settings for  `headers` property of the item available.

**Client version 1.11 Build25（2020-07-01）**

* Adjusted /api/item/addFromURL，settings for `annotation` property of the item available.
* Adjusted /api/item/addFromURLs，settings for `annotation` property of the item available.

**Client version 1.11 Build23（2020-06-24）**

* Added /api/item/update
* Added /api/item/updateThumbnail
* Added /api/item/updatePalette
* Added /api/item/list

**Client version 1.11 Build21（2020-06-17）**

* Added /api/application/info
* Added /api/library/info
* Added /api/library/history
* Added /api/library/switch
* Added /api/folder/create
* Added /api/folder/rename
* Added /api/folder/list
* Added /api/folder/listRecent
* Added /api/item/info
* Added /api/item/thumbnail
* Added /api/item/addFromPath
* Added /api/item/addFromPaths
* Added /api/item/addFromURL
* Added /api/item/addFromURLs


