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

# List recent ingestion jobs and runs

> Recent ingestion runs in your organisation, newest first. There is no cursor: this shows recent runs, not full history, and limit is clamped, never refused.

Returns up to `limit` jobs, newest first. There is no offset or cursor: this endpoint shows recent runs, not a full history.

`limit` is clamped rather than refused. A value below `1` becomes `1`, a value above `100` becomes `100`, and a value that is not a whole number falls back to `20`.

`source_id` filters the list. A well-formed ID that is not one of your sources matches nothing and returns an empty `data` array. A value longer than 64 characters returns `404`. Any role in the organization can list jobs.

<ParamField query="source_id" type="string">
  Return only this source's jobs (a UUID).
</ParamField>

<ParamField query="limit" type="integer" default="20">
  Maximum number of jobs to return, from `1` to `100`.
</ParamField>

## Response

<ResponseField name="data" type="object[]" required>
  Jobs, newest first.

  <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/jobs?source_id=5d1e7a90-3c4b-4f2a-8e61-7b9c0d2f4a13&limit=5" \
    --header "Authorization: Bearer $MITHUNAI_API_KEY"
  ```

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

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

  ```javascript JavaScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  const params = new URLSearchParams({
    source_id: '5d1e7a90-3c4b-4f2a-8e61-7b9c0d2f4a13',
    limit: '5',
  })
  const response = await fetch(`${process.env.MITHUNAI_URL}/arukz/api/v1/knowledge/jobs?${params}`, {
    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"}}
  {
    "data": [
      {
        "id": "9a4c2e71-6b0d-4f38-a5e2-1c7d8f3b6e40",
        "collection_id": "0b6f2c14-8a3d-4e91-9c77-2f5b1d0a4e88",
        "source_id": "5d1e7a90-3c4b-4f2a-8e61-7b9c0d2f4a13",
        "status": "succeeded",
        "trigger": "manual",
        "source_version": "4f9c2e7a1b3d5c8e0f2a4b6c8d0e1f3a5b7c9d2e",
        "is_active": false,
        "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": "2026-09-24T10:22:41.503117+00:00",
        "next_attempt_at": null,
        "error_code": null,
        "error_message": null,
        "counters": {
          "documents_discovered": 214,
          "documents_ingested": 201,
          "documents_unchanged": 0,
          "documents_skipped": 13,
          "documents_failed": 0,
          "documents_deleted": 0,
          "chunks_written": 1904,
          "bytes_fetched": 4718290
        }
      }
    ]
  }
  ```
</ResponseExample>
