Skip to content
Hoody.com

Connect cloud object storage backends to a container’s filesystem. Each endpoint registers a new backend with the files service. Once connected, the backend can be mounted and accessed like any other storage provider.

All endpoints accept a JSON body describing the backend, return a backend identifier on success, and target the container-scoped hostname below.

https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com

Connect a Microsoft Azure Blob Storage backend.

This endpoint takes no parameters.

All fields are optional. Provide credentials through account/key or sas_url. env_auth, use_msi, and use_az accept only false: runtime credentials are not available.

NameTypeDefaultRequiredDescription
access_tierstring""NoAccess tier for uploaded blobs (hot, cool, cold, or archive).
accountstring""NoAzure Storage Account Name.
archive_tier_deletebooleanfalseNoDelete archive tier blobs before overwriting them.
chunk_sizestring"4194304"NoUpload chunk size in bytes.
client_certificate_passwordstring (password)""NoPassword for the certificate file.
client_idstring""NoThe ID of the client in use.
client_secretstring""NoOne of the service principal’s client secrets.
client_send_certificate_chainbooleanfalseNoSend the certificate chain when using certificate auth.
copy_concurrencyinteger512NoConcurrency for multipart copy.
copy_cutoffstring"8388608"NoCutoff for switching to multipart copy.
copy_total_concurrencyinteger0NoGlobal concurrency limit for multipart copy chunks.
decompressbooleanfalseNoIf set, decompress gzip-encoded objects on download.
delete_snapshotsstring (enum: "", include, only)""NoHow to handle snapshots on blob deletion.
descriptionstring""NoDescription of the remote.
directory_markersbooleanfalseNoUpload empty objects ending with / for new directories.
disable_checksumbooleanfalseNoDon’t store MD5 checksum with object metadata.
disable_instance_discoverybooleanfalseNoSkip requesting Microsoft Entra instance metadata.
encodingstring"21078018"NoThe encoding for the backend.
endpointstring""NoEndpoint for the service.
env_authboolean (enum: false)falseNoRead credentials from runtime (environment variables, CLI, or MSI).
keystring""NoStorage Account Shared Key.
list_chunkinteger5000NoSize of blob list per request.
list_parallelisminteger0NoNumber of parallel shards to list a directory with.
memory_pool_flush_timeinteger60NoMemory buffer pool flush interval, in seconds (no longer used).
memory_pool_use_mmapbooleanfalseNoUse mmap buffers in internal memory pool (no longer used).
msi_client_idstring""NoClient ID of the user-assigned MSI to use.
msi_mi_res_idstring""NoAzure resource ID of the user-assigned MSI to use.
msi_object_idstring""NoObject ID of the user-assigned MSI to use.
no_check_containerbooleanfalseNoDon’t check that the container exists or create it.
no_head_objectbooleanfalseNoDon’t do HEAD before GET when getting objects.
passwordstring (password)""NoUser’s password (user with username/password auth).
public_accessstring (enum: "", blob, container)""NoPublic access level of the container.
sas_urlstring""NoSAS URL for container-level access only.
tenantstring""NoID of the service principal’s tenant.
upload_concurrencyinteger16NoConcurrency for multipart uploads.
upload_cutoffstring""NoCutoff for switching to chunked upload (deprecated).
use_arrow_listbooleanfalseNoUse the experimental Apache Arrow listing format.
use_azboolean (enum: false)falseNoUse Azure CLI tool az for authentication.
use_copy_blobbooleantrueNoWhether to use the Copy Blob API when copying to the same storage account.
use_emulatorboolean (enum: false)falseNoUse the local Azure storage emulator.
use_msiboolean (enum: false)falseNoUse a managed service identity to authenticate.
usernamestring""NoUsername (usually an email address).
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/azureblob \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"account": "mystorageaccount",
"key": "<account-shared-key>",
"access_tier": "hot",
"description": "Azure Blob production backups"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "azureblob",
"vfs_backend_type": "azureblob",
"config": {
"account": "mystorageaccount",
"key": "***",
"access_tier": "hot",
"description": "Azure Blob production backups"
},
"mount_paths": []
}
}

Connect a Microsoft Azure Files backend.

This endpoint takes no parameters.

