Reference · Tools

S3

Interact with any S3-compatible object storage service (MinIO, DigitalOcean Spaces, Wasabi, Backblaze B2, etc.) to manage buckets, upload/download files, and organize folders.

Action (binary) Data & Storage v1 Binary data

The S3 node works with any S3-compatible object storage — MinIO, DigitalOcean Spaces, Wasabi, Backblaze B2 — uploading, downloading, copying and managing files, folders and buckets. For Amazon's own service, use the AWS S3 node instead. A typical build is archiving generated files to Spaces and serving them from there.

Node type
Action (binary)
Parameters
43
Outputs
Output, Error
Credentials
S3 API

S3

Manage buckets, files, and folders on S3-compatible storage services

Overview

Manages buckets, files and folders on any S3-compatible object storage service — MinIO, DigitalOcean Spaces, Wasabi, Backblaze B2 and similar. It creates and lists buckets, uploads files from binary data or text, downloads files as binary data, copies, deletes and lists objects with pagination, and creates, deletes and lists folders. ACLs, storage classes, server-side encryption, object lock and tagging are all supported. For AWS S3 itself, use the AWS S3 tool instead.

Category: Data & Storage
Tool Name: s3
Version: 1

Appearance: Icon: lucide-HardDrive | Color: #4A90D9

Node Type

Action (Binary) — handles file/binary data operations

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires S3 API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Bucketbucket
Filefile
Folderfolder

Operations

Each resource has its own set of operations. Pick the resource first — the Operation list changes with it.

ResourceOperationValueDescription
BucketCreatecreateCreate a bucket
BucketGet ManygetAllGet many buckets
BucketSearchsearchSearch within a bucket
FileCopycopyCopy a file
FileDeletedeleteDelete a file
FileDownloaddownloadDownload a file
FileGet ManygetAllGet many files
FileUploaduploadUpload a file
FolderCreatecreateCreate a folder
FolderDeletedeleteDelete a folder
FolderGet ManygetAllGet many folders

Parameters

Bucket: Create

ParameterTypeRequiredDefaultDescription
NamestringYesName of the bucket to create
Additional FieldscollectionNo{}Optional settings applied to the new bucket.
— ACLoptionsNoThe canned ACL to apply to the bucket
Options: authenticatedRead, Private, publicRead, publicReadWrite
— Bucket Object Lock EnabledbooleanNofalseWhether you want S3 Object Lock to be enabled for the new bucket
— Grant Full ControlbooleanNofalseWhether to allow grantee the read, write, read ACP, and write ACP permissions on the bucket
— Grant ReadbooleanNofalseWhether to allow grantee to list the objects in the bucket
— Grant Read ACPbooleanNofalseWhether to allow grantee to read the bucket ACL
— Grant WritebooleanNofalseWhether to allow grantee to create, overwrite, and delete any object in the bucket
— Grant Write ACPbooleanNofalseWhether to allow grantee to write the ACL for the applicable bucket
— RegionstringNoRegion you want to create the bucket in. By default the region defined on the credentials is used.

Bucket: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit
LimitnumberNo100Max number of results to return (shown when Return All is false)
ParameterTypeRequiredDefaultDescription
Bucket NamestringYesName of the bucket to list objects from. Supports expressions like {{ $json.bucket }}.
Return AllbooleanNofalseWhether to return all results or only up to a given limit
LimitnumberNo100Max number of results to return (shown when Return All is false)
Additional FieldscollectionNo{}Optional settings that narrow or annotate the listing.
— DelimiterstringNoA delimiter character to group keys
— Encoding TypeoptionsNoEncoding type used to encode object keys in the response
Options: url
— Fetch OwnerbooleanNofalseWhether to return owner field with each key in the result
— PrefixstringNoLimits the response to keys that begin with the specified prefix
— Requester PaysbooleanNofalseWhether the requester will pay for requests and data transfer
— Start AfterstringNoStart listing after this specified key

File: Copy

