Log in

Get a job's result

Retrieve a job's result: the same envelope the assess call returns. Poll until the status leaves processing, or pass wait to long-poll.

GET /v1/jobs/:jobId

Request

GET /v1/jobs/:jobIdAuthorization: Bearer {api_key}

Path parameters

ParameterTypeDescriptionRequired
jobIdstring (uuid)Identifier of the job to fetch, as returned by POST /v1/assess.Yes

Query parameters

ParameterTypeDescriptionRequired
waitbooleanBlock until the job completes. true (the default) waits up to 30 s before falling back to the polling response; false returns immediately. Changes response timing and HTTP status only, never the result shape.No

Example request

curl -X GET "https://api.pixelsystems.com/v1/jobs/550e8400-e29b-41d4-a716-446655440000?wait=true" \  -H "Authorization: Bearer {api_key}"

Response (200)

Result for the job (poll or long-poll)

FieldTypeDescription
jobIdstring (uuid)Single job identity, shared by every path that references this job.
statusJobStatusLifecycle status of a job, derived from results[].status: processing while any result is processing, then error if any result errored, otherwise completed. A job with no files is processing. Each result carries its own verdict once completed. rejected is reserved for future use and is not currently produced.
resultsarray<FileResult>One result per submitted file, in submission order. This is the job's result; read each entry's status, verdict, and expertReview. There is no job-level verdict: two files in one job can reach opposite assessments.
errorJobResultErrorWhy a job or one of its results ended in error (or a job in rejected) status; present only for those statuses. Uses the same code vocabulary as endpoint errors. On the job it is derived from the results: result_unavailable when every errored result carries that code, otherwise internal_error.
metadataobjectCaller-supplied metadata, echoed back verbatim. Absent when the submission carried none.
createdAtstring (date-time)When the job was created (ISO 8601).
completedAtstring (date-time)When processing finished (ISO 8601). Absent while the job is processing.

Example response

{  "jobId": "550e8400-e29b-41d4-a716-446655440000",  "status": "completed",  "results": [    {      "file": {        "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",        "name": "front.jpg",        "size": 1834211,        "type": "image/jpeg"      },      "status": "completed",      "startedAt": "2026-06-01T12:00:01Z",      "completedAt": "2026-06-01T12:00:14Z",      "verdict": { "assessment": "ai_generated", "confidence": "high" },      "dimensions": [        {          "key": "ai_detection",          "assessment": "likely_ai",          "score": 0.82,          "confidence": "high"        }      ]    },    {      "file": {        "id": "9b2d3f41-6a8e-4c1b-9f0d-2e7a5c8b1d34",        "name": "side.jpg",        "size": 1650372,        "type": "image/jpeg"      },      "status": "completed",      "startedAt": "2026-06-01T12:00:01Z",      "completedAt": "2026-06-01T12:00:12Z",      "verdict": { "assessment": "authentic", "confidence": "medium" },      "dimensions": [        {          "key": "ai_detection",          "assessment": "likely_authentic",          "score": 0.12,          "confidence": "medium"        }      ]    }  ],  "metadata": { "customer_case_id": "case-123" },  "createdAt": "2026-06-01T12:00:00Z",  "completedAt": "2026-06-01T12:00:14Z"}

Still processing

{  "jobId": "550e8400-e29b-41d4-a716-446655440000",  "status": "processing",  "results": [    {      "file": {        "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",        "name": "photo.jpg",        "size": 1834211,        "type": "image/jpeg"      },      "status": "processing",      "startedAt": "2026-06-01T12:00:01Z",      "completedAt": null    }  ],  "createdAt": "2026-06-01T12:00:00Z"}

Completed, expert review in progress

{  "jobId": "550e8400-e29b-41d4-a716-446655440000",  "status": "completed",  "results": [    {      "file": {        "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",        "name": "photo.jpg",        "size": 1834211,        "type": "image/jpeg"      },      "status": "completed",      "startedAt": "2026-06-01T12:00:01Z",      "completedAt": "2026-06-01T12:00:14Z",      "verdict": {        "assessment": "inconclusive",        "confidence": "low"      },      "dimensions": [        {          "key": "ai_detection",          "assessment": "uncertain",          "score": 0.51,          "confidence": "low"        }      ],      "expertReview": {        "status": "in_progress",        "requestNotes": "Customer disputes the result; original attached.",        "submittedAt": "2026-06-01T14:02:40Z"      }    }  ],  "createdAt": "2026-06-01T12:00:00Z",  "completedAt": "2026-06-01T12:00:14Z"}

Failed

{  "jobId": "550e8400-e29b-41d4-a716-446655440000",  "status": "error",  "results": [    {      "file": {        "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",        "name": "photo.jpg",        "size": 1834211,        "type": "image/jpeg"      },      "status": "error",      "startedAt": "2026-06-01T12:00:01Z",      "completedAt": "2026-06-01T12:00:09Z",      "error": {        "code": "internal_error",        "message": "The analysis failed during processing."      }    }  ],  "error": {    "code": "internal_error",    "message": "The job failed during processing."  },  "createdAt": "2026-06-01T12:00:00Z",  "completedAt": "2026-06-01T12:00:09Z"}

Notes

The job's result is results[]: one entry per file, in submission order, each with its own status; a completed entry carries verdict and dimensions, an error entry carries error, and a processing entry carries neither. There is no job-level verdict, because two files in one job can reach opposite assessments. The job's status is derived from the results: processing while any result is processing, then error if any result errored, otherwise completed. When a verification specialist has reviewed a file, that file's result carries an expertReview field; see ResultExpertReview. The result's verdict keeps returning the automated result either way, so integrations that read it are unaffected; read expertReview.result to apply the specialist's correction. During a re-analysis the result reads as processing without it, and the review returns when the new run finishes.