List input files
curl --request GET \
--url https://api-vod-express.syncwords.com/v1/projects/{id}/files \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-vod-express.syncwords.com/v1/projects/{id}/files"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api-vod-express.syncwords.com/v1/projects/{id}/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"name": "episode 01.mp4",
"size": 11825290,
"uploadedAt": "2026-09-28T06:10:46.000Z",
"status": "done",
"hash": "a7381118",
"outputs": [
{
"path": "episode 01.es.mp4",
"available": true,
"size": 12374212
}
],
"failureReason": null,
"failureCode": null,
"stale": false,
"usage": [
{
"kind": "captioning",
"language": "en",
"durationMs": 1312480
},
{
"kind": "translation",
"language": "es",
"durationMs": 1312480
},
{
"kind": "dubbing",
"language": "es",
"durationMs": 1312480
}
]
},
{
"name": "season 2/episode 01.mp4",
"size": 734003200,
"uploadedAt": "2026-09-28T06:12:03.000Z",
"status": "pending",
"hash": null,
"outputs": [
{
"path": "season 2/episode 01.es.mp4",
"available": false,
"size": null
}
],
"failureReason": null,
"failureCode": null,
"stale": false,
"usage": null
},
{
"name": "trailer.mp4",
"size": 3174578,
"uploadedAt": "2026-09-28T06:10:44.000Z",
"status": "failed",
"hash": null,
"outputs": [
{
"path": "trailer.es.mp4",
"available": false,
"size": null
}
],
"failureReason": "Processing this file failed. Retry it, or contact support if it fails again.",
"failureCode": "no_audio",
"stale": false,
"usage": null
}
],
"meta": {
"total": 3,
"pending": 1,
"processing": 0,
"done": 1,
"failed": 1
}
}{
"message": "Unauthenticated.",
"code": "unauthenticated"
}{
"message": [
"VOD Express is not enabled for your account."
],
"code": "vod_express_not_enabled"
}{
"message": "Project not found.",
"code": "project_not_found"
}{
"message": "The selected status is invalid.",
"errors": {
"status": [
"The selected status is invalid."
]
},
"code": "validation_failed"
}{
"message": [
"Too Many Attempts."
],
"code": "too_many_requests"
}Files
List input files
Every file in the project’s input/ folder, subfolders included, in name order: its processing state and the outputs it produces. This is the call to poll: meta counts the files in each state, so the project is finished when meta.pending and meta.processing are both 0.
Guide: Monitoring
GET
/
projects
/
{id}
/
files
List input files
curl --request GET \
--url https://api-vod-express.syncwords.com/v1/projects/{id}/files \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-vod-express.syncwords.com/v1/projects/{id}/files"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api-vod-express.syncwords.com/v1/projects/{id}/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"name": "episode 01.mp4",
"size": 11825290,
"uploadedAt": "2026-09-28T06:10:46.000Z",
"status": "done",
"hash": "a7381118",
"outputs": [
{
"path": "episode 01.es.mp4",
"available": true,
"size": 12374212
}
],
"failureReason": null,
"failureCode": null,
"stale": false,
"usage": [
{
"kind": "captioning",
"language": "en",
"durationMs": 1312480
},
{
"kind": "translation",
"language": "es",
"durationMs": 1312480
},
{
"kind": "dubbing",
"language": "es",
"durationMs": 1312480
}
]
},
{
"name": "season 2/episode 01.mp4",
"size": 734003200,
"uploadedAt": "2026-09-28T06:12:03.000Z",
"status": "pending",
"hash": null,
"outputs": [
{
"path": "season 2/episode 01.es.mp4",
"available": false,
"size": null
}
],
"failureReason": null,
"failureCode": null,
"stale": false,
"usage": null
},
{
"name": "trailer.mp4",
"size": 3174578,
"uploadedAt": "2026-09-28T06:10:44.000Z",
"status": "failed",
"hash": null,
"outputs": [
{
"path": "trailer.es.mp4",
"available": false,
"size": null
}
],
"failureReason": "Processing this file failed. Retry it, or contact support if it fails again.",
"failureCode": "no_audio",
"stale": false,
"usage": null
}
],
"meta": {
"total": 3,
"pending": 1,
"processing": 0,
"done": 1,
"failed": 1
}
}{
"message": "Unauthenticated.",
"code": "unauthenticated"
}{
"message": [
"VOD Express is not enabled for your account."
],
"code": "vod_express_not_enabled"
}{
"message": "Project not found.",
"code": "project_not_found"
}{
"message": "The selected status is invalid.",
"errors": {
"status": [
"The selected status is invalid."
]
},
"code": "validation_failed"
}{
"message": [
"Too Many Attempts."
],
"code": "too_many_requests"
}Authorizations
A token from POST /token/create, made with your API key pair.
Path Parameters
The project id, a lowercase ULID.
Pattern:
^[0-9a-z]{26}$Query Parameters
Only the files in this state, or in any of several, comma-separated: failed, pending,processing. meta still counts every file.