ParameterTypeRequiredDefaultDescription
Source PathstringYesThe source bucket and key name separated by a slash (/), e.g. /bucket/path/to/file.jpg
Destination PathstringYesThe destination bucket and key name separated by a slash (/)
Additional FieldscollectionNo{}Optional settings applied to the copied object.
— ACLoptionsNoprivateThe canned ACL to apply to the object
Options: authenticatedRead, awsExecRead, bucketOwnerFullControl, bucketOwnerRead, private, publicRead, publicReadWrite
— Grant Full ControlbooleanNofalseWhether to give the grantee READ, READ_ACP, and WRITE_ACP permissions on the object
— Grant ReadbooleanNofalseWhether to allow grantee to read the object data and its metadata
— Grant Read ACPbooleanNofalseWhether to allow grantee to read the object ACL
— Grant Write ACPbooleanNofalseWhether to allow grantee to write the ACL for the applicable object
— Lock Legal HoldbooleanNofalseWhether a legal hold will be applied to this object
— Lock ModeoptionsNoThe Object Lock mode that you want to apply to this object
Options: governance, compliance
— Lock Retain Until DatedateTimeNoThe date and time when you want this object’s Object Lock to expire
— Metadata DirectiveoptionsNoSpecifies whether the metadata is copied from the source object or replaced
Options: copy, replace
— Requester PaysbooleanNofalseWhether the requester will pay for requests and data transfer
— Server Side EncryptionoptionsNoThe server-side encryption algorithm used when storing this object
Options: AES256, aws:kms
— Server Side Encryption ContextstringNoSpecifies the KMS Encryption Context to use for object encryption
— Server Side Encryption AWS KMS Key IDstringNoKMS key ID for server-side encryption
— Server Side Encryption Customer AlgorithmstringNoAlgorithm to use when encrypting the object (e.g., AES256)
— Server Side Encryption Customer KeystringNoCustomer-provided encryption key
— Server Side Encryption Customer Key MD5stringNo128-bit MD5 digest of the encryption key
— Storage ClassoptionsNostandardStorage class for the object
Options: deepArchive, glacier, intelligentTiering, onezoneIA, standard, standardIA
— Tagging DirectiveoptionsNoSpecifies whether the object tags are copied from the source or replaced
Options: copy, replace

File: Delete

ParameterTypeRequiredDefaultDescription
Bucket NamestringYesName of the bucket holding the file. Supports expressions like {{ $json.bucket }}.
File KeystringYesFull key of the object to delete, including any folder prefix.
OptionscollectionNo{}Optional settings for the delete.
— Version IDstringNoDelete one specific version of the object instead of the current one.

File: Download

ParameterTypeRequiredDefaultDescription
Bucket NamestringYesName of the bucket holding the file. Supports expressions like {{ $json.bucket }}.
File KeystringYesFull key of the object to download, including any folder prefix. A key ending in / is a folder and is rejected.
Put Output File in FieldstringYesdataThe name of the output binary field to put the file in

File: Get Many

ParameterTypeRequiredDefaultDescription
Bucket NamestringYesName of the bucket to list files from. Supports expressions like {{ $json.bucket }}.
Return AllbooleanNofalseWhether to return all results or only up to a given limit
LimitnumberNo100Max number of results to return (shown when Return All is false)
OptionscollectionNo{}Optional settings that narrow or annotate the listing.
— Fetch OwnerbooleanNofalseWhether to return owner field with each key in the result
— Folder KeystringNoFilter files by folder prefix

File: Upload

ParameterTypeRequiredDefaultDescription
Bucket NamestringYesName of the bucket to upload into. Supports expressions like {{ $json.bucket }}.
Binary FilebooleanNotrueWhether the data to upload should be taken from binary field
File NamestringNoFile name for the upload. If not set and uploading binary, the binary data filename will be used.
Input Binary FieldstringYesdataThe name of the input binary field containing the file to be uploaded (shown when Binary File is true)
File ContentstringNoThe text content of the file to upload (shown when Binary File is false)
Additional FieldscollectionNo{}Optional settings applied to the uploaded object.
— ACLoptionsNoprivateThe canned ACL to apply to the object
Options: authenticatedRead, awsExecRead, bucketOwnerFullControl, bucketOwnerRead, private, publicRead, publicReadWrite
— Grant Full ControlbooleanNofalseWhether to give the grantee READ, READ_ACP, and WRITE_ACP permissions on the object
— Grant ReadbooleanNofalseWhether to allow grantee to read the object data and its metadata
— Grant Read ACPbooleanNofalseWhether to allow grantee to read the object ACL
— Grant Write ACPbooleanNofalseWhether to allow grantee to write the ACL for the applicable object
— Lock Legal HoldbooleanNofalseWhether a legal hold will be applied to this object
— Lock ModeoptionsNoThe Object Lock mode that you want to apply to this object
Options: governance, compliance
— Lock Retain Until DatedateTimeNoThe date and time when you want this object’s Object Lock to expire
— Parent Folder KeystringNoParent folder you want to create the file in
— Requester PaysbooleanNofalseWhether the requester will pay for requests and data transfer
— Server Side EncryptionoptionsNoThe server-side encryption algorithm used when storing this object
Options: AES256, aws:kms
— Server Side Encryption ContextstringNoSpecifies the KMS Encryption Context to use for object encryption
— Server Side Encryption AWS KMS Key IDstringNoKMS key ID for server-side encryption
— Server Side Encryption Customer AlgorithmstringNoAlgorithm to use when encrypting the object (e.g., AES256)
— Server Side Encryption Customer KeystringNoCustomer-provided encryption key
— Server Side Encryption Customer Key MD5stringNo128-bit MD5 digest of the encryption key
— Storage ClassoptionsNostandardStorage class for the object
Options: deepArchive, glacier, intelligentTiering, onezoneIA, standard, standardIA
TagsfixedCollectionNo{}Tags to apply to the uploaded object
— KeystringNoThe tag name.
— ValuestringNoThe tag value.

