Get Job
Retrieve a single full job record by its id, including aggregated scores and per-model results.
GET /v1/jobs/{job_id}
Authentication
- Authentication is required. Include a valid
df_API key in theAuthorizationheader, or rely on the machine-local default credential. See Authentication.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
job_id | number(int) | The edge job id returned by Create Job. |
Response
data is an array containing the matching full job record. The record has the same shape as a single entry from List Jobs. An empty array means no job matched the id.
| Field | Type | Description |
|---|---|---|
id | number(int) | The job id. |
input_path | string | The submitted file path. |
title | string | null | The job label. |
mode | string | null | The processing mode. |
file_type | string | null | video, audio, or image. |
models | string[] | The models selected for the job. |
status | string | queued, processing, complete, or error. |
error_message | string | null | Failure detail when status is error. |
core_job_id | number(int) | null | The underlying core processing id. |
created_at / updated_at / completed_at / deleted_at | timestamp | null | Lifecycle timestamps. |
video_time / audio_time | number(float) | null | Lane processing time in seconds. |
progress | number(float) | null | Completion percentage. |
prediction_score | number(float) | null | The final aggregated score across all applicable lanes. |
prediction_label | string | null | The verdict: FAKE, REAL, or NONE when no verdict could be produced (for example, every model failed). |
prediction_source | string | null | The scoring profile that scored the job — "default" for the CONFIG.yaml defaults, or "name@version" when the job was created with profile_name. |
video | object | Returned only for video jobs with visual models. Fields: score(float), coverage(float), threshold(float), status(string), error(string), chunk_scores(float[]), optional frame_scores(float[]), optional face_box(float[][]). |
audio | object | Returned only for audio/video jobs with audio models. Fields: score(float), coverage(float), threshold(float), status(string), error(string), chunk_scores(float[]), optional frame_scores(float[]). |
image | object | Returned only for image jobs. Fields: score(float), coverage(float), threshold(float), status(string), error(string), chunk_scores(float[]). |
Lane status and errors
A lane's status is error — and its error text populated — only when every model in that lane failed. A lane where at least one model produced analysis reports complete with error: null, even if another model in the lane failed.
{
"status": true,
"code": 200,
"message": "Job fetched",
"data": [
{
"id": 42,
"input_path": "/var/lib/deepfaic/uploads/sample.mp4",
"title": "Q3 onboarding call",
"mode": "normal",
"file_type": "video",
"models": ["facia", "diffusion", "swintf", "audio"],
"status": "complete",
"error_message": null,
"core_job_id": 128,
"created_at": "2026-06-04T10:15:00Z",
"updated_at": "2026-06-04T10:16:12Z",
"completed_at": "2026-06-04T10:16:12Z",
"deleted_at": null,
"video_time": 41.2,
"audio_time": 12.8,
"progress": 100.0,
"prediction_score": 0.14,
"prediction_label": "REAL",
"prediction_source": "default",
"video": {
"score": 0.18,
"coverage": 0.92,
"threshold": 0.4,
"status": "complete",
"error": null,
"chunk_scores": [0.12, 0.21, 0.17],
"frame_scores": [0.11, 0.19, 0.22],
"face_box": [[0.1, 0.2, 0.4, 0.6]]
},
"audio": {
"score": 0.07,
"coverage": 1.0,
"threshold": 0.4,
"status": "complete",
"error": null,
"chunk_scores": [0.05, 0.08],
"frame_scores": [0.04, 0.06, 0.08]
}
}
]
}
tip
If you only need lifecycle and status fields, use Get Jobs (Partial) for a lighter payload.
Example Request
curl http://<edge-host>:9123/v1/jobs/42 \
-H "Authorization: Bearer df_..."