Rate limit

The limit is per account: every key and every user of your organization share one budget, and another customer’s traffic never uses it. A call SyncWords support makes on your account’s behalf counts against it too. Every answer of a counted call says where you stand: The minute starts at the first request, not on the clock. Past the limit, a call answers 429 with code: "too_many_requests"; wait Retry-After seconds and repeat it. A polling loop that calls once a minute per project, as in Monitoring, stays far below the limit.
Part signing is not counted against it, so a large upload does not use up the limit. It has a budget of its own instead, 10,000 parts a minute per account (a whole 5 TB file is at most 10,000 parts), answers 429 with Retry-After past it, and carries no rate-limit headers.

Failed authentication

A request whose token is expired or unknown answers 401, and counts against that token: after 60 refusals of one token in a minute, requests carrying it are answered 429 (with Retry-After) without looking it up again, until the minute is over. POST /token/create counts a refused key pair the same way. Other credentials are unaffected, so one misconfigured client never locks out the others, and successful requests never count. A client that gets 401 should fix its token, or its key pair, not retry. Creating a token is not counted against the 1000 requests a minute.

Request bodies

A body is JSON (Content-Type: application/json) or YAML (application/yaml, application/x-yaml or text/yaml; a charset parameter is fine). Any other type answers 415 with code: "unsupported_media_type", so curl -d needs -H 'Content-Type: application/json'. A body over 2 MB answers 413 with code: "payload_too_large"; completing an upload of the full 10,000 parts sends about 700 KB. Answers are JSON unless Accept prefers YAML, by its quality values: Accept: application/yaml and application/yaml, */*;q=0.1 get YAML, */* gets JSON. The config endpoints and error bodies follow it.

Browsers

Every origin may call the API. A browser can read Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining and Idempotency-Replayed, and caches a preflight for two hours.

Behaviour to design around

A project that stopped itself after its last file starts again when a file lands, unless its startOnNewFiles is off. Files uploaded to a project stopped with POST …/stop, or created with autoStart: false, wait (unless an API upload in parts completes). Call POST /projects/{id}/start after every upload session; it does nothing to a running project. Starting again on a new file.
The new config applies to files processed from then on. Retry the files you want redone.
The input and output folders stay in storage after DELETE /projects/{id}.
a.mov and a.mkv write the same output. API uploads refuse the second; AWS CLI uploads do not.
The service works on several files at once and takes the next one as soon as one finishes. A file interrupted by a stop is processed again from the start on the next run.
A project keeps its buildVersion until you change it, so a new build never alters a running integration. New projects get your account’s default.
A misspelt option is a 422, not a silently ignored field.