Folder: Create

ParameterTypeRequiredDefaultDescription
Bucket NamestringYesName of the bucket to create the folder in. Supports expressions like {{ $json.bucket }}.
Folder NamestringYesName of the folder to create.
Additional FieldscollectionNo{}Optional settings applied to the folder object.
— Parent Folder KeystringNoParent folder you want to create the folder in
— Requester PaysbooleanNofalseWhether the requester will pay for requests and data transfer
— Storage ClassoptionsNostandardStorage class for the folder object
Options: deepArchive, glacier, intelligentTiering, onezoneIA, RecudedRedundancy (Reduced Redundancy), standard, standardIA

Folder: Delete

ParameterTypeRequiredDefaultDescription
Bucket NamestringYesName of the bucket holding the folder. Supports expressions like {{ $json.bucket }}.
Folder KeystringYesKey of the folder to delete, e.g. old-folder/. Every object under it is deleted too.

Folder: Get Many

ParameterTypeRequiredDefaultDescription
Bucket NamestringYesName of the bucket to list folders from. Supports expressions like {{ $json.bucket }}.
Return AllbooleanNofalseWhether to return all results or only up to a given limit
LimitnumberNo100Max number of results to return (shown when Return All is false)
OptionscollectionNo{}Optional settings that narrow or annotate the listing.
— Fetch OwnerbooleanNofalseWhether to return owner field with each key in the result
— Folder KeystringNoFilter by parent folder prefix

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

Every operation produces exactly one output item per input item. The listing operations do not fan out: a search that matches 500 objects still returns a single item carrying an array of 500 entries, so add a Split Out node on that array when you want one item per object.

The result is merged onto the item JSON, so the incoming fields pass through, and binary data on the input item is forwarded. File: Download additionally writes the downloaded file into the binary field you named, alongside any binary the item already carried.

OperationFields added to the output item
bucket / createsuccess
bucket / getAllbuckets — an array of { Name, CreationDate }
bucket / searchobjects — an array of { Key, LastModified, ETag, Size, StorageClass }, each with Owner when Fetch Owner is on
file / copyETag, LastModified of the new copy
file / deletesuccess
file / downloadfileKey, bucketName, fileSize, contentType — plus the file itself in the binary field named by Put Output File in Field
file / getAllfiles — an array of { Key, LastModified, ETag, Size, StorageClass }, each with Owner when Fetch Owner is on. Folder markers are filtered out
file / uploadsuccess, key (the full object key, including any parent folder) and bucket
folder / createsuccess
folder / deletedeleted — an array of { Key }, one entry for every object removed
folder / getAllfolders — an array of { Key, LastModified, ETag, Size, StorageClass }, each with Owner when Fetch Owner is on

Reference the result downstream by expression, for example {{ $json.files[0].Key }} after a listing, or {{ $json.key }} after an upload. Note the capitalised field names inside the listing arrays — they come straight from the storage service.

Usage Examples

  • Download a file from MinIO bucket
  • Upload a PDF to DigitalOcean Spaces
  • List all files in a Wasabi bucket
  • Copy a file between S3-compatible buckets
  • Create a new bucket on Backblaze B2
  • Search for objects with a prefix in a bucket
  • Delete a folder and its contents

Example Configuration

Create a bucket in a specific region:

{
  "type": "s3",
  "parameters": {
    "resource": "bucket",
    "operation": "create",
    "name": "my-new-bucket",
    "additionalFields": {
      "acl": "Private",
      "region": "us-east-1",
      "bucketObjectLockEnabled": false
    }
  }
}

List the buckets on the account:

{
  "type": "s3",
  "parameters": {
    "resource": "bucket",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50
  }
}

List everything under a prefix inside one bucket:

{
  "type": "s3",
  "parameters": {
    "resource": "bucket",
    "operation": "search",
    "bucketName": "my-bucket",
    "returnAll": true,
    "additionalFields": {
      "prefix": "documents/",
      "delimiter": "/",
      "fetchOwner": true
    }
  }
}

Upload a file that an upstream node produced as binary data:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "upload",
    "bucketName": "my-bucket",
    "binaryData": true,
    "fileName": "document.pdf",
    "binaryPropertyName": "data",
    "additionalFields": {
      "acl": "publicRead",
      "storageClass": "standard",
      "parentFolderKey": "documents/",
      "serverSideEncryption": "AES256"
    },
    "tagsUi": {
      "tagsValues": [
        { "key": "Environment", "value": "Production" },
        { "key": "Department", "value": "Marketing" }
      ]
    }
  }
}

