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

# Get a source's latest ingestion job

> The active job while a run is in progress, the most recent one afterwards, without needing a job id. A source never synced returns a null job, not an error.

Returns the active job while a run is in progress, and the most recent job afterwards. `job` is `null` for a source that has never been synced. That is a normal response, not an error.

Returns `404` both for a source ID that does not exist and for a source in another organization. A malformed ID also returns `404`. Any role in the organization can read a source's job.

<ParamField path="source_id" type="string" required>
  Source ID (a UUID).
</ParamField>

## Response

<ResponseField name="job" type="object | null" required>
  The source's current or most recent job, or `null`.

  <Expandable title="properties">
    <ResponseField name="id" type="string" required>
      Job ID (a UUID).
    </ResponseField>

    <ResponseField name="collection_id" type="string" required>
      Collection being ingested into.
    </ResponseField>

    <ResponseField name="source_id" type="string" required>
      Source being ingested.
    </ResponseField>

    <ResponseField name="status" type="string" required>
      `pending`, `queued`, `running`, `succeeded`, `partial`, `failed`, `cancelled` or `skipped`.
      See [Get a job](/api-reference/knowledge/get-job) for what each means.
    </ResponseField>

    <ResponseField name="trigger" type="string" required>
      `manual`, `scheduled` or `api`.
    </ResponseField>

    <ResponseField name="source_version" type="string | null" required>
      Source version the run read, such as a commit SHA. `null` until the run starts.
    </ResponseField>

    <ResponseField name="is_active" type="boolean" required>
      `true` while the status is `pending`, `queued` or `running`.
    </ResponseField>

    <ResponseField name="attempt" type="integer" required>
      Which attempt this is, starting at `1`.
    </ResponseField>

    <ResponseField name="max_attempts" type="integer" required>
      Total attempts allowed.
    </ResponseField>

    <ResponseField name="queued_at" type="string | null" required>
      ISO 8601 timestamp, in UTC, when the current attempt was queued.
    </ResponseField>

    <ResponseField name="started_at" type="string | null" required>
      ISO 8601 timestamp, in UTC, when the current attempt started.
    </ResponseField>

    <ResponseField name="finished_at" type="string | null" required>
      ISO 8601 timestamp, in UTC, when the job ended.
    </ResponseField>

    <ResponseField name="next_attempt_at" type="string | null" required>
      ISO 8601 timestamp, in UTC, before which a queued retry will not start.
    </ResponseField>

    <ResponseField name="error_code" type="string | null" required>
      Stable error code when the run failed. Otherwise `null`.
    </ResponseField>

    <ResponseField name="error_message" type="string | null" required>
      Readable description of the failure. Otherwise `null`.
    </ResponseField>

    <ResponseField name="counters" type="object" required>
      `documents_discovered`, `documents_ingested`, `documents_unchanged`, `documents_skipped`,
      `documents_failed`, `documents_deleted`, `chunks_written` and `bytes_fetched`, all integers.
      See [Get a job](/api-reference/knowledge/get-job).
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl --request GET "$MITHUNAI_URL/arukz/api/v1/knowledge/sources/5d1e7a90-3c4b-4f2a-8e61-7b9c0d2f4a13/job" \
    --header "Authorization: Bearer $MITHUNAI_API_KEY"
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
  import os, requests

  source_id = "5d1e7a90-3c4b-4f2a-8e61-7b9c0d2f4a13"
  response = requests.get(
      f"{os.environ['MITHUNAI_URL']}/arukz/api/v1/knowledge/sources/{source_id}/job",
      headers={"Authorization": f"Bearer {os.environ['MITHUNAI_API_KEY']}"},
      timeout=60,
  )
  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  const sourceId = '5d1e7a90-3c4b-4f2a-8e61-7b9c0d2f4a13'
  const response = await fetch(
    `${process.env.MITHUNAI_URL}/arukz/api/v1/knowledge/sources/${sourceId}/job`,
    { headers: { Authorization: `Bearer ${process.env.MITHUNAI_API_KEY}` } },
  )
  console.log(await response.json())
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "job": {
      "id": "9a4c2e71-6b0d-4f38-a5e2-1c7d8f3b6e40",
      "collection_id": "0b6f2c14-8a3d-4e91-9c77-2f5b1d0a4e88",
      "source_id": "5d1e7a90-3c4b-4f2a-8e61-7b9c0d2f4a13",
      "status": "running",
      "trigger": "manual",
      "source_version": "4f9c2e7a1b3d5c8e0f2a4b6c8d0e1f3a5b7c9d2e",
      "is_active": true,
      "attempt": 1,
      "max_attempts": 3,
      "queued_at": "2026-09-24T10:20:05.127004+00:00",
      "started_at": "2026-09-24T10:20:06.340918+00:00",
      "finished_at": null,
      "next_attempt_at": null,
      "error_code": null,
      "error_message": null,
      "counters": {
        "documents_discovered": 94,
        "documents_ingested": 87,
        "documents_unchanged": 0,
        "documents_skipped": 6,
        "documents_failed": 1,
        "documents_deleted": 0,
        "chunks_written": 802,
        "bytes_fetched": 1937415
      }
    }
  }
  ```

  ```json 200 (never synced) theme={"theme":{"light":"github-light","dark":"github-dark"}}
  { "job": null }
  ```

  ```json 404 theme={"theme":{"light":"github-light","dark":"github-dark"}}
  { "code": "not_found", "message": "The knowledge source was not found." }
  ```
</ResponseExample>
