Storage Connections
Configure external S3-compatible buckets for use in automation flows with the s3_action operation.
#Storage Connections
Storage Connections are reusable profiles for external S3-compatible buckets. They let the s3_action operation interact with Cloudflare R2, AWS S3, or MinIO without hardcoding credentials in your flows.
#How it works
- You create a Storage Connection in Settings → Storage Connections with your bucket credentials
- The connection's secret key is encrypted at rest with AES-GCM
- In your automation flow, the
s3_actionoperation references the connection by its ID - At runtime, EmuView decrypts the credentials and creates an S3 client to perform the requested action
#Creating a connection
Navigate to Settings → Storage Connections and click Add Connection.
| Field | Description |
|---|---|
| Label | A friendly name (e.g. "Production R2", "Backup S3") |
| Provider | Cloudflare R2, AWS S3, or MinIO |
| Endpoint URL | S3-compatible endpoint for the bucket |
| Region | Region name (use auto for Cloudflare R2) |
| Bucket Name | Target bucket name |
| Access Key ID | Public access key for the bucket |
| Secret Key | Secret access key (encrypted at rest, never returned after saving) |
#Provider-specific endpoints
| Provider | Endpoint format | Region |
|---|---|---|
| Cloudflare R2 | https://<account_id>.r2.cloudflarestorage.com |
auto |
| AWS S3 | https://s3.<region>.amazonaws.com |
e.g. us-east-1 |
| MinIO | https://<host>:<port> |
any value (MinIO ignores this) |
#Using in automation flows
Once you have a connection, use it in the s3_action operation:
- Add an S3 / R2 File operation to your flow
- Select your connection from the Storage Connection dropdown
- Choose an action:
put,get,delete,list, orhead - Configure the remaining fields based on the action
#s3_action reference
#Actions
| Action | Description | Key fields |
|---|---|---|
put |
Upload a file | key, content, contentType |
get |
Download a file | key, encoding |
delete |
Delete a file | key |
list |
List objects | prefix, maxKeys |
head |
Check if file exists | key |
#Encoding (for get action)
| Encoding | Description |
|---|---|
text |
Returns file content as a string |
base64 |
Returns file content as base64-encoded string |
json |
Parses file content as JSON |
#Example flow
{
"type": "s3_action",
"name": "Export to R2",
"config": {
"connectionId": "sc_abc123",
"action": "put",
"key": "exports/{{$trigger.body.id}}.json",
"content": "{{JSON.stringify($trigger.body)}}",
"contentType": "application/json"
}
}
#Security
- Secret keys are encrypted with AES-GCM using your project's
BETTER_AUTH_SECRET - The API never returns the secret key after creation
- Connections are scoped per project — other projects cannot access them
- Deleting a project cascades to delete all its storage connections
#API reference
See the Storage Connections API reference for the full REST API.