Skip to content
Hoody.com

Connect cloud storage backends such as Google Drive, Dropbox, OneDrive, iCloud, and dozens more to a Hoody files container. Each endpoint registers a new backend of a specific provider type, returning the backend identifier you can later mount under any filesystem path. The body of every endpoint is a provider-specific configuration object whose defaults reflect typical usage, and you can override any field per request.

All endpoints share the same response envelope: a successful connection returns 201 with the new backend’s id, type, and backend_type; a failed connection returns 400 with success: false and an error string.

Connect a Google Drive backend.

NameTypeRequiredDefaultDescription
acknowledge_abusebooleanNofalseAllow download of files Google flagged as abusive
allow_import_name_changebooleanNofalseAllow filetype change when uploading Google docs
alternate_exportbooleanNofalseDeprecated, no longer needed
auth_owner_onlybooleanNofalseOnly consider files owned by the authenticated user
auth_urlstringNo""Auth server URL (blank uses provider default)
chunk_sizestringNo"8388608"Upload chunk size (power of 2, >= 256k)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""Google Application Client Id
client_secretstringNo""OAuth Client Secret
copy_shortcut_contentbooleanNofalseCopy shortcut contents rather than shortcuts on server-side copy
descriptionstringNo""Description of the remote
disable_http2booleanNotrueDisable HTTP/2 (workaround for known Drive HTTP/2 issue)
encodingstringNo"16777216"Backend encoding (see encoding overview)
env_authbooleanNofalseGet IAM credentials from runtime
export_formatsstringNo"docx,xlsx,pptx,svg"Comma-separated preferred download formats for Google docs
fast_list_bug_fixbooleanNotrueWorkaround for Drive listing bug
formatsstringNo""Deprecated, see export_formats
impersonatestringNo""Impersonate this user with a service account
import_formatsstringNo""Comma-separated preferred upload formats for Google docs
keep_revision_foreverbooleanNofalseKeep new head revision of each file forever
list_chunkintegerNo1000Listing chunk size 100-1000, 0 disables
metadata_labelsstringNo"0"Read or write labels metadata (off, read, write, failok, read,write)
metadata_ownerstringNo"1"Read or write owner metadata
metadata_permissionsstringNo"0"Read or write permissions metadata
pacer_burstintegerNo100API calls allowed without sleeping
pacer_min_sleepintegerNo0Minimum sleep between API calls (seconds)
resource_keystringNo""Resource key for link-shared files
root_folder_idstringNo""ID of the root folder (blank for default)
scopestringNo""Comma-separated OAuth scopes (drive, drive.readonly, drive.file, drive.appfolder, drive.metadata.readonly)
server_side_across_configsbooleanNofalseAllow server-side operations across Drive configs
service_account_credentialsstringNo""Service account JSON blob
service_account_filestringNo""Service account JSON file path
shared_with_mebooleanNofalseOnly show “Shared with me” files
show_all_gdocsbooleanNofalseInclude non-exportable Google docs in listings
size_as_quotabooleanNofalseShow sizes as storage quota usage
skip_checksum_gphotosbooleanNofalseSkip checksums on Google photos/videos
skip_dangling_shortcutsbooleanNofalseSkip dangling shortcut files
skip_gdocsbooleanNofalseSkip Google docs in listings
skip_shortcutsbooleanNofalseSkip shortcut files entirely
starred_onlybooleanNofalseOnly show starred files
stop_on_download_limitbooleanNofalseMake 10 TiB/day download limit errors fatal
stop_on_upload_limitbooleanNofalseMake 750 GiB/day upload limit errors fatal
team_drivestringNo""ID of the Shared Drive (Team Drive)
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
trashed_onlybooleanNofalseOnly show trashed files
upload_cutoffstringNo"8388608"Cutoff for switching to chunked upload
use_created_datebooleanNofalseUse created date instead of modified date
use_shared_datebooleanNofalseUse shared date instead of modified date
use_trashbooleanNotrueSend files to trash instead of deleting permanently
v2_download_min_sizestringNo"-1"If object is larger, use Drive v2 API to download
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "drive-1f7b3c2a",
"type": "drive",
"backend_type": "drive",
"mount_paths": []
}
}
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.connectDrive({
client_id: 'your-google-client-id.apps.googleusercontent.com',
client_secret: 'your-google-client-secret',
scope: 'drive',
root_folder_id: ''
});