All fields are optional. Provide credentials through account/key or sas_url. env_auth, use_msi, and use_az accept only false: runtime credentials are not available. share_name is strongly recommended.

NameTypeDefaultRequiredDescription
accountstring""NoAzure Storage Account Name.
chunk_sizestring"4194304"NoUpload chunk size in bytes.
client_certificate_passwordstring (password)""NoPassword for the certificate file.
client_idstring""NoThe ID of the client in use.
client_secretstring""NoOne of the service principal’s client secrets.
client_send_certificate_chainbooleanfalseNoSend the certificate chain when using certificate auth.
descriptionstring""NoDescription of the remote.
disable_instance_discoverybooleanfalseNoSkip requesting Microsoft Entra instance metadata.
encodingstring"54634382"NoThe encoding for the backend.
endpointstring""NoEndpoint for the service.
env_authboolean (enum: false)falseNoRead credentials from runtime.
keystring""NoStorage Account Shared Key.
max_stream_sizestring"10737418240"NoMax size for streamed files.
msi_client_idstring""NoClient ID of the user-assigned MSI.
msi_mi_res_idstring""NoAzure resource ID of the user-assigned MSI.
msi_object_idstring""NoObject ID of the user-assigned MSI.
passwordstring (password)""NoUser’s password.
sas_urlstring""NoSAS URL.
share_namestring""NoAzure Files Share Name.
tenantstring""NoID of the service principal’s tenant.
upload_concurrencyinteger16NoConcurrency for multipart uploads.
use_azboolean (enum: false)falseNoUse Azure CLI tool az for authentication.
use_emulatorboolean (enum: false)falseNoUse the local Azure storage emulator.
use_msiboolean (enum: false)falseNoUse a managed service identity to authenticate.
usernamestring""NoUsername (usually an email address).
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/azurefiles \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"account": "mystorageaccount",
"share_name": "production",
"key": "<account-shared-key>",
"description": "Azure Files production share"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "azurefiles",
"vfs_backend_type": "azurefiles",
"config": {
"account": "mystorageaccount",
"share_name": "production",
"key": "***",
"description": "Azure Files production share"
},
"mount_paths": []
}
}

Connect a Backblaze B2 backend.

This endpoint takes no parameters.

NameTypeDefaultRequiredDescription
accountstring""YesAccount ID or Application Key ID.
keystring""YesApplication Key.
chunk_sizestring"100663296"NoUpload chunk size in bytes.
copy_cutoffstring"4294967296"NoCutoff for switching to multipart copy.
descriptionstring""NoDescription of the remote.
disable_checksumbooleanfalseNoDisable checksums for large files.
download_auth_durationinteger604800NoPublic link authorization token lifetime, in seconds.
download_urlstring""NoCustom endpoint for downloads (e.g. a Cloudflare CDN URL).
encodingstring"50438146"NoThe encoding for the backend.
endpointstring""NoEndpoint for the service.
hard_deletebooleanfalseNoPermanently delete files on remote removal.
lifecycleinteger0NoDays deleted files are kept when creating a bucket.
memory_pool_flush_timeinteger60NoMemory buffer pool flush interval, in seconds (no longer used).
memory_pool_use_mmapbooleanfalseNoUse mmap buffers in internal memory pool (no longer used).
sse_customer_algorithmstring (enum: "", AES256)""NoIf using SSE-C, the server-side encryption algorithm used when storing this object in B2.
sse_customer_keystring""NoSecret encryption key (UTF-8) for SSE-C.
sse_customer_key_base64string""NoSecret encryption key (Base64) for SSE-C.
sse_customer_key_md5string""NoOptional MD5 checksum of the SSE-C encryption key.
test_modestring""NoDebug flag for the X-Bz-Test-Mode header.
upload_concurrencyinteger4NoConcurrency for multipart uploads.
upload_cutoffstring"209715200"NoCutoff for switching to chunked upload.
version_atstring"0001-01-01T00:00:00Z"NoShow file versions as they were at the specified time.
versionsbooleanfalseNoInclude old versions in directory listings.
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/b2 \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"account": "<b2-account-id>",
"key": "<b2-application-key>",
"hard_delete": true,
"description": "Backblaze B2 archival"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "b2",
"vfs_backend_type": "b2",
"config": {
"account": "***",
"key": "***",
"hard_delete": true,
"description": "Backblaze B2 archival"
},
"mount_paths": []
}
}

