Cloud storage
Section titled “Cloud storage”Connect a cloud storage provider as a backend so it can be mounted on a Hoody container. Each endpoint creates one backend connection for a specific provider (Google Drive, Dropbox, iCloud, and so on). The returned backend id is later passed as backend_id when creating a mount.
All endpoints share the same response shape: a data object carrying the new backend’s id, type, vfs_backend_type, config, and mount_paths; plus a success flag and a message. Errors follow the standard error format (success, error, optional code).
Connect a backend
Section titled “Connect a backend”POST /api/v1/backends/box
Section titled “POST /api/v1/backends/box”Connect a Box.
Box supports user and enterprise OAuth accounts. The token, client id, and client secret are usually supplied by the OAuth flow; leave them blank unless a custom client is in use.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
access_token | string | No | "" | Box App Primary Access Token. Leave blank normally. |
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
box_sub_type | string | No | "user" | One of "user", "enterprise". |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
commit_retries | integer | No | 100 | Max number of times to try committing a multipart file. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "52535298" | The encoding for the backend. |
impersonate | string | No | "" | Impersonate this user ID when using a service account. |
list_chunk | integer | No | 1000 | Size of listing chunk 1-1000. |
owned_by | string | No | "" | Only show items owned by the login (email address) passed in. |
root_folder_id | string | No | "0" | Fill in for Hoody to use a non root folder as its starting point. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
upload_cutoff | string | No | "52428800" | Cutoff for switching to multipart upload (min 50 MiB). |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "box", "vfs_backend_type": "box", "mount_paths": [], "config": { "root_folder_id": "0", "list_chunk": 1000 } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/box" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "box_sub_type": "user", "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createBox({ box_sub_type: 'user', client_id: '', client_secret: '', token: ''});POST /api/v1/backends/drive
Section titled “POST /api/v1/backends/drive”Connect a Google Drive.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
acknowledge_abuse | boolean | No | false | Set to allow files flagged as cannotDownloadAbusiveFile to be downloaded. |
allow_import_name_change | boolean | No | false | Allow the filetype to change when uploading Google docs. |
alternate_export | boolean | No | false | Deprecated. No longer needed. |
auth_owner_only | boolean | No | false | Only consider files owned by the authenticated user. |
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
chunk_size | string | No | "8388608" | Upload chunk size. Must be a power of 2 >= 256k. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | Google Application Client Id. Leave blank to use Hoody’s shared client id. |
client_secret | string | No | "" | Google Application Client Secret. |
copy_shortcut_content | boolean | No | false | Server side copy contents of shortcuts instead of the shortcut. |
description | string | No | "" | Description of the remote. |
disable_http2 | boolean | No | true | Disable drive using HTTP/2. |
encoding | string | No | "16777216" | The encoding for the backend. |
env_auth | boolean (enum: false) | No | false | Get IAM credentials from runtime. Only false is accepted. |
export_formats | string | No | "docx,xlsx,pptx,svg" | Comma separated list of preferred formats for downloading Google docs. |
fast_list_bug_fix | boolean | No | true | Work around a bug in Google Drive listing. |
formats | string | No | "" | Deprecated. See export_formats. |
impersonate | string | No | "" | Impersonate this user when using a service account. |
import_formats | string | No | "" | Comma separated list of preferred formats for uploading Google docs. |
keep_revision_forever | boolean | No | false | Keep new head revision of each file forever. |
list_chunk | integer | No | 1000 | Size of listing chunk 100-1000, 0 to disable. |
metadata_enforce_expansive_access | boolean | No | false | Whether the request should enforce expansive access rules. |
metadata_labels | string | No | "0" | Control whether labels should be read or written in metadata. One of "off", "read", "write", "failok", "read,write". |
metadata_owner | string | No | "1" | Control whether owner should be read or written in metadata. One of "off", "read", "write", "failok", "read,write". |
metadata_permissions | string | No | "0" | Control whether permissions should be read or written in metadata. One of "off", "read", "write", "failok", "read,write". |
pacer_burst | integer | No | 100 | Number of API calls to allow without sleeping. |
pacer_min_sleep | integer | No | 0 | Minimum time to sleep between API calls (seconds). |
resource_key | string | No | "" | Resource key for accessing a link-shared file. |
root_folder_id | string | No | "" | ID of the root folder. Leave blank normally. |
scope | string | No | "" | Comma separated list of scopes. One of "drive", "drive.readonly", "drive.file", "drive.appfolder", "drive.metadata.readonly". |
server_side_across_configs | boolean | No | false | Deprecated. Allow server-side operations across different drive configs. |
service_account_credentials | string | No | "" | Service Account Credentials JSON blob. |
shared_with_me | boolean | No | false | Only show files that are shared with me. |
show_all_gdocs | boolean | No | false | Show all Google Docs including non-exportable ones in listings. |
size_as_quota | boolean | No | false | Show sizes as storage quota usage, not actual size. |
skip_checksum_gphotos | boolean | No | false | Skip checksums on Google photos and videos only. |
skip_dangling_shortcuts | boolean | No | false | If set, skip dangling shortcut files. |
skip_gdocs | boolean | No | false | Skip google documents in all listings. |
skip_shortcuts | boolean | No | false | If set, skip shortcut files. |
starred_only | boolean | No | false | Only show files that are starred. |
stop_on_download_limit | boolean | No | false | Make download limit errors be fatal. |
stop_on_upload_limit | boolean | No | false | Make upload limit errors be fatal. |
team_drive | string | No | "" | ID of the Shared Drive (Team Drive). |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
trashed_only | boolean | No | false | Only show files that are in the trash. |
upload_cutoff | string | No | "8388608" | Cutoff for switching to chunked upload. |
use_created_date | boolean | No | false | Use file created date instead of modified date. |
use_shared_date | boolean | No | false | Use date file was shared instead of modified date. |
use_trash | boolean | No | true | Send files to the trash instead of deleting permanently. |
v2_download_min_size | string | No | "-1" | If objects are greater, use drive v2 API to download. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "drive", "vfs_backend_type": "drive", "mount_paths": [], "config": { "scope": "drive", "root_folder_id": "" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/drive" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scope": "drive", "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createDrive({ scope: 'drive', client_id: '', client_secret: '', token: ''});POST /api/v1/backends/dropbox
Section titled “POST /api/v1/backends/dropbox”Connect a Dropbox.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
batch_commit_timeout | integer | No | 600 | Max time to wait for a batch to finish committing (seconds). |
batch_mode | string | No | "sync" | Upload file batching: sync, async, or off. |
batch_size | integer | No | 0 | Max number of files in upload batch. Must be less than 1000. |
batch_timeout | integer | No | 0 | Max time to allow an idle upload batch before uploading (seconds). |
chunk_size | string | No | "50331648" | Upload chunk size (< 150 MiB). |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "52469762" | The encoding for the backend. |
export_formats | string | No | "html,md" | Comma separated list of preferred formats for exporting files. |
impersonate | string | No | "" | Impersonate this user when using a business account. |
impersonate_admin | string | No | "" | Team admin ID to use when performing actions as a team administrator. |
pacer_min_sleep | integer | No | 0 | Minimum time to sleep between API calls (seconds). |
root_namespace | string | No | "" | Specify a different Dropbox namespace ID to use as the root for all paths. |
shared_files | boolean | No | false | Instructs Hoody to work on individual shared files. |
shared_folders | boolean | No | false | Instructs Hoody to work on shared folders. |
show_all_exports | boolean | No | false | Show all exportable files in listings. |
skip_exports | boolean | No | false | Skip exportable files in all listings. |
skip_shared_folders | boolean | No | false | Instructs Hoody to skip all shared folders. |
skip_unowned_folders | boolean | No | false | Instructs Hoody to skip shared folders not owned by the current user. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "dropbox", "vfs_backend_type": "dropbox", "mount_paths": [], "config": { "client_id": "", "client_secret": "", "token": "" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/dropbox" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createDropbox({ client_id: '', client_secret: '', token: ''});POST /api/v1/backends/fichier
Section titled “POST /api/v1/backends/fichier”Connect a 1Fichier.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
api_key | string | No | "" | Your API Key, from https://1fichier.com/console/params.pl. |
cdn | boolean | No | false | Set if you wish to use CDN download links. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "52666494" | The encoding for the backend. |
file_password | string | No | "" | If you want to download a shared file that is password protected, add this parameter. |
folder_password | string | No | "" | If you want to list the files in a shared folder that is password protected, add this parameter. |
shared_folder | string | No | "" | If you want to download a shared folder, add this parameter. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "fichier", "vfs_backend_type": "fichier", "mount_paths": [], "config": { "api_key": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/fichier" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "api_key": "YOUR_API_KEY" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createFichier({ api_key: 'YOUR_API_KEY'});POST /api/v1/backends/filefabric
Section titled “POST /api/v1/backends/filefabric”Connect an Enterprise File Fabric.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
description | string | No | "" | Description of the remote. |
encoding | string | No | "50429954" | The encoding for the backend. |
permanent_token | string | No | "" | Permanent Authentication Token, valid for several years. |
root_folder_id | string | No | "" | ID of the root folder. Leave blank normally. |
token | string | No | "" | Session Token. Don’t set this value. Hoody will set it automatically. |
token_expiry | string | No | "" | Token expiry time. Don’t set this value. Hoody will set it automatically. |
url | string | Yes | "" | URL of the Enterprise File Fabric to connect to. One of "https://storagemadeeasy.com", "https://eu.storagemadeeasy.com", "https://yourfabric.smestorage.com". |
version | string | No | "" | Version read from the file fabric. Don’t set this value. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "filefabric", "vfs_backend_type": "filefabric", "mount_paths": [], "config": { "url": "https://storagemadeeasy.com", "permanent_token": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/filefabric" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://storagemadeeasy.com", "permanent_token": "YOUR_PERMANENT_TOKEN" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createFilefabric({ url: 'https://storagemadeeasy.com', permanent_token: 'YOUR_PERMANENT_TOKEN'});POST /api/v1/backends/filescom
Section titled “POST /api/v1/backends/filescom”Connect a Files.com.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
api_key | string | No | "" | The API key used to authenticate with Files.com. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "60923906" | The encoding for the backend. |
password | string | No | "" | The password used to authenticate with Files.com. |
site | string | No | "" | Your site subdomain (e.g. mysite) or custom domain (e.g. myfiles.customdomain.com). |
username | string | No | "" | The username used to authenticate with Files.com. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "filescom", "vfs_backend_type": "filescom", "mount_paths": [], "config": { "site": "mysite", "username": "alice", "api_key": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/filescom" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "site": "mysite", "username": "alice", "api_key": "YOUR_API_KEY" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createFilescom({ site: 'mysite', username: 'alice', api_key: 'YOUR_API_KEY'});POST /api/v1/backends/gofile
Section titled “POST /api/v1/backends/gofile”Connect a Gofile.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
access_token | string | No | "" | API Access token, from the web control panel. |
account_id | string | No | "" | Account ID. Leave blank normally, Hoody fills it in automatically. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "323331982" | The encoding for the backend. |
list_chunk | integer | No | 1000 | Number of items to list in each call. |
root_folder_id | string | No | "" | ID of the root folder. Leave blank normally. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "gofile", "vfs_backend_type": "gofile", "mount_paths": [], "config": { "access_token": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/gofile" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "access_token": "YOUR_ACCESS_TOKEN" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createGofile({ access_token: 'YOUR_ACCESS_TOKEN'});POST /api/v1/backends/google-photos
Section titled “POST /api/v1/backends/google-photos”Connect Google Photos.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
batch_commit_timeout | integer | No | 600 | Max time to wait for a batch to finish committing (seconds). |
batch_mode | string | No | "sync" | Upload file batching: sync, async, or off. |
batch_size | integer | No | 0 | Max number of files in upload batch. Must be less than 50. |
batch_timeout | integer | No | 0 | Max time to allow an idle upload batch before uploading (seconds). |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank to use Hoody’s shared client id. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50348034" | The encoding for the backend. |
include_archived | boolean | No | false | Also view and download archived media. |
proxy | string | No | "" | URL of the gphotosdl proxy for downloading full resolution images. |
read_only | boolean | No | false | Make Google Photos requests read only. |
read_size | boolean | No | false | Read the size of media items. Recommended for Hoody mount. |
start_year | integer | No | 2000 | Year limit; photos uploaded after this year are eligible. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "google photos", "vfs_backend_type": "google photos", "mount_paths": [], "config": { "client_id": "", "client_secret": "", "token": "", "start_year": 2000 } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/google-photos" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createGooglePhotos({ client_id: '', client_secret: '', token: ''});POST /api/v1/backends/hidrive
Section titled “POST /api/v1/backends/hidrive”Connect a HiDrive.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
chunk_size | string | No | "50331648" | Chunk size for chunked uploads (max 2147483647 bytes). |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
disable_fetching_member_count | boolean | No | false | Do not fetch number of objects in directories unless absolutely necessary. |
encoding | string | No | "33554434" | The encoding for the backend. |
endpoint | string | No | "https://api.hidrive.strato.com/2.1" | Endpoint for the service. This is the URL that API-calls will be made to. |
root_prefix | string | No | "/" | The root/parent folder for all paths. One of "/", "root", "". |
scope_access | string | No | "rw" | Access permissions that Hoody should use when requesting access from HiDrive. One of "rw", "ro". |
scope_role | string | No | "user" | User-level that Hoody should use when requesting access from HiDrive. One of "user", "admin", "owner". |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
upload_concurrency | integer | No | 4 | Concurrency for chunked uploads. |
upload_cutoff | string | No | "100663296" | Cutoff/threshold for chunked uploads (max 2147483647 bytes). |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "hidrive", "vfs_backend_type": "hidrive", "mount_paths": [], "config": { "endpoint": "https://api.hidrive.strato.com/2.1", "scope_access": "rw", "scope_role": "user" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/hidrive" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createHidrive({ client_id: '', client_secret: '', token: ''});POST /api/v1/backends/iclouddrive
Section titled “POST /api/v1/backends/iclouddrive”Connect iCloud Drive and Photos.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
apple_id | string | Yes | "" | Apple ID. |
client_id | string | No | "d39ba9916b7251055b22c7f910e2ea796ee65e98b2ddecea8f5dde8d9d1a815d" | Client ID for iCloud API access. |
cookies | string | No | "" | Session cookies. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50438146" | The encoding for the backend. |
password | string | Yes | "" | Password. |
service | string | No | "drive" | iCloud service to use. One of "drive", "photos". |
trust_token | string | No | "" | Trust token for session authentication. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "iclouddrive", "vfs_backend_type": "iclouddrive", "mount_paths": [], "config": { "apple_id": "alice@example.com", "service": "drive", "password": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/iclouddrive" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "apple_id": "alice@example.com", "password": "APPLE_ID_PASSWORD", "service": "drive" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createIclouddrive({ apple_id: 'alice@example.com', password: 'APPLE_ID_PASSWORD', service: 'drive'});POST /api/v1/backends/jottacloud
Section titled “POST /api/v1/backends/jottacloud”Connect a Jottacloud.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50435982" | The encoding for the backend. |
hard_delete | boolean | No | false | Delete files permanently rather than putting them into the trash. |
md5_memory_limit | string | No | "10485760" | Files bigger than this will be cached on disk to calculate the MD5. |
no_versions | boolean | No | false | Avoid server side versioning by deleting files and recreating files instead of overwriting them. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
trashed_only | boolean | No | false | Only show files that are in the trash. |
upload_resume_limit | string | No | "10485760" | Files bigger than this can be resumed if the upload fails. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "jottacloud", "vfs_backend_type": "jottacloud", "mount_paths": [], "config": { "client_id": "", "client_secret": "", "token": "" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/jottacloud" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createJottacloud({ client_id: '', client_secret: '', token: ''});POST /api/v1/backends/koofr
Section titled “POST /api/v1/backends/koofr”Connect Koofr, Digi Storage, and other Koofr-compatible storage providers.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
description | string | No | "" | Description of the remote. |
encoding | string | No | "50438146" | The encoding for the backend. |
endpoint | string | Yes | "" | The Koofr API endpoint to use. |
mountid | string | No | "" | Mount ID of the mount to use. If omitted, the primary mount is used. |
password | string | Yes | "" | Your password for Hoody (generate one at your service’s settings page). |
provider | string | No | "" | Choose your storage provider. One of "koofr", "digistorage", "other". |
setmtime | boolean | No | true | Does the backend support setting modification time. Set this to false if you use a mount ID that points to a Dropbox or Amazon Drive backend. |
user | string | Yes | "" | Your user name. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "koofr", "vfs_backend_type": "koofr", "mount_paths": [], "config": { "endpoint": "https://app.koofr.net", "user": "alice", "password": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/koofr" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "https://app.koofr.net", "user": "alice", "password": "KOOFR_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createKoofr({ endpoint: 'https://app.koofr.net', user: 'alice', password: 'KOOFR_PASSWORD'});POST /api/v1/backends/linkbox
Section titled “POST /api/v1/backends/linkbox”Connect a Linkbox.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
description | string | No | "" | Description of the remote. |
email | string | Yes | "" | Email for login. |
password | string | Yes | "" | Password for login. |
token | string | Yes | "" | Token from https://www.linkbox.to/admin/account. |
web_token | string | No | "" | Web API login token. Set automatically. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "linkbox", "vfs_backend_type": "linkbox", "mount_paths": [], "config": { "email": "alice@example.com", "token": "***", "password": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/linkbox" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "email": "alice@example.com", "password": "LINKBOX_PASSWORD", "token": "LINKBOX_TOKEN" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createLinkbox({ email: 'alice@example.com', password: 'LINKBOX_PASSWORD', token: 'LINKBOX_TOKEN'});POST /api/v1/backends/mailru
Section titled “POST /api/v1/backends/mailru”Connect a Mail.ru Cloud.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
check_hash | boolean | No | true | What should copy do if file checksum is mismatched or invalid. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50440078" | The encoding for the backend. |
pass | string | Yes | "" | App password. |
speedup_enable | boolean | No | true | Skip full upload if there is another file with the same data hash. |
speedup_file_patterns | string | No | "*.mkv,*.avi,*.mp4,*.mp3,*.zip,*.gz,*.rar,*.pdf" | Comma separated list of file name patterns eligible for speedup (put by hash). |
speedup_max_disk | string | No | "3221225472" | Disable speedup (put by hash) for large files. |
speedup_max_memory | string | No | "33554432" | Files larger than this will always be hashed on disk. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
user | string | Yes | "" | User name (usually email). |
user_agent | string | No | "" | HTTP user agent used internally by the client. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "mailru", "vfs_backend_type": "mailru", "mount_paths": [], "config": { "user": "alice@example.com", "pass": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/mailru" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "user": "alice@example.com", "pass": "MAILRU_APP_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createMailru({ user: 'alice@example.com', pass: 'MAILRU_APP_PASSWORD'});POST /api/v1/backends/mega
Section titled “POST /api/v1/backends/mega”Connect a Mega.
The request accepts either pass or password as the credential. password is an alias for pass: an empty value is ignored, and a non-empty value that differs from pass is refused with 400.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
2fa | string | No | "" | The 2FA code of your MEGA account if the account is set up with one. |
debug | boolean | No | false | Output more debug from Mega. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50331650" | The encoding for the backend. |
hard_delete | boolean | No | false | Delete files permanently rather than putting them into the trash. |
master_key | string | No | "" | Master key (internal use only). |
pass | string | Conditional | "" | Password. Required if password is not set. |
password | string | Conditional | (none) | Alias for pass. Required if pass is not set. |
session_id | string | No | "" | Session (internal use only). |
use_https | boolean | No | false | Use HTTPS for transfers. |
user | string | Yes | "" | User name. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "mega", "vfs_backend_type": "mega", "mount_paths": [], "config": { "user": "alice@example.com", "pass": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/mega" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "user": "alice@example.com", "pass": "MEGA_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createMega({ user: 'alice@example.com', pass: 'MEGA_PASSWORD'});POST /api/v1/backends/onedrive
Section titled “POST /api/v1/backends/onedrive”Connect Microsoft OneDrive.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
access_scopes | string | No | "Files.Read Files.ReadWrite Files.Read.All Files.ReadWrite.All Sites.Read.All offline_access" | Space separated list of scopes for Hoody to request. |
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
av_override | boolean | No | false | Allow download of files the server thinks has a virus. |
chunk_size | string | No | "10485760" | Chunk size to upload files with. Must be a multiple of 320k. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
delta | boolean | No | false | If set, Hoody will use delta listing to implement recursive listings. |
description | string | No | "" | Description of the remote. |
disable_site_permission | boolean | No | false | Disable the request for Sites.Read.All permission. |
drive_id | string | No | "" | The ID of the drive to use. |
drive_type | string | No | "" | The type of the drive: personal, business, or documentLibrary. |
encoding | string | No | "57386894" | The encoding for the backend. |
expose_onenote_files | boolean | No | false | Make OneNote files show up in directory listings. |
hard_delete | boolean | No | false | Permanently delete files on removal. |
hash_type | string | No | "auto" | Specify the hash in use. One of "auto", "quickxor", "sha1", "sha256", "crc32", "none". |
link_password | string | No | "" | Set the password for links created by the link command. |
link_scope | string | No | "anonymous" | Set the scope of the links created by the link command. One of "anonymous", "organization". |
link_type | string | No | "view" | Set the type of the links created by the link command. One of "view", "edit", "embed". |
list_chunk | integer | No | 1000 | Size of listing chunk. |
metadata_permissions | string | No | "0" | Control whether permissions should be read or written in metadata. One of "off", "read", "write", "read,write", "failok". |
no_versions | boolean | No | false | Remove all versions on modifying operations. |
region | string | No | "global" | Choose national cloud region. One of "global", "us", "de", "cn". |
root_folder_id | string | No | "" | ID of the root folder. Leave blank normally. |
server_side_across_configs | boolean | No | false | Allow server-side operations across different OneDrive configs. |
tenant | string | No | "" | ID of the service principal’s tenant. |
tenant_url | string | No | "" | The tenant URL for non-admin OneDrive access. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
upload_cutoff | string | No | "-1" | Cutoff for switching to chunked upload. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "onedrive", "vfs_backend_type": "onedrive", "mount_paths": [], "config": { "region": "global", "drive_type": "personal" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/onedrive" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "", "client_secret": "", "token": "", "region": "global" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createOnedrive({ client_id: '', client_secret: '', token: '', region: 'global'});POST /api/v1/backends/opendrive
Section titled “POST /api/v1/backends/opendrive”Connect an OpenDrive.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
access | string | No | "private" | Access permission for uploads. One of "private", "public", "hidden". |
chunk_size | string | No | "10485760" | Upload chunk size. Chunks are buffered in memory. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "62007182" | The encoding for the backend. |
password | string | Yes | "" | Password. |
username | string | Yes | "" | Username. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "opendrive", "vfs_backend_type": "opendrive", "mount_paths": [], "config": { "username": "alice", "password": "***", "access": "private" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/opendrive" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "username": "alice", "password": "OPENDRIVE_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createOpendrive({ username: 'alice', password: 'OPENDRIVE_PASSWORD'});POST /api/v1/backends/pcloud
Section titled “POST /api/v1/backends/pcloud”Connect a Pcloud.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50438146" | The encoding for the backend. |
hostname | string | No | "api.pcloud.com" | Hostname to connect to. One of "api.pcloud.com", "eapi.pcloud.com". |
password | string | No | "" | Your pcloud password. |
root_folder_id | string | No | "d0" | Fill in for Hoody to use a non root folder as its starting point. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
username | string | No | "" | Your pcloud username. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "pcloud", "vfs_backend_type": "pcloud", "mount_paths": [], "config": { "hostname": "api.pcloud.com", "username": "alice", "root_folder_id": "d0" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/pcloud" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "hostname": "api.pcloud.com", "username": "alice", "password": "PCLOUD_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createPcloud({ hostname: 'api.pcloud.com', username: 'alice', password: 'PCLOUD_PASSWORD'});POST /api/v1/backends/pikpak
Section titled “POST /api/v1/backends/pikpak”Connect a PikPak.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
chunk_size | string | No | "5242880" | Chunk size for multipart uploads. |
description | string | No | "" | Description of the remote. |
device_id | string | No | "" | Device ID used for authorization. |
encoding | string | No | "56829838" | The encoding for the backend. |
hash_memory_limit | string | No | "10485760" | Files bigger than this will be cached on disk to calculate hash if required. |
no_media_link | boolean | No | false | Use original file links instead of media links. |
pass | string | No | "" | PikPak password. |
root_folder_id | string | No | "" | ID of the root folder. Leave blank normally. |
trashed_only | boolean | No | false | Only show files that are in the trash. |
upload_concurrency | integer | No | 4 | Concurrency for multipart uploads. |
upload_cutoff | string | No | "209715200" | Cutoff for switching to chunked upload. Minimum 0, maximum 5 GiB. |
use_trash | boolean | No | true | Send files to the trash instead of deleting permanently. |
user | string | No | "" | PikPak username. |
user_agent | string | No | "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0" | HTTP user agent for PikPak. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "pikpak", "vfs_backend_type": "pikpak", "mount_paths": [], "config": { "user": "alice@example.com", "pass": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/pikpak" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "user": "alice@example.com", "pass": "PIKPAK_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createPikpak({ user: 'alice@example.com', pass: 'PIKPAK_PASSWORD'});POST /api/v1/backends/pixeldrain
Section titled “POST /api/v1/backends/pixeldrain”Connect the Pixeldrain Filesystem.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
api_key | string | No | "" | API key for your pixeldrain account, from https://pixeldrain.com/user/api_keys. |
api_url | string | No | "https://pixeldrain.com/api" | The API endpoint to connect to. |
description | string | No | "" | Description of the remote. |
root_folder_id | string | No | "me" | Root of the filesystem to use. Set to "me" for your personal filesystem, or a shared directory ID. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "pixeldrain", "vfs_backend_type": "pixeldrain", "mount_paths": [], "config": { "api_url": "https://pixeldrain.com/api", "root_folder_id": "me", "api_key": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/pixeldrain" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "api_url": "https://pixeldrain.com/api", "root_folder_id": "me", "api_key": "PIXELDRAIN_API_KEY" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createPixeldrain({ api_url: 'https://pixeldrain.com/api', root_folder_id: 'me', api_key: 'PIXELDRAIN_API_KEY'});POST /api/v1/backends/premiumizeme
Section titled “POST /api/v1/backends/premiumizeme”Connect premiumize.me.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
api_key | string | No | "" | API Key. This is not normally used; use OAuth instead. |
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50438154" | The encoding for the backend. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "premiumizeme", "vfs_backend_type": "premiumizeme", "mount_paths": [], "config": { "client_id": "", "client_secret": "", "token": "" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/premiumizeme" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createPremiumizeme({ client_id: '', client_secret: '', token: ''});POST /api/v1/backends/protondrive
Section titled “POST /api/v1/backends/protondrive”Connect Proton Drive.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
2fa | string | No | "" | The 2FA code, if the account is set up with 2FA. |
app_version | string | No | "" | App version string. Third-party integrations should use external-drive-<project>@<version>. |
client_access_token | string | No | "" | Client access token key (internal use only). |
client_refresh_token | string | No | "" | Client refresh token key (internal use only). |
client_salted_key_pass | string | No | "" | Client salted key pass key (internal use only). |
client_uid | string | No | "" | Client uid key (internal use only). |
description | string | No | "" | Description of the remote. |
enable_caching | boolean | No | true | Cache files and folders metadata to reduce API calls. |
encoding | string | No | "52559874" | The encoding for the backend. |
mailbox_password | string | No | "" | Mailbox password for two-password Proton accounts. |
original_file_size | boolean | No | true | Return the file size before encryption. |
otp_secret_key | string | No | "" | The OTP secret key, if the account is set up with 2FA. |
password | string | No | "" | The password of your Proton account. |
replace_existing_draft | boolean | No | false | Create a new revision when filename conflict is detected. |
username | string | No | "" | The username of your Proton account. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "protondrive", "vfs_backend_type": "protondrive", "mount_paths": [], "config": { "username": "alice", "password": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/protondrive" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "username": "alice", "password": "PROTON_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createProtondrive({ username: 'alice', password: 'PROTON_PASSWORD'});POST /api/v1/backends/putio
Section titled “POST /api/v1/backends/putio”Connect Put.io.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50438146" | The encoding for the backend. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "putio", "vfs_backend_type": "putio", "mount_paths": [], "config": { "client_id": "", "client_secret": "", "token": "" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/putio" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createPutio({ client_id: '', client_secret: '', token: ''});POST /api/v1/backends/quatrix
Section titled “POST /api/v1/backends/quatrix”Connect Quatrix by Maytech.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
api_key | string | Yes | "" | API key for accessing Quatrix account. |
description | string | No | "" | Description of the remote. |
effective_upload_time | string | No | "4s" | Wanted upload time for one chunk. |
encoding | string | No | "50438146" | The encoding for the backend. |
hard_delete | boolean | No | false | Delete files permanently rather than putting them into the trash. |
host | string | Yes | "" | Host name of Quatrix account. |
maximal_summary_chunk_size | string | No | "100000000" | The maximal summary for all chunks. It should not be less than ‘transfers’*‘minimal_chunk_size’. |
minimal_chunk_size | string | No | "10000000" | The minimal size for one chunk. |
skip_project_folders | boolean | No | false | Skip project folders in operations. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "quatrix", "vfs_backend_type": "quatrix", "mount_paths": [], "config": { "host": "quatrix.example.com", "api_key": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/quatrix" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "host": "quatrix.example.com", "api_key": "YOUR_API_KEY" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createQuatrix({ host: 'quatrix.example.com', api_key: 'YOUR_API_KEY'});POST /api/v1/backends/seafile
Section titled “POST /api/v1/backends/seafile”Connect a seafile.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
2fa | boolean | No | false | Two-factor authentication (true if the account has 2FA enabled). |
auth_token | string | No | "" | Authentication token. |
create_library | boolean | No | false | Should Hoody create a library if it doesn’t exist. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50405386" | The encoding for the backend. |
library | string | No | "" | Name of the library. Leave blank to access all non-encrypted libraries. |
library_key | string | No | "" | Library password (for encrypted libraries only). Leave blank if you pass it through the command line. |
pass | string | No | "" | Password. |
url | string | Yes | "" | URL of seafile host to connect to. One of "https://cloud.seafile.com/". |
user | string | No | "" | User name (usually email address). |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "seafile", "vfs_backend_type": "seafile", "mount_paths": [], "config": { "url": "https://cloud.seafile.com/", "user": "alice@example.com", "pass": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/seafile" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://cloud.seafile.com/", "user": "alice@example.com", "pass": "SEAFILE_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createSeafile({ url: 'https://cloud.seafile.com/', user: 'alice@example.com', pass: 'SEAFILE_PASSWORD'});POST /api/v1/backends/sharefile
Section titled “POST /api/v1/backends/sharefile”Connect Citrix Sharefile.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
chunk_size | string | No | "67108864" | Upload chunk size. Must be a power of 2 >= 256k. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "57091982" | The encoding for the backend. |
endpoint | string | No | "" | Endpoint for API calls. Usually auto discovered during OAuth. |
root_folder_id | string | No | "" | ID of the root folder. One of "", "favorites", "allshared", "connectors", "top". |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
upload_cutoff | string | No | "134217728" | Cutoff for switching to multipart upload. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "sharefile", "vfs_backend_type": "sharefile", "mount_paths": [], "config": { "endpoint": "https://XXX.sharefile.com", "root_folder_id": "" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/sharefile" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "https://XXX.sharefile.com", "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createSharefile({ endpoint: 'https://XXX.sharefile.com', client_id: '', client_secret: '', token: ''});POST /api/v1/backends/sugarsync
Section titled “POST /api/v1/backends/sugarsync”Connect a Sugarsync.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
access_key_id | string | No | "" | Sugarsync Access Key ID. Leave blank to use Hoody’s. |
app_id | string | No | "" | Sugarsync App ID. Leave blank to use Hoody’s. |
authorization | string | No | "" | Sugarsync authorization. Leave blank normally. |
authorization_expiry | string | No | "" | Sugarsync authorization expiry. Leave blank normally. |
deleted_id | string | No | "" | Sugarsync deleted folder id. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50397186" | The encoding for the backend. |
hard_delete | boolean | No | false | Permanently delete files. Otherwise put them in the deleted files folder. |
private_access_key | string | No | "" | Sugarsync Private Access Key. Leave blank to use Hoody’s. |
refresh_token | string | No | "" | Sugarsync refresh token. Leave blank normally. |
root_id | string | No | "" | Sugarsync root id. Leave blank normally. |
user | string | No | "" | Sugarsync user. Leave blank normally. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "sugarsync", "vfs_backend_type": "sugarsync", "mount_paths": [], "config": { "access_key_id": "***", "app_id": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/sugarsync" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{}'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createSugarsync({});POST /api/v1/backends/ulozto
Section titled “POST /api/v1/backends/ulozto”Connect Uloz.to.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
app_token | string | No | "" | The application token identifying the app. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50438146" | The encoding for the backend. |
list_page_size | integer | No | 500 | The size of a single page for list commands, 1-500. |
password | string | No | "" | The password for the user. |
root_folder_slug | string | No | "" | If set, Hoody uses this folder as the root folder for all operations. |
username | string | No | "" | The username of the principal to operate as. |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "ulozto", "vfs_backend_type": "ulozto", "mount_paths": [], "config": { "app_token": "***", "username": "alice", "password": "***" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/ulozto" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "app_token": "YOUR_APP_TOKEN", "username": "alice", "password": "ULOZTO_PASSWORD" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createUlozto({ app_token: 'YOUR_APP_TOKEN', username: 'alice', password: 'ULOZTO_PASSWORD'});POST /api/v1/backends/yandex
Section titled “POST /api/v1/backends/yandex”Connect Yandex Disk.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "50429954" | The encoding for the backend. |
hard_delete | boolean | No | false | Delete files permanently rather than putting them into the trash. |
spoof_ua | boolean | No | true | Set the user agent to match an official version of the Yandex Disk client. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
upload_wait | integer | No | 0 | Wait this long after an upload before setting the modification time (seconds). |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "yandex", "vfs_backend_type": "yandex", "mount_paths": [], "config": { "client_id": "", "client_secret": "", "token": "" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/yandex" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createYandex({ client_id: '', client_secret: '', token: ''});POST /api/v1/backends/zoho
Section titled “POST /api/v1/backends/zoho”Connect Zoho.
Request body
Section titled “Request body”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
auth_url | string | No | "" | Auth server URL. Leave blank to use the provider defaults. |
client_credentials | boolean | No | false | Use client credentials OAuth flow (RFC 6749). |
client_id | string | No | "" | OAuth Client Id. Leave blank normally. |
client_secret | string | No | "" | OAuth Client Secret. Leave blank normally. |
description | string | No | "" | Description of the remote. |
encoding | string | No | "16875520" | The encoding for the backend. |
list_folder_burst | integer | No | 6 | Same-folder listings allowed back-to-back before --zoho-list-folder-limit paces them. |
list_folder_limit | integer | No | 19 | Max listings of the same folder allowed per --zoho-list-folder-window. |
list_folder_window | integer | No | 60 | The window for --zoho-list-folder-limit (seconds). |
region | string | No | "" | Zoho region to connect to. One of "com", "eu", "in", "jp", "com.cn", "com.au". |
root_folder_id | string | No | "" | ID of the root folder. Leave blank normally. |
token | string | No | "" | OAuth Access Token as a JSON blob. |
token_url | string | No | "" | Token server URL. Leave blank to use the provider defaults. |
tpslimit | string | No | "6" | Max number of API transactions per second. |
tpslimit_burst | integer | No | 1 | Number of API calls to allow back-to-back without sleeping, for --zoho-tpslimit. |
upload_cutoff | string | No | "10485760" | Cutoff for switching to large file upload API (min 10 MiB). |
Responses
Section titled “Responses”{ "success": true, "message": "Backend connected successfully", "data": { "id": "0123456789abcdef", "type": "zoho", "vfs_backend_type": "zoho", "mount_paths": [], "config": { "region": "com", "client_id": "", "client_secret": "", "token": "" } }}{ "success": false, "error": "Connection failed"}{ "success": false, "error": "Pending uploads on this backend"}Sent when uploads from before a service restart are still pending on this backend, or a delivery of pending uploads to this backend is running. The response carries a Retry-After header (seconds).
{ "success": false, "error": "Mounts unavailable", "code": "MOUNT_STORAGE_UNAVAILABLE"}The response includes a Retry-After header (seconds).
| Error Code | Title | Description | Resolution |
|---|---|---|---|
MOUNT_STORAGE_UNAVAILABLE | Mounts unavailable | The server’s storage check did not pass, so no mount or backend connection can start, and backend file operations are refused. Existing mounts show the error. Other files are served as usual. Nothing was changed. | Retry after the time given in Retry-After. |
Example
Section titled “Example”curl -X POST "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/zoho" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "region": "com", "client_id": "", "client_secret": "", "token": "" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.files.backends.createZoho({ region: 'com', client_id: '', client_secret: '', token: ''});