Connect a Dropbox backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
batch_commit_timeoutintegerNo600Max seconds to wait for a batch to finish committing
batch_modestringNo"sync"Upload batching mode (off, sync, async)
batch_sizeintegerNo0Max files per upload batch (less than 1000)
batch_timeoutintegerNo0Max idle seconds before uploading a batch
chunk_sizestringNo"50331648"Upload chunk size (< 150 MiB)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"52469762"Backend encoding
impersonatestringNo""Impersonate a user (business accounts)
pacer_min_sleepintegerNo0Minimum sleep between API calls (seconds)
root_namespacestringNo""Different Dropbox namespace ID to use as root
shared_filesbooleanNofalseOperate on individual shared files
shared_foldersbooleanNofalseOperate on shared folders
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "dropbox-9a4b1e88",
"type": "dropbox",
"backend_type": "dropbox",
"mount_paths": []
}
}
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.connectDropbox({
client_id: 'your-dropbox-client-id',
client_secret: 'your-dropbox-client-secret',
chunk_size: '50331648'
});

Connect a Microsoft OneDrive backend.

NameTypeRequiredDefaultDescription
access_scopesstringNo"Files.Read Files.ReadWrite Files.Read.All Files.ReadWrite.All Sites.Read.All offline_access"Space-separated OAuth scopes
auth_urlstringNo""Auth server URL (blank uses provider default)
av_overridebooleanNofalseAllow download of files the server flags as infected
chunk_sizestringNo"10485760"Upload chunk size (multiple of 320k)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
deltabooleanNofalseUse delta listing for recursive listings
descriptionstringNo""Description of the remote
disable_site_permissionbooleanNofalseDo not request Sites.Read.All
drive_idstringNo""ID of the drive to use
drive_typestringNo""Type of the drive (personal, business, documentLibrary)
encodingstringNo"57386894"Backend encoding
expose_onenote_filesbooleanNofalseShow OneNote files in listings
hard_deletebooleanNofalsePermanently delete files on removal
hash_typestringNo"auto"Hash type (auto, quickxor, sha1, sha256, crc32, none)
link_passwordstringNo""Password for links created by the link command
link_scopestringNo"anonymous"Link scope (anonymous, organization)
link_typestringNo"view"Link type (view, edit, embed)
list_chunkintegerNo1000Listing chunk size
metadata_permissionsstringNo"0"Read/write permissions metadata
no_versionsbooleanNofalseRemove all versions on modifying operations
regionstringNo"global"National cloud region (global, us, de, cn)
root_folder_idstringNo""ID of the root folder
server_side_across_configsbooleanNofalseServer-side operations across OneDrive configs
tenantstringNo""Service principal tenant ID
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "onedrive-3c81d6e2",
"type": "onedrive",
"backend_type": "onedrive",
"mount_paths": []
}
}
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.connectOnedrive({
client_id: 'your-azure-app-client-id',
client_secret: 'your-azure-app-client-secret',
region: 'global',
drive_type: 'personal'
});

Connect an Apple iCloud Drive backend.

NameTypeRequiredDefaultDescription
apple_idstringYes""Apple ID
client_idstringNo"d39ba9916b7251055b22c7f910e2ea796ee65e98b2ddecea8f5dde8d9d1a815d"Client id
cookiesstringNo""Cookies (internal use only)
descriptionstringNo""Description of the remote
encodingstringNo"50438146"Backend encoding
passwordstringYes""Password
trust_tokenstringNo""Trust token
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "iclouddrive-77a2c041",
"type": "iclouddrive",
"backend_type": "iclouddrive",
"mount_paths": []
}
}
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.connectIclouddrive({
apple_id: 'user@example.com',
password: 'app-specific-password'
});

