S3 Compatible Storage
Store rendered files in your own S3 or Cloudflare R2 bucket
The Orshot S3 Compatible Storage integration allows you to store rendered files directly in your own Amazon S3 or Cloudflare R2 bucket. This gives you full control over your rendered content storage, enabling custom retention policies, access controls, and seamless integration with your existing cloud infrastructure.
Supported Providers
- Amazon S3 - AWS Simple Storage Service
- Cloudflare R2 - S3-compatible object storage by Cloudflare
Connecting S3 Storage
- Navigate to Workspace > Settings > Storage in your Orshot dashboard
- Click Connect next to S3 Compatible Storage
- Select your storage provider (AWS S3 or Cloudflare R2)
- Enter your credentials:
- Endpoint: Your S3/R2 endpoint URL
- Access Key ID: Your access key
- Secret Access Key: Your secret key
- Bucket Name: The bucket where files will be stored
- Folder Path: Default folder for renders (defaults to
renders)
- Click Test Connection to verify your credentials
- Click Connect to save the configuration
Getting Your Credentials
Amazon S3
- Go to AWS IAM Console
- Create a new IAM user or use an existing one
- Attach a policy with S3 permissions for your bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject", "s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}- Generate access keys for the user
- Your endpoint will be:
https://s3.{region}.amazonaws.com(e.g.,https://s3.us-east-1.amazonaws.com)
Cloudflare R2
- Go to Cloudflare Dashboard > R2
- Create a bucket if you haven't already
- Go to Manage R2 API Tokens and create a new API token
- Copy the Access Key ID and Secret Access Key
- Your endpoint will be:
https://{account_id}.r2.cloudflarestorage.com
Using S3 Storage in API Requests
If S3 storage is enabled on the Storage page, all your renders will automatically be uploaded to your S3 bucket — no need to add connections in your API request.
To explicitly control the upload or specify custom options, add the connections parameter to your render request:
{
"templateId": 25,
"modifications": {
"headline": "Hello World"
},
"response": {
"type": "url",
"format": "png"
},
"connections": [
{
"type": "storage",
"provider": "s3"
}
]
}Specifying a Custom Folder
Override the default folder by specifying a folder path:
{
"connections": [
{
"type": "storage",
"provider": "s3",
"folder": "marketing/banners/2024"
}
]
}Custom File Names
Use response.fileName to set a custom name for the uploaded file:
{
"templateId": 25,
"modifications": { "headline": "Hello" },
"response": {
"type": "url",
"format": "png",
"fileName": "marketing-banner-001"
},
"connections": [
{
"type": "storage",
"provider": "s3",
"folder": "banners"
}
]
}API Response Examples
Successful Upload
{
"data": {
"content": "https://store.orshot.com/cloud/w-50/renders/images/abc123.png",
"type": "url",
"format": "png",
"responseTime": "1.2s"
},
"connections": [
{
"type": "storage",
"provider": "s3",
"path": "renders/abc123.png",
"status": "success"
}
]
}Multi-Page Upload
When rendering multi-page templates, each page is uploaded separately:
{
"data": [
{
"page": 1,
"content": "https://storage.orshot.com/cloud/w-50/renders/images/abc123.png"
},
{
"page": 2,
"content": "https://storage.orshot.com/cloud/w-50/renders/images/def456.png"
}
],
"format": "png",
"type": "url",
"responseTime": 3166.01,
"totalPages": 2,
"renderedPages": 2,
"connections": [
{
"type": "storage",
"provider": "s3",
"path": [
{ "page": 1, "path": "renders/template_page_1.png" },
{ "page": 2, "path": "renders/template_page_2.png" }
],
"status": "success"
}
]
}Upload Failed (with Warning)
Connection issues return warnings but don't block the render:
{
"data": {
"content": "https://store.orshot.com/cloud/w-50/renders/images/abc123.png",
"type": "url",
"format": "png",
"responseTime": "1.2s"
},
"warnings": [
{
"title": "Failed to upload to S3: Access Denied",
"details": ""
}
],
"connections": [
{
"type": "storage",
"provider": "s3",
"path": null,
"status": "error",
"error": "Access Denied"
}
]
}S3 Not Connected
{
"data": {
"content": "https://store.orshot.com/cloud/w-50/renders/images/abc123.png",
"type": "url",
"format": "png"
},
"warnings": [
{
"title": "S3 connection not found for this workspace",
"details": ""
}
]
}Connection Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be "storage" |
provider | string | Yes | Must be "s3" |
folder | string | No | Custom folder path. Uses default folder if not specified |
Managing Your Connection
Enable/Disable Sync
You can temporarily pause S3 uploads without disconnecting:
- Go to Workspace > Settings > Storage
- Toggle the Active switch to enable or disable automatic uploads
Update Folder Path
To change the default folder where renders are stored:
- Go to Workspace > Settings > Storage
- Click the edit icon next to the folder path
- Enter the new folder path
- Click Save
Edit Credentials
If you need to update your S3 credentials:
- Go to Workspace > Settings > Storage
- Click Edit on your S3 connection
- Update the credentials
- Test the connection and save
Notes
- Non-blocking: S3 upload failures won't block your render—you'll still get the image URL from Orshot's storage
- Folder creation: Files are stored with the specified folder path as a prefix in the bucket
- Supported formats: PNG, JPG, JPEG, WebP, PDF, MP4, GIF
- Permissions: Ensure your credentials have
PutObjectandGetObjectpermissions on the bucket
Need Help?
- Contact support at hi@orshot.com or use the chat button in your Orshot dashboard