Filestash has an API to enable developers to interact with any type of storage in one consistent manner whether it's S3, SFTP, FTP or anything else. To start using that API, you first need to create an API key from the admin console:

For the sake of this documentation page, we've setup that api key 'foobar' which has some cors rules setup to work from any filestash subdomain making this page entirely interactive. Also we've created a shared link called 'shareID' which we will be using in this page. The list of curl commands will only be working if you set this up first in your terminal:

export INSTANCE=https://demo.filestash.app
export SHARE=shareID
export KEY=foobar

API for File management

There's an API endpoint for every possible file management operation you can think of:

List files and folder under the specified path. The results key will show the content of a folder and the metadata key will show what you can and cannot do from there.
curl "$INSTANCE/api/files/ls?share=$SHARE&key=$KEY&path=/"
    "status": "ok",
    "results": [
            "name": "README.org",
            "type": "file",
            "size": 281,
            "time": 1591432761000
            "name": "Documents",
            "type": "directory",
            "size": 0,
            "time": 1591432774000
Upload a file at the specified path
curl "$INSTANCE/api/files/cat?share=$SHARE&key=$KEY&path=/input.txt" \
    -X POST --data @input.txt

Download the file located under the specified path. Plugins can further expand of what is possible here, eg: plg_image_ascii which can render images as ascii art

curl -X GET "$INSTANCE/api/files/cat?key=$KEY&share=$SHARE&path=/input.txt"

Create a Zip file from something
curl "$INSTANCE/api/files/zip?share=$SHARE&key=$KEY&path=/input.txt"

Create a new folder
curl -X POST "$INSTANCE/api/files/mkdir?key=$KEY&share=$SHARE&path=/tmp/"

Create an empty file
curl -X POST "$INSTANCE/api/files/touch?key=$KEY&share=$SHARE&path=/test.txt" 

Rename a file / folder from the specified path to the specified destination
curl -X POST "$INSTANCE/api/files/mv?key=$KEY&share=$SHARE&from=/input.txt&to=/test/input.txt"

Remove the file/folder at the specified path
curl -X POST "$INSTANCE/api/files/rm?key=$KEY&share=$SHARE&path=/test/" 


If you want to create shared links programmatically, check this out