Connect a Google Photos backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
batch_commit_timeoutintegerNo600Max seconds to wait for a batch to finish committing
batch_modestringNo"sync"Upload batching mode (off, sync, async)
batch_sizeintegerNo0Max files per upload batch (less than 50)
batch_timeoutintegerNo0Max idle seconds before uploading a batch
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"50348034"Backend encoding
include_archivedbooleanNofalseView and download archived media
proxystringNo""gphotosdl proxy URL for full-resolution downloads
read_onlybooleanNofalseRequest read-only access to photos
read_sizebooleanNofalseRead size of media items (recommended for mount)
start_yearintegerNo2000Earliest year to include in downloads
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "google-photos-4e7a9b21",
"type": "google photos",
"backend_type": "google photos",
"mount_paths": []
}
}
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.connectGooglePhotos({
read_only: true,
read_size: true,
start_year: 2015
});

Connect a Pcloud backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"50438146"Backend encoding
hostnamestringNo"api.pcloud.com"Hostname (api.pcloud.com or eapi.pcloud.com)
passwordstringNo""Your pcloud password
root_folder_idstringNo"d0"Non-root folder to start from
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
usernamestringNo""Your pcloud username (required only for cleanup command)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "pcloud-8d2f4a90",
"type": "pcloud",
"backend_type": "pcloud",
"mount_paths": []
}
}
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.connectPcloud({
client_id: 'your-pcloud-client-id',
client_secret: 'your-pcloud-client-secret',
hostname: 'api.pcloud.com'
});

Connect a Yandex Disk backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"50429954"Backend encoding
hard_deletebooleanNofalsePermanently delete files instead of sending to trash
spoof_uabooleanNotrueUse the official Yandex Disk user agent
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "yandex-6b0e22c5",
"type": "yandex",
"backend_type": "yandex",
"mount_paths": []
}
}
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.connectYandex({
client_id: 'your-yandex-client-id',
client_secret: 'your-yandex-client-secret',
hard_delete: false
});

Connect a Proton Drive backend.

NameTypeRequiredDefaultDescription
2fastringNo""2FA code if 2FA is enabled
app_versionstringNo"macos-drive@1.0.0-alpha.1+hoody-vfs"App version string sent with every API request
client_access_tokenstringNo""Client access token (internal use only)
client_refresh_tokenstringNo""Client refresh token (internal use only)
client_salted_key_passstringNo""Client salted key pass (internal use only)
client_uidstringNo""Client uid (internal use only)
descriptionstringNo""Description of the remote
enable_cachingbooleanNotrueCache file/folder metadata to reduce API calls
encodingstringNo"52559874"Backend encoding
mailbox_passwordstringNo""Mailbox password (for two-password Proton accounts)
original_file_sizebooleanNotrueReturn file size before encryption
passwordstringYes""Proton account password
replace_existing_draftbooleanNofalseReplace draft on filename conflict
usernamestringYes""Proton account username
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "protondrive-c9a4e712",
"type": "protondrive",
"backend_type": "protondrive",
"mount_paths": []
}
}
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.connectProtondrive({
username: 'user@proton.me',
password: 'proton-password',
mailbox_password: 'mailbox-password',
'2fa': '123456'
});

Connect a Mega backend.

NameTypeRequiredDefaultDescription
debugbooleanNofalseOutput more debug from Mega
descriptionstringNo""Description of the remote
encodingstringNo"50331650"Backend encoding
hard_deletebooleanNofalsePermanently delete files instead of sending to trash
passstringYes""Mega password
use_httpsbooleanNofalseUse HTTPS for transfers
userstringYes""Mega username
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "mega-21d8b3f6",
"type": "mega",
"backend_type": "mega",
"mount_paths": []
}
}
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.connectMega({
user: 'user@example.com',
pass: 'mega-password',
use_https: true
});

Connect a Koofr, Digi Storage, or other Koofr-compatible backend.

