openapi.yaml 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. openapi: 3.0.1
  2. info:
  3. title: SFTPGo
  4. description: 'SFTPGo REST API'
  5. version: 1.0.0
  6. servers:
  7. - url: /api/v1
  8. paths:
  9. /sftp_connection:
  10. get:
  11. tags:
  12. - connections
  13. summary: Get the active sftp users and info about their uploads/downloads
  14. operationId: get_connections
  15. responses:
  16. 200:
  17. description: successful operation
  18. content:
  19. application/json:
  20. schema:
  21. type: array
  22. items:
  23. $ref : '#/components/schemas/ConnectionStatus'
  24. /sftp_connection/{connectionID}:
  25. delete:
  26. tags:
  27. - connections
  28. summary: Terminate an active SFTP connection
  29. operationId: close_connection
  30. parameters:
  31. - name: connectionID
  32. in: path
  33. description: ID of the connection to close
  34. required: true
  35. schema:
  36. type: string
  37. responses:
  38. 200:
  39. description: successful operation
  40. content:
  41. application/json:
  42. schema:
  43. $ref: '#/components/schemas/ApiResponse'
  44. example:
  45. status: 200
  46. message: "Connection closed"
  47. error: ""
  48. 400:
  49. description: Bad request
  50. content:
  51. application/json:
  52. schema:
  53. $ref: '#/components/schemas/ApiResponse'
  54. example:
  55. status: 400
  56. message: ""
  57. error: "Error description if any"
  58. 404:
  59. description: Not Found
  60. content:
  61. application/json:
  62. schema:
  63. $ref: '#/components/schemas/ApiResponse'
  64. example:
  65. status: 404
  66. message: ""
  67. error: "Error description if any"
  68. 500:
  69. description: Internal Server Error
  70. content:
  71. application/json:
  72. schema:
  73. $ref: '#/components/schemas/ApiResponse'
  74. example:
  75. status: 500
  76. message: ""
  77. error: "Error description if any"
  78. /quota_scan:
  79. get:
  80. tags:
  81. - quota
  82. summary: Get the active quota scans
  83. operationId: get_quota_scan
  84. responses:
  85. 200:
  86. description: successful operation
  87. content:
  88. application/json:
  89. schema:
  90. type: array
  91. items:
  92. $ref : '#/components/schemas/QuotaScan'
  93. post:
  94. tags:
  95. - quota
  96. summary: start a new quota scan
  97. description: A quota scan update the number of files and their total size for the given user
  98. operationId: start_quota_scan
  99. requestBody:
  100. required: true
  101. content:
  102. application/json:
  103. schema:
  104. $ref : '#/components/schemas/User'
  105. responses:
  106. 201:
  107. description: successful operation
  108. content:
  109. application/json:
  110. schema:
  111. $ref: '#/components/schemas/ApiResponse'
  112. example:
  113. status: 201
  114. message: "Scan started"
  115. error: ""
  116. 400:
  117. description: Bad request
  118. content:
  119. application/json:
  120. schema:
  121. $ref: '#/components/schemas/ApiResponse'
  122. example:
  123. status: 400
  124. message: ""
  125. error: "Error description if any"
  126. 403:
  127. description: Forbidden
  128. content:
  129. application/json:
  130. schema:
  131. $ref: '#/components/schemas/ApiResponse'
  132. example:
  133. status: 403
  134. message: ""
  135. error: "Error description if any"
  136. 404:
  137. description: Not Found
  138. content:
  139. application/json:
  140. schema:
  141. $ref: '#/components/schemas/ApiResponse'
  142. example:
  143. status: 404
  144. message: ""
  145. error: "Error description if any"
  146. 409:
  147. description: Another scan is already in progress for this user
  148. content:
  149. application/json:
  150. schema:
  151. $ref: '#/components/schemas/ApiResponse'
  152. example:
  153. status: 409
  154. message: "Another scan is already in progress"
  155. error: "Error description if any"
  156. 500:
  157. description: Internal Server Error
  158. content:
  159. application/json:
  160. schema:
  161. $ref: '#/components/schemas/ApiResponse'
  162. example:
  163. status: 500
  164. message: ""
  165. error: "Error description if any"
  166. /user:
  167. get:
  168. tags:
  169. - users
  170. summary: Returns an array with one or more SFTP users
  171. description: For security reasons password and public key are empty in the response
  172. operationId: get_users
  173. parameters:
  174. - in: query
  175. name: offset
  176. schema:
  177. type: integer
  178. minimum: 0
  179. default: 0
  180. required: false
  181. - in: query
  182. name: limit
  183. schema:
  184. type: integer
  185. minimum: 1
  186. maximum: 500
  187. default: 100
  188. required: false
  189. description: The maximum number of items to return. Max value is 500, default is 100
  190. - in: query
  191. name: order
  192. required: false
  193. description: Ordering users by username
  194. schema:
  195. type: string
  196. enum:
  197. - ASC
  198. - DESC
  199. example: ASC
  200. - in: query
  201. name: username
  202. required: false
  203. description: Filter by username, extact match case sensitive
  204. schema:
  205. type: string
  206. responses:
  207. 200:
  208. description: successful operation
  209. content:
  210. application/json:
  211. schema:
  212. type: array
  213. items:
  214. $ref : '#/components/schemas/User'
  215. 400:
  216. description: Bad request
  217. content:
  218. application/json:
  219. schema:
  220. $ref: '#/components/schemas/ApiResponse'
  221. example:
  222. status: 400
  223. message: ""
  224. error: "Error description if any"
  225. 403:
  226. description: Forbidden
  227. content:
  228. application/json:
  229. schema:
  230. $ref: '#/components/schemas/ApiResponse'
  231. example:
  232. status: 403
  233. message: ""
  234. error: "Error description if any"
  235. 500:
  236. description: Internal Server Error
  237. content:
  238. application/json:
  239. schema:
  240. $ref: '#/components/schemas/ApiResponse'
  241. example:
  242. status: 500
  243. message: ""
  244. error: "Error description if any"
  245. post:
  246. tags:
  247. - users
  248. summary: Adds a new SFTP user
  249. operationId: add_user
  250. requestBody:
  251. required: true
  252. content:
  253. application/json:
  254. schema:
  255. $ref : '#/components/schemas/User'
  256. responses:
  257. 200:
  258. description: successful operation
  259. content:
  260. application/json:
  261. schema:
  262. $ref : '#/components/schemas/User'
  263. 400:
  264. description: Bad request
  265. content:
  266. application/json:
  267. schema:
  268. $ref: '#/components/schemas/ApiResponse'
  269. example:
  270. status: 400
  271. message: ""
  272. error: "Error description if any"
  273. 403:
  274. description: Forbidden
  275. content:
  276. application/json:
  277. schema:
  278. $ref: '#/components/schemas/ApiResponse'
  279. example:
  280. status: 403
  281. message: ""
  282. error: "Error description if any"
  283. 500:
  284. description: Internal Server Error
  285. content:
  286. application/json:
  287. schema:
  288. $ref: '#/components/schemas/ApiResponse'
  289. example:
  290. status: 500
  291. message: ""
  292. error: "Error description if any"
  293. /user/{userID}:
  294. get:
  295. tags:
  296. - users
  297. summary: Find user by ID
  298. description: For security reasons password and public key are empty in the response
  299. operationId: getUserByID
  300. parameters:
  301. - name: userID
  302. in: path
  303. description: ID of the user to retrieve
  304. required: true
  305. schema:
  306. type: integer
  307. format: int32
  308. responses:
  309. 200:
  310. description: successful operation
  311. content:
  312. application/json:
  313. schema:
  314. $ref : '#/components/schemas/User'
  315. 400:
  316. description: Bad request
  317. content:
  318. application/json:
  319. schema:
  320. $ref: '#/components/schemas/ApiResponse'
  321. example:
  322. status: 400
  323. message: ""
  324. error: "Error description if any"
  325. 403:
  326. description: Forbidden
  327. content:
  328. application/json:
  329. schema:
  330. $ref: '#/components/schemas/ApiResponse'
  331. example:
  332. status: 403
  333. message: ""
  334. error: "Error description if any"
  335. 404:
  336. description: Not Found
  337. content:
  338. application/json:
  339. schema:
  340. $ref: '#/components/schemas/ApiResponse'
  341. example:
  342. status: 404
  343. message: ""
  344. error: "Error description if any"
  345. 500:
  346. description: Internal Server Error
  347. content:
  348. application/json:
  349. schema:
  350. $ref: '#/components/schemas/ApiResponse'
  351. example:
  352. status: 500
  353. message: ""
  354. error: "Error description if any"
  355. put:
  356. tags:
  357. - users
  358. summary: Update an user
  359. operationId: updateUser
  360. parameters:
  361. - name: userID
  362. in: path
  363. description: ID of the user to update
  364. required: true
  365. schema:
  366. type: integer
  367. format: int32
  368. requestBody:
  369. required: true
  370. content:
  371. application/json:
  372. schema:
  373. $ref : '#/components/schemas/User'
  374. responses:
  375. 200:
  376. description: successful operation
  377. content:
  378. application/json:
  379. schema:
  380. $ref : '#/components/schemas/ApiResponse'
  381. example:
  382. status: 200
  383. message: "User updated"
  384. error: ""
  385. 400:
  386. description: Bad request
  387. content:
  388. application/json:
  389. schema:
  390. $ref: '#/components/schemas/ApiResponse'
  391. example:
  392. status: 400
  393. message: ""
  394. error: "Error description if any"
  395. 403:
  396. description: Forbidden
  397. content:
  398. application/json:
  399. schema:
  400. $ref: '#/components/schemas/ApiResponse'
  401. example:
  402. status: 403
  403. message: ""
  404. error: "Error description if any"
  405. 404:
  406. description: Not Found
  407. content:
  408. application/json:
  409. schema:
  410. $ref: '#/components/schemas/ApiResponse'
  411. example:
  412. status: 404
  413. message: ""
  414. error: "Error description if any"
  415. 500:
  416. description: Internal Server Error
  417. content:
  418. application/json:
  419. schema:
  420. $ref: '#/components/schemas/ApiResponse'
  421. example:
  422. status: 500
  423. message: ""
  424. error: "Error description if any"
  425. delete:
  426. tags:
  427. - users
  428. summary: Delete an user
  429. operationId: deleteUser
  430. parameters:
  431. - name: userID
  432. in: path
  433. description: ID of the user to delete
  434. required: true
  435. schema:
  436. type: integer
  437. format: int32
  438. responses:
  439. 200:
  440. description: successful operation
  441. content:
  442. application/json:
  443. schema:
  444. $ref : '#/components/schemas/ApiResponse'
  445. example:
  446. status: 200
  447. message: "User deleted"
  448. error: ""
  449. 400:
  450. description: Bad request
  451. content:
  452. application/json:
  453. schema:
  454. $ref: '#/components/schemas/ApiResponse'
  455. example:
  456. status: 400
  457. message: ""
  458. error: "Error description if any"
  459. 403:
  460. description: Forbidden
  461. content:
  462. application/json:
  463. schema:
  464. $ref: '#/components/schemas/ApiResponse'
  465. example:
  466. status: 403
  467. message: ""
  468. error: "Error description if any"
  469. 404:
  470. description: Not Found
  471. content:
  472. application/json:
  473. schema:
  474. $ref: '#/components/schemas/ApiResponse'
  475. example:
  476. status: 404
  477. message: ""
  478. error: "Error description if any"
  479. 500:
  480. description: Internal Server Error
  481. content:
  482. application/json:
  483. schema:
  484. $ref: '#/components/schemas/ApiResponse'
  485. example:
  486. status: 500
  487. message: ""
  488. error: "Error description if any"
  489. components:
  490. schemas:
  491. Permission:
  492. type: string
  493. enum:
  494. - '*'
  495. - list
  496. - download
  497. - upload
  498. - delete
  499. - rename
  500. - create_dirs
  501. - create_symlinks
  502. description: >
  503. Permissions:
  504. * `*` - all permission are granted
  505. * `list` - list items is allowed
  506. * `download` - download files is allowed
  507. * `upload` - upload files is allowed
  508. * `delete` - delete files or directories is allowed
  509. * `rename` - rename files or directories is allowed
  510. * `create_dirs` - create directories is allowed
  511. * `create_symlinks` - create links is allowed
  512. User:
  513. type: object
  514. properties:
  515. id:
  516. type: integer
  517. format: int32
  518. minimum: 1
  519. username:
  520. type: string
  521. password:
  522. type: string
  523. nullable: true
  524. description: password or public key are mandatory. For security reasons this field is omitted when you search/get users
  525. public_key:
  526. type: string
  527. nullable: true
  528. description: password or public key are mandatory. For security reasons this field is omitted when you search/get users. Multiple public keys are supported, newline delimited, when adding or modifying an user
  529. home_dir:
  530. type: string
  531. 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
  532. uid:
  533. type: integer
  534. format: int32
  535. minimum: 0
  536. maximum: 65535
  537. 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
  538. gid:
  539. type: integer
  540. format: int32
  541. minimum: 0
  542. maximum: 65535
  543. 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
  544. max_sessions:
  545. type: integer
  546. format: int32
  547. description: limit the sessions that an sftp user can open. 0 means unlimited
  548. quota_size:
  549. type: integer
  550. format: int64
  551. description: quota as size. 0 menas unlimited. Please note that quota is updated if files are added/removed via sftp otherwise a quota scan is needed
  552. quota_files:
  553. type: integer
  554. format: int32
  555. description: quota as number of files. 0 menas unlimited. Please note that quota is updated if files are added/removed via sftp otherwise a quota scan is needed
  556. permissions:
  557. type: array
  558. items:
  559. $ref: '#/components/schemas/Permission'
  560. minItems: 1
  561. used_quota_size:
  562. type: integer
  563. format: int64
  564. used_quota_file:
  565. type: integer
  566. format: int32
  567. last_quota_update:
  568. type: integer
  569. format: int64
  570. description: last quota update as unix timestamp in milliseconds
  571. upload_bandwidth:
  572. type: integer
  573. format: int32
  574. description: Maximum upload bandwidth as KB/s, 0 means unlimited
  575. download_bandwidth:
  576. type: integer
  577. format: int32
  578. description: Maximum download bandwidth as KB/s, 0 means unlimited
  579. SFTPTransfer:
  580. type: object
  581. properties:
  582. operation_type:
  583. type: string
  584. enum:
  585. - upload
  586. - download
  587. start_time:
  588. type: integer
  589. format: int64
  590. description: start time as unix timestamp in milliseconds
  591. size:
  592. type: integer
  593. format: int64
  594. description: bytes transferred
  595. last_activity:
  596. type: integer
  597. format: int64
  598. description: last transfer activity as unix timestamp in milliseconds
  599. ConnectionStatus:
  600. type: object
  601. properties:
  602. username:
  603. type: string
  604. description: connected username
  605. connection_id:
  606. type: string
  607. description: unique sftp connection identifier
  608. client_version:
  609. type: string
  610. description: SFTP client version
  611. remote_address:
  612. type: string
  613. description: Remote address for the connected SFTP client
  614. connection_time:
  615. type: integer
  616. format: int64
  617. description: connection time as unix timestamp in milliseconds
  618. last_activity:
  619. type: integer
  620. format: int64
  621. description: last client activity as unix timestamp in milliseconds
  622. active_transfers:
  623. type: array
  624. items:
  625. $ref : '#/components/schemas/SFTPTransfer'
  626. QuotaScan:
  627. type: object
  628. properties:
  629. username:
  630. type: string
  631. description: username with an active scan
  632. start_time:
  633. type: integer
  634. format: int64
  635. description: scan start time as unix timestamp in milliseconds
  636. ApiResponse:
  637. type: object
  638. properties:
  639. status:
  640. type: integer
  641. format: int32
  642. minimum: 200
  643. maximum: 500
  644. example: 200
  645. description: HTTP Status code, for example 200 OK, 400 Bad request and so on
  646. message:
  647. type: string
  648. nullable: true
  649. description: additional message if any
  650. error:
  651. type: string
  652. nullable: true
  653. description: error description if any