A project’s config says where its media comes from, in sourceMedia: GET /enums/source-types lists them. Leave sourceMedia out and the project reads its input folder: the stored config then says "sourceMedia": {"@type": "S3FolderSource"}. Choose between the folder and a feed when you create the project and keep it; moving an existing project from one to the other is not supported. A feed project may switch between the two kinds of feed.
Until build 0.9.0-alpha1-2026-10-05T14-57Z-bf4a93 this was a project field of its own, input ({"type": "folder"}). It is gone: a project resource no longer has it, and a call that sends it is refused with 422 and The input field is not supported: where the media comes from is config.sourceMedia. under errors.input. See the Changelog.

The input folder

The project’s storage.inputPath, an S3 folder. Put files there through the API or with the AWS CLI and the upload role; every file is processed once, and Files describes what happens to it. The upload pages describe this source. S3FolderSource takes no other fields. Its location is the project’s own, so a path sent with it is refused.

Feeds

A feed project reads your feed every 30 seconds while it is running. For each item it downloads the item’s media into the project’s input folder and processes it once, with the project’s config, as it would an uploaded file. The results go wherever outputs says: the output folder, a re-published feed per language, or both. Two kinds of feed are read, and the kind says which element of an item holds its media: Each kind reads only its own element. A feed whose items carry <enclosure>s read as an MrssSource has nothing to process, and the other way round; the check says so for every item.
string
required
The feed. https:// only, at most 2048 characters, without a user name or password in it, on a host that resolves to a public address — the same checks as a webhook URL. It is checked when you save the project:A new URL (or the same URL under the other kind of source) is then fetched and read the way the project reads it (what it needs), and refused when the project could never process anything from it:A feed with no items yet is accepted. Saving a project without changing its URL or its kind does not fetch the feed again.

The feed

An RSS 2.0 document with one <item> per clip. For an RssSource, the item’s media is its <enclosure>:
For an MrssSource, it is the item’s <media:content>:
The feed and every media file are fetched from SyncWords’ processing platform, so they must be reachable from the internet without signing in. An item is skipped, at every read, when the project cannot download its media:
  • it has no <enclosure> (an RssSource) or no <media:content> (an MrssSource), or that element has no url — <media:thumbnail> and <link> to a player page are not media;
  • the media URL’s file name has no extension (…/clip.mp4, not …/clip?id=7).
Redirects are followed, for the feed and for its media, up to 5 of them and never from HTTPS to HTTP.

Checking a feed

GET /projects/{id}/source-feed reads the project’s feed the way the project does, at any time, and says how many items it has, how many the project downloads, and why each skipped one is skipped. POST /source-feeds/check with {"url": "…", "sourceType": "RssSource"} gives the same answer before there is a project (sourceType is MrssSource when left out):
A feed of the other kind is told apart in the reason: no <media:content>; its media is an <enclosure>, which an RSS source reads.

The files it makes

Each item’s media becomes one input file, named from a hash of the item’s guid and a hash of its media URL, with the media’s extension: 4f1c2b9a7d3e.8a2b4c6d.mp4. From there it is an input file like any other: GET /projects/{id}/files lists it with its state and outputs, a webhook reports it done or failed, it is billed when done, and it can be retried. Output names come from that name, so a nameTemplate of ${name}.${ext} writes 4f1c2b9a7d3e.8a2b4c6d.mp4.
  • An item the feed keeps listing is processed once.
  • An item whose media URL changes gets a new name, since the second hash changes, and is processed again, as new content. New bytes at the same URL are not noticed.
  • A feed that cannot be read (unreachable, or not a feed) is read again 30 seconds later; nothing fails.
Build 0.9.0-alpha1-2026-10-07T11-55Z-b1b8d1 changed the second hash from one of the media URL and duration to one of the URL alone. A feed project moved onto it from an earlier build sees every item under a new name, and processes them all again.
A feed project takes no uploads. The feed is its only source: an upload through the API is refused with 409 and code: "project_reads_feed":
A feed project is never stopped for being idle. With every item processed, it is waiting for the feed’s next one, which only a running project fetches. It keeps running until you call POST /projects/{id}/stop; start it again to resume reading the feed. See Auto-stop.

The output feed

An RssOutput (with an RssSource) or an MrssOutput (with an MrssSource) publishes your feed again, in one language, with the dubbed files in place of the originals:
  • Every item whose media is done links the dubbed file instead of the original: in its <enclosure> (RssOutput), whose length becomes the new file’s size, or its <media:content> (MrssOutput), whose fileSize does; type and medium follow when the container changed.
  • Items not done yet are left out, and appear once they are.
  • <channel><language> is set to language. The standard elements of the channel and of each item (title, link, description, guid, the media element) are written first, and everything else in the feed (dates, images, itunes: and other elements) follows as you wrote it.
  • The feed is written again after every file and every 30 seconds.
It is public, without a token, so players, aggregators and partners can read it:
Until the project has read your feed and written its copy, and for a language the project does not publish, both answer 404 with code: "feed_not_found". Only the feed’s own files are served this way; the project’s other outputs still need a token. A feed output needs the source of its kind: an RssOutput an RssSource, an MrssOutput an MrssSource; in a folder project either is refused. The feed’s address and folders are the API’s, so path, mediaPath and mediaUrl are refused if sent. The output feed’s files are also ordinary outputs, under output/feeds/<language>/, beside the feed itself at output/feeds/<language>.xml: they appear with those paths in each input’s outputs and in GET /projects/{id}/outputs. A feed project can also list an S3FolderOutput to write files into the output folder. See Outputs.