Get progress and result downloads
curl --request GET \
--url https://api.captioncraft.studio/v1/jobs/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.captioncraft.studio/v1/jobs/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.captioncraft.studio/v1/jobs/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "example_job_id",
"status": "ingesting",
"progress": 0,
"created_at": "2026-09-21T10:00:00Z",
"expires_at": null,
"video": null,
"subtitles": {
"srt_url": null,
"transcript_url": null
},
"metadata": null,
"usage": {
"reserved_seconds": 60,
"billed_seconds": 0
},
"error": null
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}Captions
Get job
Retrieve progress, usage, and links to completed output files.
GET
/
v1
/
jobs
/
{id}
Get progress and result downloads
curl --request GET \
--url https://api.captioncraft.studio/v1/jobs/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.captioncraft.studio/v1/jobs/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.captioncraft.studio/v1/jobs/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "example_job_id",
"status": "ingesting",
"progress": 0,
"created_at": "2026-09-21T10:00:00Z",
"expires_at": null,
"video": null,
"subtitles": {
"srt_url": null,
"transcript_url": null
},
"metadata": null,
"usage": {
"reserved_seconds": 60,
"billed_seconds": 0
},
"error": null
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}Requires
jobs:read. Only jobs belonging to your account are visible. Poll every five seconds until completed, failed, or canceled.
Results include a captioned MP4, SRT subtitles, and a JSON transcript. Download them before expires_at. URLs are null before completion or after file expiration.
An HTTP
200 response may contain a failed job. Check the status and error fields.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Job ID returned by a create request. The job must belong to your account.
Response
Success
Available options:
queued, ingesting, transcribing, rendering, completed, failed, canceled Progress from 0 to 100; not an estimate of remaining time.
Required range:
0 <= x <= 100Current reservation and final charge, in whole seconds.
Show child attributes
Show child attributes
Result retention deadline, 24 hours after the terminal transition.
Video download details. Null before completion or after expiration.
Show child attributes
Show child attributes
Download URLs are null until completion and after expiration.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Source dimensions and duration, available after inspection.
Show child attributes
Show child attributes