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

# List jobs

> Retrieve a list of jobs with optional filtering.

## Query parameters

<ParamField query="workflow_id" type="string">
  Filter by workflow ID.
</ParamField>

<ParamField query="status" type="string">
  Filter by job status.

  | Value         | Description                |
  | ------------- | -------------------------- |
  | `SCHEDULED`   | Job is queued to run.      |
  | `IN_PROGRESS` | Job is currently running.  |
  | `COMPLETED`   | Job finished successfully. |
  | `STOPPED`     | Job was manually stopped.  |
  | `FAILED`      | Job failed to complete.    |
</ParamField>

## Response

<ResponseField name="id" type="string" required>
  Unique identifier for the job.
</ResponseField>

<ResponseField name="workflow_id" type="string" required>
  Unique identifier of the workflow that created this job.
</ResponseField>

<ResponseField name="workflow_name" type="string" required>
  Name of the workflow that created this job.
</ResponseField>

<ResponseField name="status" type="string" required>
  Job status.

  | Value         | Description                |
  | ------------- | -------------------------- |
  | `SCHEDULED`   | Job is queued to run.      |
  | `IN_PROGRESS` | Job is currently running.  |
  | `COMPLETED`   | Job finished successfully. |
  | `STOPPED`     | Job was manually stopped.  |
  | `FAILED`      | Job failed to complete.    |
</ResponseField>

<ResponseField name="created_at" type="string" required>
  ISO 8601 timestamp when the job was created.
</ResponseField>

<ResponseField name="runtime" type="string">
  ISO 8601 duration of the job run.
</ResponseField>

<ResponseField name="input_file_ids" type="array">
  IDs of input files for this job.
</ResponseField>

<ResponseField name="output_node_files" type="array">
  Output file metadata objects. Each object includes `node_id`, `file_id`, `node_type`, and `node_subtype`.
</ResponseField>

<ResponseField name="job_type" type="string">
  Job type. Default: `ephemeral`.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url "${UNSTRUCTURED_API_URL}/api/v1/jobs/" \
    --header "unstructured-api-key: ${UNSTRUCTURED_API_KEY}"
  ```

  ```python Python SDK theme={null}
  import os
  from unstructured_client import UnstructuredClient
  from unstructured_client.models.operations import ListJobsRequest

  client = UnstructuredClient(
      api_key_auth=os.getenv("UNSTRUCTURED_API_KEY"),
      server_url=os.getenv("UNSTRUCTURED_API_URL"),
  )

  response = client.jobs.list_jobs(
      request=ListJobsRequest()
  )
  print(response)
  ```

  ```python Python SDK (async) theme={null}
  import asyncio
  import os
  from unstructured_client import UnstructuredClient
  from unstructured_client.models.operations import ListJobsRequest

  async def list_jobs():
      client = UnstructuredClient(
          api_key_auth=os.getenv("UNSTRUCTURED_API_KEY"),
          server_url=os.getenv("UNSTRUCTURED_API_URL"),
      )
      response = await client.jobs.list_jobs_async(
          request=ListJobsRequest()
      )
      print(response)

  asyncio.run(list_jobs())
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  [
    {
      "id": "b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
      "workflow_id": "f0a1b2c3-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
      "workflow_name": "My ETL Workflow",
      "status": "COMPLETED",
      "created_at": "2026-01-01T00:00:00Z",
      "runtime": "PT2M30S",
      "input_file_ids": null,
      "output_node_files": [
        {
          "node_id": "n1a2b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b6c",
          "file_id": "output-001.json",
          "node_type": "destination",
          "node_subtype": "s3"
        }
      ],
      "job_type": "ephemeral"
    }
  ]
  ```
</ResponseExample>
