Portal Community

Output Ports

PortTriggered When
success The S3 operation completed successfully. All requested data is available in the output.
error The operation failed. Reasons include: bucket not found, object not found (download/delete), access denied (IAM permissions), invalid key format, S3 service error, or network timeout. The error_message and error_code fields describe the cause.

upload — Output Schema

FieldTypeDescription
object_urlstringFull S3 URL of the uploaded object: https://<bucket>.s3.<region>.amazonaws.com/<key>. Note: this URL is only directly accessible if the object ACL is public-read. For private objects, use getPresignedUrl.
bucketstringThe bucket the object was uploaded to.
keystringThe resolved object key (after expression evaluation).
etagstringEntity tag (MD5 hash) of the uploaded object. Useful for integrity verification.
version_idstringVersion ID assigned by S3 if bucket versioning is enabled. null for non-versioned buckets.
size_bytesintegerSize of the uploaded object in bytes.

download — Output Schema

FieldTypeDescription
file_datastring / objectThe downloaded file content. Format depends on output_format: base64 string, UTF-8 text string, or parsed JSON object.
content_typestringThe MIME type of the object as stored in S3.
size_bytesintegerSize of the downloaded object in bytes.
last_modifiedstringISO 8601 timestamp of when the object was last modified.
etagstringEntity tag for integrity verification.
metadataobjectCustom metadata stored with the object at upload time (x-amz-meta-* headers, with prefix stripped).
version_idstringVersion ID of the retrieved object, if versioning is enabled.

getPresignedUrl — Output Schema

FieldTypeDescription
urlstringThe pre-signed URL. Valid for the configured expiry_seconds. Include in email links, webhook responses, or API payloads.
expires_atstringISO 8601 timestamp when the URL expires.
methodstringGET or PUT — the HTTP method the URL authorises.
bucketstringThe bucket the URL applies to.
keystringThe object key the URL applies to.

list — Output Schema

FieldTypeDescription
objectsarrayArray of object summary items. Each item contains: key, size (bytes), last_modified (ISO 8601), etag, storage_class.
common_prefixesarray of stringsVirtual sub-folder names when delimiter is set (e.g. ["/reports/2026/04/", "/reports/2026/05/"]).
total_countintegerNumber of objects returned in this response.
is_truncatedbooleantrue if more objects exist beyond max_keys.
next_continuation_tokenstringToken to pass in a subsequent list request to retrieve the next page. null if is_truncated is false.

delete — Output Schema

FieldTypeDescription
deletedbooleantrue when the delete succeeded.
keystringThe key that was deleted.
version_idstringThe version ID of the deleted object, or the delete marker version ID for versioned buckets.

Expression Paths for Downstream Nodes

ExpressionReturns
{@ $node.s3Node.object_url }Permanent S3 URL after upload
{@ $node.s3Node.key }Resolved S3 key
{@ $node.s3Node.etag }ETag of uploaded/downloaded object
{@ $node.s3Node.url }Pre-signed URL (getPresignedUrl)
{@ $node.s3Node.expires_at }Pre-signed URL expiry timestamp
{@ $node.s3Node.file_data }Downloaded file content
{@ $node.s3Node.size_bytes }File size in bytes
{@ $node.s3Node.objects }Array of objects from list operation
{@ $node.s3Node.objects[0].key }Key of first listed object
{@ $node.s3Node.total_count }Count of listed objects

Example Output — upload

{
  "object_url": "https://bizfirstgo-documents.s3.eu-west-1.amazonaws.com/invoices/2026/05/INV-00421.pdf",
  "bucket": "bizfirstgo-documents",
  "key": "invoices/2026/05/INV-00421.pdf",
  "etag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
  "version_id": null,
  "size_bytes": 148320
}

Example Output — getPresignedUrl

{
  "url": "https://bizfirstgo-documents.s3.eu-west-1.amazonaws.com/invoices/2026/05/INV-00421.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=...",
  "expires_at": "2026-05-24T09:14:22.000Z",
  "method": "GET",
  "bucket": "bizfirstgo-documents",
  "key": "invoices/2026/05/INV-00421.pdf"
}

Example Output — list

{
  "objects": [
    {
      "key": "reports/2026/05/weekly-summary-2026-05-19.pdf",
      "size": 204800,
      "last_modified": "2026-05-19T08:02:11.000Z",
      "etag": "\"a3f5b2c1d0e9f4a8b7c6d5e4f3a2b1c0\"",
      "storage_class": "STANDARD"
    },
    {
      "key": "reports/2026/05/weekly-summary-2026-05-12.pdf",
      "size": 198452,
      "last_modified": "2026-05-12T08:01:45.000Z",
      "etag": "\"b4f6c3d2e1f0a9b8c7d6e5f4a3b2c1d0\"",
      "storage_class": "STANDARD"
    }
  ],
  "common_prefixes": [],
  "total_count": 2,
  "is_truncated": false,
  "next_continuation_token": null
}
Storing the object_url vs. the pre-signed URL: Store the permanent object_url (from upload) in your database for internal reference. Generate a fresh getPresignedUrl each time you need to share the file externally — this ensures access control is always enforced and you can set appropriate expiry windows per sharing context.