The processing service copies each file through SyncWords’ own storage while it works, so your
bucket never has to be reachable from anything but SyncWords’ API and processing service. The
service’s own bookkeeping — which file is done, which failed — stays in SyncWords’ storage,
outside your bucket.
One-time setup
1
Create an access key for the bucket
A key pair that can list, read, write and delete objects in the bucket, and nothing else.
On AWS, an IAM user with a policy on the bucket; on Cloudflare R2, an R2 API token with
Object Read & Write on the bucket (its Access Key ID and Secret Access Key, and the
account’s S3 endpoint
https://<account id>.r2.cloudflarestorage.com).2
Add the connection
Leave The secret is stored encrypted and never answered.
endpoint out for AWS S3; set it for an S3-compatible store. The API lists the bucket
with the keys before saving anything: a wrong key, bucket or endpoint is refused here
(storage_connection_check_failed, with the store’s own words), not hours later.GET /account/storage-connections lists
your connections; POST …/{id}/check lists the bucket again with the stored keys, for after
you change a key or a policy on your side.3
Make it the default (optional)
A project created without
storage uses your account’s default connection. Set it once:A project on your bucket
Name the connection and, if you like, the two folders when you create the project:- The folders default to
vod-express/<project id>/input/and…/output/. A trailing slash is added; no leading slash, no... - The input folder is yours to fill, at any depth: every file under it is processed once, and its outputs land under the output folder with the same relative path. No other project of your account may watch the same input folder, or one inside it, on the same connection.
- The output folder may not be the input folder or inside it: the service would process its own results.
- A project on your bucket reads a folder and writes folders. It cannot read a
feed or publish one (
storage_connection_folder_only). storage.connectionId: nullputs the project in SyncWords’ storage, whatever the account’s default.
PUT from the page’s origin
and exposes ETag; an upload from a script or the API does not.
Moving a project
PATCH /projects/{id} with a new storage moves the project’s folders from the next file on: a
running project is restarted with the new location, and nothing already in either place is
copied. A file with the same name as one already processed under the old location is still read
as processed.
Changing keys
PATCH /account/storage-connections/{id} with a new secretAccessKey (and accessKeyId, if it
changed) checks the new keys against the bucket and restarts the running projects on the
connection: a running project holds the keys it started with. A connection cannot be deleted
while a project of your account uses it (storage_connection_in_use); move the project to other
storage first. Deleting a connection touches nothing in your bucket.
What SyncWords does with the keys
The keys are stored encrypted and reach the processing service’s configuration when a project starts, where they are used to list, read and write the two folders and nowhere else. They appear redacted in SyncWords’ logs and in everything the API answers. Scope the key to the bucket the projects use, and rotate it withPATCH when your policy asks.