NameTypeRequiredDefaultDescription
descriptionstringNo""Description of the remote
encodingstringNo"50438146"Backend encoding
endpointstringYes""The Koofr API endpoint to use
mountidstringNo""Mount ID (omitted uses primary mount)
passwordstringYes""Application password from your Koofr service
providerstringNo""Storage provider (koofr, digistorage, other)
setmtimebooleanNotrueWhether the backend supports setting modification time
userstringYes""Your user name
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "koofr-5a91d2cc",
"type": "koofr",
"backend_type": "koofr",
"mount_paths": []
}
}
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.connectKoofr({
provider: 'koofr',
endpoint: 'https://app.koofr.net',
user: 'user@example.com',
password: 'app-password'
});

Connect a Mail.ru Cloud backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
check_hashbooleanNotrueWhat to do when file checksum is mismatched or invalid
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"50440078"Backend encoding
passstringYes""Mail.ru app password
quirksstringNo""Comma-separated internal maintenance flags
speedup_enablebooleanNotrueSkip full upload if a file with the same hash already exists
speedup_file_patternsstringNo"*.mkv,*.avi,*.mp4,*.mp3,*.zip,*.gz,*.rar,*.pdf"Filename patterns eligible for speedup
speedup_max_diskstringNo"3221225472"Disable speedup for files larger than this
speedup_max_memorystringNo"33554432"Files larger than this are hashed on disk
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
userstringYes""Mail.ru user name (usually email)
user_agentstringNo""HTTP user agent
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "mailru-e21b4f8c",
"type": "mailru",
"backend_type": "mailru",
"mount_paths": []
}
}
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.connectMailru({
user: 'user@mail.ru',
pass: 'app-password',
speedup_enable: true
});

Connect a Files.com backend.

NameTypeRequiredDefaultDescription
api_keystringNo""Files.com API key
descriptionstringNo""Description of the remote
encodingstringNo"60923906"Backend encoding
passwordstringNo""Files.com password
sitestringNo""Site subdomain or custom domain
usernamestringNo""Files.com username
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "filescom-7f3a9b01",
"type": "filescom",
"backend_type": "filescom",
"mount_paths": []
}
}
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.connectFilescom({
site: 'mysite',
username: 'user@example.com',
api_key: 'filescom-api-key'
});

Connect a HiDrive (IONOS) backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
chunk_sizestringNo"50331648"Chunk size for chunked uploads
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
disable_fetching_member_countbooleanNofalseDo not fetch number of objects in subdirectories
encodingstringNo"33554434"Backend encoding
endpointstringNo"https://api.hidrive.strato.com/2.1"API endpoint URL
root_prefixstringNo"/"Root folder for all paths (/, root, or empty)
scope_accessstringNo"rw"Access permissions (rw or ro)
scope_rolestringNo"user"User level (user, admin, owner)
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
upload_concurrencyintegerNo4Concurrency for chunked uploads
upload_cutoffstringNo"100663296"Cutoff for chunked uploads
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "hidrive-2c8e5d77",
"type": "hidrive",
"backend_type": "hidrive",
"mount_paths": []
}
}
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.connectHidrive({
client_id: 'your-hidrive-client-id',
client_secret: 'your-hidrive-client-secret',
endpoint: 'https://api.hidrive.strato.com/2.1'
});

Connect a Citrix Sharefile backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
chunk_sizestringNo"67108864"Upload chunk size (power of 2, >= 256k)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"57091982"Backend encoding
endpointstringNo""API endpoint (auto-discovered during OAuth)
root_folder_idstringNo""Root folder ID ("", favorites, allshared, connectors, top)
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
upload_cutoffstringNo"134217728"Cutoff for multipart upload
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "sharefile-9d41a2f8",
"type": "sharefile",
"backend_type": "sharefile",
"mount_paths": []
}
}
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.connectSharefile({
client_id: 'your-sharefile-client-id',
client_secret: 'your-sharefile-client-secret',
endpoint: 'https://myorg.sharefile.com'
});

Connect a Quatrix by Maytech backend.

