# View workflow job node

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

Read the execution details of a node in the specified job, including node definition and input and output of this run.

```text
GET https://moi.matrixorigin.cn/newmoi/workflow/v2/workflow-apps/{workflow_id}/executions/{execution_id}/nodes/{node_key}
```

## Preparation before calling

First [View workflow job results](get-workflow-job-result.md) confirms the node execution status, and then obtains the node key from the workflow DSL. Prepare a personal access token and target workspace ID that has access to the target workspace.

## Path parameters

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

```{raw} html
<dl class="mo-api-fields">
  <div class="mo-api-field"><dt><code>workflow_id</code><span class="mo-api-field__type">string</span><span class="mo-api-field__required">Required</span></dt><dd>Workflow ID.</dd></div>
  <div class="mo-api-field"><dt><code>execution_id</code><span class="mo-api-field__type">string</span><span class="mo-api-field__required">Required</span></dt><dd>Job ID.</dd></div>
  <div class="mo-api-field"><dt><code>node_key</code><span class="mo-api-field__type">string</span><span class="mo-api-field__required">Required</span></dt><dd>Node key in the workflow DSL.</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/workflow/v2/workflow-apps/$WORKFLOW_ID/executions/$EXECUTION_ID/nodes/$NODE_KEY" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID"
```

:::
::::

## Successful response

Returns `200` on success. `data.node` describes the node definition, and `data.run` describes the running status of the node in this job.

::::{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.node.flow_id</code><span class="mo-api-field__type">string</span></dt><dd>Flow ID to which the node belongs.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.name</code><span class="mo-api-field__type">string</span></dt><dd>Node name.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.node_key</code><span class="mo-api-field__type">string</span></dt><dd>DSL node key.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.node_type</code><span class="mo-api-field__type">string</span></dt><dd>Node type.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.display_name</code><span class="mo-api-field__type">string</span></dt><dd>Node display name.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.workitem_id</code><span class="mo-api-field__type">string</span></dt><dd>Work item ID; returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.node.node_execution_id</code><span class="mo-api-field__type">string</span></dt><dd>Node execution ID; returned if there is a value.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.status</code><span class="mo-api-field__type">string</span></dt><dd>The current or final state of the node.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.started_at</code><span class="mo-api-field__type">string</span></dt><dd>Node run start time; may be omitted if not generated.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.ended_at</code><span class="mo-api-field__type">string</span></dt><dd>Node run end time; may be omitted if not generated.</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 run duration in milliseconds; may be omitted if not generated.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.error</code><span class="mo-api-field__type">string</span></dt><dd>Node execution error; returned if there is an error.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.runtime_input</code><span class="mo-api-field__type">Any JSON value</span></dt><dd>Node runtime input.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.runtime_output</code><span class="mo-api-field__type">Any JSON value</span></dt><dd>Node runtime output.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.runtime_vars</code><span class="mo-api-field__type">Any JSON value</span></dt><dd>Node runtime variables.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.config</code><span class="mo-api-field__type">Any JSON value</span></dt><dd>Node runtime configuration.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.metrics</code><span class="mo-api-field__type">object</span></dt><dd>Node indicator; returned when provided by the server.</dd></div>
  <div class="mo-api-field"><dt><code>data.run.developer_logs</code><span class="mo-api-field__type">object</span></dt><dd>Development log. Can contain `stdout`, `stderr`, `stream`, number of bytes, `runner` and `output_limited`.</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": {
    "node": {
      "flow_id": "flow-001",
      "name": "load",
      "node_key": "root.load",
      "node_type": "operator",
      "display_name": "加载数据",
      "workitem_id": "wi-001",
      "node_execution_id": "node-exec-001"
    },
    "run": {
      "status": "COMPLETED",
      "started_at": "2026-08-18T10:00:00Z",
      "ended_at": "2026-08-18T10:00:01Z",
      "duration_ms": 1200,
      "runtime_input": {},
      "runtime_output": {},
      "config": {},
      "metrics": {}
    }
  }
}
```

:::
::::

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

When you need to continue execution from this node, first [View node rerun plan](../workflow-reruns/get-node-rerun-plan.md).