Connect a Cloudinary backend.

This endpoint takes no parameters.

NameTypeDefaultRequiredDescription
cloud_namestring""YesCloudinary Environment Name.
api_keystring""YesCloudinary API Key.
api_secretstring""YesCloudinary API Secret.
adjust_media_files_extensionsbooleantrueNoAdjust media file extensions, since Cloudinary handles them as a file attribute.
descriptionstring""NoDescription of the remote.
encodingstring"52543246"NoThe encoding for the backend.
eventually_consistent_delayinteger0NoWait N seconds for eventual consistency.
media_extensionsstring"3ds,3g2,3gp,ai,arw,avi,avif,bmp,bw,cr2,cr3,djvu,dng,eps3,fbx,flif,flv,gif,glb,gltf,hdp,heic,heif,ico,indd,jp2,jpe,jpeg,jpg,jxl,jxr,m2ts,mov,mp4,mpeg,mts,mxf,obj,ogv,pdf,ply,png,psd,svg,tga,tif,tiff,ts,u3ma,usdz,wdp,webm,webp,wmv"NoCloudinary supported media extensions.
upload_prefixstring""NoAPI endpoint prefix for environments outside the US.
upload_presetstring""NoUpload preset for asset manipulation.
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/cloudinary \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"cloud_name": "mycloud",
"api_key": "<cloudinary-key>",
"api_secret": "<cloudinary-secret>",
"description": "Cloudinary media library"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "cloudinary",
"vfs_backend_type": "cloudinary",
"config": {
"cloud_name": "mycloud",
"api_key": "***",
"api_secret": "***",
"description": "Cloudinary media library"
},
"mount_paths": []
}
}

POST /api/v1/backends/google-cloud-storage

Section titled “POST /api/v1/backends/google-cloud-storage”

Connect a Google Cloud Storage backend (this is not Google Drive).

This endpoint takes no parameters.

All fields are optional. Provide credentials through a service account (service_account_credentials), OAuth (client_id/client_secret/token), or set anonymous for public bucket access. env_auth accepts only false: runtime credentials are not available.

NameTypeDefaultRequiredDescription
access_tokenstring""NoShort-lived access token.
anonymousbooleanfalseNoAccess public buckets and objects without credentials.
auth_urlstring""NoAuth server URL.
bucket_aclstring (enum: authenticatedRead, private, projectPrivate, publicRead, publicReadWrite)""NoAccess Control List for new buckets.
bucket_policy_onlybooleanfalseNoUse bucket-level IAM policies for access checks.
client_credentialsbooleanfalseNoUse the OAuth2 client credentials flow.
client_idstring""NoOAuth Client Id.
client_secretstring""NoOAuth Client Secret.
decompressbooleanfalseNoDecompress gzip-encoded objects on download.
descriptionstring""NoDescription of the remote.
directory_markersbooleanfalseNoUpload empty objects ending with / for new directories.
encodingstring"50348034"NoThe encoding for the backend.
endpointstring""NoEndpoint for the service.
env_authboolean (enum: false)falseNoGet GCP IAM credentials from runtime.
locationstring (enum: many regions)""NoLocation for newly created buckets.
no_check_bucketbooleanfalseNoDon’t check that the bucket exists or create it.
object_aclstring (enum: authenticatedRead, bucketOwnerFullControl, bucketOwnerRead, private, projectPrivate, publicRead)""NoAccess Control List for new objects.
project_numberstring""NoProject number for bucket operations.
service_account_credentialsstring""NoService Account Credentials JSON blob.
storage_classstring (enum: "", MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE, ARCHIVE, DURABLE_REDUCED_AVAILABILITY)""NoStorage class for new objects.
tokenstring""NoOAuth Access Token as a JSON blob.
token_urlstring""NoToken server URL.
user_projectstring""NoUser project for requester-pays buckets.
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/google-cloud-storage \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"service_account_credentials": "<gcp-sa-json>",
"project_number": "123456789012",
"location": "us-central1",
"storage_class": "REGIONAL",
"description": "GCS regional bucket"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "google-cloud-storage",
"vfs_backend_type": "google cloud storage",
"config": {
"service_account_credentials": "***",
"project_number": "123456789012",
"location": "us-central1",
"storage_class": "REGIONAL",
"description": "GCS regional bucket"
},
"mount_paths": []
}
}

