S3 / R2 bucket
Drop the result in a bucket
Saves the finished result into a cloud storage bucket — Amazon S3 or any S3-compatible store (Cloudflare R2, Wasabi, Backblaze B2, MinIO, Telnyx Storage) — for teams that keep or further process their files there. A paid-plan feature.
How it works
Object storage buckets are a very common place companies keep files in the cloud, organized into folders. When your job produces a result, this node drops that file straight into the bucket you point it at, so it lands where your other tools and teammates already look.
This is the right choice when the finished document is one input to a bigger machine: a data warehouse that ingests files from a bucket, a backup archive, or another app that watches the bucket and picks up whatever appears. Instead of emailing a file around, you deposit it where the system expects it.
It speaks the S3 API, so beyond AWS it also writes to Cloudflare R2 and other S3-compatible stores — you just point it at their endpoint. You provide the bucket name, the folder path and file name you want, and the credentials to write there. Each job writes its own file, so you build up a tidy record over time.
Common use cases
Real situations where this node earns its place in a flow.
Archive every report
Write finished documents to your own S3 bucket for retention.
Publish a report
Drop HTML to a bucket that serves it to a viewer.
Feed downstream analytics
Land outputs in S3 for your data team to work from.
S3 / R2 bucket in a workflow
A simple example of where this node sits in a flow.
What you set up
- Enter the bucket name and the key template (folder path plus file name) to save under — you can include job values like {merchant}, {date}, {datetime}, {jobId} in the name so each job writes a distinct file.
- For AWS S3: create an IAM user (not a role — the node signs with a static access key), attach a policy that allows only s3:PutObject on arn:aws:s3:::YOUR_BUCKET/* (the object path, not the bucket ARN), and generate an access key. Paste the key ID + secret and set the region.
- For Cloudflare R2 or another S3-compatible store: create an API token scoped to the bucket with object read+write, then set the Custom endpoint (R2: https://<account-id>.r2.cloudflarestorage.com), region 'auto', and the token's access key ID + secret.
Common questions
Do I need my own cloud storage account for this?
Yes. You supply the bucket and credentials for your own S3 or R2 storage, so the files live under your control in your account, not ours.
What are the exact permissions you need?
Only write. On AWS that's a single action, s3:PutObject, scoped to arn:aws:s3:::YOUR_BUCKET/* — the object path with the /*, not the bucket ARN (that mismatch is the usual 'AccessDenied'). If the bucket uses SSE-KMS with a customer-managed key, also allow kms:GenerateDataKey and kms:Decrypt; default SSE-S3/AES256 needs nothing extra. On R2, an API token with Object Read & Write scoped to the bucket.
Does this work with Cloudflare R2?
Yes. R2 is S3-API compatible: set the Custom endpoint to https://<account-id>.r2.cloudflarestorage.com, region 'auto', and use an R2 API token's access key ID and secret. The same node also covers Wasabi, Backblaze B2, MinIO, and Telnyx Storage via their endpoints.
What happens if two jobs would save the same file name?
Include a job value like an ID or timestamp in the file name so each job writes a distinct file and nothing gets overwritten.
Settings you configure on this node, stored under data.config in the workflow JSON. Leave a field unset to use its default.
bucketreqTarget bucket name.
Type: stringendpointCustom S3-compatible endpoint. Leave blank for AWS S3; set it for Cloudflare R2 (https://<account>.r2.cloudflarestorage.com), Wasabi, Backblaze B2, MinIO, Telnyx Storage. Enables path-style addressing.
Type: stringregionRegion of the bucket. R2 and most S3-compatible stores use 'auto' (the default when a custom endpoint is set).
Type: stringDefault:us-east-1awsAccessKeyIdAccess key id for the upload (AWS IAM user key, or the R2 API token's Access Key ID).
Type: stringawsSecretAccessKeySecret access key; resolved from the org secret vault.
Type: string (secret)keyTemplateObject key/path template for the uploaded file; a default is used when blank.
Type: stringmaxAttemptsMax delivery attempts before giving up.
Type: numberbackoffSecondsBase backoff in seconds between retry attempts.
Type: number
How this node appears inside a workflow's nodes[] array (the shape you see in the Developer export / import). A full workflow is { nodes: [...], edges: [...] }.
{
"id": "s3-out",
"type": "card",
"position": {
"x": 160,
"y": 120
},
"data": {
"type": "s3-out",
"kind": "output",
"title": "S3 / R2 bucket",
"subtitle": "Drop the result in a bucket",
"config": {
"bucket": "",
"endpoint": "",
"region": "us-east-1",
"awsAccessKeyId": "",
"awsSecretAccessKey": "",
"keyTemplate": "",
"maxAttempts": "0",
"backoffSeconds": "0"
}
}
}