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

  1. You create a Storage Connection in Settings → Storage Connections with your bucket credentials
  2. The connection's secret key is encrypted at rest with AES-GCM
  3. In your automation flow, the s3_action operation references the connection by its ID
  4. 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:

  1. Add an S3 / R2 File operation to your flow
  2. Select your connection from the Storage Connection dropdown
  3. Choose an action: put, get, delete, list, or head
  4. 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.