Connect an ImageKit.io backend.

This endpoint takes no parameters.

NameTypeDefaultRequiredDescription
endpointstring""YesImageKit.io URL endpoint from the developer dashboard.
public_keystring""YesImageKit.io public key.
private_keystring""YesImageKit.io private key.
descriptionstring""NoDescription of the remote.
encodingstring"117553486"NoThe encoding for the backend.
only_signedbooleanfalseNoSet true if your dashboard restricts unsigned image URLs.
upload_tagsstring""NoTags added to uploaded files (e.g. "tag1,tag2").
versionsbooleanfalseNoInclude old versions in directory listings.
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/imagekit \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"endpoint": "https://ik.imagekit.io/myid",
"public_key": "<imagekit-public>",
"private_key": "<imagekit-private>",
"description": "ImageKit CDN"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "imagekit",
"vfs_backend_type": "imagekit",
"config": {
"endpoint": "https://ik.imagekit.io/myid",
"public_key": "<imagekit-public>",
"private_key": "***",
"description": "ImageKit CDN"
},
"mount_paths": []
}
}

Connect an Internet Archive backend.

This endpoint takes no parameters.

Leave access_key_id and secret_access_key blank for anonymous access. Defaults for endpoint and front_endpoint point at the standard Internet Archive hosts.

NameTypeDefaultRequiredDescription
access_key_idstring""NoIAS3 Access Key.
descriptionstring""NoDescription of the remote.
disable_checksumbooleantrueNoDon’t ask the server to verify an MD5 checksum.
encodingstring"50446342"NoThe encoding for the backend.
endpointstring"https://s3.us.archive.org"NoIAS3 endpoint.
front_endpointstring"https://archive.org"NoHost of the Internet Archive frontend.
item_derivebooleantrueNoWhether to trigger derive on the IA item on upload.
item_metadatastring""NoMetadata for the IA item in key=value form (the x-archive-meta- prefix is added automatically).
secret_access_keystring""NoIAS3 Secret Key (password).
wait_archiveinteger0NoTimeout for archive processing tasks, in seconds.
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/internetarchive \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"access_key_id": "<ia-access-key>",
"secret_access_key": "<ia-secret-key>",
"wait_archive": 600,
"description": "Internet Archive archival"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "internetarchive",
"vfs_backend_type": "internetarchive",
"config": {
"access_key_id": "***",
"secret_access_key": "***",
"wait_archive": 600,
"description": "Internet Archive archival"
},
"mount_paths": []
}
}

Connect an Akamai NetStorage backend.

This endpoint takes no parameters.

NameTypeDefaultRequiredDescription
hoststring""YesDomain and internal path of the NetStorage host (<domain>/<internal folders>).
accountstring""YesNetStorage account name.
secretstring (password)""YesNetStorage account secret/G2O key.
descriptionstring""NoDescription of the remote.
protocolstring (enum: http, https)"https"NoSelect HTTP or HTTPS protocol.
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/netstorage \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"host": "my-ns.host.net/path",
"account": "<netstorage-account>",
"secret": "<netstorage-secret>",
"description": "Akamai NetStorage"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "netstorage",
"vfs_backend_type": "netstorage",
"config": {
"host": "my-ns.host.net/path",
"account": "<netstorage-account>",
"secret": "***",
"description": "Akamai NetStorage"
},
"mount_paths": []
}
}

Connect an Oracle Cloud Infrastructure Object Storage backend.

This endpoint takes no parameters.

