Skip to content

Connect cloud storage providers — Google Drive, Dropbox, OneDrive, iCloud, and many more — to Hoody’s virtual filesystem. Each endpoint below creates a new backend connection with provider-specific configuration. Once connected, the backend can be mounted to a filesystem path.

All endpoints accept a JSON body with provider-specific configuration. Most fields are optional with sensible defaults; a small set of fields are required for authentication. All successful connections return 201 Created with the new backend’s identifier, and validation failures return 400 Bad Request.


Connect a Box account. Supports both user and enterprise sub-types.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
access_tokenstringNo""Box App Primary Access Token. Leave blank normally.
auth_urlstringNo""Auth server URL. Leave blank to use the provider defaults.
box_config_filestringNo""Box App config.json location. Leave blank normally.
box_sub_typestringNo"user"One of: user, enterprise.
client_credentialsbooleanNofalseUse OAuth2 client credentials flow (RFC 6749).
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
commit_retriesintegerNo100Max number of times to try committing a multipart file.
descriptionstringNo""Description of the remote.
encodingstringNo"52535298"The encoding for the backend.
impersonatestringNo""Impersonate this user ID when using a service account.
list_chunkintegerNo1000Size of listing chunk (1–1000).
owned_bystringNo""Only show items owned by the given login (email).
root_folder_idstringNo"0"Use a non-root folder as the starting point.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use the provider defaults.
upload_cutoffstringNo"52428800"Cutoff for switching to multipart upload (min 50 MiB).
{
"data": {
"backend_type": "box",
"id": "bnd_8f3a2c1e4b5d6f7a",
"mount_paths": [],
"type": "backend"
},
"message": "Box backend connected successfully",
"success": true
}
await client.files.backends.connectBox({
box_sub_type: "user",
description: "Marketing team Box account"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/box \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"box_sub_type": "user",
"description": "Marketing team Box account"
}'

Connect a Google Drive account. Supports Shared Drives, service accounts, and team impersonation.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
acknowledge_abusebooleanNofalseAllow downloading files flagged as malware/spam.
allow_import_name_changebooleanNofalseAllow filetype to 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. Leave blank to use provider defaults.
chunk_sizestringNo"8388608"Upload chunk size (power of 2, >= 256 KiB).
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""Google Application Client Id. Recommended to set your own.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
copy_shortcut_contentbooleanNofalseServer-side copy shortcut contents instead of shortcuts.
descriptionstringNo""Description of the remote.
disable_http2booleanNotrueDisable HTTP/2 for the drive backend.
encodingstringNo"16777216"The encoding for the backend.
env_authbooleanNofalseGet IAM credentials from runtime. One of: false, true.
export_formatsstringNo"docx,xlsx,pptx,svg"Comma-separated preferred export formats.
fast_list_bug_fixbooleanNotrueWork around a bug in Google Drive listing.
formatsstringNo""Deprecated: see export_formats.
impersonatestringNo""Impersonate this user when using a service account.
import_formatsstringNo""Comma-separated preferred upload formats for Google docs.
keep_revision_foreverbooleanNofalseKeep new head revision of each file forever.
list_chunkintegerNo1000Size of listing chunk (100–1000, 0 to disable).
metadata_labelsstringNo"0"Read/write labels metadata. One of: off, read, write, failok, read,write.
metadata_ownerstringNo"1"Read/write owner metadata. One of: off, read, write, failok, read,write.
metadata_permissionsstringNo"0"Read/write permissions metadata. One of: off, read, write, failok, read,write.
pacer_burstintegerNo100Number of API calls allowed without sleeping.
pacer_min_sleepintegerNo0Minimum time to sleep between API calls (seconds).
resource_keystringNo""Resource key for accessing a link-shared file.
root_folder_idstringNo""ID of the root folder. Leave blank normally.
scopestringNo""Comma-separated list of scopes. One of: drive, drive.readonly, drive.file, drive.appfolder, drive.metadata.readonly.
server_side_across_configsbooleanNofalseAllow server-side operations across different drive configs.
service_account_credentialsstringNo""Service Account Credentials JSON blob.
service_account_filestringNo""Service Account Credentials JSON file path.
shared_with_mebooleanNofalseOnly show files shared with me.
show_all_gdocsbooleanNofalseShow all Google Docs including non-exportable ones.
size_as_quotabooleanNofalseShow sizes as storage quota usage, not actual size.
skip_checksum_gphotosbooleanNofalseSkip checksums on Google photos and videos.
skip_dangling_shortcutsbooleanNofalseSkip dangling shortcut files.
skip_gdocsbooleanNofalseSkip Google documents in all listings.
skip_shortcutsbooleanNofalseSkip shortcut files completely.
starred_onlybooleanNofalseOnly show files that are starred.
stop_on_download_limitbooleanNofalseMake download limit errors fatal.
stop_on_upload_limitbooleanNofalseMake upload limit errors fatal.
team_drivestringNo""ID of the Shared Drive (Team Drive).
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
trashed_onlybooleanNofalseOnly show files in the trash.
upload_cutoffstringNo"8388608"Cutoff for switching to chunked upload.
use_created_datebooleanNofalseUse file created date instead of modified date.
use_shared_datebooleanNofalseUse date file was shared instead of modified date.
use_trashbooleanNotrueSend files to trash instead of deleting permanently.
v2_download_min_sizestringNo"-1"If objects are greater, use drive v2 API to download.
{
"data": {
"backend_type": "drive",
"id": "bnd_drive_3a7b9c2f8e1d4b6a",
"mount_paths": [],
"type": "backend"
},
"message": "Google Drive backend connected successfully",
"success": true
}
await client.files.backends.connectDrive({
client_id: "1234567890-abc.apps.googleusercontent.com",
description: "Personal Google Drive",
scope: "drive"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/drive \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"client_id": "1234567890-abc.apps.googleusercontent.com",
"description": "Personal Google Drive",
"scope": "drive"
}'

Connect a Dropbox account. Supports shared folders, team impersonation, and configurable batching.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
batch_commit_timeoutintegerNo600Max time to wait for a batch to finish committing (seconds).
batch_modestringNo"sync"Upload file batching mode (off, sync, async).
batch_sizeintegerNo0Max number of files in upload batch (< 1000).
batch_timeoutintegerNo0Max idle time before an upload batch is uploaded (seconds).
chunk_sizestringNo"50331648"Upload chunk size (< 150 MiB).
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"52469762"The encoding for the backend.
impersonatestringNo""Impersonate this user when using a business account.
pacer_min_sleepintegerNo0Minimum time to sleep between API calls (seconds).
root_namespacestringNo""Specify a different Dropbox namespace ID as the root.
shared_filesbooleanNofalseWork on individual shared files (read-only).
shared_foldersbooleanNofalseWork on shared folders.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
{
"data": {
"backend_type": "dropbox",
"id": "bnd_dropbox_7c2e9f1a3b8d4e6f",
"mount_paths": [],
"type": "backend"
},
"message": "Dropbox backend connected successfully",
"success": true
}
await client.files.backends.connectDropbox({
batch_mode: "async",
description: "Team Dropbox"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/dropbox \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"batch_mode": "async",
"description": "Team Dropbox"
}'

Connect a 1Fichier account using an API key.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
api_keystringNo""Your 1Fichier API key (from https://1fichier.com/console/params.pl).
cdnbooleanNofalseUse CDN download links.
descriptionstringNo""Description of the remote.
encodingstringNo"52666494"The encoding for the backend.
file_passwordstringNo""Password for downloading a shared password-protected file.
folder_passwordstringNo""Password for listing files in a shared password-protected folder.
shared_folderstringNo""Identifier for a shared folder to download.
{
"data": {
"backend_type": "fichier",
"id": "bnd_fichier_5d8a1b3c9e2f4a7b",
"mount_paths": [],
"type": "backend"
},
"message": "1Fichier backend connected successfully",
"success": true
}
await client.files.backends.connectFichier({
api_key: "your-1fichier-api-key",
cdn: true
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/fichier \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"api_key": "your-1fichier-api-key",
"cdn": true
}'

Connect an Enterprise File Fabric (Storage Made Easy) instance.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
descriptionstringNo""Description of the remote.
encodingstringNo"50429954"The encoding for the backend.
permanent_tokenstringNo""Permanent Authentication Token from the File Fabric dashboard.
root_folder_idstringNo""ID of the root folder. Leave blank normally.
tokenstringNo""Session token (managed automatically; do not set).
token_expirystringNo""Token expiry time (managed automatically; do not set).
urlstringYes""URL of the Enterprise File Fabric. One of: https://storagemadeeasy.com, https://eu.storagemadeeasy.com, https://yourfabric.smestorage.com.
versionstringNo""Version read from the File Fabric (managed automatically).
{
"data": {
"backend_type": "filefabric",
"id": "bnd_filefabric_4e1c8a2b7f3d9e5c",
"mount_paths": [],
"type": "backend"
},
"message": "Enterprise File Fabric backend connected successfully",
"success": true
}
await client.files.backends.connectFilefabric({
url: "https://storagemadeeasy.com",
permanent_token: "your-permanent-token"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/filefabric \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://storagemadeeasy.com",
"permanent_token": "your-permanent-token"
}'

Connect a Files.com account. Supports API key, username/password, or site-based authentication.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
api_keystringNo""The API key used to authenticate with Files.com.
descriptionstringNo""Description of the remote.
encodingstringNo"60923906"The encoding for the backend.
passwordstringNo""The password used to authenticate with Files.com.
sitestringNo""Your site subdomain (e.g. mysite) or custom domain.
usernamestringNo""The username used to authenticate with Files.com.
{
"data": {
"backend_type": "filescom",
"id": "bnd_filescom_2b7e4d9c1a5f8e3b",
"mount_paths": [],
"type": "backend"
},
"message": "Files.com backend connected successfully",
"success": true
}
await client.files.backends.connectFilescom({
site: "mysite",
username: "alice",
api_key: "your-files-com-api-key"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/filescom \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"site": "mysite",
"username": "alice",
"api_key": "your-files-com-api-key"
}'

Connect a Gofile account using an access token.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
access_tokenstringNo""API access token from the Gofile web control panel.
account_idstringNo""Account ID. Filled in automatically; leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"323331982"The encoding for the backend.
list_chunkintegerNo1000Number of items to list per call.
root_folder_idstringNo""ID of the root folder. Filled in automatically; leave blank normally.
{
"data": {
"backend_type": "gofile",
"id": "bnd_gofile_9f4c2a1e8b3d6e7a",
"mount_paths": [],
"type": "backend"
},
"message": "Gofile backend connected successfully",
"success": true
}
await client.files.backends.connectGofile({
access_token: "your-gofile-access-token"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/gofile \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"access_token": "your-gofile-access-token"
}'

Connect a Google Photos library. Supports read-only mode and proxy-based full-resolution downloads.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
batch_commit_timeoutintegerNo600Max time to wait for a batch to finish committing (seconds).
batch_modestringNo"sync"Upload file batching mode (off, sync, async).
batch_sizeintegerNo0Max number of files in upload batch (< 50).
batch_timeoutintegerNo0Max idle time before an upload batch is uploaded (seconds).
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"50348034"The encoding for the backend.
include_archivedbooleanNofalseView and download archived media.
proxystringNo""Use the gphotosdl proxy URL for full-resolution images.
read_onlybooleanNofalseRequest read-only access to your photos.
read_sizebooleanNofalseRead the size of media items (recommended for VFS mounts).
start_yearintegerNo2000Limit downloads to media uploaded after this year.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
{
"data": {
"backend_type": "google photos",
"id": "bnd_gphotos_1a8b3c5d7e2f4a9b",
"mount_paths": [],
"type": "backend"
},
"message": "Google Photos backend connected successfully",
"success": true
}
await client.files.backends.connectGooglePhotos({
read_only: true,
start_year: 2020,
description: "Family photo library"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/google-photos \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"read_only": true,
"start_year": 2020,
"description": "Family photo library"
}'

Connect a HiDrive (Strato) account.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
chunk_sizestringNo"50331648"Chunk size for chunked uploads (< 2 GiB).
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
disable_fetching_member_countbooleanNofalseSkip fetching object counts in directories.
encodingstringNo"33554434"The encoding for the backend.
endpointstringNo"https://api.hidrive.strato.com/2.1"API endpoint URL.
root_prefixstringNo"/"Root/parent folder for all paths. One of: /, root, “ (empty).
scope_accessstringNo"rw"Access permissions. One of: rw, ro.
scope_rolestringNo"user"User-level. One of: user, admin, owner.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
upload_concurrencyintegerNo4Concurrency for chunked uploads.
upload_cutoffstringNo"100663296"Threshold for chunked uploads (< 2 GiB).
{
"data": {
"backend_type": "hidrive",
"id": "bnd_hidrive_6c3f8a2e9b1d4e7c",
"mount_paths": [],
"type": "backend"
},
"message": "HiDrive backend connected successfully",
"success": true
}
await client.files.backends.connectHidrive({
scope_access: "rw",
upload_concurrency: 8
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/hidrive \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"scope_access": "rw",
"upload_concurrency": 8
}'

Connect an iCloud Drive account using Apple ID credentials. Required: Apple ID and password.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
apple_idstringYes""Apple ID.
client_idstringNo"d39ba9916b7251055b22c7f910e2ea796ee65e98b2ddecea8f5dde8d9d1a815d"Client id.
cookiesstringNo""Cookies (internal use only).
descriptionstringNo""Description of the remote.
encodingstringNo"50438146"The encoding for the backend.
passwordstringYes""Apple ID password.
trust_tokenstringNo""Trust token (internal use).
{
"data": {
"backend_type": "iclouddrive",
"id": "bnd_icloud_3e7b2c9f4a8d1e5b",
"mount_paths": [],
"type": "backend"
},
"message": "iCloud Drive backend connected successfully",
"success": true
}
await client.files.backends.connectIclouddrive({
apple_id: "alice@icloud.com",
password: "app-specific-password",
description: "Personal iCloud"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/iclouddrive \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"apple_id": "alice@icloud.com",
"password": "app-specific-password",
"description": "Personal iCloud"
}'

Connect a Jottacloud account.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"50431886"The encoding for the backend.
hard_deletebooleanNofalseDelete files permanently instead of moving to trash.
md5_memory_limitstringNo"10485760"Files larger than this are cached on disk for MD5.
no_versionsbooleanNofalseAvoid server-side versioning by recreating files.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
trashed_onlybooleanNofalseOnly show files in the trash.
upload_resume_limitstringNo"10485760"Files larger than this can be resumed on upload failure.
{
"data": {
"backend_type": "jottacloud",
"id": "bnd_jotta_8a2d5c1e9b3f7a4d",
"mount_paths": [],
"type": "backend"
},
"message": "Jottacloud backend connected successfully",
"success": true
}
await client.files.backends.connectJottacloud({
hard_delete: false
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/jottacloud \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"hard_delete": false
}'

Connect a Koofr, Digi Storage, or other Koofr-compatible storage provider. Required: endpoint URL, username, and password.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
descriptionstringNo""Description of the remote.
encodingstringNo"50438146"The encoding for the backend.
endpointstringYes""The Koofr API endpoint.
mountidstringNo""Mount ID. If omitted, the primary mount is used.
passwordstringYes""Hoody-VFS password (generate one in your service settings).
providerstringNo""Storage provider. One of: koofr, digistorage, other.
setmtimebooleanNotrueWhether the backend supports setting modification time.
userstringYes""Your user name.
{
"data": {
"backend_type": "koofr",
"id": "bnd_koofr_4f1a8e2c5b9d3a7e",
"mount_paths": [],
"type": "backend"
},
"message": "Koofr backend connected successfully",
"success": true
}
await client.files.backends.connectKoofr({
endpoint: "https://app.koofr.net",
user: "alice",
password: "hoody-app-password",
provider: "koofr"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/koofr \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"endpoint": "https://app.koofr.net",
"user": "alice",
"password": "hoody-app-password",
"provider": "koofr"
}'

Connect a Linkbox account. Required: API token from the Linkbox account page.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
descriptionstringNo""Description of the remote.
tokenstringYes""Token from https://www.linkbox.to/admin/account.
{
"data": {
"backend_type": "linkbox",
"id": "bnd_linkbox_2c8e5a1b9f3d4c7a",
"mount_paths": [],
"type": "backend"
},
"message": "Linkbox backend connected successfully",
"success": true
}
await client.files.backends.connectLinkbox({
token: "your-linkbox-token"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/linkbox \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"token": "your-linkbox-token"
}'

Connect a Mail.ru Cloud account. Required: username (email) and an app password. An app password is required — the regular account password will not work.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
check_hashbooleanNotrueWhat to do if file checksum is mismatched or invalid. One of: true, false.
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"50440078"The encoding for the backend.
passstringYes""App password.
quirksstringNo""Comma-separated list of internal maintenance flags (advanced).
speedup_enablebooleanNotrueSkip full upload if a file with the same hash already exists. One of: true, false.
speedup_file_patternsstringNo"*.mkv,*.avi,*.mp4,*.mp3,*.zip,*.gz,*.rar,*.pdf"Comma-separated patterns eligible for hash-based upload. One of: “ (empty), *, *.mkv,*.avi,*.mp4,*.mp3, *.zip,*.gz,*.rar,*.pdf.
speedup_max_diskstringNo"3221225472"Max disk usage for speedup. One of: 0, 1G, 3G.
speedup_max_memorystringNo"33554432"Files larger than this are always hashed on disk. One of: 0, 32M, 256M.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
userstringYes""User name (usually email).
user_agentstringNo""HTTP user agent used internally by the client.
{
"data": {
"backend_type": "mailru",
"id": "bnd_mailru_7d2a4c1b9e5f3a8c",
"mount_paths": [],
"type": "backend"
},
"message": "Mail.ru Cloud backend connected successfully",
"success": true
}
await client.files.backends.connectMailru({
user: "alice@mail.ru",
pass: "app-password",
speedup_enable: true
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/mailru \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"user": "alice@mail.ru",
"pass": "app-password",
"speedup_enable": true
}'

Connect a Mega account. Required: Mega username and password.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
debugbooleanNofalseOutput more debug from Mega.
descriptionstringNo""Description of the remote.
encodingstringNo"50331650"The encoding for the backend.
hard_deletebooleanNofalsePermanently delete files instead of trashing them.
passstringYes""Mega password.
use_httpsbooleanNofalseUse HTTPS for transfers (useful when an ISP throttles HTTP).
userstringYes""Mega user name.
{
"data": {
"backend_type": "mega",
"id": "bnd_mega_5a8c1e4b7d2f9a3e",
"mount_paths": [],
"type": "backend"
},
"message": "Mega backend connected successfully",
"success": true
}
await client.files.backends.connectMega({
user: "alice@example.com",
pass: "mega-password",
use_https: true
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/mega \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"user": "alice@example.com",
"pass": "mega-password",
"use_https": true
}'

Connect a Microsoft OneDrive account. Supports personal, business, and SharePoint document libraries. Use the region field for national clouds (US gov, Germany, China).

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
access_scopesstringNo["Files.Read","Files.ReadWrite","Files.Read.All","Files.ReadWrite.All","Sites.Read.All","offline_access"]Space-separated scopes to request. One of: Files.Read Files.ReadWrite Files.Read.All Files.ReadWrite.All Sites.Read.All offline_access, Files.Read Files.Read.All Sites.Read.All offline_access, Files.Read Files.ReadWrite Files.Read.All Files.ReadWrite.All offline_access.
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
av_overridebooleanNofalseAllow download of files the server thinks has a virus.
chunk_sizestringNo"10485760"Chunk size for uploads (multiple of 320 KiB, <= 250 MiB).
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
deltabooleanNofalseUse delta listing for recursive listings.
descriptionstringNo""Description of the remote.
disable_site_permissionbooleanNofalseDisable the request for Sites.Read.All permission.
drive_idstringNo""The ID of the drive to use.
drive_typestringNo""The type of the drive (personal, business, or documentLibrary).
encodingstringNo"57386894"The encoding for the backend.
expose_onenote_filesbooleanNofalseMake OneNote files show up in directory listings.
hard_deletebooleanNofalsePermanently delete files on removal.
hash_typestringNo"auto"Hash type in use. One of: auto, quickxor, sha1, sha256, crc32, none.
link_passwordstringNo""Password for links created by the link command (paid personal accounts).
link_scopestringNo"anonymous"Scope of created links. One of: anonymous, organization.
link_typestringNo"view"Type of created links. One of: view, edit, embed.
list_chunkintegerNo1000Size of listing chunk.
metadata_permissionsstringNo"0"Read/write permissions metadata. One of: off, read, write, read,write, failok.
no_versionsbooleanNofalseRemove all versions on modifying operations.
regionstringNo"global"National cloud region. One of: global, us, de, cn.
root_folder_idstringNo""ID of the root folder. Leave blank normally.
server_side_across_configsbooleanNofalseAllow server-side operations across different OneDrive configs.
tenantstringNo""Tenant ID (for client credential flow).
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
{
"data": {
"backend_type": "onedrive",
"id": "bnd_onedrive_9b3d7e1a4c8f2b5d",
"mount_paths": [],
"type": "backend"
},
"message": "OneDrive backend connected successfully",
"success": true
}
await client.files.backends.connectOnedrive({
region: "global",
drive_type: "personal",
description: "Personal OneDrive"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/onedrive \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"region": "global",
"drive_type": "personal",
"description": "Personal OneDrive"
}'

Connect an OpenDrive account. Required: username and password.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
chunk_sizestringNo"10485760"Files will be uploaded in chunks of this size.
descriptionstringNo""Description of the remote.
encodingstringNo"62007182"The encoding for the backend.
passwordstringYes""OpenDrive password.
usernamestringYes""OpenDrive username.
{
"data": {
"backend_type": "opendrive",
"id": "bnd_opendrive_1f5c8a2d4b7e3a9c",
"mount_paths": [],
"type": "backend"
},
"message": "OpenDrive backend connected successfully",
"success": true
}
await client.files.backends.connectOpendrive({
username: "alice",
password: "opendrive-password"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/opendrive \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"username": "alice",
"password": "opendrive-password"
}'

Connect a Pcloud account. Supports EU and US regions.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"50438146"The encoding for the backend.
hostnamestringNo"api.pcloud.com"Hostname to connect to. One of: api.pcloud.com, eapi.pcloud.com.
passwordstringNo""Your Pcloud password.
root_folder_idstringNo"d0"Use a non-root folder as the starting point.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
usernamestringNo""Your Pcloud username (only required for the cleanup command).
{
"data": {
"backend_type": "pcloud",
"id": "bnd_pcloud_3c7a9e2b1d5f8c4a",
"mount_paths": [],
"type": "backend"
},
"message": "Pcloud backend connected successfully",
"success": true
}
await client.files.backends.connectPcloud({
hostname: "api.pcloud.com",
root_folder_id: "d0"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/pcloud \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"hostname": "api.pcloud.com",
"root_folder_id": "d0"
}'

Connect a PikPak account. Required: PikPak username and password.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
chunk_sizestringNo"5242880"Chunk size for multipart uploads.
descriptionstringNo""Description of the remote.
device_idstringNo""Device ID used for authorization.
encodingstringNo"56829838"The encoding for the backend.
hash_memory_limitstringNo"10485760"Files larger than this are cached on disk for hashing.
no_media_linkbooleanNofalseUse original file links instead of media links.
passstringYes""PikPak password.
root_folder_idstringNo""ID of the root folder. Leave blank normally.
trashed_onlybooleanNofalseOnly show files in the trash.
upload_concurrencyintegerNo5Concurrency for multipart uploads.
use_trashbooleanNotrueSend files to trash instead of permanently deleting.
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.
{
"data": {
"backend_type": "pikpak",
"id": "bnd_pikpak_6e2c4a8b1f9d3e5a",
"mount_paths": [],
"type": "backend"
},
"message": "PikPak backend connected successfully",
"success": true
}
await client.files.backends.connectPikpak({
user: "alice@example.com",
pass: "pikpak-password",
upload_concurrency: 4
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/pikpak \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"user": "alice@example.com",
"pass": "pikpak-password",
"upload_concurrency": 4
}'

Connect a Pixeldrain account. Required: api_url (use the default unless testing against a custom instance).

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
api_keystringNo""API key for your Pixeldrain account (from https://pixeldrain.com/user/api_keys).
api_urlstringYes"https://pixeldrain.com/api"The API endpoint to connect to.
descriptionstringNo""Description of the remote.
root_folder_idstringNo"me"Root of the filesystem. Use me for your personal filesystem, or a shared directory ID.
{
"data": {
"backend_type": "pixeldrain",
"id": "bnd_pixeldrain_8a4f1c2e7b9d3a5f",
"mount_paths": [],
"type": "backend"
},
"message": "Pixeldrain backend connected successfully",
"success": true
}
await client.files.backends.connectPixeldrain({
api_url: "https://pixeldrain.com/api",
api_key: "your-pixeldrain-api-key",
root_folder_id: "me"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/pixeldrain \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"api_url": "https://pixeldrain.com/api",
"api_key": "your-pixeldrain-api-key",
"root_folder_id": "me"
}'

Connect a premiumize.me account.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
api_keystringNo""API key (not normally used — use OAuth instead).
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"50438154"The encoding for the backend.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
{
"data": {
"backend_type": "premiumizeme",
"id": "bnd_premiumizeme_2d5a8c1b9e3f4a7c",
"mount_paths": [],
"type": "backend"
},
"message": "premiumize.me backend connected successfully",
"success": true
}
await client.files.backends.connectPremiumizeme({});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/premiumizeme \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{}'

Connect a Proton Drive account. Required: username and password. Supports two-factor authentication and mailbox passwords for accounts that use separate login and mailbox passwords.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
2fastringNo""The 2FA code (e.g. 000000).
app_versionstringNo"macos-drive@1.0.0-alpha.1+hoody-vfs"App version string sent with API requests.
client_access_tokenstringNo""Client access token key (internal use only).
client_refresh_tokenstringNo""Client refresh token key (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 files and folders metadata to reduce API calls.
encodingstringNo"52559874"The encoding for the backend.
mailbox_passwordstringNo""Mailbox password (for two-password Proton accounts).
original_file_sizebooleanNotrueReturn the file size before encryption.
passwordstringYes""The password of your Proton account.
replace_existing_draftbooleanNofalseCreate a new revision when filename conflict is detected.
usernamestringYes""The username of your Proton account.
{
"data": {
"backend_type": "protondrive",
"id": "bnd_protondrive_4b9e3a7c2f1d5e8a",
"mount_paths": [],
"type": "backend"
},
"message": "Proton Drive backend connected successfully",
"success": true
}
await client.files.backends.connectProtondrive({
username: "alice@proton.me",
password: "login-password",
mailbox_password: "mailbox-password",
enable_caching: false
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/protondrive \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"username": "alice@proton.me",
"password": "login-password",
"mailbox_password": "mailbox-password",
"enable_caching": false
}'

Connect a Put.io account.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"50438146"The encoding for the backend.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
{
"data": {
"backend_type": "putio",
"id": "bnd_putio_5f1c8a3b9e2d4c7a",
"mount_paths": [],
"type": "backend"
},
"message": "Put.io backend connected successfully",
"success": true
}
await client.files.backends.connectPutio({});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/putio \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{}'

Connect a Quatrix (by Maytech) account. Required: API key and host.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
api_keystringYes""API key for accessing the Quatrix account.
descriptionstringNo""Description of the remote.
effective_upload_timestringNo"4s"Wanted upload time for one chunk.
encodingstringNo"50438146"The encoding for the backend.
hard_deletebooleanNofalseDelete files permanently rather than trashing.
hoststringYes""Host name of the Quatrix account.
maximal_summary_chunk_sizestringNo"100000000"The maximal summary for all chunks (should be >= transfers * minimal_chunk_size).
minimal_chunk_sizestringNo"10000000"The minimal size for one chunk.
skip_project_foldersbooleanNofalseSkip project folders in operations.
{
"data": {
"backend_type": "quatrix",
"id": "bnd_quatrix_7a4c2e9b1d3f8a5c",
"mount_paths": [],
"type": "backend"
},
"message": "Quatrix backend connected successfully",
"success": true
}
await client.files.backends.connectQuatrix({
host: "acme.quatrix.io",
api_key: "your-quatrix-api-key"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/quatrix \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"host": "acme.quatrix.io",
"api_key": "your-quatrix-api-key"
}'

Connect a Seafile server. Required: url and user. Supports 2FA and encrypted libraries.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
2fabooleanNofalsetrue if the account has 2FA enabled.
auth_tokenstringNo""Authentication token.
create_librarybooleanNofalseCreate a library if it doesn’t exist.
descriptionstringNo""Description of the remote.
encodingstringNo"16850954"The encoding for the backend.
librarystringNo""Name of the library. Leave blank to access all non-encrypted libraries.
library_keystringNo""Library password (for encrypted libraries only).
passstringNo""Seafile password.
urlstringYes""URL of the Seafile host. One of: https://cloud.seafile.com/.
userstringYes""User name (usually email).
{
"data": {
"backend_type": "seafile",
"id": "bnd_seafile_3f8b1c4a2e7d9a5c",
"mount_paths": [],
"type": "backend"
},
"message": "Seafile backend connected successfully",
"success": true
}
await client.files.backends.connectSeafile({
url: "https://cloud.seafile.com/",
user: "alice@example.com",
pass: "seafile-password",
library: "Documents"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/seafile \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://cloud.seafile.com/",
"user": "alice@example.com",
"pass": "seafile-password",
"library": "Documents"
}'

Connect a Citrix Sharefile account. Use the root_folder_id field to target a specific folder (e.g. favorites, allshared).

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
chunk_sizestringNo"67108864"Upload chunk size (power of 2, >= 256 KiB).
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"57091982"The encoding for the backend.
endpointstringNo""Endpoint for API calls (e.g. https://XXX.sharefile.com).
root_folder_idstringNo""ID of the root folder. One of: “ (empty, personal folders), favorites, allshared, connectors, top.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
upload_cutoffstringNo"134217728"Cutoff for switching to multipart upload.
{
"data": {
"backend_type": "sharefile",
"id": "bnd_sharefile_9c1a4e7b2d5f8a3c",
"mount_paths": [],
"type": "backend"
},
"message": "Citrix Sharefile backend connected successfully",
"success": true
}
await client.files.backends.connectSharefile({
root_folder_id: "favorites"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/sharefile \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"root_folder_id": "favorites"
}'

Connect a Sugarsync account. Most authentication fields are managed automatically after the first OAuth handshake.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
access_key_idstringNo""Sugarsync Access Key ID. Leave blank to use Hoody’s.
app_idstringNo""Sugarsync App ID. Leave blank to use Hoody’s.
authorizationstringNo""Sugarsync authorization (managed automatically).
authorization_expirystringNo""Sugarsync authorization expiry (managed automatically).
deleted_idstringNo""Sugarsync deleted folder id (managed automatically).
descriptionstringNo""Description of the remote.
encodingstringNo"50397186"The encoding for the backend.
hard_deletebooleanNofalsePermanently delete files instead of using the deleted files folder.
private_access_keystringNo""Sugarsync Private Access Key. Leave blank to use Hoody’s.
refresh_tokenstringNo""Sugarsync refresh token (managed automatically).
root_idstringNo""Sugarsync root id (managed automatically).
userstringNo""Sugarsync user (managed automatically).
{
"data": {
"backend_type": "sugarsync",
"id": "bnd_sugarsync_6d3a8c1b4e7f2a9d",
"mount_paths": [],
"type": "backend"
},
"message": "Sugarsync backend connected successfully",
"success": true
}
await client.files.backends.connectSugarsync({});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/sugarsync \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{}'

Connect a Uloz.to account.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
app_tokenstringNo""Uloz.to app API key (from the API doc or customer service).
descriptionstringNo""Description of the remote.
encodingstringNo"50438146"The encoding for the backend.
list_page_sizeintegerNo500The size of a single page for list commands (1–500).
passwordstringNo""The password for the user.
root_folder_slugstringNo""Folder slug to use as the root for all operations.
usernamestringNo""The username of the principal to operate as.
{
"data": {
"backend_type": "ulozto",
"id": "bnd_ulozto_1c9a4e7b2d5f8a3c",
"mount_paths": [],
"type": "backend"
},
"message": "Uloz.to backend connected successfully",
"success": true
}
await client.files.backends.connectUlozto({
username: "alice",
password: "ulozto-password",
app_token: "uloz-app-token",
list_page_size: 250
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/ulozto \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"username": "alice",
"password": "ulozto-password",
"app_token": "uloz-app-token",
"list_page_size": 250
}'

Connect an Uptobox account using an access token from your Uptobox account page.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
access_tokenstringNo""Your Uptobox access token (from https://uptobox.com/my_account).
descriptionstringNo""Description of the remote.
encodingstringNo"50561070"The encoding for the backend.
privatebooleanNofalseMake uploaded files private.
{
"data": {
"backend_type": "uptobox",
"id": "bnd_uptobox_2e7b4c9a1d3f8a5c",
"mount_paths": [],
"type": "backend"
},
"message": "Uptobox backend connected successfully",
"success": true
}
await client.files.backends.connectUptobox({
access_token: "your-uptobox-token",
private: false
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/uptobox \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"access_token": "your-uptobox-token",
"private": false
}'

Connect a Yandex Disk account.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"50429954"The encoding for the backend.
hard_deletebooleanNofalseDelete files permanently rather than moving to trash.
spoof_uabooleanNotrueSet the user agent to match an official Yandex Disk client.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
{
"data": {
"backend_type": "yandex",
"id": "bnd_yandex_8b2d5c1e7a9f3a4c",
"mount_paths": [],
"type": "backend"
},
"message": "Yandex Disk backend connected successfully",
"success": true
}
await client.files.backends.connectYandex({
hard_delete: false,
spoof_ua: true
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/yandex \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"hard_delete": false,
"spoof_ua": true
}'

Connect a Zoho WorkDrive account. Use the region field to target the correct Zoho region for your organization.

This endpoint takes no parameters.

NameTypeRequiredDefaultDescription
auth_urlstringNo""Auth server URL. Leave blank to use provider defaults.
client_credentialsbooleanNofalseUse OAuth2 client credentials flow.
client_idstringNo""OAuth Client Id. Leave blank normally.
client_secretstringNo""OAuth Client Secret. Leave blank normally.
descriptionstringNo""Description of the remote.
encodingstringNo"16875520"The encoding for the backend.
regionstringNo""Zoho region. One of: com, eu, in, jp, com.cn, com.au.
tokenstringNo""OAuth Access Token as a JSON blob.
token_urlstringNo""Token server URL. Leave blank to use provider defaults.
upload_cutoffstringNo"10485760"Cutoff for switching to large file upload API (min 10 MiB).
{
"data": {
"backend_type": "zoho",
"id": "bnd_zoho_4a8c1e3b7d2f9a5c",
"mount_paths": [],
"type": "backend"
},
"message": "Zoho backend connected successfully",
"success": true
}
await client.files.backends.connectZoho({
region: "com"
});
Terminal window
curl -X POST https://api.hoody.com/api/v1/backends/zoho \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"region": "com"
}'