Upload text built in the workflow instead of a binary field:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "upload",
    "bucketName": "my-bucket",
    "binaryData": false,
    "fileName": "config.json",
    "fileContent": "{\"setting1\": \"value1\", \"setting2\": \"value2\"}",
    "additionalFields": {
      "storageClass": "standard",
      "parentFolderKey": "config/"
    }
  }
}

Download an object into a named binary field:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "download",
    "bucketName": "my-bucket",
    "fileKey": "documents/report.pdf",
    "binaryPropertyName": "fileData"
  }
}

Copy an object between buckets:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "copy",
    "sourcePath": "/source-bucket/original/file.jpg",
    "destinationPath": "/dest-bucket/backup/file.jpg",
    "additionalFields": {
      "acl": "private",
      "metadataDirective": "copy",
      "storageClass": "standard"
    }
  }
}

Delete one specific version of an object:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "delete",
    "bucketName": "my-bucket",
    "fileKey": "temp/old-file.txt",
    "options": {
      "versionId": "3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo"
    }
  }
}

List the files in a folder:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "getAll",
    "bucketName": "my-bucket",
    "returnAll": false,
    "limit": 100,
    "options": {
      "folderKey": "documents/",
      "fetchOwner": true
    }
  }
}

Create a folder inside another folder:

{
  "type": "s3",
  "parameters": {
    "resource": "folder",
    "operation": "create",
    "bucketName": "my-bucket",
    "folderName": "new-folder",
    "additionalFields": {
      "parentFolderKey": "parent/",
      "storageClass": "standard"
    }
  }
}

Delete a folder and everything inside it:

{
  "type": "s3",
  "parameters": {
    "resource": "folder",
    "operation": "delete",
    "bucketName": "my-bucket",
    "folderKey": "old-folder/"
  }
}

List the folders under a prefix:

{
  "type": "s3",
  "parameters": {
    "resource": "folder",
    "operation": "getAll",
    "bucketName": "my-bucket",
    "returnAll": true,
    "options": {
      "folderKey": "root/",
      "fetchOwner": false
    }
  }
}

Basic upload workflow — take whatever binary the previous node produced and store it:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "upload",
    "bucketName": "uploads",
    "binaryData": true,
    "binaryPropertyName": "data",
    "fileName": "user-upload.jpg",
    "maxConcurrency": 5
  }
}

Batch file processing — list a whole queue folder, then split the array downstream:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "getAll",
    "bucketName": "processing-queue",
    "returnAll": true,
    "maxConcurrency": 10,
    "options": {
      "folderKey": "pending/"
    }
  }
}

Secure file storage — private ACL, KMS encryption and an object-lock retention date:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "upload",
    "bucketName": "secure-storage",
    "binaryData": true,
    "binaryPropertyName": "sensitiveData",
    "additionalFields": {
      "acl": "private",
      "serverSideEncryption": "aws:kms",
      "encryptionAwsKmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012",
      "lockMode": "governance",
      "lockRetainUntilDate": "2030-12-31T23:59:59Z"
    }
  }
}

Content management — publish generated markup to a public path:

{
  "type": "s3",
  "parameters": {
    "resource": "file",
    "operation": "upload",
    "bucketName": "cms-assets",
    "binaryData": false,
    "fileContent": "<html><body>Page content</body></html>",
    "fileName": "page.html",
    "additionalFields": {
      "acl": "publicRead",
      "parentFolderKey": "website/pages/",
      "storageClass": "standard"
    },
    "tagsUi": {
      "tagsValues": [
        { "key": "ContentType", "value": "HTML" },
        { "key": "Status", "value": "Published" }
      ]
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Upload, download, copy, and manage files/buckets on any S3-compatible object storage service (MinIO, Spaces, Wasabi).

This node is for services that use the S3 standard, e.g. MinIO or DigitalOcean Spaces. For AWS S3 use the ‘AWS S3’ node.

Frequently asked questions

Should I use this for Amazon S3?

No — use the dedicated AWS S3 node for Amazon. This node targets services that implement the S3 standard, such as MinIO and DigitalOcean Spaces.

Which providers does it work with?

Any S3-compatible service, including MinIO, DigitalOcean Spaces, Wasabi and Backblaze B2, since it speaks the S3 API rather than a vendor-specific one.

Can it manage buckets as well as files?

Yes — bucket operations sit alongside file upload, download, copy and folder organisation.

Which credential does it need?

An S3 API credential with the endpoint, region and access keys for your provider.

Build with the S3 node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need S3 API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.