> ## Documentation Index
> Fetch the complete documentation index at: https://docs.moorcheh.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload Job Status

> Poll progress of a document or vector upload job.

## Overview

Returns status for an upload started by [Upload documents](/on-prem/api-references/data/upload-documents) or [Upload vectors](/on-prem/api-references/data/upload-vectors).

## Path parameters

<ParamField path="namespace_name" type="string" required>
  Namespace the upload job belongs to. Must match the namespace used when the job was started.
</ParamField>

<ParamField path="job_id" type="string" required>
  Job id returned from the upload response.
</ParamField>

<RequestExample>
  ```bash theme={null}
  curl "http://localhost:8080/namespaces/my-documents/upload-jobs/job-a0e3d54b9d0d4616949474697308a39c"
  ```
</RequestExample>

## Response fields

<ResponseField name="job_id" type="string">
  Id of the upload job.
</ResponseField>

<ResponseField name="namespace_name" type="string">
  Namespace items are being uploaded to.
</ResponseField>

<ResponseField name="status" type="string">
  Job state on success: `"running"` or `"completed"`. On lookup errors: `"failure"`.
</ResponseField>

<ResponseField name="total" type="number">
  Total number of documents or vectors in the upload batch.
</ResponseField>

<ResponseField name="processed" type="number">
  Number of items processed so far (embedded or validated).
</ResponseField>

<ResponseField name="successful" type="number">
  Number of items successfully persisted.
</ResponseField>

<ResponseField name="failed" type="number">
  Number of items that failed during processing. Check `last_error` for the most recent failure reason.
</ResponseField>

<ResponseField name="last_error" type="string | null">
  Most recent per-item error message during processing; `null` if none.
</ResponseField>

<ResponseField name="started_at" type="string">
  ISO 8601 UTC timestamp when the job started.
</ResponseField>

<ResponseField name="updated_at" type="string">
  ISO 8601 UTC timestamp of the last job update.
</ResponseField>

<ResponseField name="finished_at" type="string | null">
  ISO 8601 UTC timestamp when the job finished; `null` while `status` is `"running"`.
</ResponseField>

<ResponseField name="message" type="string">
  Error description when the job cannot be found.
</ResponseField>

<ResponseExample>
  ```json 200 - Running theme={null}
  {
    "job_id": "job-a0e3d54b9d0d4616949474697308a39c",
    "namespace_name": "my-documents",
    "status": "running",
    "total": 1,
    "processed": 0,
    "successful": 0,
    "failed": 0,
    "last_error": null,
    "started_at": "2026-05-21T12:00:00.000Z",
    "updated_at": "2026-05-21T12:00:00.000Z",
    "finished_at": null
  }
  ```

  ```json 200 - Completed theme={null}
  {
    "job_id": "job-a0e3d54b9d0d4616949474697308a39c",
    "namespace_name": "my-documents",
    "status": "completed",
    "total": 1,
    "processed": 1,
    "successful": 1,
    "failed": 0,
    "last_error": null,
    "started_at": "2026-05-21T12:00:00.000Z",
    "updated_at": "2026-05-21T12:00:02.000Z",
    "finished_at": "2026-05-21T12:00:02.000Z"
  }
  ```

  ```json 200 - Completed with failures theme={null}
  {
    "job_id": "job-a0e3d54b9d0d4616949474697308a39c",
    "namespace_name": "my-documents",
    "status": "completed",
    "total": 10,
    "processed": 10,
    "successful": 9,
    "failed": 1,
    "last_error": "text is required for text namespace upload",
    "started_at": "2026-05-21T12:00:00.000Z",
    "updated_at": "2026-05-21T12:00:05.000Z",
    "finished_at": "2026-05-21T12:00:05.000Z"
  }
  ```

  ```json 404 - Job Not Found theme={null}
  {
    "status": "failure",
    "message": "Job not found."
  }
  ```

  ```json 404 - Wrong Namespace theme={null}
  {
    "status": "failure",
    "message": "Job not found for namespace."
  }
  ```
</ResponseExample>

## Related

* [Upload documents](/on-prem/api-references/data/upload-documents)
* [CLI: moorcheh upload-job-status](/on-prem/cli/data/upload-job-status)
* [Python: documents.upload\_job\_status()](/on-prem/python-client/data/upload-job-status)
