{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/formfeed/main/json-schema/formfeed-storage-connection-put-schema.json", "title": "StorageConnectionPut", "x-generated": "2026-09-28", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/formfeed-openapi.json#/components/schemas/StorageConnectionPut", "type": "object", "required": [ "provider", "bucket" ], "properties": { "provider": { "type": "string", "enum": [ "s3", "r2", "s3_compatible" ], "description": "`s3_compatible` covers Hetzner, IONOS, Scaleway, Wasabi, Backblaze B2, MinIO and Google Cloud Storage (HMAC keys)." }, "region": { "type": "string", "description": "`s3`: the AWS region, from which the endpoint is derived. `s3_compatible`: the region the provider signs with (`us-east-1` when omitted)." }, "account_id": { "type": "string", "description": "`r2`: the Cloudflare account id." }, "jurisdiction": { "type": "string", "enum": [ "default", "eu" ], "default": "default", "description": "`r2`: `eu` for a bucket in the EU jurisdiction." }, "endpoint": { "type": "string", "format": "uri", "description": "`s3_compatible`: the service address, https only." }, "force_path_style": { "type": "boolean", "default": false, "description": "`s3_compatible`: address the bucket in the path instead of the host name." }, "bucket": { "type": "string" }, "prefix": { "type": "string", "description": "Folder every key is written below; a trailing slash is added." }, "key_template": { "type": "string", "default": "{yyyy}/{mm}/{render_id}/{filename}", "description": "Object key below the prefix, with `{workspace}`, `{template}`, `{environment}`, `{render_id}`, `{job_id}`, `{yyyy}`, `{mm}`, `{dd}` and `{filename}`. A placeholder without a value (`{template}` of an HTML render, `{render_id}` of a batch zip) drops its segment." }, "environments": { "type": "array", "items": { "type": "string", "enum": [ "live", "test" ] }, "default": [ "live" ], "description": "Which renders are copied; test renders only when `test` is listed." }, "public_base_url": { "type": [ "string", "null" ], "format": "uri", "description": "Where you serve the bucket, https only; each delivery's `url` is built from it." }, "access_key_id": { "type": "string", "description": "Write-only. Needed for a new connection or a changed endpoint." }, "secret_access_key": { "type": "string", "description": "Write-only; never returned." } } }