NameTypeRequiredDefaultDescription
api_keystringYes""API key for accessing Quatrix
descriptionstringNo""Description of the remote
effective_upload_timestringNo"4s"Wanted upload time for one chunk
encodingstringNo"50438146"Backend encoding
hard_deletebooleanNofalsePermanently delete files instead of sending to trash
hoststringYes""Host name of Quatrix account
maximal_summary_chunk_sizestringNo"100000000"Max summary size for all chunks
minimal_chunk_sizestringNo"10000000"Minimal size for one chunk
skip_project_foldersbooleanNofalseSkip project folders in operations
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "quatrix-3f8c2e15",
"type": "quatrix",
"backend_type": "quatrix",
"mount_paths": []
}
}
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.connectQuatrix({
host: 'myorg.quatrix.it',
api_key: 'quatrix-api-key',
minimal_chunk_size: '10000000'
});

Connect an Enterprise File Fabric backend.

NameTypeRequiredDefaultDescription
descriptionstringNo""Description of the remote
encodingstringNo"50429954"Backend encoding
permanent_tokenstringNo""Permanent Authentication Token from your File Fabric dashboard
root_folder_idstringNo""ID of the root folder to start from
tokenstringNo""Session token (auto-set by Hoody)
token_expirystringNo""Token expiry (auto-set by Hoody)
urlstringYes""File Fabric URL (https://storagemadeeasy.com, https://eu.storagemadeeasy.com, https://yourfabric.smestorage.com)
versionstringNo""File Fabric version (auto-set by Hoody)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "filefabric-b61f0c92",
"type": "filefabric",
"backend_type": "filefabric",
"mount_paths": []
}
}
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.connectFilefabric({
url: 'https://storagemadeeasy.com',
permanent_token: 'long-lived-token-from-dashboard'
});

Connect a Seafile backend.

NameTypeRequiredDefaultDescription
2fabooleanNofalseWhether 2FA is enabled on the account
auth_tokenstringNo""Authentication token
create_librarybooleanNofalseCreate a library if it doesn’t exist
descriptionstringNo""Description of the remote
encodingstringNo"16850954"Backend encoding
librarystringNo""Name of the library (blank for all non-encrypted libraries)
library_keystringNo""Library password (encrypted libraries only)
passstringNo""Seafile password
urlstringYes""Seafile host URL (https://cloud.seafile.com/)
userstringYes""Seafile username (usually email)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "seafile-1d9a4f3e",
"type": "seafile",
"backend_type": "seafile",
"mount_paths": []
}
}
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.connectSeafile({
url: 'https://cloud.seafile.com/',
user: 'user@example.com',
pass: 'seafile-password'
});

Connect a Zoho WorkDrive backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"16875520"Backend encoding
regionstringNo""Zoho region (com, eu, in, jp, com.cn, com.au)
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
upload_cutoffstringNo"10485760"Cutoff for large file upload API (min 10 MiB)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "zoho-0b7d8e23",
"type": "zoho",
"backend_type": "zoho",
"mount_paths": []
}
}
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.connectZoho({
client_id: 'your-zoho-client-id',
client_secret: 'your-zoho-client-secret',
region: 'com'
});

Connect an OpenDrive backend.

NameTypeRequiredDefaultDescription
chunk_sizestringNo"10485760"Chunk size for uploads (buffered in memory)
descriptionstringNo""Description of the remote
encodingstringNo"62007182"Backend encoding
passwordstringYes""OpenDrive password
usernamestringYes""OpenDrive username
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "opendrive-4f2a9e18",
"type": "opendrive",
"backend_type": "opendrive",
"mount_paths": []
}
}
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.connectOpendrive({
username: 'user@example.com',
password: 'opendrive-password'
});

Connect a Box backend.

NameTypeRequiredDefaultDescription
access_tokenstringNo""Box App Primary Access Token (leave blank normally)
auth_urlstringNo""Auth server URL (blank uses provider default)
box_config_filestringNo""Path to Box App config.json
box_sub_typestringNo"user"Box sub-type (user or enterprise)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
commit_retriesintegerNo100Max retries for committing a multipart file
descriptionstringNo""Description of the remote
encodingstringNo"52535298"Backend encoding
impersonatestringNo""Impersonate a user with a JWT service account
list_chunkintegerNo1000Listing chunk size 1-1000
owned_bystringNo""Only show items owned by this email
root_folder_idstringNo"0"Non-root folder to start from
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
upload_cutoffstringNo"52428800"Cutoff for multipart upload (min 50 MiB)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "box-a5c81d92",
"type": "box",
"backend_type": "box",
"mount_paths": []
}
}
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.connectBox({
box_sub_type: 'user',
client_id: 'your-box-client-id',
client_secret: 'your-box-client-secret'
});

