S3 and compatible storage

Deliver straight into your own bucket.

Save a configuration once in the dashboard and reference it by id, so your requests never carry a secret:

{
  "url": "https://example.com",
  "format": "png",
  "store": true,
  "storage_config_id": "sto_01...",
  "storage_path": "screenshots/{date}/{external_identifier}.{format}",
  "storage_return_location": true,
  "response_type": "empty"
}

Path placeholders: {request_id}, {timestamp}, {date}, {external_identifier}, {format}, {organization_id}. Values are sanitised — an external_identifier containing ../ cannot escape your intended prefix.

Inline credentials (storage_access_key_id, storage_secret_access_key) are also accepted for migration, and are treated exactly like other request secrets.

Custom endpoints must be HTTPS, are resolved and checked against private ranges, and redirects are not followed — following one would hand your bucket credentials to a host you did not choose.

Failures are distinguished: storage_access_denied is yours to fix, storage_returned_transient_error is retried.