curl --request GET \
--url https://api-vod-express.syncwords.com/v1/projects \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-vod-express.syncwords.com/v1/projects"
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', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "01m3k8jnrdw509457nhz7w81bq",
"name": "Fishing Channel S01",
"description": null,
"buildVersion": "0.9.0-alpha1-2026-10-20T14-10Z-3f05aa",
"status": "running",
"files": {
"total": 3,
"pending": 1,
"processing": 0,
"done": 1,
"failed": 1,
"countedAt": "2026-09-28T06:15:00.000Z"
},
"startOnNewFiles": true,
"config": {
"sourceMedia": {
"@type": "S3FolderSource"
},
"transcription": {
"@type": "Speechmatics",
"language": "en"
},
"translations": [
{
"language": "es",
"engine": {
"@type": "Gemini"
},
"ttsOptions": {
"provider": {
"@type": "Deepdub",
"voice": "auto"
}
}
}
],
"outputs": [
{
"@type": "S3FolderOutput",
"items": [
{
"@type": "VideoFile",
"ext": "mp4",
"nameTemplate": "${name}.es.${ext}",
"useOriginalTracks": true,
"dubTracks": [
{
"language": "es",
"title": "Spanish"
}
]
}
]
}
]
},
"storage": {
"connection": null,
"path": "s3://sw-vod-express/projects/141/01m3k8jnrdw509457nhz7w81bq/",
"inputPath": "s3://sw-vod-express/projects/141/01m3k8jnrdw509457nhz7w81bq/input/",
"outputPath": "s3://sw-vod-express/projects/141/01m3k8jnrdw509457nhz7w81bq/output/",
"inputPrefix": null,
"outputPrefix": null
},
"meta": {
"createdAt": "2026-09-28T05:42:35.534Z",
"updatedAt": "2026-09-28T05:42:35.534Z",
"createdBy": {
"accountId": 141,
"accountName": "Acme Media",
"userId": null,
"userEmail": null,
"userFullName": null
},
"configLocked": false,
"messages": []
}
}
],
"links": {
"first": "https://api-vod-express.syncwords.com/v1/projects?status=running&page=1",
"last": "https://api-vod-express.syncwords.com/v1/projects?status=running&page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://api-vod-express.syncwords.com/v1/projects?status=running&page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://api-vod-express.syncwords.com/v1/projects",
"per_page": 25,
"to": 1,
"total": 1
}
}{
"message": "Unauthenticated.",
"code": "unauthenticated"
}{
"message": [
"VOD Express is not enabled for your account."
],
"code": "vod_express_not_enabled"
}{
"message": "The selected status is invalid.",
"errors": {
"status": [
"The selected status is invalid."
]
},
"code": "validation_failed"
}{
"message": [
"Too Many Attempts."
],
"code": "too_many_requests"
}List projects
Your account’s projects, newest first, a page at a time. Follow links.next until it is null. To find one project before creating it, filter by its exact name.
Guide: Projects
curl --request GET \
--url https://api-vod-express.syncwords.com/v1/projects \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-vod-express.syncwords.com/v1/projects"
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', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "01m3k8jnrdw509457nhz7w81bq",
"name": "Fishing Channel S01",
"description": null,
"buildVersion": "0.9.0-alpha1-2026-10-20T14-10Z-3f05aa",
"status": "running",
"files": {
"total": 3,
"pending": 1,
"processing": 0,
"done": 1,
"failed": 1,
"countedAt": "2026-09-28T06:15:00.000Z"
},
"startOnNewFiles": true,
"config": {
"sourceMedia": {
"@type": "S3FolderSource"
},
"transcription": {
"@type": "Speechmatics",
"language": "en"
},
"translations": [
{
"language": "es",
"engine": {
"@type": "Gemini"
},
"ttsOptions": {
"provider": {
"@type": "Deepdub",
"voice": "auto"
}
}
}
],
"outputs": [
{
"@type": "S3FolderOutput",
"items": [
{
"@type": "VideoFile",
"ext": "mp4",
"nameTemplate": "${name}.es.${ext}",
"useOriginalTracks": true,
"dubTracks": [
{
"language": "es",
"title": "Spanish"
}
]
}
]
}
]
},
"storage": {
"connection": null,
"path": "s3://sw-vod-express/projects/141/01m3k8jnrdw509457nhz7w81bq/",
"inputPath": "s3://sw-vod-express/projects/141/01m3k8jnrdw509457nhz7w81bq/input/",
"outputPath": "s3://sw-vod-express/projects/141/01m3k8jnrdw509457nhz7w81bq/output/",
"inputPrefix": null,
"outputPrefix": null
},
"meta": {
"createdAt": "2026-09-28T05:42:35.534Z",
"updatedAt": "2026-09-28T05:42:35.534Z",
"createdBy": {
"accountId": 141,
"accountName": "Acme Media",
"userId": null,
"userEmail": null,
"userFullName": null
},
"configLocked": false,
"messages": []
}
}
],
"links": {
"first": "https://api-vod-express.syncwords.com/v1/projects?status=running&page=1",
"last": "https://api-vod-express.syncwords.com/v1/projects?status=running&page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://api-vod-express.syncwords.com/v1/projects?status=running&page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://api-vod-express.syncwords.com/v1/projects",
"per_page": 25,
"to": 1,
"total": 1
}
}{
"message": "Unauthenticated.",
"code": "unauthenticated"
}{
"message": [
"VOD Express is not enabled for your account."
],
"code": "vod_express_not_enabled"
}{
"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.
Query Parameters
The page, from 1; below 1 is a 422.
x >= 1Projects a page.
1 <= x <= 100Only the projects named exactly this, case included. Use it to find a project before creating it again.
Only the projects whose name contains this, ignoring case.
Only the projects in this state: running (its processing service is up), stopped, or error (its last start failed, or its service stopped working); or by what their files reached, as files last counted them: completed — stopped, nothing left to do (every file done or failed) and at least one done; failed — in error, or stopped with nothing left to do and no file done.
running, stopped, error, completed, failed