# View processing result lineage

```{raw} html
<div class="mo-api-page-show-toc" aria-hidden="true"></div>
```

Read the complete processing link of a workflow product, including source files, workflow calls and processing topology.

```text
GET https://moi.matrixorigin.cn/newmoi/lineage/artifacts/{artifact_id}/overview
```

## Preparation before calling

First [query the file processing link](get-file-lineage.md) and obtain the product ID from the corresponding `data.artifact.artifact_id`. Prepare the personal access token, target workspace ID, and product ID that have access to the target workspace.


## Request parameters

::::{div} mo-api-split
:::{div} mo-api-split-main

```{raw} html
<dl class="mo-api-fields">
  <div class="mo-api-field"><dt><code>artifact_id</code><span class="mo-api-field__type">string</span><span class="mo-api-field__required">Required</span></dt><dd>Processing result ID, taken from data.artifact.artifact_id in file processing lineage.</dd></div>
</dl>
```

:::
:::{div} mo-api-split-aside

```{raw} html
<p class="mo-api-example-label">Request example</p>
```

```bash
curl "https://moi.matrixorigin.cn/newmoi/lineage/artifacts/$ARTIFACT_ID/overview" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID"
```

:::
::::

## Successful response

`data` returns artifacts, workflow calls, and processing topology. The topology contains associated nodes, which does not mean that each node directly processes the product.


The response fields are as follows.

In field paths, `[]` denotes each item in an array. For example, `items[].name` is the `name` field of each item in the `items` array.

::::{div} mo-api-split
:::{div} mo-api-split-main

```{raw} html
<dl class="mo-api-fields">
  <div class="mo-api-field"><dt><code>code</code><span class="mo-api-field__type">string</span></dt><dd>OK when successful.</dd></div>
  <div class="mo-api-field"><dt><code>msg</code><span class="mo-api-field__type">string</span></dt><dd>OK when successful.</dd></div>
  <div class="mo-api-field"><dt><code>data.artifact.artifact_id</code><span class="mo-api-field__type">string</span></dt><dd>Product ID.</dd></div>
  <div class="mo-api-field"><dt><code>data.artifact.root_asset_id</code><span class="mo-api-field__type">string</span></dt><dd>Root data asset ID.</dd></div>
  <div class="mo-api-field"><dt><code>data.artifact.case_id</code><span class="mo-api-field__type">string</span></dt><dd>Association case ID.</dd></div>
  <div class="mo-api-field"><dt><code>data.artifact.parsed_file_available</code><span class="mo-api-field__type">boolean</span></dt><dd>Whether the parsed file is available.</dd></div>
  <div class="mo-api-field"><dt><code>data.workflow.workflow_id</code><span class="mo-api-field__type">string</span></dt><dd>Workflow ID; returned only if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.workflow.workflow_version_id</code><span class="mo-api-field__type">string</span></dt><dd>Workflow version ID; returned only if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.workflow_invocation.input</code><span class="mo-api-field__type">object</span></dt><dd>Workflow call input; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.workflow_invocation.vars</code><span class="mo-api-field__type">object</span></dt><dd>Workflow call variables; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.topology.nodes[]</code><span class="mo-api-field__type">array</span></dt><dd>Processing node, the node can contain node_id, label, status, duration_ms and error.</dd></div>
  <div class="mo-api-field"><dt><code>data.topology.edges[]</code><span class="mo-api-field__type">array</span></dt><dd>Topological edge, including source_node_id and target_node_id.</dd></div>
  <div class="mo-api-field"><dt><code>data.topology.producer_node_id</code><span class="mo-api-field__type">string</span></dt><dd>ID of the node that produced the current product; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.entry.catalog_file_id</code><span class="mo-api-field__type">string</span></dt><dd>Entry file ID; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.entry.volume_id</code><span class="mo-api-field__type">string</span></dt><dd>Volume ID; only returned if there is a value.</dd></div>
</dl>
```

:::
:::{div} mo-api-split-aside

```{raw} html
<p class="mo-api-example-label">Successful response example</p>
```

```json
{
  "code": "OK",
  "msg": "OK",
  "data": {
    "artifact": {
      "artifact_id": "art-001",
      "root_asset_id": "asset-001",
      "case_id": "case-001",
      "parsed_file_available": true
    },
    "workflow": {
      "workflow_id": "wf-001",
      "workflow_version_id": "ver-001"
    },
    "workflow_invocation": {
      "input": {},
      "vars": {}
    },
    "topology": {
      "nodes": [
        {
          "node_id": "node-001",
          "label": "解析文件",
          "status": "success"
        }
      ],
      "edges": [],
      "producer_node_id": "node-001"
    },
    "entry": {}
  }
}
```

:::
::::

## Error response

::::{div} mo-api-split
:::{div} mo-api-split-main

```{raw} html
<dl class="mo-api-fields">
  <div class="mo-api-field"><dt><code>code</code><span class="mo-api-field__type">string</span></dt><dd>Error code.</dd></div>
  <div class="mo-api-field"><dt><code>msg</code><span class="mo-api-field__type">string</span></dt><dd>Readable error message.</dd></div>
  <div class="mo-api-field"><dt><code>data</code><span class="mo-api-field__type">null</span></dt><dd>`null` in an error response.</dd></div>
</dl>
```

:::
:::{div} mo-api-split-aside

```{raw} html
<p class="mo-api-example-label">Error response example</p>
```

```json
{
  "code": "ErrNotFound",
  "msg": "资源不存在",
  "data": null
}
```

:::
::::

## Follow-up operations

[View processing node details](get-lineage-node.md).
