`GET /api/resources/{id}/storage/folders` — #940. List the folders directly under `path` on a storage connection, so an archive target is PICKED instead of typed blind. Only `seafile_webdav` resources are browsable today; any other kind is a 400. The stored WebDAV password is resolved server-side and never leaves the server; upstream auth/protocol failures map to 400 with a readable message. Folder selection is CONVENIENCE, not an access boundary: the connection's credential reaches whatever the account reaches, whichever folder is picked.
GET
/api/resources/{id}/storage/folders
const url = 'https://example.com/api/resources/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/storage/folders';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/resources/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/storage/foldersParameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”id
required
string format: uuid
Query Parameters
Section titled “Query Parameters”path
string
Folder path relative to the connection’s base_url (e.g. /Invoices).
Omit for the connection root. .. segments are rejected.
Responses
Section titled “Responses”Media typeapplication/json
Array<object>
One browsable folder under the requested path.
object
name
required
The folder’s own name (the last path segment, percent-decoded).
string
path
required
The folder’s path RELATIVE to the connection’s base_url, leading slash,
no trailing slash (/Invoices/2026) — exactly the shape library_path and
library_paths store, so a pick is written back verbatim.
string
Examplegenerated
[ { "name": "example", "path": "example" }]