API & Gateways
Filestash lets you interact with any kind of remote storages via its API. Some of its plugins expose those same storages through Gateways that speak protocols like SFTP, MCP and S3.
API
To use the builtin API, you will need to either start from an access token or the ID of a shared link. To generate a token:
{
"status": "ok",
"result": {
"home": "/",
"is_authenticated": true,
"backendID": "kcXbLbQdv3bGbHcQbKc7",
"authorization": "OOK4PKntipHivP0mhW2me9vVTJrGyCjqMceGbR4J1QSorke_RYf5aAid7k_nguHb4zfans_tUU5DuZaLexjHCL1ZeUXOIbr7_4A1slDbVo2znYyYQV_zArCE99wjr37VO-3RKYiS9buJTYWhK5I8ZQ=="
}
}
~/$ # a trick to set the TOKEN env variable:
~/$ export TOKEN=`curl -s -d '{"type":"tmp","userID":"test"}' https://demo.filestash.app/api/session | jq -r '.result.authorization'`
~/$ echo $TOKEN
OOK4PKntipHivP1JS-QHxD3NMz42HRbRVjp1Ebkn9BhdW62dIWXdjt-sGQd-YHWlyEKWDRz3hsW9yLjMslTzZGRPmLwwFyU29jSxAgjGK35YIVdOs8Y_73UzbEwwje7k1XwfPkmtR324r8S7pyIDoQ==
There's an API endpoint for every possible file management operation you can think of:
- List files
- Upload a file
- Download a file
- Zip something
- Rename something
- Delete something
- Create a directory
- Create an empty file
~/$ curl -H "Authorization: Bearer $TOKEN" "https://demo.filestash.app/api/files/ls?path=/"
{
"status": "ok",
"results": [
{
"name": "file.txt",
"type": "file",
"size": 10778,
"time": 1765261716167
}
],
"permissions": {}
}
~/$ # Upload a file
~/$ curl -d @file.txt -H "Authorization: Bearer $TOKEN" "https://demo.filestash.app/api/files/cat?path=/file.txt"
{
"status": "ok"
}
~/$ # Download a file
~/$ curl -H "Authorization: Bearer $TOKEN" "https://demo.filestash.app/api/files/cat?path=/file.txt"
Lorem Ipsum
~/$ # Create a ZIP
~/$ curl -H "Authorization: Bearer $TOKEN" "https://demo.filestash.app/api/files/zip?path=/" > file.zip
~/$ unzip -l file.zip
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
10778 1980-00-00 00:00 file.txt
--------- -------
10778 1 file
~/$ # Rename Something
~/$ curl -X POST -H "Authorization: Bearer $TOKEN" "https://demo.filestash.app/api/files/mv?from=/file.txt&to=/foobar.txt"
{
"status": "ok"
}
~/$ # Delete Something
~/$ curl -X POST -H "Authorization: Bearer $TOKEN" "https://demo.filestash.app/api/files/rm?path=/file.txt"
{
"status": "ok"
}
~/$ # Create a Directory
~/$ curl -X POST -H "Authorization: Bearer $TOKEN" "https://demo.filestash.app/api/files/mkdir?path=/folder/"
{
"status": "ok"
}
~/$ # Create an empty file
~/$ curl -X POST -H "Authorization: Bearer $TOKEN" "https://demo.filestash.app/api/files/touch?path=/file.txt"
{
"status": "ok"
}
Gateways
The Filestash web client is not the only way to interact with your storage. Gateways act as translation hubs that convert a base protocol into any supported storage backend, whether it is S3, SFTP, FTP, SMB, ....
SFTP Gateway
We document this in detail in the SFTP Gateway guide. It lets you interact with Filestash from any SFTP client. My personal favorite is the CLI:
test@127.0.0.1's password:
Connected to 127.0.0.1.
sftp> ls
documents downloads
sftp> documents/foobar/
documents/foobar/bin documents/foobar/boot
documents/foobar/core documents/foobar/dev
documents/foobar/dist documents/foobar/etc
...
sftp>
MCP Gateway
The Model Context Protocol enables tool usage by an LLM. If you use claude code, you can set it up like this:
Added stdio MCP server filestash with command: npx mcp-remote https://demo.filestash.app/sse to local config
Next time you open up claude, it will open up a browser window to the authentication page and you should see something like this:
╭───────────────────────────────────────────────────────────╮
│ Manage MCP servers │
│ │
│ ❯ 1. filestash ✔ connected · Enter to view details │
╰───────────────────────────────────────────────────────────╯
Esc to exit
> can you list the files at the root of the remote storage?
● I'll help you list the files at the root of the remote
storage. Let me use the MCP filestash tool to do this.
● filestash:ls (MCP)(path: "/")
⎿ [DIR] Pictures
[DIR] Music
[DIR] Videos
… +2 lines (ctrl+r to expand)
● The root directory contains:
- Pictures/ (directory)
- Music/ (directory)
- Videos/ (directory)
- README.org (file)
- Documents/ (directory)