2020-09-06 09:40:31 +00:00
openapi : 3.0 .3
2019-07-20 10:26:52 +00:00
info :
title : SFTPGo
description : 'SFTPGo REST API'
2020-09-08 07:45:21 +00:00
version : 2.0 .0
2019-11-13 10:36:21 +00:00
2019-07-20 10:26:52 +00:00
servers :
- url : /api/v1
2020-02-03 23:08:00 +00:00
security :
- BasicAuth : [ ]
2019-07-20 10:26:52 +00:00
paths :
2019-08-08 08:01:33 +00:00
/version :
get :
tags :
- version
summary : Get version details
operationId : get_version
responses :
200 :
description : successful operation
content :
application/json :
schema :
2020-09-06 09:40:31 +00:00
$ref : '#/components/schemas/VersionInfo'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-02-03 23:08:00 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-02-03 23:08:00 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-11-14 17:48:01 +00:00
/providerstatus :
get :
tags :
- providerstatus
summary : Get data provider status
operationId : get_provider_status
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
example :
message : "Alive"
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-02-03 23:08:00 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-11-14 17:48:01 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-08-24 12:41:15 +00:00
/connection :
2019-07-20 10:26:52 +00:00
get :
tags :
- connections
2019-08-24 12:41:15 +00:00
summary : Get the active users and info about their uploads/downloads
operationId : get_connections
2019-07-20 10:26:52 +00:00
responses :
200 :
description : successful operation
content :
application/json :
schema :
type : array
items :
$ref : '#/components/schemas/ConnectionStatus'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-02-03 23:08:00 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-02-03 23:08:00 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-08-24 12:41:15 +00:00
/connection/{connectionID}:
2019-07-20 10:26:52 +00:00
delete :
tags :
- connections
2019-08-24 12:41:15 +00:00
summary : Terminate an active connection
operationId : close_connection
2019-11-13 10:36:21 +00:00
parameters :
2019-07-20 10:26:52 +00:00
- name : connectionID
in : path
description : ID of the connection to close
required : true
schema :
type : string
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
2019-11-13 10:36:21 +00:00
example :
2019-07-20 10:26:52 +00:00
message : "Connection closed"
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-02-03 23:08:00 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-07-20 10:26:52 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2019-07-20 10:26:52 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-07-20 10:26:52 +00:00
/quota_scan :
get :
tags :
- quota
2020-06-07 21:30:18 +00:00
summary : Get the active quota scans for users home directories
2019-08-01 20:42:46 +00:00
operationId : get_quota_scans
2019-07-20 10:26:52 +00:00
responses :
200 :
description : successful operation
content :
application/json :
schema :
type : array
items :
$ref : '#/components/schemas/QuotaScan'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-02-03 23:08:00 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-02-03 23:08:00 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-07-20 10:26:52 +00:00
post :
tags :
- quota
2020-06-07 21:30:18 +00:00
summary : start a new user quota scan
description : A quota scan update the number of files and their total size for the specified user
2019-07-20 10:26:52 +00:00
operationId : start_quota_scan
requestBody :
required : true
content :
application/json :
schema :
$ref : '#/components/schemas/User'
responses :
2020-09-13 17:43:56 +00:00
202 :
2019-07-20 10:26:52 +00:00
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
2019-11-13 10:36:21 +00:00
example :
2019-07-20 10:26:52 +00:00
message : "Scan started"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2019-07-20 10:26:52 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-07-20 10:26:52 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2019-07-20 10:26:52 +00:00
409 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Conflict'
2019-07-20 10:26:52 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2020-06-20 10:38:04 +00:00
/quota_update :
put :
tags :
- quota
summary : update the user used quota limits
description : Set the current used quota limits for the given user
operationId : quota_update
parameters :
- in : query
name : mode
required : false
description : the update mode specifies if the given quota usage values should be added or replace the current ones
schema :
type : string
enum : [ add, reset]
description : >
Update type :
* `add` - add the specified quota limits to the current used ones
* `reset` - reset the values to the specified ones. This is the default
example : reset
requestBody :
required : true
description : The only user mandatory fields are username,used_quota_size and used_quota_files. Please note that if the quota fields are missing they will default to 0
content :
application/json :
schema :
$ref : '#/components/schemas/User'
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
example :
message : "Quota updated"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-06-20 10:38:04 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-06-20 10:38:04 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-06-20 10:38:04 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2020-06-20 10:38:04 +00:00
409 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Conflict'
2020-06-20 10:38:04 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2020-06-20 10:38:04 +00:00
/folder_quota_update :
put :
tags :
- quota
summary : update the folder used quota limits
description : Set the current used quota limits for the given folder
operationId : folder_quota_update
parameters :
- in : query
name : mode
required : false
description : the update mode specifies if the given quota usage values should be added or replace the current ones
schema :
type : string
enum : [ add, reset]
description : >
Update type :
* `add` - add the specified quota limits to the current used ones
* `reset` - reset the values to the specified ones. This is the default
example : reset
requestBody :
required : true
description : The only folder mandatory fields are mapped_path,used_quota_size and used_quota_files. Please note that if the used quota fields are missing they will default to 0
content :
application/json :
schema :
$ref : '#/components/schemas/BaseVirtualFolder'
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
example :
message : "Quota updated"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-06-20 10:38:04 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-06-20 10:38:04 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-06-20 10:38:04 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2020-06-20 10:38:04 +00:00
409 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Conflict'
2020-06-20 10:38:04 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2020-06-07 21:30:18 +00:00
/folder_quota_scan :
get :
tags :
- quota
summary : Get the active quota scans for folders
operationId : get_folders_quota_scans
responses :
200 :
description : successful operation
content :
application/json :
schema :
type : array
items :
$ref : '#/components/schemas/FolderQuotaScan'
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-06-07 21:30:18 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-06-07 21:30:18 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2020-06-07 21:30:18 +00:00
post :
tags :
- quota
summary : start a new folder quota scan
description : A quota scan update the number of files and their total size for the specified folder
operationId : start_folder_quota_scan
requestBody :
required : true
content :
application/json :
schema :
$ref : '#/components/schemas/BaseVirtualFolder'
responses :
2020-09-13 17:43:56 +00:00
202 :
2020-06-07 21:30:18 +00:00
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
example :
message : "Scan started"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-06-07 21:30:18 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-06-07 21:30:18 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-06-07 21:30:18 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2020-06-07 21:30:18 +00:00
409 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Conflict'
2020-06-07 21:30:18 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2020-06-07 21:30:18 +00:00
/folder :
get :
tags :
- folders
summary : Returns an array with one or more folders
operationId : get_folders
parameters :
- in : query
name : offset
schema :
type : integer
minimum : 0
default : 0
required : false
- in : query
name : limit
schema :
type : integer
minimum : 1
maximum : 500
default : 100
required : false
description : The maximum number of items to return. Max value is 500, default is 100
- in : query
name : order
required : false
description : Ordering folders by path. Default ASC
schema :
type : string
enum :
- ASC
- DESC
example : ASC
- in : query
name : folder_path
required : false
description : Filter by folder path, extact match case sensitive
schema :
type : string
responses :
200 :
description : successful operation
content :
application/json :
schema :
type : array
items :
$ref : '#/components/schemas/BaseVirtualFolder'
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-06-07 21:30:18 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-06-07 21:30:18 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-06-07 21:30:18 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2020-06-07 21:30:18 +00:00
post :
tags :
- folders
summary : Adds a new folder
operationId : add_folder
description : a new folder with the specified mapped_path will be added. To update the used quota parameters a quota scan is needed
requestBody :
required : true
content :
application/json :
schema :
$ref : '#/components/schemas/BaseVirtualFolder'
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/BaseVirtualFolder'
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-06-07 21:30:18 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-06-07 21:30:18 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-06-07 21:30:18 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2020-06-07 21:30:18 +00:00
delete :
tags :
- folders
summary : Delete an existing folder
operationId : delete_folder
parameters :
- name : folder_path
in : query
description : path to the folder to delete
required : true
schema :
type : string
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
example :
message : "Folder deleted"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-06-07 21:30:18 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2020-06-07 21:30:18 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2020-06-07 21:30:18 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2020-06-07 21:30:18 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-07-20 10:26:52 +00:00
/user :
get :
tags :
- users
2019-08-24 12:41:15 +00:00
summary : Returns an array with one or more users
2019-10-07 16:19:01 +00:00
description : For security reasons hashed passwords are omitted in the response
2019-07-20 10:26:52 +00:00
operationId : get_users
parameters :
- in : query
name : offset
schema :
type : integer
minimum : 0
default : 0
required : false
- in : query
name : limit
schema :
type : integer
minimum : 1
maximum : 500
default : 100
required : false
description : The maximum number of items to return. Max value is 500, default is 100
- in : query
name : order
required : false
2020-06-07 21:30:18 +00:00
description : Ordering users by username. Default ASC
2019-07-20 10:26:52 +00:00
schema :
type : string
enum :
- ASC
- DESC
example : ASC
- in : query
name : username
required : false
description : Filter by username, extact match case sensitive
schema :
type : string
responses :
200 :
description : successful operation
content :
application/json :
schema :
type : array
items :
$ref : '#/components/schemas/User'
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2019-07-20 10:26:52 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-07-20 10:26:52 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-07-20 10:26:52 +00:00
post :
tags :
- users
2019-11-18 22:30:37 +00:00
summary : Adds a new user
2019-07-20 10:26:52 +00:00
operationId : add_user
requestBody :
required : true
content :
application/json :
schema :
$ref : '#/components/schemas/User'
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/User'
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2019-07-20 10:26:52 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-07-20 10:26:52 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-07-20 10:26:52 +00:00
/user/{userID}:
get :
tags :
- users
summary : Find user by ID
2019-10-07 16:19:01 +00:00
description : For security reasons the hashed password is omitted in the response
2019-08-01 20:42:46 +00:00
operationId : get_user_by_id
2019-11-13 10:36:21 +00:00
parameters :
2019-07-20 10:26:52 +00:00
- name : userID
in : path
description : ID of the user to retrieve
required : true
schema :
type : integer
format : int32
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/User'
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2019-07-20 10:26:52 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-07-20 10:26:52 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2019-07-20 10:26:52 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-07-20 10:26:52 +00:00
put :
tags :
- users
2019-08-01 20:42:46 +00:00
summary : Update an existing user
operationId : update_user
2019-11-13 10:36:21 +00:00
parameters :
2019-07-20 10:26:52 +00:00
- name : userID
in : path
description : ID of the user to update
required : true
schema :
type : integer
format : int32
2020-09-01 14:10:26 +00:00
- in : query
name : disconnect
schema :
type : integer
enum :
- 0
- 1
description : >
Disconnect :
* `0` The user will not be disconnected and it will continue to use the old configuration until connected. This is the default
* `1` The user will be disconnected after a successful update. It must login again and so it will be forced to use the new configuration
2019-07-20 10:26:52 +00:00
requestBody :
required : true
content :
application/json :
schema :
$ref : '#/components/schemas/User'
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
2019-11-13 10:36:21 +00:00
example :
2019-07-20 10:26:52 +00:00
message : "User updated"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2019-07-20 10:26:52 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-07-20 10:26:52 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2019-07-20 10:26:52 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-07-20 10:26:52 +00:00
delete :
tags :
- users
2019-08-01 20:42:46 +00:00
summary : Delete an existing user
operationId : delete_user
2019-11-13 10:36:21 +00:00
parameters :
2019-07-20 10:26:52 +00:00
- name : userID
in : path
description : ID of the user to delete
required : true
schema :
type : integer
format : int32
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
2019-11-13 10:36:21 +00:00
example :
2019-07-20 10:26:52 +00:00
message : "User deleted"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2019-07-20 10:26:52 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-07-20 10:26:52 +00:00
404 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/NotFound'
2019-07-20 10:26:52 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-12-27 22:12:44 +00:00
/dumpdata :
get :
tags :
- maintenance
summary : Backup SFTPGo data serializing them as JSON
description : The backup is saved to a local file to avoid to expose users hashed passwords over the network. The output of dumpdata can be used as input for loaddata
operationId : dumpdata
parameters :
- in : query
name : output_file
schema :
type : string
required : true
description : Path for the file to write the JSON serialized data to. This path is relative to the configured "backups_path". If this file already exists it will be overwritten
2020-02-02 21:20:39 +00:00
- in : query
name : indent
schema :
type : integer
enum :
- 0
- 1
description : >
indent :
* `0` no indentation. This is the default
* `1` format the output JSON
2019-12-27 22:12:44 +00:00
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
example :
message : "Data saved"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2019-12-27 22:12:44 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-12-27 22:12:44 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-12-27 22:12:44 +00:00
/loaddata :
get :
tags :
- maintenance
summary : Restore SFTPGo data from a JSON backup
2020-06-07 21:30:18 +00:00
description : Users and folders will be restored one by one and the restore is stopped if a user/folder cannot be added or updated, so it could happen a partial restore
2019-12-27 22:12:44 +00:00
operationId : loaddata
parameters :
- in : query
name : input_file
schema :
type : string
required : true
description : Path for the file to read the JSON serialized data from. This can be an absolute path or a path relative to the configured "backups_path". The max allowed file size is 10MB
- in : query
name : scan_quota
schema :
type : integer
enum :
- 0
- 1
- 2
description : >
Quota scan :
2020-06-07 21:30:18 +00:00
* `0` no quota scan is done, the imported users will have used_quota_size and used_quota_files = 0 or the existing values if they already exists. This is the default
2019-12-27 22:12:44 +00:00
* `1` scan quota
* `2` scan quota if the user has quota restrictions
required : false
2020-01-31 18:10:45 +00:00
- in : query
name : mode
schema :
type : integer
enum :
- 0
- 1
2020-09-01 14:10:26 +00:00
- 2
2020-01-31 18:10:45 +00:00
description : >
Mode :
* `0` New users are added, existing users are updated. This is the default
* `1` New users are added, existing users are not modified
2020-09-01 14:10:26 +00:00
* `2` New users are added, existing users are updated and, if connected, they are disconnected and so forced to use the new configuration
2019-12-27 22:12:44 +00:00
responses :
200 :
description : successful operation
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
example :
message : "Data restored"
400 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/BadRequest'
2020-02-03 23:08:00 +00:00
401 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Unauthorized'
2019-12-27 22:12:44 +00:00
403 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/Forbidden'
2019-12-27 22:12:44 +00:00
500 :
2020-09-08 07:45:21 +00:00
$ref : '#/components/responses/InternalServerError'
default :
$ref : '#/components/responses/DefaultResponse'
2019-07-20 10:26:52 +00:00
components :
2020-09-08 07:45:21 +00:00
responses :
BadRequest :
description : Bad Request
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
Unauthorized :
description : Unauthorized
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
Forbidden :
description : Forbidden
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
NotFound :
description : Not Found
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
Conflict :
description : Conflict
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
InternalServerError :
description : Internal Server Error
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
DefaultResponse :
description : Unexpected Error
content :
application/json :
schema :
$ref : '#/components/schemas/ApiResponse'
2019-07-20 10:26:52 +00:00
schemas :
Permission :
type : string
enum :
- '*'
- list
- download
- upload
2019-09-17 06:53:45 +00:00
- overwrite
2019-07-20 10:26:52 +00:00
- delete
- rename
- create_dirs
- create_symlinks
2019-11-15 11:15:07 +00:00
- chmod
- chown
2019-11-16 09:23:41 +00:00
- chtimes
2019-07-20 10:26:52 +00:00
description : >
Permissions :
2019-09-18 20:19:34 +00:00
* `*` - all permissions are granted
2019-07-20 10:26:52 +00:00
* `list` - list items is allowed
* `download` - download files is allowed
* `upload` - upload files is allowed
2019-09-17 06:53:45 +00:00
* `overwrite` - overwrite an existing file, while uploading, is allowed. upload permission is required to allow file overwrite
2019-07-20 10:26:52 +00:00
* `delete` - delete files or directories is allowed
* `rename` - rename files or directories is allowed
* `create_dirs` - create directories is allowed
* `create_symlinks` - create links is allowed
2019-11-15 11:15:07 +00:00
* `chmod` changing file or directory permissions is allowed
* `chown` changing file or directory owner and group is allowed
2019-11-16 09:23:41 +00:00
* `chtimes` changing file or directory access and modification time is allowed
2019-12-25 17:20:19 +00:00
DirPermissions :
type : object
additionalProperties :
type : array
items :
$ref : '#/components/schemas/Permission'
minItems : 1
minProperties : 1
description : hash map with directory as key and an array of permissions as value. Directories must be absolute paths, permissions for root directory ("/") are required
2020-02-19 21:39:30 +00:00
LoginMethods :
type : string
enum :
- 'publickey'
- 'password'
- 'keyboard-interactive'
2020-04-09 21:32:42 +00:00
- 'publickey+password'
- 'publickey+keyboard-interactive'
2020-08-19 17:36:12 +00:00
description : >
To enable multi-step authentication you have to allow only multi-step login methods. If password login method is denied or no password is set then FTP and WebDAV users cannot login
2020-08-17 10:49:20 +00:00
SupportedProtocols :
type : string
enum :
- 'SSH'
- 'FTP'
- 'DAV'
2020-03-01 21:10:29 +00:00
ExtensionsFilter :
type : object
properties :
path :
type : string
2020-08-11 21:56:10 +00:00
description : exposed SFTPGo path, if no other specific filter is defined, the filter apply for sub directories too. For example if filters are defined for the paths "/" and "/sub" then the filters for "/" are applied for any file outside the "/sub" directory
2020-03-01 21:10:29 +00:00
allowed_extensions :
type : array
items :
type : string
nullable : true
description : list of, case insensitive, allowed files extension. Shell like expansion is not supported so you have to specify `.jpg` and not `*.jpg`
example : [ ".jpg" , ".png" ]
denied_extensions :
type : array
items :
type : string
nullable : true
description : list of, case insensitive, denied files extension. Denied file extensions are evaluated before the allowed ones
example : [ ".zip" ]
2019-12-30 17:37:50 +00:00
UserFilters :
type : object
properties :
allowed_ip :
type : array
items :
type : string
nullable : true
description : only clients connecting from these IP/Mask are allowed. IP/Mask must be in CIDR notation as defined in RFC 4632 and RFC 4291, for example "192.0.2.0/24" or "2001:db8::/32"
example : [ "192.0.2.0/24" , "2001:db8::/32" ]
denied_ip :
type : array
items :
type : string
nullable : true
description : clients connecting from these IP/Mask are not allowed. Denied rules are evaluated before allowed ones
example : [ "172.16.0.0/16" ]
2020-02-19 21:39:30 +00:00
denied_login_methods :
type : array
items :
$ref : '#/components/schemas/LoginMethods'
nullable : true
description : if null or empty any available login method is allowed
2020-08-17 10:49:20 +00:00
denied_protocols :
type : array
items :
$ref : '#/components/schemas/SupportedProtocols'
nullable : true
description : if null or empty any available protocol is allowed
2020-03-01 21:10:29 +00:00
file_extensions :
type : array
items :
$ref : '#/components/schemas/ExtensionsFilter'
nullable : true
description : filters based on file extensions. These restrictions do not apply to files listing for performance reasons, so a denied file cannot be downloaded/overwritten/renamed but it will still be listed in the list of files. Please note that these restrictions can be easily bypassed
2020-08-16 18:17:02 +00:00
max_upload_file_size :
type : integer
format : int64
nullable : true
description : maximum allowed size, as bytes, for a single file upload. The upload will be aborted if/when the size of the file being sent exceeds this limit. 0 means unlimited. This restriction does not apply for SSH system commands such as `git` and `rsync`
2020-01-19 06:41:05 +00:00
description : Additional restrictions
S3Config :
type : object
properties :
bucket :
type : string
minLength : 1
region :
type : string
minLength : 1
access_key :
type : string
access_secret :
type : string
description : the access secret is stored encrypted (AES-256-GCM)
endpoint :
type : string
description : optional endpoint
storage_class :
type : string
2020-03-13 16:28:55 +00:00
upload_part_size :
type : integer
description : the buffer size (in MB) to use for multipart uploads. The minimum allowed part size is 5MB, and if this value is set to zero, the default value (5MB) for the AWS SDK will be used. The minimum allowed value is 5.
upload_concurrency :
type : integer
2020-03-13 18:13:58 +00:00
description : the number of parts to upload in parallel. If this value is set to zero, the default value (2) will be used
2020-01-19 22:23:09 +00:00
key_prefix :
type : string
2020-08-11 21:56:10 +00:00
description : key_prefix is similar to a chroot directory for a local filesystem. If specified the user will only see contents that starts with this prefix and so you can restrict access to a specific virtual folder. The prefix, if not empty, must not start with "/" and must end with "/". If empty the whole bucket contents will be available
2020-01-19 22:23:09 +00:00
example : folder/subfolder/
2020-01-19 06:41:05 +00:00
required :
- bucket
- region
nullable : true
description : S3 Compatible Object Storage configuration details
2020-01-31 18:04:00 +00:00
GCSConfig :
type : object
properties :
bucket :
type : string
minLength : 1
credentials :
type : string
format : byte
2020-03-27 22:26:22 +00:00
description : Google Cloud Storage JSON credentials base64 encoded. This field must be populated only when adding/updating a user. It will be always omitted, since there are sensitive data, when you search/get users. The credentials will be stored in the configured "credentials_path"
2020-02-19 08:41:15 +00:00
automatic_credentials :
type : integer
nullable : true
enum :
- 0
- 1
description : >
Automatic credentials :
* `0` - disabled, explicit credentials, using a JSON credentials file, must be provided. This is the default value if the field is null
* `1` - enabled, we try to use the Application Default Credentials (ADC) strategy to find your application's credentials
2020-01-31 18:04:00 +00:00
storage_class :
type : string
key_prefix :
type : string
2020-08-11 21:56:10 +00:00
description : key_prefix is similar to a chroot directory for a local filesystem. If specified the user will only see contents that starts with this prefix and so you can restrict access to a specific virtual folder. The prefix, if not empty, must not start with "/" and must end with "/". If empty the whole bucket contents will be available
2020-01-31 18:04:00 +00:00
example : folder/subfolder/
required :
- bucket
nullable : true
description : Google Cloud Storage configuration details
2020-10-25 07:18:48 +00:00
AzureBlobFsConfig :
type : object
properties :
container :
type : string
account_name :
type : string
description : Storage Account Name, leave blank to use SAS URL
account_key :
type : string
description : Storage Account Key leave blank to use SAS URL. The access key is stored encrypted (AES-256-GCM)
sas_url :
type : string
description : Shared access signature URL, leave blank if using account/key
endpoint :
type : string
description : optional endpoint. Default is "blob.core.windows.net". If you use the emulator the endpoint must include the protocol, for example "http://127.0.0.1:10000"
upload_part_size :
type : integer
description : the buffer size (in MB) to use for multipart uploads. If this value is set to zero, the default value (4MB) will be used.
upload_concurrency :
type : integer
description : the number of parts to upload in parallel. If this value is set to zero, the default value (2) will be used
key_prefix :
type : string
description : key_prefix is similar to a chroot directory for a local filesystem. If specified the user will only see contents that starts with this prefix and so you can restrict access to a specific virtual folder. The prefix, if not empty, must not start with "/" and must end with "/". If empty the whole container contents will be available
example : folder/subfolder/
use_emulator :
type : boolean
nullable : true
description : Azure Blob Storage configuration details
2020-01-19 06:41:05 +00:00
FilesystemConfig :
type : object
properties :
provider :
type : integer
enum :
- 0
- 1
2020-01-31 18:04:00 +00:00
- 2
2020-10-25 07:18:48 +00:00
- 3
2020-01-19 06:41:05 +00:00
description : >
Providers :
2020-10-25 07:18:48 +00:00
* `0` - Local filesystem
2020-01-19 06:41:05 +00:00
* `1` - S3 Compatible Object Storage
2020-01-31 18:04:00 +00:00
* `2` - Google Cloud Storage
2020-10-25 07:18:48 +00:00
* `3` - Azure Blob Storage
2020-01-19 06:41:05 +00:00
s3config :
$ref : '#/components/schemas/S3Config'
2020-01-31 18:04:00 +00:00
gcsconfig :
$ref : '#/components/schemas/GCSConfig'
2020-10-25 07:18:48 +00:00
azblobconfig :
$ref : '#/components/schemas/AzureBlobFsConfig'
2020-01-19 06:41:05 +00:00
description : Storage filesystem details
2020-06-07 21:30:18 +00:00
BaseVirtualFolder :
2020-02-23 10:30:26 +00:00
type : object
properties :
2020-06-07 21:30:18 +00:00
id :
type : integer
format : int32
minimum : 1
2020-02-23 10:30:26 +00:00
mapped_path :
type : string
2020-06-07 21:30:18 +00:00
description : absolute filesystem path to use as virtual folder. This field is unique
used_quota_size :
type : integer
format : int64
used_quota_files :
type : integer
format : int32
last_quota_update :
type : integer
format : int64
description : Last quota update as unix timestamp in milliseconds
users :
type : array
2020-05-01 13:27:53 +00:00
nullable : true
2020-06-07 21:30:18 +00:00
items :
type : string
description : list of usernames associated with this virtual folder
2020-02-23 10:30:26 +00:00
required :
- mapped_path
2020-06-07 21:30:18 +00:00
description : defines the path for the virtual folder and the used quota limits. The same folder can be shared among multiple users and each user can have different quota limits or a different virtual path.
VirtualFolder :
allOf :
- $ref : '#/components/schemas/BaseVirtualFolder'
- type : object
properties :
virtual_path :
type : string
quota_size :
type : integer
format : int64
2020-08-11 21:56:10 +00:00
description : Quota as size in bytes. 0 menas unlimited, -1 means included in user quota. Please note that quota is updated if files are added/removed via SFTPGo otherwise a quota scan or a manual quota update is needed
2020-06-07 21:30:18 +00:00
quota_files :
type : integer
format : int32
2020-08-11 21:56:10 +00:00
description : Quota as number of files. 0 menas unlimited, , -1 means included in user quota. Please note that quota is updated if files are added/removed via SFTPGo otherwise a quota scan or a manual quota update is needed
2020-06-07 21:30:18 +00:00
required :
- virtual_path
2020-08-11 21:56:10 +00:00
description : A virtual folder is a mapping between a SFTPGo virtual path and a filesystem path outside the user home directory. The specified paths must be absolute and the virtual path cannot be "/", it must be a sub directory. The parent directory for the specified virtual path must exist. SFTPGo will try to automatically create any missing parent directory for the configured virtual folders at user login.
2019-07-20 10:26:52 +00:00
User :
type : object
properties :
id :
type : integer
format : int32
minimum : 1
2019-11-13 10:36:21 +00:00
status :
type : integer
enum :
- 0
- 1
description : >
status :
* `0` user is disabled, login is not allowed
* `1` user is enabled
2019-07-20 10:26:52 +00:00
username :
type : string
2020-06-07 21:30:18 +00:00
description : username is unique
2019-11-13 10:36:21 +00:00
expiration_date :
type : integer
format : int64
description : expiration date as unix timestamp in milliseconds. An expired account cannot login. 0 means no expiration
2019-07-20 10:26:52 +00:00
password :
type : string
nullable : true
2020-05-15 18:08:53 +00:00
description : password or public key/SSH user certificate are mandatory. If the password has no known hashing algo prefix it will be stored using argon2id. You can send a password hashed as bcrypt or pbkdf2 and it will be stored as is. For security reasons this field is omitted when you search/get users
2019-08-07 21:41:10 +00:00
public_keys :
2019-08-01 20:42:46 +00:00
type : array
items :
type : string
2019-07-20 10:26:52 +00:00
nullable : true
2020-05-15 18:08:53 +00:00
description : a password or at least one public key/SSH user certificate are mandatory.
2019-07-20 10:26:52 +00:00
home_dir :
type : string
description : path to the user home directory. The user cannot upload or download files outside this directory. SFTPGo tries to automatically create this folder if missing. Must be an absolute path
2020-02-23 10:30:26 +00:00
virtual_folders :
type : array
items :
$ref : '#/components/schemas/VirtualFolder'
nullable : true
2020-08-11 21:56:10 +00:00
description : mapping between virtual SFTPGo paths and filesystem paths outside the user home directory. Supported for local filesystem only. If one or more of the specified folders are not inside the dataprovider they will be automatically created. You have to create the folder on the filesystem yourself
2019-07-20 10:26:52 +00:00
uid :
type : integer
format : int32
minimum : 0
maximum : 65535
2020-08-11 21:56:10 +00:00
description : if you run SFTPGo as root user, the created files and directories will be assigned to this uid. 0 means no change, the owner will be the user that runs SFTPGo. Ignored on windows
2019-07-20 10:26:52 +00:00
gid :
type : integer
format : int32
minimum : 0
maximum : 65535
2020-08-11 21:56:10 +00:00
description : if you run SFTPGo as root user, the created files and directories will be assigned to this gid. 0 means no change, the group will be the one of the user that runs SFTPGo. Ignored on windows
2019-07-20 10:26:52 +00:00
max_sessions :
type : integer
format : int32
2020-03-27 22:26:22 +00:00
description : Limit the sessions that a user can open. 0 means unlimited
2019-07-20 10:26:52 +00:00
quota_size :
type : integer
format : int64
2020-08-11 21:56:10 +00:00
description : Quota as size in bytes. 0 menas unlimited. Please note that quota is updated if files are added/removed via SFTPGo otherwise a quota scan or a manual quota update is needed
2019-07-20 10:26:52 +00:00
quota_files :
type : integer
format : int32
2020-08-11 21:56:10 +00:00
description : Quota as number of files. 0 menas unlimited. Please note that quota is updated if files are added/removed via SFTPGo otherwise a quota scan or a manual quota update is needed
2019-07-20 10:26:52 +00:00
permissions :
2019-12-25 17:20:19 +00:00
type : object
2019-07-20 10:26:52 +00:00
items :
2019-12-25 17:20:19 +00:00
$ref : '#/components/schemas/DirPermissions'
2019-07-20 10:26:52 +00:00
minItems : 1
2019-12-25 17:20:19 +00:00
example : {"/" : [ "*" ] , "/somedir" : [ "list" , "download" ] }
2019-07-20 10:26:52 +00:00
used_quota_size :
type : integer
format : int64
2020-06-07 21:30:18 +00:00
used_quota_files :
2019-07-20 10:26:52 +00:00
type : integer
format : int32
2019-07-28 17:29:32 +00:00
last_quota_update :
2019-07-20 10:26:52 +00:00
type : integer
format : int64
2019-12-30 17:37:50 +00:00
description : Last quota update as unix timestamp in milliseconds
2019-07-20 10:26:52 +00:00
upload_bandwidth :
type : integer
format : int32
description : Maximum upload bandwidth as KB/s, 0 means unlimited
download_bandwidth :
type : integer
format : int32
description : Maximum download bandwidth as KB/s, 0 means unlimited
2019-11-13 10:36:21 +00:00
last_login :
type : integer
format : int64
2019-12-30 17:37:50 +00:00
description : Last user login as unix timestamp in milliseconds
filters :
$ref : '#/components/schemas/UserFilters'
2020-01-19 06:41:05 +00:00
filesystem :
$ref : '#/components/schemas/FilesystemConfig'
2019-08-24 12:41:15 +00:00
Transfer :
2019-07-20 10:26:52 +00:00
type : object
properties :
operation_type :
type : string
2019-11-13 10:36:21 +00:00
enum :
2019-07-20 10:26:52 +00:00
- upload
- download
2019-08-08 17:33:16 +00:00
path :
type : string
2019-11-18 22:30:37 +00:00
description : file path for the upload/download
2019-07-20 10:26:52 +00:00
start_time :
type : integer
format : int64
2019-07-28 17:29:32 +00:00
description : start time as unix timestamp in milliseconds
2019-07-20 10:26:52 +00:00
size :
type : integer
format : int64
description : bytes transferred
ConnectionStatus :
type : object
properties :
username :
type : string
description : connected username
connection_id :
type : string
2019-08-24 12:41:15 +00:00
description : unique connection identifier
2019-07-20 10:26:52 +00:00
client_version :
type : string
2020-07-24 21:39:38 +00:00
nullable : true
2019-11-18 22:30:37 +00:00
description : client version
2019-07-20 10:26:52 +00:00
remote_address :
type : string
2019-11-18 22:30:37 +00:00
description : Remote address for the connected client
2019-07-20 10:26:52 +00:00
connection_time :
type : integer
format : int64
2019-07-28 17:29:32 +00:00
description : connection time as unix timestamp in milliseconds
2020-08-11 21:56:10 +00:00
command :
2019-11-18 22:30:37 +00:00
type : string
2020-07-24 21:39:38 +00:00
nullable : true
2020-08-11 21:56:10 +00:00
description : SSH command or WebDAV method
2019-07-20 10:26:52 +00:00
last_activity :
type : integer
format : int64
2019-07-28 17:29:32 +00:00
description : last client activity as unix timestamp in milliseconds
2019-08-24 12:41:15 +00:00
protocol :
type : string
enum :
- SFTP
- SCP
2019-11-18 22:30:37 +00:00
- SSH
2020-08-11 21:56:10 +00:00
- FTP
- DAV
2019-07-20 10:26:52 +00:00
active_transfers :
type : array
2020-07-24 21:39:38 +00:00
nullable : true
2019-07-20 10:26:52 +00:00
items :
2019-08-24 12:41:15 +00:00
$ref : '#/components/schemas/Transfer'
2019-07-20 10:26:52 +00:00
QuotaScan :
type : object
properties :
username :
type : string
description : username with an active scan
start_time :
type : integer
format : int64
2019-07-28 17:29:32 +00:00
description : scan start time as unix timestamp in milliseconds
2020-06-07 21:30:18 +00:00
FolderQuotaScan :
type : object
properties :
mapped_path :
type : string
description : path with an active scan
start_time :
type : integer
format : int64
description : scan start time as unix timestamp in milliseconds
2019-07-20 10:26:52 +00:00
ApiResponse :
type : object
properties :
message :
type : string
2020-09-08 07:45:21 +00:00
description : message, can be empty
2019-07-20 10:26:52 +00:00
error :
type : string
nullable : true
description : error description if any
2019-08-08 08:01:33 +00:00
VersionInfo :
type : object
properties :
version :
type : string
build_date :
type : string
commit_hash :
type : string
2020-05-23 09:58:05 +00:00
features :
type : array
items :
type : string
2020-08-11 21:56:10 +00:00
description : Features for the current build. Available features are "portable", "bolt", "mysql", "sqlite", "pgsql", "s3", "gcs", "metrics". If a feature is available it has a "+" prefix, otherwise a "-" prefix
2020-02-03 23:08:00 +00:00
securitySchemes :
BasicAuth :
type : http
scheme : basic