Connect a 1Fichier backend.

NameTypeRequiredDefaultDescription
api_keystringNo""API key from 1fichier.com/console/params.pl
cdnbooleanNofalseUse CDN download links
descriptionstringNo""Description of the remote
encodingstringNo"52666494"Backend encoding
file_passwordstringNo""Password for a shared file
folder_passwordstringNo""Password for a shared folder
shared_folderstringNo""Shared folder identifier
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "fichier-2e7b09f5",
"type": "fichier",
"backend_type": "fichier",
"mount_paths": []
}
}
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.connectFichier({
api_key: '1fichier-api-key',
cdn: true
});

Connect a Gofile backend.

NameTypeRequiredDefaultDescription
access_tokenstringNo""API access token from the web control panel
account_idstringNo""Account ID (auto-filled by Hoody)
descriptionstringNo""Description of the remote
encodingstringNo"323331982"Backend encoding
list_chunkintegerNo1000Items per listing call
root_folder_idstringNo""Root folder ID (auto-filled by Hoody)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "gofile-1b9c4f62",
"type": "gofile",
"backend_type": "gofile",
"mount_paths": []
}
}
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.connectGofile({
access_token: 'gofile-access-token'
});

Connect a Linkbox backend.

NameTypeRequiredDefaultDescription
descriptionstringNo""Description of the remote
tokenstringYes""Token from linkbox.to/admin/account
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "linkbox-5d82e1a7",
"type": "linkbox",
"backend_type": "linkbox",
"mount_paths": []
}
}
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.connectLinkbox({
token: 'linkbox-account-token'
});

Connect a Pixeldrain Filesystem backend.

NameTypeRequiredDefaultDescription
api_keystringNo""API key from pixeldrain.com/user/api_keys
api_urlstringYes"https://pixeldrain.com/api"Pixeldrain API endpoint
descriptionstringNo""Description of the remote
root_folder_idstringNo"me"Root filesystem (me or a shared directory ID)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "pixeldrain-3a08c4f1",
"type": "pixeldrain",
"backend_type": "pixeldrain",
"mount_paths": []
}
}
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.connectPixeldrain({
api_url: 'https://pixeldrain.com/api',
api_key: 'pixeldrain-api-key',
root_folder_id: 'me'
});

Connect a PikPak backend.

NameTypeRequiredDefaultDescription
chunk_sizestringNo"5242880"Multipart upload chunk size
descriptionstringNo""Description of the remote
device_idstringNo""Device ID used for authorization
encodingstringNo"56829838"Backend encoding
hash_memory_limitstringNo"10485760"Cache files larger than this on disk for hashing
no_media_linkbooleanNofalseUse original file links instead of media links
passstringYes""PikPak password
root_folder_idstringNo""Root folder ID (blank uses default)
trashed_onlybooleanNofalseOnly show trashed files
upload_concurrencyintegerNo5Multipart upload concurrency
use_trashbooleanNotrueSend files to trash instead of permanent delete
userstringYes""PikPak username
user_agentstringNo"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0"HTTP user agent for PikPak
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "pikpak-6e2b1d4c",
"type": "pikpak",
"backend_type": "pikpak",
"mount_paths": []
}
}
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.connectPikpak({
user: 'user@example.com',
pass: 'pikpak-password',
upload_concurrency: 5
});

Connect a premiumize.me backend.

NameTypeRequiredDefaultDescription
api_keystringNo""API key (use OAuth instead if possible)
auth_urlstringNo""Auth server URL (blank uses provider default)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"50438154"Backend encoding
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "premiumizeme-8a07f5c1",
"type": "premiumizeme",
"backend_type": "premiumizeme",
"mount_paths": []
}
}
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.connectPremiumizeme({
client_id: 'your-premiumize-client-id',
client_secret: 'your-premiumize-client-secret'
});