NameTypeDefaultRequiredDescription
providerstring (enum: no_auth)"no_auth"YesOCI authentication provider.
namespacestring""YesObject storage namespace.
regionstring""YesObject storage region.
attempt_resume_uploadbooleanfalseNoAttempt to resume a previously started multipart upload.
chunk_sizestring"5242880"NoChunk size for multipart uploads, in bytes.
compartmentstring""NoCompartment OCID (needed only to list buckets).
copy_cutoffstring"4999610368"NoCutoff for switching to multipart copy.
copy_timeoutinteger60NoTimeout for copy operations, in seconds.
decompressbooleanfalseNoDecompress gzip-encoded objects on download.
descriptionstring""NoDescription of the remote.
disable_checksumbooleanfalseNoDon’t store MD5 checksum with object metadata.
encodingstring"50331650"NoThe encoding for the backend.
endpointstring""NoEndpoint for the Object Storage API.
leave_parts_on_errorbooleanfalseNoAvoid calling abort upload on failure.
max_upload_partsinteger10000NoMaximum number of parts in a multipart upload.
no_check_bucketbooleanfalseNoDon’t check that the bucket exists or create it.
sse_customer_algorithmstring (enum: "", AES256)""NoSSE-C encryption algorithm.
sse_customer_keystring""NoBase64-encoded SSE-C encryption key.
sse_customer_key_sha256string""NoBase64-encoded SHA256 hash of the SSE-C encryption key.
sse_kms_key_idstring""NoOCID of the master encryption key in vault.
storage_tierstring (enum: Standard, InfrequentAccess, Archive)"Standard"NoStorage class for new objects.
upload_concurrencyinteger10NoConcurrency for multipart uploads.
upload_cutoffstring"209715200"NoCutoff for switching to chunked upload.
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/oracleobjectstorage \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"provider": "no_auth",
"namespace": "<object-storage-namespace>",
"region": "us-ashburn-1",
"compartment": "<compartment-ocid>",
"storage_tier": "InfrequentAccess",
"description": "Oracle OCI bucket"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "oracleobjectstorage",
"vfs_backend_type": "oracleobjectstorage",
"config": {
"provider": "no_auth",
"namespace": "<object-storage-namespace>",
"region": "us-ashburn-1",
"compartment": "<compartment-ocid>",
"storage_tier": "InfrequentAccess",
"description": "Oracle OCI bucket"
},
"mount_paths": []
}
}

Connect a QingCloud Object Storage backend.

This endpoint takes no parameters.

Leave access_key_id and secret_access_key blank for anonymous access. env_auth accepts only false: runtime credentials are not available.

NameTypeDefaultRequiredDescription
access_key_idstring""NoQingStor Access Key ID.
chunk_sizestring"4194304"NoChunk size for multipart uploads, in bytes.
connection_retriesinteger3NoNumber of connection retries.
descriptionstring""NoDescription of the remote.
encodingstring"16842754"NoThe encoding for the backend.
endpointstring""NoEndpoint URL for the QingStor API.
env_authboolean (enum: false)falseNoGet QingStor credentials from runtime.
secret_access_keystring""NoQingStor Secret Access Key (password).
upload_concurrencyinteger1NoConcurrency for multipart uploads.
upload_cutoffstring"209715200"NoCutoff for switching to chunked upload.
zonestring (enum: pek3a, sh1a, gd2a)""NoZone to connect to (default pek3a).
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/qingstor \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"access_key_id": "<qingstor-access-key>",
"secret_access_key": "<qingstor-secret-key>",
"zone": "pek3a",
"description": "QingStor archive"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "qingstor",
"vfs_backend_type": "qingstor",
"config": {
"access_key_id": "***",
"secret_access_key": "***",
"zone": "pek3a",
"description": "QingStor archive"
},
"mount_paths": []
}
}

Connect an Amazon S3 or S3-compliant backend (AWS, Alibaba, ArvanCloud, Ceph, ChinaMobile, Cloudflare, DigitalOcean, Dreamhost, GCS, HuaweiOBS, IBMCOS, IDrive, IONOS, LyveCloud, Leviia, Liara, Linode, Magalu, Minio, Netease, Outscale, Petabox, RackCorp, Hoody-VFS, Scaleway, SeaweedFS, Selectel, Storj, Synology, TencentCOS, Wasabi, Qiniu, and others).

This endpoint takes no parameters.

