---
title: "GET /uploads/{id}/factor-agent/jobs/{documentJobId}"
method: GET
path: "/uploads/{id}/factor-agent/jobs/{documentJobId}"
tags: ["Uploads"]
---

# GET /uploads/{id}/factor-agent/jobs/{documentJobId}

`GET /uploads/{id}/factor-agent/jobs/{documentJobId}`

One of the upload's document jobs (an analysis or a submit on the worker service): its status, its progress in rows and, once finished, its result or error.

## Path parameters

- `id` integer, required
- `documentJobId` string, required

## Response `200`

The job

- DocumentJobResponse
  - `data` DocumentJob, required
    - `cancelRequested` boolean — A cancel stands for this live job: its delivery ends it cancelled between units. Absent once the job has ended, and on a job never asked to stop.
    - `createdAt` string, date-time, required
    - `error` string
    - `errorCode` string — Why a failed job failed, e.g. ANALYSIS_ALREADY_STARTED, ANALYSIS_CHANGED, CONFIRMATION_REQUIRED, NOTHING_TO_SUBMIT, PROMPT_REQUIRED, PROMPT_TOO_LONG, FACTOR_AGENT_FAILED, ANALYSIS_FAILED, INVALID_STATE, NOT_FOUND, INTERRUPTED (three deliveries ended without a word), RETRIES_EXHAUSTED (six failures worth retrying in a row), DISPATCH_FAILED (no delivery came for 30 minutes), DOCUMENT_TOO_LARGE (an analysis of a document over 25,000 rows, or whose extracted data is over 64 MiB; the message says which), ROW_EXCLUDED (a submit job that met a row a reviewer excluded), SOURCE_TOTAL_UNRECONCILED (a submit of an analysis whose money does not tie, or of a ledger one of whose non-carbon records was deleted since its analysis: the message names how many; nothing is submitted), MONEY_UNRECONCILED (money that does not tie in a ledger: a ledger store whose stored rows do not hold the read's money, or a ledger submit whose records and unsubmitted rows do not add up to its total, the message naming any missing records; the committed rows stay, and the upload reads unsubmitted), LEDGER_CATEGORIES_OVER_LIMIT (a factor catalog over the 500 categories a ledger's account decisions take). A cancelled job's is CANCELLED, with the error "Cancelled".
    - `finishedAt` string, date-time
    - `jobId` string, required
    - `kind` 'analyze' | 'submit', required
    - `progress` DocumentJobProgress
      - `done` integer, required — Rows done.
      - `message` string
      - `phase` string, required
      - `total` integer, required — Rows to do.
    - `result` object — A finished job's result. A submit job's is the submit result, whose emission counts only the emission rows the job inserted (the synchronous submit's counts every row it submitted).
    - `startedAt` string, date-time
    - `status` 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled', required
    - `uploadId` integer, required

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found

## Changes

- **2026-10-02** `766c2a40e369` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/greentally/apis/esgai-api/changes/uploads/:id/factor-agent/jobs/:documentJobId/get.md)

---

[API](https://skmtc.dev/greentally/apis/esgai-api.md) · [All operations](https://skmtc.dev/greentally/apis/esgai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/greentally/apis/esgai-api/revisions/4189686230ca?raw)