Connect a Put.io backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"50438146"Backend encoding
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "putio-71d3a8e4",
"type": "putio",
"backend_type": "putio",
"mount_paths": []
}
}
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.connectPutio({
client_id: 'your-putio-client-id',
client_secret: 'your-putio-client-secret'
});

Connect a Sugarsync backend.

NameTypeRequiredDefaultDescription
access_key_idstringNo""Sugarsync Access Key ID (blank uses Hoody’s)
app_idstringNo""Sugarsync App ID (blank uses Hoody’s)
authorizationstringNo""Sugarsync authorization (auto-configured by Hoody)
authorization_expirystringNo""Authorization expiry (auto-configured by Hoody)
deleted_idstringNo""Sugarsync deleted folder id (auto-configured by Hoody)
descriptionstringNo""Description of the remote
encodingstringNo"50397186"Backend encoding
hard_deletebooleanNofalsePermanently delete files instead of moving to deleted folder
private_access_keystringNo""Sugarsync Private Access Key (blank uses Hoody’s)
refresh_tokenstringNo""Sugarsync refresh token (auto-configured by Hoody)
root_idstringNo""Sugarsync root id (auto-configured by Hoody)
userstringNo""Sugarsync user (auto-configured by Hoody)
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "sugarsync-0a9d4e21",
"type": "sugarsync",
"backend_type": "sugarsync",
"mount_paths": []
}
}
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.connectSugarsync({
access_key_id: 'your-sugarsync-access-key',
private_access_key: 'your-sugarsync-private-key',
app_id: 'your-sugarsync-app-id'
});

Connect an Uptobox backend.

NameTypeRequiredDefaultDescription
access_tokenstringNo""Uptobox access token from uptobox.com/my_account
descriptionstringNo""Description of the remote
encodingstringNo"50561070"Backend encoding
privatebooleanNofalseMake uploaded files private
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "uptobox-2c9b7f04",
"type": "uptobox",
"backend_type": "uptobox",
"mount_paths": []
}
}
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.connectUptobox({
access_token: 'uptobox-access-token',
private: false
});

Connect a Uloz.to backend.

NameTypeRequiredDefaultDescription
app_tokenstringNo""Uloz.to app token (API key)
descriptionstringNo""Description of the remote
encodingstringNo"50438146"Backend encoding
list_page_sizeintegerNo500Listing page size (1-500)
passwordstringNo""Uloz.to user password
root_folder_slugstringNo""Root folder slug
usernamestringNo""Uloz.to username
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "ulozto-4d6c2f81",
"type": "ulozto",
"backend_type": "ulozto",
"mount_paths": []
}
}
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.connectUlozto({
username: 'user@uloz.to',
password: 'ulozto-password',
app_token: 'ulozto-app-token'
});

Connect a Jottacloud backend.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL (blank uses provider default)
client_credentialsbooleanNofalseUse OAuth2 client credentials flow
client_idstringNo""OAuth Client Id
client_secretstringNo""OAuth Client Secret
descriptionstringNo""Description of the remote
encodingstringNo"50431886"Backend encoding
hard_deletebooleanNofalsePermanently delete files instead of sending to trash
md5_memory_limitstringNo"10485760"Cache files larger than this on disk for MD5 calculation
no_versionsbooleanNofalseAvoid server-side versioning
tokenstringNo""OAuth Access Token as JSON blob
token_urlstringNo""Token server URL (blank uses provider default)
trashed_onlybooleanNofalseOnly show trashed files
upload_resume_limitstringNo"10485760"Files larger than this can resume a failed upload
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "jottacloud-9e2f4b8a",
"type": "jottacloud",
"backend_type": "jottacloud",
"mount_paths": []
}
}
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.connectJottacloud({
client_id: 'your-jottacloud-client-id',
client_secret: 'your-jottacloud-client-secret',
hard_delete: false
});