NameTypeDefaultRequiredDescription
endpointstring (enum: S3 clone hosts)""NoEndpoint for the S3 API. Required for S3 clones; leave blank for AWS.
access_key_idstring""NoAWS Access Key ID.
aclstring (enum: private, public-read, public-read-write, authenticated-read, bucket-owner-read, bucket-owner-full-control, default)""NoCanned ACL for new buckets and stored objects.
bucket_aclstring (enum: private, public-read, public-read-write, authenticated-read)""NoCanned ACL for newly created buckets.
bucket_object_lock_enabledbooleanfalseNoEnable Object Lock when creating new buckets.
bypass_governance_retentionbooleanfalseNoAllow deleting or modifying objects locked with GOVERNANCE mode.
chunk_sizestring"5242880"NoChunk size for multipart uploads, in bytes.
copy_cutoffstring"4999610368"NoCutoff for switching to multipart copy.
decompressbooleanfalseNoDecompress gzip-encoded objects on download.
descriptionstring""NoDescription of the remote.
directory_bucketbooleanfalseNoEnable AWS Directory Buckets.
directory_markersbooleanfalseNoUpload empty objects ending with / for new directories.
disable_checksumbooleanfalseNoDon’t store MD5 checksum with object metadata.
disable_http2booleanfalseNoDisable HTTP/2 for S3 backends.
download_urlstring""NoCustom endpoint for downloads (e.g. a CloudFront URL).
encodingstring"50331650"NoThe encoding for the backend.
env_authboolean (enum: false)falseNoGet AWS credentials from runtime.
force_path_stylebooleantrueNoUse path-style access (false for virtual hosted style).
ibm_api_keystring""NoIBM API Key to obtain IAM token.
ibm_iam_endpointstring""NoIBM IAM endpoint.
ibm_resource_instance_idstring""NoIBM service instance id.
leave_parts_on_errorbooleanfalseNoAvoid calling abort upload on failure.
list_chunkinteger1000NoSize of listing chunk (MaxKeys).
list_url_encodestring"unset"NoWhether to URL-encode listings (true, false, or unset).
list_versioninteger0NoListObjects version (0 for auto, 1, or 2).
list_versions_oldest_firststring"unset"NoSet if the backend returns object versions oldest first.
location_constraintstring""NoLocation constraint matching the region.
max_upload_partsinteger10000NoMaximum number of parts in a multipart upload.
memory_pool_flush_timeinteger60NoMemory buffer pool flush interval, in seconds (no longer used).
memory_pool_use_mmapbooleanfalseNoUse mmap buffers in internal memory pool (no longer used).
might_gzipstring"unset"NoSet if the backend might gzip objects.
no_check_bucketbooleanfalseNoDon’t check that the bucket exists or create it.
no_headbooleanfalseNoDon’t HEAD uploaded objects to check integrity.
no_head_objectbooleanfalseNoDon’t do HEAD before GET when getting objects.
no_system_metadatabooleanfalseNoSuppress setting and reading of system metadata.
object_lock_legal_hold_statusstring (enum: ON, OFF, copy)""NoObject Lock legal hold status.
object_lock_modestring (enum: GOVERNANCE, COMPLIANCE, copy)""NoObject Lock retention mode.
object_lock_retain_until_datestring (enum: copy, 2030-01-01T00:00:00Z, 365d, 1y)""NoObject Lock retention until date.
object_lock_set_after_uploadbooleanfalseNoSet Object Lock via separate API calls after upload.
object_lock_supportedstring"unset"NoWhether the provider supports S3 Object Lock.
providerstring (enum: AWS, Alibaba, ArvanCloud, BizflyCloud, Ceph, ChinaMobile, Cloudflare, Cubbit, DigitalOcean, Dreamhost, Exaba, Fastly, FileLu, FlashBlade, GCS, HCP, Hetzner, HuaweiOBS, IBMCOS, IDrive, ImpossibleCloud, Intercolo, IONOS, Leviia, Liara, Linode, LyveCloud, Magalu, Mega, Minio, Netease, Outscale, OVHcloud, Petabox, Qiniu, Rabata, RackCorp, Hoody-VFS, Scaleway, Scality, SeaweedFS, Selectel, Servercore, SpectraLogic, Storj, Synology, TencentCOS, US3, Wasabi, Zadara, Zata, ZeroServices, Other)""NoChoose the S3 provider.
regionstring (enum: us-east-1, us-east-2, us-west-1, us-west-2, ca-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1, eu-south-1, eu-central-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-east-1, sa-east-1, il-central-1, me-south-1, af-south-1, cn-north-1, cn-northwest-1, us-gov-east-1, us-gov-west-1, hn, hcm, "", other-v2-signature, auto, au-east-1, eu-central, jp-central-1, uk-east-1, us-central-1, us-east, us-west, us-west-1, global, ap-southeast, me-central, hel1, fsn1, nbg1, ap-southeast-3, cn-east-3, cn-east-2, cn-north-4, sa-argentina-1, sa-peru-1, na-mexico-1, sa-chile-1, sa-brazil-1, ru-northwest-2, eu-central-2, eu-east-1, de-fra, eu-central-3, eu-central-4, eu-south-2, us-east-2, cloudgouv-eu-west-1, gra, rbx, sbg, eu-west-par, uk, waw, bhs, ca-east-tor, sgp, ap-southeast-syd, ap-south-mum, us-east-va, us-west-or, rbx-archive, me-south-1, cn-east-1, cn-south-1, us-north-1, au, au-nsw, au-qld, au-vic, au-wa, ph, th, hk, mn, kg, id, jp, sg, de, us, nz, nl-ams, fr-par, pl-waw, ru-1, ru-3, ru-7, gis-1, kz-1, uz-2, eu-001, eu-002, us-001, us-002, tw-001, zero-fra1, zero-fra2, zero-eyl1)""NoRegion to connect to. Leave blank if you are using an S3 clone and you don’t have a region.
requester_paysbooleanfalseNoEnable requester-pays for the S3 bucket.
role_arnstring""NoARN of the IAM role to assume.
role_external_idstring""NoExternal ID for assumed role.
role_session_durationstring""NoSession duration for assumed role.
role_session_namestring""NoSession name for assumed role.
sdk_log_modestring"0"NoAWS SDK debug log mode (e.g. Signing, Retries, Request).
secret_access_keystring""NoAWS Secret Access Key (password).
server_side_encryptionstring (enum: "", AES256, aws:kms)""NoServer-side encryption algorithm.
session_tokenstring""NoAWS session token.
sign_accept_encodingstring"unset"NoSet if Hoody should include Accept-Encoding in the signature.
sse_customer_algorithmstring (enum: "", AES256)""NoSSE-C encryption algorithm.
sse_customer_keystring""NoSSE-C secret encryption key.
sse_customer_key_base64string""NoSSE-C secret encryption key, base64-encoded.
sse_customer_key_md5string""NoSSE-C encryption key MD5 checksum.
sse_kms_key_idstring (enum: "", arn:aws:kms:us-east-1:*)""NoKMS Key ARN.
storage_classstring (enum: "", STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, GLACIER, DEEP_ARCHIVE, INTELLIGENT_TIERING, GLACIER_IR, EXPRESS_ONEZONE, LINE, ARCHIVE)""NoStorage class for new objects.
sts_endpointstring""NoSTS endpoint (deprecated).
upload_concurrencyinteger4NoConcurrency for multipart uploads and copies.
upload_cutoffstring"209715200"NoCutoff for switching to chunked upload.
use_accelerate_endpointbooleanfalseNoUse the AWS S3 accelerated endpoint.
use_accept_encoding_gzipstring"unset"NoSend Accept-Encoding: gzip on download.
use_already_existsstring"unset"NoReport BucketAlreadyExists errors on bucket creation.
use_arn_regionbooleanfalseNoEnable ARN region support.
use_data_integrity_protectionsstring"unset"NoUse AWS S3 data integrity protections.
use_dual_stackbooleanfalseNoUse the AWS S3 dual-stack endpoint (IPv6).
use_multipart_etagstring"unset"NoUse ETag in multipart uploads for verification.
use_multipart_uploadsstring"unset"NoWhether Hoody should use multipart uploads.
use_presigned_requestbooleanfalseNoUse a presigned request for single part uploads.
use_unsigned_payloadstring"unset"NoWhether to use an unsigned payload in PutObject.
use_x_idstring"unset"NoSet if Hoody should add x-id URL parameters.
v2_authbooleanfalseNoUse v2 authentication (legacy providers).
version_atstring"0001-01-01T00:00:00Z"NoShow file versions as they were at the specified time.
version_deletedbooleanfalseNoShow deleted file markers when using versions.
versionsbooleanfalseNoInclude old versions in directory listings.
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/s3 \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"provider": "Wasabi",
"endpoint": "s3.wasabisys.com",
"access_key_id": "<wasabi-access-key>",
"secret_access_key": "<wasabi-secret-key>",
"description": "Wasabi hot storage"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "s3",
"vfs_backend_type": "s3",
"config": {
"provider": "Wasabi",
"endpoint": "s3.wasabisys.com",
"access_key_id": "***",
"secret_access_key": "***",
"description": "Wasabi hot storage"
},
"mount_paths": []
}
}

