# View processing node details

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

Read the configuration and running snapshot of a product-related processing node.

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

## Preparation before calling

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

The node ID cannot be replaced by the node display name.

## 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 processing result lineage.</dd></div>
  <div class="mo-api-field"><dt><code>node_id</code><span class="mo-api-field__type">string</span><span class="mo-api-field__required">Required</span></dt><dd>Node ID in the processing topology, taken from data.topology.producer_node_id or data.topology.nodes[].node_id.</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/nodes/$NODE_ID" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID"
```

:::
::::

## Successful response

`data` returns the node identity, selected run record, and run snapshot. When the intermediate node has no persistent output, empty output cannot alone prove that the node is not running.


The response fields are as follows.

::::{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.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.node.node_id</code><span class="mo-api-field__type">string</span></dt><dd>Node ID.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.label</code><span class="mo-api-field__type">string</span></dt><dd>Node display label; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.workitem_type_id</code><span class="mo-api-field__type">string</span></dt><dd>Work item type ID; returned only if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.selected_run_id</code><span class="mo-api-field__type">string</span></dt><dd>Selected node running record ID; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.parallel_index</code><span class="mo-api-field__type">integer</span></dt><dd>Parallel index; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.candidate_runs</code><span class="mo-api-field__type">integer</span></dt><dd>Optional number of running records; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.config</code><span class="mo-api-field__type">object</span></dt><dd>Node configuration.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.runtime_input</code><span class="mo-api-field__type">object</span></dt><dd>Node operation input.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.runtime_vars</code><span class="mo-api-field__type">object</span></dt><dd>Node operation variables.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.runtime_output</code><span class="mo-api-field__type">object</span></dt><dd>Node operation output.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.status</code><span class="mo-api-field__type">string</span></dt><dd>Node running status; only returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.error</code><span class="mo-api-field__type">string</span></dt><dd>Node running error; only returned if there is an error.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.duration_ms</code><span class="mo-api-field__type">integer</span></dt><dd>Node running time (milliseconds); 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": {
    "workflow": {
      "workflow_id": "wf-001",
      "workflow_version_id": "ver-001"
    },
    "node": {
      "node_id": "node-001",
      "label": "解析文件",
      "selected_run_id": "run-001",
      "candidate_runs": 1
    },
    "run": {
      "config": {},
      "runtime_input": {},
      "runtime_output": {},
      "status": "success",
      "duration_ms": 10
    }
  }
}
```

:::
::::

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

This interface returns node details. If you also want to view processing-result relationships, return to [View processing result lineage](get-artifact-lineage.md).
