Connect HTML/CSS to Image to an S3-compatible provider that is not listed separately in the dashboard.
Use the Other S3-compatible provider when your object storage service supports the S3 API but does not have a dedicated HCTI option. You supply the service endpoint, signing region, addressing style, and access keys.
Plan availability
Storage destinations are available on the 10,000 images/month plan or higher. If you’d like to try this on a different plan, email support@htmlcsstoimage.com.
Before you begin
You need:
An existing bucket on an S3-compatible service.
A public HTTPS S3 API endpoint.
An access key ID and secret access key.
The signing region required by the provider, if it uses one.
The provider’s required bucket addressing style.
An optional key prefix, such as hcti-renders.
This option is for public cloud object-storage APIs. HCTI cannot connect to a private network endpoint, a local development server, or a hostname that resolves to a private IP address.
Create provider credentials
Create credentials restricted to the destination bucket and key prefix whenever the service supports it.
S3 permission
Required?
Purpose
PutObject
Required
Writes rendered images and the connection-test object.
GetObject
Optional
Reloads an original for a later transformation when Disable HCTI Storage is selected.
DeleteObject
Optional
Removes connection-test objects. HCTI does not use it to delete rendered images.
Provider permission names may differ, but the allowed object operations should be equivalent. Confirm that a bucket policy, access policy, or firewall rule does not override the credential with an explicit deny.
Choose the endpoint and addressing style
Enter the provider’s S3 service endpoint, not a bucket URL or public file URL.
The custom endpoint must:
Start with https://.
Resolve to public IP addresses.
Contain no username or password.
Contain no path, query string, or fragment.
For example, enter https://objects.example-provider.com, not https://objects.example-provider.com/my-bucket.
Choose the addressing style required by your provider:
Addressing style
Request shape
Virtual-hosted
https://<bucket>.<endpoint>/<key>
Path-style
https://<endpoint>/<bucket>/<key>
Use the provider’s S3 integration documentation to determine the signing region and addressing style. A region used for request signing is not always the same as a friendly data-center label.
Optional folder-like prefix, without leading or trailing slashes
Endpoint
Public HTTPS S3 service endpoint
Signing region
Provider’s signing region, if required
Addressing style
Virtual-hosted or path-style, as required by the provider
Access key ID
Provider-issued access key ID
Secret access key
Provider-issued secret access 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 your bucket
Pass the destination ID as storage_destination_id when you create an image:
Rendering is lazy. With normal HCTI storage enabled, request the returned image URL to render the image and upload the provider 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. The provider’s bucket policy continues to control object access.
Troubleshooting S3-compatible uploads
The custom endpoint is rejected — Remove the bucket path, credentials, query string, or fragment. Confirm the endpoint uses HTTPS and public DNS.
TLS validation fails — Use the provider’s public service hostname with a valid certificate. Self-signed certificates are not supported.
The connection test returns a signature error — Recheck the access key, secret, signing region, and the provider’s expected clock and signing configuration.
The bucket is missing from the request — Switch between virtual-hosted and path-style addressing according to the provider’s documentation.
A later transformation fails with HCTI Storage disabled — Add the provider’s equivalent of GetObject.