S3

Storage integration

# Amazon S3 + Transloadit

Import objects from Amazon S3, process them in an Assembly, and write results back without routing the files through your application server.

Executable recipe

## Build the integration

This Template imports one JPEG, resizes it to fit within 1200×1200, and stores the result under processed/.

1. Create an S3 bucket and a least-privilege IAM principal for that bucket.
2. Save the AWS values in Transloadit as Template Credentials named my\_s3\_credentials.
3. Paste the Instructions into a Template and start an Assembly from that Template.

### Template Instructions

```
{
  "steps": {
    "imported": {
      "robot": "/s3/import",
      "credentials": "my_s3_credentials",
      "bucket_region": "us-east-1",
      "path": "incoming/photo.jpg"
    },
    "resized": {
      "robot": "/image/resize",
      "use": "imported",
      "width": 1200,
      "height": 1200,
      "resize_strategy": "fit"
    },
    "exported": {
      "robot": "/s3/store",
      "use": "resized",
      "credentials": "my_s3_credentials",
      "bucket_region": "us-east-1",
      "acl": "bucket-default",
      "path": "processed/${file.url_name}"
    }
  }
}
```

## Authentication

* Create a dedicated IAM principal and save its bucket, access key ID, secret access key, and bucket region as Transloadit Template Credentials.
* Grant only the bucket and object actions needed by the import and store Steps. The Robot documentation contains starting policies for each direction.
* Keep the AWS secret out of Assembly Instructions and application code by referring to the saved credential name.

## Limitations and operational notes

* Directory imports can return many files and may require pagination; use a narrow path prefix for predictable batches.
* Server-side encryption with AWS KMS requires additional KMS permissions beyond ordinary S3 object access.
* Object ownership and bucket policies can reject ACL writes. The recipe uses bucket-default so PutObjectAcl is not required.

## Related Robots

* [/s3/import](/docs/robots/s3-import.md)\
  Import from S3
* [/image/resize](/docs/robots/image-resize.md)\
  Resize images
* [/s3/store](/docs/robots/s3-store.md)\
  Store in S3

## Documentation

* [Transloadit S3 import documentation](/docs/robots/s3-import.md)
* [Transloadit S3 store documentation](/docs/robots/s3-store.md)
* [Amazon S3 access-control documentation⁠](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-management.html)
  [Create a Template](/c/templates/new/)

More integrations

## Continue building your stack

R2

### [Cloudflare R2](/integrations/cloudflare-r2.md)

Process R2 objects with dedicated import and store Robots.

SB

### [Supabase](/integrations/supabase.md)

Connect Supabase Storage through its S3-compatible endpoint.

TG

### [Tigris](/integrations/tigris.md)

Import and export Tigris objects with first-class Robots.
