> ## 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.

# moorcheh upload-job-status

> Poll document or vector upload job progress.

## Overview

Polls an async upload started by [moorcheh upload-documents](/on-prem/cli/data/upload-documents) or [moorcheh upload-vectors](/on-prem/cli/data/upload-vectors). Prints job progress as JSON.

Repeat until `status` is `completed`. Check `successful` and `failed` for per-item results.

## Synopsis

```bash theme={null}
moorcheh upload-job-status --namespace-name NAME --job-id JOB_ID [--base-url URL]
```

## Options

| Flag               | Required | Description                       |
| ------------------ | -------- | --------------------------------- |
| `--namespace-name` | Yes      | Namespace the job belongs to      |
| `--job-id`         | Yes      | Job id from upload command output |
| `--base-url`       | No       | Default `http://localhost:8080`   |

## Examples

```bash theme={null}
moorcheh upload-documents --namespace-name my-documents --documents-file docs.json

moorcheh upload-job-status \
  --namespace-name my-documents \
  --job-id job-9889a2ea08034064adb584d0afdf45b1
```

## Output

Prints JSON from `GET /namespaces/{namespace_name}/upload-jobs/{job_id}`:

<ResponseField name="job_id" type="string">
  Upload job id.
</ResponseField>

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

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

<ResponseField name="total" type="number">
  Total items in the upload batch.
</ResponseField>

<ResponseField name="processed" type="number">
  Items processed so far.
</ResponseField>

<ResponseField name="successful" type="number">
  Items successfully persisted.
</ResponseField>

<ResponseField name="failed" type="number">
  Items that failed during processing.
</ResponseField>

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

<ResponseField name="started_at" type="string">
  Job start time (ISO 8601 UTC).
</ResponseField>

<ResponseField name="updated_at" type="string">
  Last update time (ISO 8601 UTC).
</ResponseField>

<ResponseField name="finished_at" type="string | null">
  Job finish time; `null` while running.
</ResponseField>

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

```json Example output (completed) theme={null}
{
  "job_id": "job-9889a2ea08034064adb584d0afdf45b1",
  "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:03.000Z",
  "finished_at": "2026-05-21T12:00:03.000Z"
}
```

## Exit codes

| Code | Meaning               |
| ---- | --------------------- |
| `0`  | Job status returned   |
| `1`  | API error (404, etc.) |

## Related

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