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.
renders){
"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/*"
]
}
]
}https://s3.{region}.amazonaws.com (e.g., https://s3.us-east-1.amazonaws.com)https://{account_id}.r2.cloudflarestorage.comIf 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"
}
]
}Override the default folder by specifying a folder path:
{
"connections": [
{
"type": "storage",
"provider": "s3",
"folder": "marketing/banners/2024"
}
]
}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"
}
]
}{
"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"
}
]
}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"
}
]
}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"
}
]
}{
"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": ""
}
]
}| 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 |
You can temporarily pause S3 uploads without disconnecting:
To change the default folder where renders are stored:
If you need to update your S3 credentials:
PutObject and GetObject permissions on the bucket