Connect a Sia decentralized cloud backend.

This endpoint takes no parameters.

NameTypeDefaultRequiredDescription
api_urlstringn/aYesSia daemon API URL.
api_passwordstring (password)""NoSia daemon API password.
descriptionstring""NoDescription of the remote.
encodingstring"50436354"NoThe encoding for the backend.
user_agentstring"Sia-Agent"NoSiad user agent (must be Sia-Agent by default).
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/sia \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"api_url": "http://sia.daemon.host:9980",
"api_password": "<sia-api-password>",
"description": "Sia decentralized storage"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "sia",
"vfs_backend_type": "sia",
"config": {
"api_url": "http://sia.daemon.host:9980",
"api_password": "***",
"description": "Sia decentralized storage"
},
"mount_paths": []
}
}

Connect an OpenStack Swift backend (Rackspace Cloud Files, Blomp Cloud Storage, Memset Memstore, OVH).

This endpoint takes no parameters.

NameTypeDefaultRequiredDescription
authstring (enum: Rackspace, Memset, OVH, AIN endpoints)""NoAuthentication URL for the server.
auth_versioninteger0NoAuth version (1, 2, or 3) when the auth URL has no version.
auth_tokenstring""NoAuth Token from alternate authentication.
application_credential_idstring""NoApplication Credential ID.
application_credential_namestring""NoApplication Credential Name.
application_credential_secretstring""NoApplication Credential Secret.
chunk_sizestring"5368709120"NoAbove this size files will be chunked.
descriptionstring""NoDescription of the remote.
domainstring""NoUser domain (v3 auth).
encodingstring"16777218"NoThe encoding for the backend.
endpoint_typestring (enum: public, internal, admin)"public"NoEndpoint type from the service catalogue.
env_authboolean (enum: false)falseNoGet Swift credentials from OpenStack environment variables.
fetch_until_empty_pagebooleanfalseNoAlways fetch while paginating unless an empty page is received.
keystring""NoAPI key or password.
leave_parts_on_errorbooleanfalseNoDon’t call abort upload on failure.
no_chunkbooleanfalseNoDon’t chunk files during streaming upload.
no_large_objectsbooleanfalseNoDisable support for static and dynamic large objects.
partial_page_fetch_thresholdinteger0NoFetch when within this percentage of the page limit.
regionstring""NoRegion name.
storage_policystring (enum: "", pcs, pca)""NoStorage policy for newly created containers.
storage_urlstring""NoStorage URL.
tenantstring""NoTenant name.
tenant_domainstring""NoTenant domain (v3 auth).
tenant_idstring""NoTenant ID.
use_segments_containerstring"unset"NoChoose destination for large object segments.
userstring""NoUsername to log in.
user_idstring""NoUser ID to log in (v3 auth).
Terminal window
curl -X POST https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/v1/backends/swift \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"user": "<swift-user>",
"key": "<swift-password>",
"auth": "https://auth.cloud.ovh.net/v3",
"tenant": "<swift-tenant>",
"region": "GRA1",
"description": "OVH Object Storage"
}'
{
"success": true,
"message": "Backend connected successfully",
"data": {
"id": "a1b2c3d4e5f67890",
"type": "swift",
"vfs_backend_type": "swift",
"config": {
"user": "<swift-user>",
"key": "***",
"auth": "https://auth.cloud.ovh.net/v3",
"tenant": "<swift-tenant>",
"region": "GRA1",
"description": "OVH Object Storage"
},
"mount_paths": []
}
}