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.
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
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool requires S3 API credentials. See the Credentials Guide for setup instructions.
Resources
| Resource | Value |
|---|---|
| Bucket | bucket |
| File | file |
| Folder | folder |
Operations
Each resource has its own set of operations. Pick the resource first — the Operation list changes with it.
| Resource | Operation | Value | Description |
|---|---|---|---|
| Bucket | Create | create | Create a bucket |
| Bucket | Get Many | getAll | Get many buckets |
| Bucket | Search | search | Search within a bucket |
| File | Copy | copy | Copy a file |
| File | Delete | delete | Delete a file |
| File | Download | download | Download a file |
| File | Get Many | getAll | Get many files |
| File | Upload | upload | Upload a file |
| Folder | Create | create | Create a folder |
| Folder | Delete | delete | Delete a folder |
| Folder | Get Many | getAll | Get many folders |
Parameters
Bucket: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Name | string | Yes | — | Name of the bucket to create |
| Additional Fields | collection | No | {} | Optional settings applied to the new bucket. |
| — ACL | options | No | — | The canned ACL to apply to the bucket |
Options: authenticatedRead, Private, publicRead, publicReadWrite | ||||
| — Bucket Object Lock Enabled | boolean | No | false | Whether you want S3 Object Lock to be enabled for the new bucket |
| — Grant Full Control | boolean | No | false | Whether to allow grantee the read, write, read ACP, and write ACP permissions on the bucket |
| — Grant Read | boolean | No | false | Whether to allow grantee to list the objects in the bucket |
| — Grant Read ACP | boolean | No | false | Whether to allow grantee to read the bucket ACL |
| — Grant Write | boolean | No | false | Whether to allow grantee to create, overwrite, and delete any object in the bucket |
| — Grant Write ACP | boolean | No | false | Whether to allow grantee to write the ACL for the applicable bucket |
| — Region | string | No | — | Region you want to create the bucket in. By default the region defined on the credentials is used. |
Bucket: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit |
| Limit | number | No | 100 | Max number of results to return (shown when Return All is false) |
Bucket: Search
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Bucket Name | string | Yes | — | Name of the bucket to list objects from. Supports expressions like {{ $json.bucket }}. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit |
| Limit | number | No | 100 | Max number of results to return (shown when Return All is false) |
| Additional Fields | collection | No | {} | Optional settings that narrow or annotate the listing. |
| — Delimiter | string | No | — | A delimiter character to group keys |
| — Encoding Type | options | No | — | Encoding type used to encode object keys in the response |
Options: url | ||||
| — Fetch Owner | boolean | No | false | Whether to return owner field with each key in the result |
| — Prefix | string | No | — | Limits the response to keys that begin with the specified prefix |
| — Requester Pays | boolean | No | false | Whether the requester will pay for requests and data transfer |
| — Start After | string | No | — | Start listing after this specified key |
File: Copy
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Source Path | string | Yes | — | The source bucket and key name separated by a slash (/), e.g. /bucket/path/to/file.jpg |
| Destination Path | string | Yes | — | The destination bucket and key name separated by a slash (/) |
| Additional Fields | collection | No | {} | Optional settings applied to the copied object. |
| — ACL | options | No | private | The canned ACL to apply to the object |
Options: authenticatedRead, awsExecRead, bucketOwnerFullControl, bucketOwnerRead, private, publicRead, publicReadWrite | ||||
| — Grant Full Control | boolean | No | false | Whether to give the grantee READ, READ_ACP, and WRITE_ACP permissions on the object |
| — Grant Read | boolean | No | false | Whether to allow grantee to read the object data and its metadata |
| — Grant Read ACP | boolean | No | false | Whether to allow grantee to read the object ACL |
| — Grant Write ACP | boolean | No | false | Whether to allow grantee to write the ACL for the applicable object |
| — Lock Legal Hold | boolean | No | false | Whether a legal hold will be applied to this object |
| — Lock Mode | options | No | — | The Object Lock mode that you want to apply to this object |
Options: governance, compliance | ||||
| — Lock Retain Until Date | dateTime | No | — | The date and time when you want this object’s Object Lock to expire |
| — Metadata Directive | options | No | — | Specifies whether the metadata is copied from the source object or replaced |
Options: copy, replace | ||||
| — Requester Pays | boolean | No | false | Whether the requester will pay for requests and data transfer |
| — Server Side Encryption | options | No | — | The server-side encryption algorithm used when storing this object |
Options: AES256, aws:kms | ||||
| — Server Side Encryption Context | string | No | — | Specifies the KMS Encryption Context to use for object encryption |
| — Server Side Encryption AWS KMS Key ID | string | No | — | KMS key ID for server-side encryption |
| — Server Side Encryption Customer Algorithm | string | No | — | Algorithm to use when encrypting the object (e.g., AES256) |
| — Server Side Encryption Customer Key | string | No | — | Customer-provided encryption key |
| — Server Side Encryption Customer Key MD5 | string | No | — | 128-bit MD5 digest of the encryption key |
| — Storage Class | options | No | standard | Storage class for the object |
Options: deepArchive, glacier, intelligentTiering, onezoneIA, standard, standardIA | ||||
| — Tagging Directive | options | No | — | Specifies whether the object tags are copied from the source or replaced |
Options: copy, replace |
File: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Bucket Name | string | Yes | — | Name of the bucket holding the file. Supports expressions like {{ $json.bucket }}. |
| File Key | string | Yes | — | Full key of the object to delete, including any folder prefix. |
| Options | collection | No | {} | Optional settings for the delete. |
| — Version ID | string | No | — | Delete one specific version of the object instead of the current one. |
File: Download
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Bucket Name | string | Yes | — | Name of the bucket holding the file. Supports expressions like {{ $json.bucket }}. |
| File Key | string | Yes | — | Full key of the object to download, including any folder prefix. A key ending in / is a folder and is rejected. |
| Put Output File in Field | string | Yes | data | The name of the output binary field to put the file in |
File: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Bucket Name | string | Yes | — | Name of the bucket to list files from. Supports expressions like {{ $json.bucket }}. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit |
| Limit | number | No | 100 | Max number of results to return (shown when Return All is false) |
| Options | collection | No | {} | Optional settings that narrow or annotate the listing. |
| — Fetch Owner | boolean | No | false | Whether to return owner field with each key in the result |
| — Folder Key | string | No | — | Filter files by folder prefix |
File: Upload
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Bucket Name | string | Yes | — | Name of the bucket to upload into. Supports expressions like {{ $json.bucket }}. |
| Binary File | boolean | No | true | Whether the data to upload should be taken from binary field |
| File Name | string | No | — | File name for the upload. If not set and uploading binary, the binary data filename will be used. |
| Input Binary Field | string | Yes | data | The name of the input binary field containing the file to be uploaded (shown when Binary File is true) |
| File Content | string | No | — | The text content of the file to upload (shown when Binary File is false) |
| Additional Fields | collection | No | {} | Optional settings applied to the uploaded object. |
| — ACL | options | No | private | The canned ACL to apply to the object |
Options: authenticatedRead, awsExecRead, bucketOwnerFullControl, bucketOwnerRead, private, publicRead, publicReadWrite | ||||
| — Grant Full Control | boolean | No | false | Whether to give the grantee READ, READ_ACP, and WRITE_ACP permissions on the object |
| — Grant Read | boolean | No | false | Whether to allow grantee to read the object data and its metadata |
| — Grant Read ACP | boolean | No | false | Whether to allow grantee to read the object ACL |
| — Grant Write ACP | boolean | No | false | Whether to allow grantee to write the ACL for the applicable object |
| — Lock Legal Hold | boolean | No | false | Whether a legal hold will be applied to this object |
| — Lock Mode | options | No | — | The Object Lock mode that you want to apply to this object |
Options: governance, compliance | ||||
| — Lock Retain Until Date | dateTime | No | — | The date and time when you want this object’s Object Lock to expire |
| — Parent Folder Key | string | No | — | Parent folder you want to create the file in |
| — Requester Pays | boolean | No | false | Whether the requester will pay for requests and data transfer |
| — Server Side Encryption | options | No | — | The server-side encryption algorithm used when storing this object |
Options: AES256, aws:kms | ||||
| — Server Side Encryption Context | string | No | — | Specifies the KMS Encryption Context to use for object encryption |
| — Server Side Encryption AWS KMS Key ID | string | No | — | KMS key ID for server-side encryption |
| — Server Side Encryption Customer Algorithm | string | No | — | Algorithm to use when encrypting the object (e.g., AES256) |
| — Server Side Encryption Customer Key | string | No | — | Customer-provided encryption key |
| — Server Side Encryption Customer Key MD5 | string | No | — | 128-bit MD5 digest of the encryption key |
| — Storage Class | options | No | standard | Storage class for the object |
Options: deepArchive, glacier, intelligentTiering, onezoneIA, standard, standardIA | ||||
| Tags | fixedCollection | No | {} | Tags to apply to the uploaded object |
| — Key | string | No | — | The tag name. |
| — Value | string | No | — | The tag value. |
Folder: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Bucket Name | string | Yes | — | Name of the bucket to create the folder in. Supports expressions like {{ $json.bucket }}. |
| Folder Name | string | Yes | — | Name of the folder to create. |
| Additional Fields | collection | No | {} | Optional settings applied to the folder object. |
| — Parent Folder Key | string | No | — | Parent folder you want to create the folder in |
| — Requester Pays | boolean | No | false | Whether the requester will pay for requests and data transfer |
| — Storage Class | options | No | standard | Storage class for the folder object |
Options: deepArchive, glacier, intelligentTiering, onezoneIA, RecudedRedundancy (Reduced Redundancy), standard, standardIA |
Folder: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Bucket Name | string | Yes | — | Name of the bucket holding the folder. Supports expressions like {{ $json.bucket }}. |
| Folder Key | string | Yes | — | Key of the folder to delete, e.g. old-folder/. Every object under it is deleted too. |
Folder: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Bucket Name | string | Yes | — | Name of the bucket to list folders from. Supports expressions like {{ $json.bucket }}. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit |
| Limit | number | No | 100 | Max number of results to return (shown when Return All is false) |
| Options | collection | No | {} | Optional settings that narrow or annotate the listing. |
| — Fetch Owner | boolean | No | false | Whether to return owner field with each key in the result |
| — Folder Key | string | No | — | Filter by parent folder prefix |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Max Concurrency | number | No | 10 | Maximum 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.
| Operation | Fields added to the output item |
|---|---|
bucket / create | success |
bucket / getAll | buckets — an array of { Name, CreationDate } |
bucket / search | objects — an array of { Key, LastModified, ETag, Size, StorageClass }, each with Owner when Fetch Owner is on |
file / copy | ETag, LastModified of the new copy |
file / delete | success |
file / download | fileKey, bucketName, fileSize, contentType — plus the file itself in the binary field named by Put Output File in Field |
file / getAll | files — an array of { Key, LastModified, ETag, Size, StorageClass }, each with Owner when Fetch Owner is on. Folder markers are filtered out |
file / upload | success, key (the full object key, including any parent folder) and bucket |
folder / create | success |
folder / delete | deleted — an array of { Key }, one entry for every object removed |
folder / getAll | folders — 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
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes 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 BusyBotLast updated . Spotted something wrong? Tell us.