Get a job
https://api.dev.developers.gaudiolab.io/v1/jobs/{jobId}Returns the status of a job and, once targets complete, their download links. Poll this endpoint (every ~10 seconds) if you are not using a webhook. Download links expire after 48 hours; calling this endpoint again returns fresh links.
/jobs/{jobId}curl -X GET "https://api.dev.developers.gaudiolab.io/v1/jobs/{jobId}" \
-H "x-api-key: $API_KEY"{
"jobId": "job_91b2e0",
"status": "completed",
"progress": 100,
"linksExpireAt": "2026-06-10T12:00:00Z",
"targets": [
{
"model": "dme_dialogue_v1",
"tier": "premium",
"status": "completed",
"progress": 100,
"output": {
"dialogue": {
"wav": "https://cdn.example.com/job_91b2e0/dialogue.wav"
}
}
},
{
"model": "karaoke_vocal_v1",
"status": "completed",
"progress": 100,
"output": {
"vocal": {
"wav": "https://cdn.example.com/job_91b2e0/vocal.wav"
}
}
},
{
"model": "stem_bass_v1",
"status": "completed",
"progress": 100,
"output": {
"bass": {
"wav": "https://cdn.example.com/job_91b2e0/bass.wav"
}
}
}
]
}Path parameters
jobIdstringRequiredThe unique identifier of the job, returned by POST /jobs.
Headers
x-api-keyRequiredYour project API key, sent on every request. Create and manage keys in the dashboard under Settings → API Keys.
Response
jobIdstringRequiredUnique identifier for the job.
statusenumRequiredAggregate status across all targets. completed once every target has finished — note an individual target may still have failed.
Allowed values: queuedprocessingcompletedfailed
progressintegerOptionalOverall completion percentage, a rollup across all targets. Only reaches 100 once the job is terminal (completed or failed).
phaseenumOptionalPipeline phase while status is processing: the least-advanced phase across the job's unfinished targets. pending means the job was handed to a worker that has not started reporting yet (capacity placement / cold start). null while queued and once terminal.
Allowed values: pendingstartingdownloadingpreparingprocessinguploadingfinalizing
dispatchedAtstring (date-time)OptionalISO 8601 timestamp when the job left the queue and was handed to a worker. null while queued. Use it to show elapsed processing time.
progressUpdatedAtstring (date-time)OptionalISO 8601 timestamp of the last progress report from the worker. null until the first report. A value that stops advancing while status is processing indicates a worker that is not responding.
estimatedProcessingSecondsintegerOptionalEstimated worker time for this job (seconds), from the source length and recent jobs on the same backend. Advisory; null when the source length is unknown or the job is terminal.
estimatedStartSecondsintegerOptionalFor a queued job, estimated seconds until a worker slot frees on the backend it will run on (global capacity, running jobs' remaining time, queued jobs ahead). Advisory; null unless queued.
linksExpireAtstring (date-time)OptionalISO 8601 timestamp when the download links stop working. Re-fetch the job to refresh them. Links are valid for 48 hours.
targetsTargetResult[]RequiredPer-target results, in the order they were requested.
modelstringRequiredThe model alias this result corresponds to.
tierenumOptionalThe processing tier this target was processed with. Present for DME targets only.
Allowed values: premiumstandardlive
statusenumRequiredStatus of this individual target.
Allowed values: queuedprocessingcompletedfailed
progressintegerOptionalCompletion percentage for this target. A completed target reports 100.
phaseenumOptionalPipeline phase reported by the worker for this target while the job is processing (see Job.phase). pending until the worker's first report; null while queued and once the target is terminal.
Allowed values: pendingstartingdownloadingpreparingprocessinguploadingfinalizing
outputmap<string, map<string, string (uri)>>OptionalDownload links, keyed by stem name and then by format (for example output.dialogue.wav). Present once status is completed.
errorTargetErrorOptionalFailure details. Present only when status is failed.
codeenumRequiredA stable, machine-readable code. New codes may be added over time — treat an unrecognised one as a generic failure and fall back to retryable.
Allowed values: PROCESSING_FAILEDPROCESSING_TIMEOUTQUEUE_TIMEOUTSOURCE_EXPIREDJOB_CANCELLED
messagestringRequiredA human-readable explanation. Fixed per code — safe to show to an end user, but do not parse it or branch on its wording.
retryablebooleanRequiredWhether resubmitting the same source can succeed. true means the failure was transient (an interrupted run, a timeout, or no capacity in time) — retry with backoff. false means retrying changes nothing.
codestringRequiredA stable, machine-readable error code you can branch on.
messagestringRequiredA human-readable explanation of what went wrong.
detailsobjectOptionalMachine-readable specifics for the errors that carry them — for example FEATURE_NOT_ENABLED reports the model that was refused and the feature it belongs to. Absent for errors that add nothing beyond code and message.