- Docs
- Guides
- Advanced
- Storage destinations
- Upload to Wasabi
Upload to Wasabi
Send every rendered image or PDF to a Wasabi bucket you control.
HTML/CSS to Image connects to Wasabi through its S3-compatible API. HCTI derives the service endpoint from the bucket’s Wasabi region and authenticates with an access key and secret.
Before you begin
Section titled “Before you begin”You need:
- An existing Wasabi bucket.
- The bucket’s Wasabi region, such as
us-east-1. - An optional key prefix, such as
hcti-renders.
Use the region shown for the bucket in the Wasabi console. HCTI uses it to select the regional S3 service endpoint.
Create Wasabi credentials
Section titled “Create Wasabi credentials”For least-privilege access, create a Wasabi sub-user for HCTI, restrict it to the destination bucket and optional prefix with a policy, and create an access key for that user.
The policy should allow the S3 equivalents of:
| Permission | Required? | Purpose |
|---|---|---|
s3:PutObject |
Required | Writes rendered images and the connection-test object. |
s3:GetObject |
Optional | Reloads an original for a later transformation when Disable HCTI Storage is selected. |
s3:DeleteObject |
Optional | Removes connection-test objects. HCTI does not use it to delete rendered images. |
In the Wasabi console, open Access Keys, click Create Access Key, and create the key for the restricted sub-user. Copy the access key ID and secret key. Wasabi does not show the secret again after you close the key details.
Add Wasabi to HCTI
Section titled “Add Wasabi to HCTI”Open the Storage Destinations dashboard, click Add storage destination, and enter:
| HCTI field | Wasabi value |
|---|---|
| Provider | Wasabi |
| Bucket | Existing Wasabi bucket name |
| Key prefix | Optional folder-like prefix, without leading or trailing slashes |
| Region | Bucket region, such as us-east-1 |
| Access key ID | Wasabi access key ID |
| Secret access key | Wasabi secret key |
Click Test connection, then enable and save the destination after the test succeeds. Copy the destination id for your API requests.
The test writes a small object under <key-prefix>/.hcti/connection-tests/. Cleanup is best-effort, so missing delete access does not make a successful write test fail.
Upload an HCTI image to Wasabi
Section titled “Upload an HCTI image to Wasabi”Pass the destination ID as storage_destination_id when you create an image:
curl -X POST https://hcti.io/v1/image \ -u 'user-id:api-key' \ -H 'Content-Type: application/json' \ -d '{ "url": "https://example.com", "storage_destination_id": "your-storage-destination-id" }'Rendering is lazy. With normal HCTI storage enabled, request the returned image URL to render the image and upload the Wasabi copy. With Disable HCTI Storage selected, send an authenticated PUT request to the returned /v1/store/... URL.
The base object is stored as <key-prefix>/<image-id>.png, or .pdf when the request uses pdf_options. Your Wasabi bucket policy controls access; HCTI does not make the object public.
Troubleshooting Wasabi uploads
Section titled “Troubleshooting Wasabi uploads”- The connection test cannot find the bucket — Confirm the bucket name and its Wasabi region.
- Authentication fails — Confirm that both parts of the Wasabi access key pair are current and belong to the intended user.
- A restricted user returns Access Denied — Confirm that both the identity policy and bucket policy permit writes to the configured prefix and do not contain a conflicting explicit deny.
- A later transformation fails with HCTI Storage disabled — Add
s3:GetObjectfor the configured prefix. - Connection-test objects remain — Add
s3:DeleteObjectfor.hcti/connection-tests/.
Wasabi documents creating access keys and its regional S3 service endpoints.
Automate destination setup
Section titled “Automate destination setup”You can also automate configuration through the Storage destinations API or MCP tools.
Need help?
Talk to a human. Email support@htmlcsstoimage.com and we’ll help you get started.