Web API

最后更新于:2022-04-01 02:23:39

# Web API - [Seafile Web API V2](#) - [API Basics](#) - [Status Code](#) - [Quick Start](#) - [Account](#) - [List Accounts(Admin only)](#) - [Get Account Info(Admin only)](#) - [Create Account(Admin only)](#) - [Update Account(Admin only)](#) - [Delete Account(Admin only)](#) - [Check Account Info](#) - [Get Server Information](#) - [Starred Files](#) - [List starred files](#) - [Star A File](#) - [Unstar A File](#) - [User Messages](#) - [List User Messages](#) - [Reply A User Message](#) - [Count Unseen Messages](#) - [Group](#) - [List Groups](#) - [Add A Group](#) - [Delete Group](#) - [Rename Group](#) - [Group Member](#) - [Add A Group Member](#) - [Delete A Group Member](#) - [Group Message](#) - [Get Group Messages](#) - [Get Group Message Detail](#) - [Send A Group Message](#) - [Reply A Group Message](#) - [Get Group Message Replies](#) - [Share](#) - [File Share Link](#) - [List File Share Links](#) - [Create File Share Link](#) - [Delete File Share Link](#) - [List Direntry in Dir Download Link](#) - [Shared Libraries](#) - [List Shared Libraries](#) - [List Be Shared Libraries](#) - [Share A Library](#) - [Unshare A Library](#) - [Shared Files](#) - [List Shared Files](#) - [Download Shared File](#) - [Get Shared File Detail](#) - [Delete Shared File](#) - [Download Private Shared File](#) - [Get Private Shared File Detail](#) - [Library](#) - [Library](#) - [Get Default Library](#) - [Create Default Library](#) - [List Libraries](#) - [Get Library Info](#) - [Get Library Owner](#) - [Get Library History](#) - [Create Library](#) - [Check/Create Sub Library](#) - [Delete Library](#) - [Decrypt Library](#) - [Create Public Library](#) - [Remove Public Library](#) - [Fetch library download info](#) - [List Virtual Libraries](#) - [Search Libraries](#) - [File](#) - [Download File](#) - [Get File Detail](#) - [Get File History](#) - [Download File From a Revision](#) - [Create File](#) - [Rename File](#) - [Lock File](#) - [Unlock File](#) - [Move File](#) - [Copy File](#) - [Revert File](#) - [Delete File](#) - [Upload File](#) - [Get Upload Link](#) - [Upload File](#) - [Update file](#) - [Get Update Link](#) - [Update File](#) - [Get Upload Blocks Link](#) - [Get Update Blocks Link](#) - [Directory](#) - [List Directory Entries](#) - [Create New Directory](#) - [Rename Directory](#) - [Delete Directory](#) - [Download Directory](#) - [Share Directory](#) - [Batch Delete](#) - [Get Avatar](#) - [Get User Avatar](#) - [Get Group Avatar](#) - [Get Thumbnail](#) - [Get Thumbnail Image](#) - [List Group And Contacts](#) - [Get File Activities](#) - [Add Organization](#) # Seafile Web API V2 ### API Basics All API calls must be authenticated with a valid Seafile API key. ~~~ curl -H 'Authorization: Token 24fd3c026886e3121b2ca630805ed425c272cb96' https://cloud.seafile.com/api2/auth/ping/ ~~~ The api key can be retrieved by the obtain auth api. See the [Quick Start](#) for details. For each API, we provide `curl` examples to illustrate the usage. ### Status Code - 200: OK - 201: CREATED - 202: ACCEPTED - 301: MOVED_PERMANENTLY - 400: BAD_REQUEST - 403: FORBIDDEN - 404: NOT_FOUND - 409: CONFLICT - 429: TOO_MANY_REQUESTS - 440: REPO_PASSWD_REQUIRED - 441: REPO_PASSWD_MAGIC_REQUIRED - 500: INTERNAL_SERVER_ERROR - 520: OPERATION_FAILED ### Quick Start **ping** ~~~ curl https://cloud.seafile.com/api2/ping/ "pong" ~~~ **obtain auth token** ~~~ curl -d "username=username@example.com&password=123456" https://cloud.seafile.com/api2/auth-token/ {"token": "24fd3c026886e3121b2ca630805ed425c272cb96"} ~~~ **auth ping** ~~~ curl -H 'Authorization: Token 24fd3c026886e3121b2ca630805ed425c272cb96' https://cloud.seafile.com/api2/auth/ping/ "pong" ~~~ ### Account ### List Accounts **GET**[https://cloud.seafile.com/api2/accounts/](https://cloud.seafile.com/api2/accounts/) **Request parameters** - start (default to 0) - limit (default to 100) - scope (default None, accepted values: 'LDAP' or 'DB') To retrieve all users, just set both `start` and `limit` to `-1`. If scope parameter is passed then accounts will be searched inside the specific scope, otherwise it will be used the old approach: first LDAP and, if no account is found, DB. **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/accounts/ ~~~ **Sample response** ~~~ [ { "email": "foo@foo.com" }, { "email": "bar@bar.com" } ] ~~~ **Errors** - 403 Permission error, only administrator can perform this action ### Get Account Info **GET**[https://cloud.seafile.com/api2/accounts/{email}/](https://cloud.seafile.com/api2/accounts/{email}/) **Request parameters** **Sample request** ~~~ curl -v -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/accounts/user@mail.com/ ~~~ **Sample response** ~~~ { "is_staff": false, "is_active": true, "id": 2, "create_time": 1356061187741686, "usage": 651463187, "total": 107374182400, "email": "user@mail.com" } ~~~ **Errors** - 403 Permission error, only administrator can perform this action ### Check Account Info **GET**[https://cloud.seafile.com/api2/account/info/](https://cloud.seafile.com/api2/account/info/) **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/account/info/ ~~~ **Sample response** ~~~ { "usage": 26038531, "total": 104857600, "email": "user@example.com" } ~~~ **Errors** - 403 Invalid token ### Create Account **PUT**[https://cloud.seafile.com/api2/accounts/{email}/](https://cloud.seafile.com/api2/accounts/{email}/) **Request parameters** - password - is_staff (defaults to False) - is_active (defaults to True) **Sample request** ~~~ curl -v -X PUT -d "password=123456" -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/accounts/newaccount@gmail.com/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 201 CREATED < Location: https://cloud.seafile.com/api2/accounts/newaccount@gmail.com/ ... "success" ~~~ **Success** ~~~ Response code 201(Created) is returned and the Location header provides shared link. ~~~ **Errors** - 403 Permission error, only administrator can perform this action ### Update Account **PUT**[https://cloud.seafile.com/api2/accounts/{email}/](https://cloud.seafile.com/api2/accounts/{email}/) **Request parameters** At least one of followings: - password - is_staff - is_active - name - note - storage **Sample request** ~~~ curl -v -X PUT -d "password=654321&is_staff=true&storage=1073741824" -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/accounts/user@mail.com/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... "success" ~~~ **Success** ~~~ Response code 200(OK) is returned. ~~~ **Errors** - 400 Bad Request, keyword password is required - 403 Permission error, only administrator can perform this action ### Delete Account **DELETE**[https://cloud.seafile.com/api2/accounts/{email}/](https://cloud.seafile.com/api2/accounts/{email}/) **Sample request** ~~~ curl -v -X DELETE -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/accounts/newaccount@gmail.com/ ~~~ **Sample response** ~~~ "success" ~~~ **Errors** - 403 Permission error, only administrator can perform this action ### Get Server Information **GET**[https://cloud.seafile.com/api2/server-info](https://cloud.seafile.com/api2/server-info) *Note*: - No authentication required. - Added in seafile community edition server `4.0.5` or pro edition server `4.0.3` **Sample request** ~~~ curl https://cloud.seafile.com/api2/server-info/ ~~~ **Sample response** Sample response from a seafile community edition server: ~~~ { "version": "4.0.6", "features": [ "seafile-basic", ] } ~~~ Sample response from a seafile pro edition server: ~~~ { "version": "4.0.6", "features": [ "seafile-basic", "seafile-pro", "office-preview", "file-search" ] } ~~~ ### Starred Files ### List starred files **GET**[https://cloud.seafile.com/api2/starredfiles/](https://cloud.seafile.com/api2/starredfiles/) **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e6199b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/starredfiles/ ~~~ **Sample response** ~~~ [ { "repo": "99b758e6-91ab-4265-b705-925367374cf0", "mtime": 1355198150, "org": -1, "path": "/foo/bar.doc", "dir": false, "size": 0 }, { "repo": "99b758e6-91ab-4265-b705-925367374cf0", "mtime": 1353751237, "org": -1, "path": "/add_folder-blue.png", "dir": false, "size": 3170 } ] ~~~ ### Star A File **POST**[https://cloud.seafile.com/api2/starredfiles/](https://cloud.seafile.com/api2/starredfiles/) **Request parameters** - repo_id (post) - p (post) **Sample request** ~~~ curl -v -d "repo_id=dae8cecc-2359-4d33-aa42-01b7846c4b32&p=/foo.md" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/starredfiles/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 201 CREATED < Location: https://cloud.seafile.com/api2/starredfiles/ ... "success" ~~~ **Success** Response code is 201(Created) and Location header provides url of starred file list. **Errors** - 400 `repo_id` or `p` is missing, or `p` is not valid file path(e.g. /foo/bar/). ### Unstar A File **DELETE**[https://cloud.seafile.com/api2/starredfiles/](https://cloud.seafile.com/api2/starredfiles/) **Request parameters** - repo_id - p **Sample request** ~~~ curl -X DELETE -v -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' 'https://cloud.seafile.com/api2/starredfiles/?repo_id=dae8cecc-2359-4d33-aa42-01b7846c4b32&p=/foo.md' ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... "success" ~~~ **Success** Response code is 200(OK), and a string named "success" is returned. **Errors** - 400 `repo_id` or `p` is missing, or `p` is not valid file path(e.g. /foo/bar/). ### User Messages ### List User Messages **GET**[https://cloud.seafile.com/api2/user/msgs/{id_or_email}/](https://cloud.seafile.com/api2/user/msgs/{id_or_email}/) **Request parameters** - id_or_email **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/user/msgs/2/" ~~~ **Sample response** ~~~ { "to_email": "user@example.com", "next_page": -1, "msgs": [ { "attachments": [ { "path": "/123.md", "repo_id": "c7436518-5f46-4296-97db-2fcba4c8c8db" } ], "timestamp": 1398233096, "from_email": "user@example.com", "msgid": 3, "msg": "another test msg", "nickname": "user" }, { "attachments": [], "timestamp": 1398233067, "from_email": "user@example.com", "msgid": 2, "msg": "a test msg", "nickname": "user" } ] } ~~~ **Errors** - 404 user not found ### Reply A User Message **POST**[https://cloud.seafile.com/api2/user/msgs/{id_or_email}/](https://cloud.seafile.com/api2/user/msgs/{id_or_email}/) **Request parameters** - id_or_email - message **Sample request** ~~~ curl -d "message=this is a user msg reply" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/user/msgs/2/" ~~~ **Sample response** ~~~ { "msgid": 4 } ~~~ **Errors** - 404 user not found ### Count Unseen Messages **GET**[https://cloud.seafile.com/api2/unseen_messages/](https://cloud.seafile.com/api2/unseen_messages/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/unseen_messages/" ~~~ **Sample response** ~~~ { "count": 1 } ~~~ ### Group ### List Groups **GET**[https://cloud.seafile.com/api2/groups/](https://cloud.seafile.com/api2/groups/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/groups/" ~~~ **Sample response** ~~~ { "replynum": 0, "groups": [ { "ctime": 1398134171327948, "creator": "user@example.com", "msgnum": 0, "mtime": 1398231100, "id": 1, "name": "lian" }, { "ctime": 1398236081042441, "creator": "user@example.com", "msgnum": 0, "mtime": 0, "id": 2, "name": "123" } ] } ~~~ ### Add A Group **PUT**[https://cloud.seafile.com/api2/groups/](https://cloud.seafile.com/api2/groups/) **Request parameters** - group_name **Sample request** ~~~ curl -X PUT -d "group_name=newgroup" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/groups/" ~~~ **Sample response** ~~~ {"group_id": 3, "success": true} ~~~ **Errors** - 400 There is already a group with that name. ### Delete Group **DELETE**[https://cloud.seafile.com/api2/groups/{group_id}/](https://cloud.seafile.com/api2/groups/{group_id}/) **Request parameters** None **Sample request** ~~~ curl -X DELETE -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/groups/1/" ~~~ **Success** 200 if everything is fine. **Errors** - 400 if ad group id format - 404 if Group not found - 403 if Forbid to delete group - 520 if Failed to remove group (generic error) ### Rename Group **POST**[https://cloud.seafile.com/api2/groups/{group_id}/](https://cloud.seafile.com/api2/groups/{group_id}/) **Request parameters** - operation (value must be 'rename') - newname (the new name for the group) **Sample request** ~~~ curl -d "operation=rename&newname=pinkfloyd_lovers" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/groups/1/" ~~~ **Success** 200 if everything is fine. **Errors** - 404 if Group not found - 403 if Forbid to rename group - 400 if Newname is missing or if Group name is not valid of if There is already a group with that name or Operation can only be rename. ### Group Member #### Add A Group Member **PUT**[https://cloud.seafile.com/api2/groups/{group_id}/members/](https://cloud.seafile.com/api2/groups/{group_id}/members/) **Request parameters** - user_name **Sample request** ~~~ curl -X PUT -d "user_name=user@example.com"-H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/groups/1/members/" ~~~ **Sample response** ~~~ {"success": true} ~~~ **Errors** - 400 invalid group id - 403 only administrators can add group members - 404 unable to find group #### Delete A Group Member **DELETE**[https://cloud.seafile.com/api2/groups/{group_id}/members/](https://cloud.seafile.com/api2/groups/{group_id}/members/) **Request parameters** - user_name **Sample request** ~~~ curl -X DELETE -d "user_name=user@example.com" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/groups/1/members/" ~~~ **Sample response** ~~~ {"success": true} ~~~ **Errors** - 400 invalid group id - 403 only administrators can remove group members - 404 unable to find group ### Group Message #### Get Group Messages **GET**[https://cloud.seafile.com/api2/group/msgs/{group_id}/](https://cloud.seafile.com/api2/group/msgs/{group_id}/) **Request parameters** - group_id **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/group/msgs/1/" ~~~ **Sample response** ~~~ { "next_page": -1, "msgs": [ { "reply_cnt": 0, "timestamp": 1398230602, "replies": [], "from_email": "user@example.com", "msgid": 1, "msg": "test discuss", "nickname": "user" } ] } ~~~ #### Get Group Message Detail **GET**[https://cloud.seafile.com/api2/group/{group_id}/msg/{msg_id}/](https://cloud.seafile.com/api2/group/{group_id}/msg/{msg_id}/) **Request parameters** - group_id - msg_id **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/group/1/msg/1/" ~~~ **Sample response** ~~~ { "reply_cnt": 2, "timestamp": 1398230602, "replies": [ { "msg": "this is another test", "timestamp": 1398232319, "nickname": "user", "msgid": 1, "from_email": "user@example.com" }, { "msg": "this is another test", "timestamp": 1398232508, "nickname": "user", "msgid": 3, "from_email": "user@example.com" } ], "from_email": "user@example.com", "msgid": 1, "msg": "test discuss", "nickname": "user" } ~~~ **Errors** - 404 message not found #### Send A Group Message **POST**[https://cloud.seafile.com/api2/group/msgs/{group_id}/](https://cloud.seafile.com/api2/group/msgs/{group_id}/) **Request parameters** - message - group_id - repo_id(optional) - path(optional) **Sample request** ~~~ curl -d "message=this is another test&repo_id=c7436518-5f46-4296-97db-2fcba4c8c8db&path=/123.md" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/group/msgs/1/" ~~~ **Sample response** ~~~ { "msgid": 3 } ~~~ #### Reply A Group Message **POST**[https://cloud.seafile.com/api2/group/{group_id}/msg/{msg_id}](https://cloud.seafile.com/api2/group/{group_id}/msg/{msg_id}) **Request parameters** - group_id - msg_id - message **Sample request** ~~~ curl -d "message=this is a reply" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/group/1/msg/1/" ~~~ **Sample response** ~~~ { "msgid": 3 } ~~~ **Errors** - 404 message not found #### Get Group Message Replies **GET**[https://cloud.seafile.com/api2/new_replies/](https://cloud.seafile.com/api2/new_replies/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/new_replies/" ~~~ **Sample response** ~~~ [ { "reply_cnt": 1, "timestamp": 1398231100, "replies": [ { "msg": "@user test reply", "timestamp": 1398234493, "nickname": "123", "msgid": 5, "from_email": "user@example.com" } ], "from_email": "user@example.com", "att": { "repo": "c7436518-5f46-4296-97db-2fcba4c8c8db", "path": "/123.md", "type": "file", "src": "recommend" }, "msgid": 3, "msg": "this is another test", "nickname": "user" } ] ~~~ ### Share ### File Share Link #### List File Share Links **GET**[https://cloud.seafile.com/api2/shared-links/](https://cloud.seafile.com/api2/shared-links/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/shared-links/" ~~~ **Sample response** ~~~ {"fileshares": [{"username": "user@example.com", "repo_id": "a582d3bc-bcf5-421e-9125-741fa56d18d4", "ctime": null, "s_type": "d", "token": "e410827494", "view_cnt": 0, "path": "/123/"}, {"username": "user@example.com", "repo_id": "affc837f-7fdd-4e91-b88a-32caf99897f2", "ctime": null, "s_type": "f", "token": "0ae587a7d1", "view_cnt": 0, "path": "/lian123.md"}]} ~~~ #### Create File Share Link **PUT**[https://cloud.seafile.com/api2/repos/{repo-id}/file/shared-link/](https://cloud.seafile.com/api2/repos/{repo-id}/file/shared-link/) **Request parameters** - repo-id - p (Path to the file) - share_type (optional, `download` or `upload`, default `download`) - password (optional) - expire (optional) **Sample request** Create download link for file ~~~ curl -v -X PUT -d "p=/foo.md" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/afc3b694-7d4c-4b8a-86a4-89c9f3261b12/file/shared-link/ ~~~ Create download link for directory with password and expire date ~~~ curl -v -X PUT -d "password=password&expire=6&p=/123/" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/afc3b694-7d4c-4b8a-86a4-89c9f3261b12/file/shared-link/ ~~~ Create upload link for directory ~~~ curl -v -X PUT -d "share_type=upload&p=/123/" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/afc3b694-7d4c-4b8a-86a4-89c9f3261b12/file/shared-link/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 201 CREATED < Location: https://cloud.seafile.com/f/9b437a7e55/ ... ~~~ **Success** ~~~ Response code 201(Created) is returned and the Location header provides shared link. ~~~ **Errors** - 400 Path is missing - 400 Password(if link is encrypted) is missing - 500 Internal server error #### Delete File Share Link **DELETE**[https://cloud.seafile.com/api2/shared-links/?t=0ae587a7d1](https://cloud.seafile.com/api2/shared-links/?t=0ae587a7d1) **Request parameters** - t **Sample request** ~~~ curl -v -X DELETE -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/shared-links/?t=0ae587a7d1" ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... ~~~ #### List Direntry in Dir Download Link **GET**[https://cloud.seafile.com/api2/d/{token}/dir/](https://cloud.seafile.com/api2/d/{token}/dir/) **Request parameters** - token (upload link token) - p (sub folder path) - password (if link is encrypted) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/d/3af7c46595/dir/?p=/subfolder/" ~~~ **Sample response** ~~~ [{"mtime": 1436846750, "type": "dir", "name": "sadof", "id": "1806dbdb700b7bcd49e6275107c7ccf7b3ea1776"}, {"id": "bdb06f6de972c42893fda590ac954988b562429c", "mtime": 1436431020, "type": "file", "name": "test.mdert", "size": 20}] ~~~ ### Shared Libraries #### List Shared Libraries **GET**[https://cloud.seafile.com/api2/shared-repos/](https://cloud.seafile.com/api2/shared-repos/) **Sample request** ~~~ curl -v -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/shared-repos/ ~~~ **Sample response** ~~~ [{"repo_id": "7d42522b-1f6f-465d-b9c9-879f8eed7c6c", "share_type": "personal", "permission": "rw", "encrypted": false, "user": "user@example.com", "last_modified": 1361072500, "repo_desc": "ff", "group_id": 0, "repo_name": "\u6d4b\u8bd5\u4e2d\u6587pdf"}, {"repo_id": "79bb29cd-b683-4844-abaf-433952723ca5", "share_type": "group", "permission": "rw", "encrypted": false, "user": "user@example.com", "last_modified": 1359182468, "repo_desc": "test", "group_id": 1, "repo_name": "test_enc"}] ~~~ #### List Be Shared Libraries **GET**[https://cloud.seafile.com/api2/beshared-repos/](https://cloud.seafile.com/api2/beshared-repos/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/beshared-repos/" ~~~ **Sample response** ~~~ "[{"user": "user@example.com", "repo_id": "989e3952-9d6f-4427-ab16-4bf9b53212eb", "share_type": "personal", "permission": "rw", "encrypted": false, "repo_desc": "lib shared to imwhatiam", "enc_version": false, "last_modified": 1398218747, "is_virtual": false, "group_id": 0, "repo_name": "lib shared to imwhatiam"}]" ~~~ #### Share A Library **PUT**[https://cloud.seafile.com/api2/shared-repos/{repo-id}/](https://cloud.seafile.com/api2/shared-repos/{repo-id}/) **Request parameters** - share_type ('personal', 'group' or 'public') - user (or users) - group_id - permission If share_type is 'personal' then 'user' or 'users' param are required, if share_type is 'group' then 'group_id' parameter is required. If share_type is 'public' no other params is required. 'user' or 'users' parameters can be a comma separated list of emails, in this case the share will be done for more users at the same time. If a problem is encountered during multiple users sharing then the sharing process is aborted. **Sample request** ~~~ curl -X PUT -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/shared-repos/7d42522b-1f6f-465d-b9c9-879f8eed7c6c/?share_type=group&user=user@example.com&group_id=1&permission=rw" ~~~ **Sample response** ~~~ "success" ~~~ #### Unshare A Library **DELETE**[https://cloud.seafile.com/api2/shared-repos/{repo-id}/](https://cloud.seafile.com/api2/shared-repos/{repo-id}/) **Request parameters** - share_type ('personal', 'group' or 'public') - user - group_id If share_type is 'personal' then 'user' param is required, if share_type is 'group' then 'group_id' parameter is required. If share_type is 'public' no other params is required. **Sample request** ~~~ curl -X DELETE -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/shared-repos/7d42522b-1f6f-465d-b9c9-879f8eed7c6c/?share_type=personal&user=user@example.com&group_id=0" ~~~ **Sample response** ~~~ "success" ~~~ ### Shared Files #### List Shared Files **GET**[https://cloud.seafile.com/api2/shared-files/](https://cloud.seafile.com/api2/shared-files/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/shared-files/" ~~~ **Sample response** ~~~ {"priv_share_in": [{"s_type": "f", "repo_id": "989e3952-9d6f-4427-ab16-4bf9b53212eb", "permission": "r", "to_user": "user@example.com", "token": "94aace406a", "from_user": "user@example.com", "path": "/lib.md"}], "priv_share_out": [{"s_type": "f", "repo_id": "affc837f-7fdd-4e91-b88a-32caf99897f2", "permission": "r", "to_user": "user@example.com", "token": "b7b31bc39b", "from_user": "user@example.com", "path": "/lian123.md"}]} ~~~ #### Download Shared File **GET**[https://cloud.seafile.com/api2/f/{token}/](https://cloud.seafile.com/api2/f/{token}/) **Request parameters** - token(file share token) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/f/ad93cd0d66/" ~~~ **Sample response** ~~~ "http://192.168.1.101:8082/files/89223601/lib.md" ~~~ **Errors** - 404 repo/token/file not found - 520 OPERATION FAILED, fail to get file id by path #### Get Shared File Detail **GET**[https://cloud.seafile.com/api2/f/{token}/detail/](https://cloud.seafile.com/api2/f/{token}/detail/) **Request parameters** - token(file share token) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/f/ad93cd0d66/detail/" ~~~ **Sample response** ~~~ {"repo_id": "989e3952-9d6f-4427-ab16-4bf9b53212eb", "name": "lib.md", "mtime": 1398218747, "path": "/lib.md", "type": "file", "id": "0000000000000000000000000000000000000000", "size": 0} ~~~ **Errors** - 404 repo/token/file not found - 520 OPERATION FAILED, fail to get file id by path #### Delete Shared File **DELETE**[https://cloud.seafile.com/api2/shared-files/?t=0ae587a7d1](https://cloud.seafile.com/api2/shared-files/?t=0ae587a7d1) **Request parameters** - t **Sample request** ~~~ curl -v -X DELETE -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/shared-files/?t=94aace406a" ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... ~~~ #### Download Private Shared File **GET**[https://cloud.seafile.com/api2/s/f/{token}/](https://cloud.seafile.com/api2/s/f/{token}/) **Request parameters** - token(private file share token) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/s/f/c5aa5f0219/" ~~~ **Sample response** ~~~ "http://192.168.1.101:8082/files/6960d5a4/lib.md" ~~~ **Errors** - 404 repo/token/file not found - 520 OPERATION FAILED, fail to get file id by path #### Get Private Shared File Detail **GET**[https://cloud.seafile.com/api2/s/f/{token}/detail/](https://cloud.seafile.com/api2/s/f/{token}/detail/) **Request parameters** - token(private file share token) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/s/f/c5aa5f0219/detail/" ~~~ **Sample response** ~~~ {"repo_id": "989e3952-9d6f-4427-ab16-4bf9b53212eb", "name": "lib.md", "shared_by": "user@example.com", "mtime": 1398218747, "path": "/lib.md", "type": "file", "id": "0000000000000000000000000000000000000000", "size": 0} ~~~ **Errors** - 404 repo/token/file not found - 520 OPERATION FAILED, fail to get file id by path ### Library ### Library #### Get Default Library **GET**[https://cloud.seafile.com/api2/default-repo/](https://cloud.seafile.com/api2/default-repo/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/default-repo/" ~~~ **Sample response** ~~~ { "repo_id": "691b3e24-d05e-43cd-a9f2-6f32bd6b800e", "exists": true } ~~~ #### Create Default Library **POST**[https://cloud.seafile.com/api2/default-repo/](https://cloud.seafile.com/api2/default-repo/) **Sample request** ~~~ curl -X POST -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/default-repo/" ~~~ **Sample response** ~~~ { "repo_id": "691b3e24-d05e-43cd-a9f2-6f32bd6b800e", "exists": true } ~~~ #### List Libraries **GET**[https://cloud.seafile.com/api2/repos/](https://cloud.seafile.com/api2/repos/) **Sample request** ~~~ curl -H 'Authorization: Token 24fd3c026886e3121b2ca630805ed425c272cb96' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/ ~~~ **Sample response** ~~~ [ { "permission": "rw", "encrypted": false, "mtime": 1400054900, "owner": "user@mail.com", "id": "f158d1dd-cc19-412c-b143-2ac83f352290", "size": 0, "name": "foo", "type": "repo", "virtual": false, "desc": "new library", "root": "0000000000000000000000000000000000000000" }, { "permission": "rw", "encrypted": false, "mtime": 1400054802, "owner": "user@mail.com", "id": "0536b11a-a5fd-4482-9314-728cb3472f54", "size": 0, "name": "foo", "type": "repo", "virtual": false, "desc": "new library", "root": "0000000000000000000000000000000000000000" } ] ~~~ #### Get Library Info **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/](https://cloud.seafile.com/api2/repos/{repo-id}/) **Request parameters** - repo-id **Sample request** ~~~ curl -G -H 'Authorization: Token 24fd3c026886e3121b2ca630805ed425c272cb96' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/632ab8a8-ecf9-4435-93bf-f495d5bfe975/ ~~~ **Sample response** ~~~ { "encrypted": false, "password_need": null, "mtime": null, "owner": "self", "id": "632ab8a8-ecf9-4435-93bf-f495d5bfe975", "size": 1356155, "name": "org", "root": "b5227040de360dd22c5717f9563628fe5510cbce", "desc": "org file", "type": "repo" } ~~~ #### Get Library Owner **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/owner/](https://cloud.seafile.com/api2/repos/{repo-id}/owner/) **Request parameters** - repo-id **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d9b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/owner/ ~~~ **Sample response** ~~~ { "owner": "user@example.com" } ~~~ **Errors** - 403 Permission error, only administrator can perform this action #### Get Library History **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/history/](https://cloud.seafile.com/api2/repos/{repo-id}/history/) **Request parameters** - repo-id **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d9b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/history/ ~~~ **Sample response** ~~~ {"commits": [{"rev_file_size": 0, "rev_file_id": null, "ctime": 1398045167, "creator_name": "imwhatiam123@gmail.com", "creator": "0000000000000000000000000000000000000000", "root_id": "ca2625da6be6e211ddd584615ef3bfaa531e66aa", "rev_renamed_old_path": null, "parent_id": "205c469f0830df09b13024601524058757a43128", "new_merge": false, "repo_id": "691b3e24-d05e-43cd-a9f2-6f32bd6b800e", "desc": "Modified \"api.md\"", "id": "eb62721812e0c3122889b5facde971b353ad176b", "conflict": false, "second_parent_id": null}, {"rev_file_size": 0, "rev_file_id": null, "ctime": 1398045158, "creator_name": "imwhatiam123@gmail.com", "creator": "0000000000000000000000000000000000000000", "root_id": "0b7a31adf4ea8b29ad5a5920420b548da11dd32f", "rev_renamed_old_path": null, "parent_id": "2ba85ee6072efea51a3483843ea7de9b6d1d1eb2", "new_merge": false, "repo_id": "691b3e24-d05e-43cd-a9f2-6f32bd6b800e", "desc": "Added \"api.md\"", "id": "205c469f0830df09b13024601524058757a43128", "conflict": false, "second_parent_id": null}], "page_next": false} ~~~ #### Create Library **POST**[https://cloud.seafile.com/api2/repos/](https://cloud.seafile.com/api2/repos/) **Request parameters** - name - desc (defaults to "new repo") - passwd (needed by encrypt library) **Sample request** ~~~ curl -v -d "name=foo&desc=new library" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/ ~~~ **Sample response** ~~~ { "encrypted": "", "enc_version": 0, "repo_id": "f15811fd-5c19-412c-b143-2ac83f352290", "magic": "", "relay_id": "c5e41170db250ea497075e2911104faf0105b7fb", "repo_version": 1, "relay_addr": "cloud.seafile.com", "token": "c1f3defe9ba408cd7964427ec276843e9d10c23b", "relay_port": "10001", "random_key": "", "email": "user@mail.com", "repo_name": "foo" } ~~~ **Success** Response code 200 and newly created library information are returned. **Errors** - 400 Library name missing. - 520 Operation failed. #### Check/Create Sub Library check if a dir has a corresponding sub_repo, if it does not have, create one **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/dir/sub_repo/?p=/\&name=sub_lib](https://cloud.seafile.com/api2/repos/{repo-id}/dir/sub_repo/?p=/\&name=sub_lib) **Request parameters** - repo-id - p - name **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d9b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/dir/sub_repo/?p=/\&name=sub_lib ~~~ **Sample response** ~~~ {"sub_repo_id": "c0a3283c-013c-4a7c-8f68-006f06fa6dec"} ~~~ **Errors** - 400 Argument missing - 500 INTERNAL SERVER ERROR #### Delete Library **DELETE**[https://cloud.seafile.com/api2/repos/{repo-id}/](https://cloud.seafile.com/api2/repos/{repo-id}/) **Sample request** ~~~ curl -v -X DELETE -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/8f5f2222-72a8-454f-ac40-8397c5a556a8/ ~~~ **Sample response** "success" **Errors** - 400 Library does not exist. - 403 Only library owner can perform this operation. #### Decrypt Library **POST**[https://cloud.seafile.com/api2/repos/{repo-id}/](https://cloud.seafile.com/api2/repos/{repo-id}/) **Request parameters** - password **Sample request** ~~~ curl -v -d "password=123" -H 'Authorization: Token e6a33d61954f219a96b60f635cf02717964e4385' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/0c2465a5-4753-4660-8a22-65abec9ec8d0/ ~~~ **Sample response** "success" **Errors** - 400 Incorrect password - 409 Repo is not encrypt - 500 Internal server error #### Create Public Library **POST**[https://cloud.seafile.com/api2/repos/{repo-id}/public/](https://cloud.seafile.com/api2/repos/{repo-id}/public/) **Request parameters** - repo-id **Sample request** ~~~ curl -X POST -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d9b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/public/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... ~~~ **Success** ~~~ Response code is 200(OK), and a string "success" is returned. ~~~ **Errors** - 404 Repo not found - 403 Forbid to access this repo - 500 INTERNAL SERVER ERROR, Unable to make repo public #### Remove Public Library **DELETE**[https://cloud.seafile.com/api2/repos/{repo-id}/public/](https://cloud.seafile.com/api2/repos/{repo-id}/public/) **Request parameters** - repo-id **Sample request** ~~~ curl -X DELETE -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d9b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/public/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... ~~~ **Success** ~~~ Response code is 200(OK), and a string "success" is returned. ~~~ **Errors** - 404 Repo not found - 403 Forbid to access this repo - 500 INTERNAL SERVER ERROR, Unable to remove public repo #### Fetch library download info **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/download-info/](https://cloud.seafile.com/api2/repos/{repo-id}/download-info/) **Request parameters** - repo-id **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d9b477fd' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/download-info/ ~~~ **Sample response** ~~~ { "applet_root": "https://localhost:13420", "relay_addr": "localhost", "token": "46acc4d9ca3d6a5c7102ef379f82ecc1edc629e1", "repo_id": "dae8cecc-2359-4d33-aa42-01b7846c4b32", "relay_port": "10002", "encrypted": "", "repo_name": "test", "relay_id": "8e4b13b49ca79f35732d9f44a0804940d985627c", "email": "user@example.com" } ~~~ #### List Virtual Libraries **GET**[https://cloud.seafile.com/api2/virtual-repos/](https://cloud.seafile.com/api2/virtual-repos/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/virtual-repos/" ~~~ **Sample response** ~~~ {"virtual-repos": [ {"virtual_perm": "rw", "store_id": null, "worktree_invalid": false, "encrypted": false, "origin_repo_name": "lian", "last_modify": 0, "no_local_history": false, "head_branch": null, "last_sync_time": 0, "id": "51344de8-456f-4dc7-ac08-718827994252", "size": 0, "share_permission": null, "worktree_changed": false, "worktree_checktime": 0, "origin_path": "/lian", "is_virtual": true, "origin_repo_id": "a582d3bc-bcf5-421e-9125-741fa56d18d4", "version": 1, "random_key": null, "is_original_owner": true, "shared_email": null, "enc_version": 0, "head_cmmt_id": "bc666fdc60d2352b9f6a0324ac64168d43724eed", "desc": null, "index_corrupted": false, "magic": null, "name": "lian", "worktree": null, "auto_sync": false, "relay_id": null}, {"virtual_perm": "rw", "store_id": null, "worktree_invalid": false, "encrypted": false, "origin_repo_name": "lian", "last_modify": 0, "no_local_history": false, "head_branch": null, "last_sync_time": 0, "id": "c0a3283c-013c-4a7c-8f68-006f06fa6dec", "size": 0, "share_permission": null, "worktree_changed": false, "worktree_checktime": 0, "origin_path": "/", "is_virtual": true, "origin_repo_id": "a582d3bc-bcf5-421e-9125-741fa56d18d4", "version": 1, "random_key": null, "is_original_owner": true, "shared_email": null, "enc_version": 0, "head_cmmt_id": "ff18229aadc9acc73ad481278d5b4c42b3353aa0", "desc": null, "index_corrupted": false, "magic": null, "name": "123", "worktree": null, "auto_sync": false, "relay_id": null} ] } ~~~ #### Search Libraries **GET**[https://cloud.seafile.com/api2/search/](https://cloud.seafile.com/api2/search/) **Request parameters** - q - per_page (optional) **Sample request** ~~~ curl -G -H 'Authorization: Token 24fd3c026886e3121b2ca630805ed425c272cb96' -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/search/?q=keyword ~~~ **Sample response** ~~~ { "has_more": false, "total": 3, "results": [ { "repo_id": "691b3e24-d05e-43cd-a9f2-6f32bd6b800e", "name": "api.md", "oid": "8ea78453bb474359cd9d8e2c4c4d8d9cbdcef0a2", "last_modified": 1398045167, "fullpath": "/api.md", "size": 18939 }, { "repo_id": "c5509062-9bca-4933-a7e0-c6da1d5f82be", "name": "home.md", "oid": "dda57aaffa5179829e064c7d0c142f47a8a65d3b", "last_modified": 1397096831, "fullpath": "/home.md", "size": 1954 }, { "repo_id": "c5509062-9bca-4933-a7e0-c6da1d5f82be", "name": "\u5e38\u89c1\u5b89\u88c5\u95ee\u9898.md", "oid": "8573f982eeb478b932a55ec13218f4f90a7c5a27", "last_modified": 1397188959, "fullpath": "/\u5e38\u89c1\u5b89\u88c5\u95ee\u9898.md", "size": 1050 } ] } ~~~ **Errors** - 404 Search not supported. - 400 Missing argument q. ### File #### Download File **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo](https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo) **Request parameters** - repo-id - p **Sample request** ~~~ curl -v -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/?p=/foo.c ~~~ **Sample response** ~~~ "https://cloud.seafile.com:8082/files/adee6094/foo.c" ~~~ **Errors** - 400 Path is missing - 404 File not found - 520 Operation failed. #### Get File Detail **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/file/detail/?p=/foo.c](https://cloud.seafile.com/api2/repos/{repo-id}/file/detail/?p=/foo.c) - repo-id - p **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd3606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/detail/?p=/foo.c ~~~ **Sample response** ~~~ { "id": "013d3d38fed38b3e8e26b21bb3463eab6831194f", "mtime": 1398148877, "type": "file", "name": "foo.py", "size": 22 } ~~~ **Errors** - 400 Path is missing - 520 Operation failed. #### Get File History **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/file/history/?p=/foo.c](https://cloud.seafile.com/api2/repos/{repo-id}/file/history/?p=/foo.c) **Request parameters** - repo-id - p **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd3606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/history/?p=/foo.c ~~~ **Sample response** ~~~ { "commits": [ { "rev_file_size": 0, "repo_id": "a582d3bc-bcf5-421e-9125-741fa56d18d4", "ctime": 1398149763, "creator_name": "user@example.com", "creator": "0000000000000000000000000000000000000000", "root_id": "b64d413d9894c9206beac3faf9c2a0d75b4a8ebf", "rev_renamed_old_path": null, "parent_id": "8e546762e1657ab22dad83e9cb1e5ea31a767c9a", "new_merge": false, "version": 1, "conflict": false, "desc": "Added \"foo.c\"", "id": "9464f7499bfa7363d563282361339eaf96a93318", "rev_file_id": "0000000000000000000000000000000000000000", "second_parent_id": null }, { "rev_file_size": 0, "repo_id": "a582d3bc-bcf5-421e-9125-741fa56d18d4", "ctime": 1398146059, "creator_name": "user@example.com", "creator": "0000000000000000000000000000000000000000", "root_id": "572413414257c76039897e00aeb35f819471206b", "rev_renamed_old_path": null, "parent_id": "f977bdb0ebb205645c3b42216c2817e511c3f68f", "new_merge": false, "version": 1, "conflict": false, "desc": "Added \"foo.c\"", "id": "a1ec20709675f4dc8db825cdbca296be245d189b", "rev_file_id": "0000000000000000000000000000000000000000", "second_parent_id": null } ] } ~~~ **Errors** - 400 Path is missing - 404 File not found #### Download File From a Revision **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/file/revision/?p=/foo.c&commit_id=a1ec20709675f4dc8db825cdbca296be245d189b](https://cloud.seafile.com/api2/repos/{repo-id}/file/revision/?p=/foo.c&commit_id=a1ec20709675f4dc8db825cdbca296be245d189b) **Request parameters** - repo-id - p - commit_id **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd3606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/revision/?p=/foo.c\&commit_id=a1ec20709675f4dc8db825cdbca296be245d189b ~~~ **Sample response** ~~~ "https://cloud.seafile.com:8082/files/adee6094/foo.c" ~~~ **Errors** - 400 Path is missing - 404 Revision not found #### Create File **POST**[https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo.c](https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo.c) **Request parameters** - repo-id - p - operation **Sample request** ~~~ curl -v -d "operation=create" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/?p=/foo.c ~~~ **Sample response** ~~~ ... < HTTP/1.1 201 CREATED ... "success" ~~~ **Success** Response code is 201, and a string `"success"` is returned. **Errors** - 403 FORBIDDEN, You do not have permission to move file - 520 OPERATION FAILED, fail to create file #### Rename File **POST**[https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo.c](https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo.c) **Request parameters** - repo-id - p - operation - newname **Sample request** ~~~ curl -v -d "operation=rename&newname=newfoo.c" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/?p=/foo.c ~~~ **Sample response** ~~~ ... < HTTP/1.1 301 MOVED PERMANENTLY ... "success" ~~~ **Success** Response code is 301, and a string `"success"` is returned. **Errors** - 400 BAD REQUEST, Path is missing or invalid(e.g. p=/) or newname is missing(newname too long) - 403 FORBIDDEN, You do not have permission to rename file - 404 NOT FOUND, repo not found - 409 CONFLICT, the newname is the same to the old - 520 OPERATION FAILED, fail to rename file #### Lock File **PUT**[https://cloud.seafile.com/api2/repos/{repo-id}/file/](https://cloud.seafile.com/api2/repos/{repo-id}/file/) **Request parameters** - repo-id - p - operation **Sample request** ~~~ curl -v -X PUT -d "operation=lock&p=/foo.c" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... "success" ~~~ **Success** Response code is 200, and a string `"success"` is returned. **Errors** - 400 BAD REQUEST, Path is missing or invalid(e.g. p=/) - 403 FORBIDDEN, You do not have permission to lock file - 404 NOT FOUND, repo not found - 520 OPERATION FAILED, fail to lock file #### Unlock File **PUT**[https://cloud.seafile.com/api2/repos/{repo-id}/file/](https://cloud.seafile.com/api2/repos/{repo-id}/file/) **Request parameters** - repo-id - p - operation **Sample request** ~~~ curl -v -X PUT -d "operation=unlock&p=/foo.c" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... "success" ~~~ **Success** Response code is 200, and a string `"success"` is returned. **Errors** - 400 BAD REQUEST, Path is missing or invalid(e.g. p=/) - 403 FORBIDDEN, You do not have permission to lock file - 404 NOT FOUND, repo not found - 520 OPERATION FAILED, fail to unlock file #### Move File **POST**[https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo.c](https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo.c) **Request parameters** - repo-id - p - operation - dst_repo - dst_dir **Sample request** ~~~ curl -v -d "operation=move&dst_repo=affc837f-7fdd-4e91-b88a-32caf99897f2&dst_dir=/" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/?p=/foo.c ~~~ **Sample response** ~~~ ... < HTTP/1.1 301 MOVED PERMANENTLY ... "success" ~~~ **Success** Response code is 301, and a string `"success"` is returned. **Errors** - 400 BAD REQUEST, Path is missing or invalid(e.g. p=/) - 403 FORBIDDEN, You do not have permission to move file - 404 NOT FOUND, repo not found - 500 INTERNAL SERVER ERROR #### Copy File **POST**[https://cloud.seafile.com/api2/repos/{repo_id}/fileops/copy/](https://cloud.seafile.com/api2/repos/{repo_id}/fileops/copy/) **Request parameters** - p: source folder path, defaults to `"/"` - file_names: list of file/folder names to copy. Multiple file/folder names can be seperated by `:`. - dst_repo: the destination repo id - dst_dir: the destination folder in `dst_repo` **Sample request** ~~~ curl -d "dst_repo=73ddb2b8-dda8-471b-b7a7-ca742b07483c&dst_dir=/&file_names=foo.c" -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/repos/c7436518-5f46-4296-97db-2fcba4c8c8db/fileops/copy/ ~~~ **Sample response** ~~~ "success" ~~~ **Errors** - 400 missing argument - 403 You do not have permission to copy file - 404 repo not found - 502 failed to copy file #### Revert File **PUT**[https://cloud.seafile.com/api2/repos/{repo_id}/file/revert/](https://cloud.seafile.com/api2/repos/{repo_id}/file/revert/) **Request parameters** - repo_id - p - commit_id **Sample request** ~~~ curl -v -X PUT -d "commit_id=a1ec20709675f4dc8db825cdbca296be245d189b&p=/foo.c" -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/8f5f2222-72a8-454f-ac40-8397c5a556a8/file/revert/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... {"ret": 0} ~~~ **Success** ~~~ Response code 200(OK) is returned. ~~~ **Errors** - 400 Path is missing #### Delete File **DELETE**[https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo](https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo) **Request parameters** - repo-id - p **Sample request** ~~~ curl -X DELETE -v -H 'Authorization: Token f2210dacd3606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/?p=/foo.c ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... "success" ~~~ **Errors** - 400 Path is missing - 520 Operation failed. **Note** This can also be used to delete directory. #### Upload File ##### Get Upload Link **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/upload-link/](https://cloud.seafile.com/api2/repos/{repo-id}/upload-link/) **Request parameters** - repo-id **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" https://cloud.seafile.com/api2/repos/99b758e6-91ab-4265-b705-925367374cf0/upload-link/ ~~~ **Sample response** ~~~ "http://cloud.seafile.com:8082/upload-api/ef881b22" ~~~ **Errors** ~~~ 500 Run out of quota ~~~ ##### Upload File After getting the upload link, POST to this link for uploading files. **POST**[http://cloud.seafile.com:8082/upload-api/ef881b22](http://cloud.seafile.com:8082/upload-api/ef881b22) **Errors** ~~~ 400 Bad request 440 Invalid filename 441 File already exists 500 Internal server error ~~~ **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -F file=@test.txt -F filename=test.txt -F parent_dir=/ http://cloud.seafile.com:8082/upload-api/ef881b22 ~~~ **Sample response** ~~~ "adc83b19e793491b1c6ea0fd8b46cd9f32e592fc" ~~~ **Note** For python client uploading, see [https://cloud.seafile.com/f/1b0ade6edc/](https://cloud.seafile.com/f/1b0ade6edc/) #### Update file ##### Get Update Link **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/update-link/](https://cloud.seafile.com/api2/repos/{repo-id}/update-link/) **Request parameters** - repo-id **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" https://cloud.seafile.com/api2/repos/99b758e6-91ab-4265-b705-925367374cf0/update-link/ ~~~ **Sample response** ~~~ "http://cloud.seafile.com:8082/update-api/ef881b22" ~~~ **Errors** ~~~ 500 Run out of quota ~~~ ##### Update File After getting the upload link, POST to this link for uploading files. **POST**[http://cloud.seafile.com:8082/update-api/ef881b22](http://cloud.seafile.com:8082/update-api/ef881b22) **Request parameters** - target_file **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -F file=@test.txt -F filename=test.txt -F target_file=/test.txt http://cloud.seafile.com:8082/upload-api/ef881b22 ~~~ **Returns** The id of the updated file **Sample response** ~~~ "adc83b19e793491b1c6ea0fd8b46cd9f32e592fc" ~~~ **Errors** - 400 Bad request - 440 Invalid filename - 500 Internal server error #### Get Upload Blocks Link **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/upload-blks-link/](https://cloud.seafile.com/api2/repos/{repo-id}/upload-blks-link/) **Request parameters** - repo-id **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" https://cloud.seafile.com/api2/repos/99b758e6-91ab-4265-b705-925367374cf0/upload-blks-link/ ~~~ **Sample response** ~~~ "https://cloud.seafile.com/seafhttp/upload-blks-api/c1e6823d" ~~~ **Errors** - 403 Can not access repo - 520 above quota #### Get Update Blocks Link **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/update-blks-link/](https://cloud.seafile.com/api2/repos/{repo-id}/update-blks-link/) **Request parameters** - repo-id **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" https://cloud.seafile.com/api2/repos/99b758e6-91ab-4265-b705-925367374cf0/update-blks-link/ ~~~ **Sample response** ~~~ "https://cloud.seafile.com/seafhttp/update-blks-api/c1e6823d" ~~~ **Errors** - 403 Can not access repo - 520 above quota ### [Directory]() #### List Directory Entries **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/dir/](https://cloud.seafile.com/api2/repos/{repo-id}/dir/) - repo-id - p (optional): The path to a directory. If `p` is missing, then defaults to '/' which is the top directory. - oid (optional) **Sample request** ~~~ curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d9b477fd" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/repos/99b758e6-91ab-4265-b705-925367374cf0/dir/?p=/foo ~~~ **Sample response** If oid is the latest oid of the directory, returns `"uptodate"` , else returns ~~~ [ { "id": "0000000000000000000000000000000000000000", "type": "file", "name": "test1.c", "size": 0 }, { "id": "e4fe14c8cda2206bb9606907cf4fca6b30221cf9", "type": "dir", "name": "test_dir" } ] ~~~ **Errors** - 404 The path is not exist. - 440 Repo is encrypted, and password is not provided. - 520 Operation failed.. #### Create New Directory **POST**[https://cloud.seafile.com/api2/repos/{repo-id}/dir/](https://cloud.seafile.com/api2/repos/{repo-id}/dir/) - repo-id - p - operation=mkdir (post) **Sample request** ~~~ curl -d "operation=mkdir" -v -H 'Authorization: Tokacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/dir/?p=/foo ~~~ **Sample response** ~~~ ... < HTTP/1.0 201 CREATED < Location: https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/dir/?p=/foo ... "success" ~~~ **Success** Response code 201(Created) is returned, and Location header provides the url of created directory. **Errors** - 400 Path is missing or invalid(e.g. p=/) - 520 Operation failed. **Notes** Newly created directory will be renamed if the name is duplicated. #### Rename Directory **POST**[https://cloud.seafile.com/api2/repos/{repo-id}/dir/](https://cloud.seafile.com/api2/repos/{repo-id}/dir/) **Parameters** - p (path) - operation=rename (post) - newname (the new name for directory) **Sample request** ~~~ curl -d "operation=rename&newname=pinkfloyd_newfolder" -v -H 'Authorization: Tokacd9c6ccb8133606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/dir/?p=/foo ~~~ **Success** Response code 200 if everything is ok **Errors** - 403 if You do not have permission to rename a folder - 400 if newname is not given - 520 if Failed to rename directory (generic problem) **Notes** If the new name is the same of the old name no operation will be done. #### Delete Directory **DELETE**[https://cloud.seafile.com/api2/repos/{repo-id}/dir/](https://cloud.seafile.com/api2/repos/{repo-id}/dir/) - repo-id - p **Sample request** ~~~ curl -X DELETE -v -H 'Authorization: Token f2210dacd3606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/dir/?p=/foo ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... "success" ~~~ **Success** Response code is 200(OK), and a string `"success"` is returned. **Errors** - 400 Path is missing or invalid(e.g. p=/) - 520 Operation failed. **Note** This can also be used to delete file. #### Download Directory **GET**[https://cloud.seafile.com/api2/repos/{repo-id}/dir/download/?p=/foo](https://cloud.seafile.com/api2/repos/{repo-id}/dir/download/?p=/foo) - repo-id - p **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd3606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/dir/?p=/foo ~~~ **Sample response** ~~~ "https://cloud.seafile.com:8082/files/adee6094/foo" ~~~ **Errors** - 400 Path is missing or invalid(e.g. p=/), or unable to download directory, size is too large - 404 Repo(path) not found(exist) - 520 Operation failed. #### Share Directory **POST**[https://cloud.seafile.com/api2/repos/{repo-id}/dir/share/](https://cloud.seafile.com/api2/repos/{repo-id}/dir/share/) - repo-id - emails - s_type - path - perm **Sample request** ~~~ curl -v -X POST -d "emails=user@example.com&s_type=d&path=/dir&perm=r" -H 'Authorization: Token f2210dacd3606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/dir/share/ ~~~ **Sample response** ~~~ ... < HTTP/1.0 200 OK ... ~~~ **Success** Response code is 200(OK). #### Batch Delete Pipelining over HTTP/1.1 can be used to delete multiple files and directories without losing performance. A sample request looks like `curl -X DELETE https://cloud.seafile.com/api2/repos/{repo-id}/dir/?p=/foo http://cloud.seafile.com/api2/repos/{repo-id}/dir/?p=/bar`. This code snippet shows how to use Python client to batch delete multiple files and directories. See [http://cloud.seafile.com/f/f7fd5d5b9d/](http://cloud.seafile.com/f/f7fd5d5b9d/) ### Get Avatar ### Get User Avatar **GET**[https://cloud.seafile.com/api2/avatars/user/{user}/resized/{size}/](https://cloud.seafile.com/api2/avatars/user/{user}/resized/{size}/) **Request parameters** - user - size **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/avatars/user/user@example.com/resized/80/ ~~~ **Sample response** ~~~ { "url": "http://127.0.0.1:8000/media/avatars/default.png", "is_default": true, "mtime": 0 } ~~~ ### Get Group Avatar **GET**[https://cloud.seafile.com/api2/avatars/group/{group_id}/resized/{size}/](https://cloud.seafile.com/api2/avatars/group/{group_id}/resized/{size}/) **Request parameters** - group_id - size **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/avatars/group/1/resized/80/ ~~~ **Sample response** ~~~ { "url": "http://127.0.0.1:8000/media/avatars/groups/default.png", "is_default": true, "mtime": 0 } ~~~ ### Get Thumbnail ### Get Thumbnail Image **GET**[https://cloud.seafile.com/api2/repos/{repo_id}/thumbnail/](https://cloud.seafile.com/api2/repos/{repo_id}/thumbnail/) **Request parameters** - repo_id - p - size **Sample request** ~~~ curl -H 'Authorization: Token 40f9a510a0629430865dc199a3880898ad2e48fc' https://cloud.seafile.com/api2/repos/fbead5d0-4817-4446-92f3-7ac8e6a8e5f5/thumbnail/?p=/5.jpg\&size=123 > thumbnail.png ~~~ ### List Group And Contacts **GET**[https://cloud.seafile.com/api2/groupandcontacts/](https://cloud.seafile.com/api2/groupandcontacts/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/groupandcontacts/" ~~~ **Sample response** ~~~ { "contacts": [ { "msgnum": 0, "mtime": 0, "lastmsg": null, "email": "user@example.com", "name": "123" } ], "umsgnum": 0, "replynum": 0, "groups": [ { "ctime": 1398134171327948, "creator": "user@example.com", "msgnum": 0, "mtime": 0, "lastmsg": null, "id": 1, "name": "lian" } ], "gmsgnum": 0, "newreplies": [] } ~~~ ### Get File Activities **GET**[https://cloud.seafile.com/api2/events/](https://cloud.seafile.com/api2/events/) **Sample request** ~~~ curl -H 'Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd' "https://cloud.seafile.com/api2/events/" ~~~ **Sample response** ~~~ {"more_offset": 16, "events":[{"repo_id": "6f3d28a4-73ae-4d01-a727-26774379dcb9", "author": "mysnowls@163.com", "nick": "lins05", "time": 1398078909, "etype": "repo-update", "repo_name": "Downloads", "desc": "Added \"seafile-cli_3.0.2_i386.tar.gz\"."},{"repo_id": "6f3d28a4-73ae-4d01-a727-26774379dcb9", "author": "mysnowls@163.com", "nick": "lins05", "time": 1398075540, "etype": "repo-update", "repo_name": "Downloads", "desc": "Added \"seafile-server_3.0.0_x86-64.tar.gz\"."}], "more": false} ~~~ ### Add Organization **POST**[https://cloud.seafile.com/api2/organization/](https://cloud.seafile.com/api2/organization/) **Request parameters** - username - password - org_name - prefix - quota - member_limit **Sample request** ~~~ curl -v -X POST -d "username=example@example.com&password=example&org_name=example&prefix=example&quota=100&member_limit=10" -H "Authorization: Token ccdff90e4d1efe76b2b3d91c06b027a5cff189d4" -H 'Accept: application/json; indent=4' https://cloud.seafile.com/api2/organization/ ~~~ **Sample response** ~~~ "success" ~~~
';