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

# Node Process Types

> How a node's handler class determines the shape of its process object

When you send `nodes` to [Create a Workflow](/api-reference/v1-workflow-generation/create-workflow) or [Update a Workflow](/api-reference/v1-workflow-generation/update-workflow), each node carries three fields that must agree with one another:

* **`type`** — what kind of step this is (`agent`, `code`, `human`, `integration`, …)
* **`handler_class`** — which variety of that step
* **`process`** — the step's configuration, whose shape is **determined by `handler_class`**

The `process` object has no type tag of its own. Opus reads `handler_class` to decide which shape to validate `process` against, so sending the right fields under the wrong `handler_class` fails validation.

## Which Process Goes With Which Node

| Node `type` | `handler_class` | `process` shape | Reference |
| - | - | - | - |
| `agent` | `agent_basic` | Blueprint + model | [Agent Node](/api-reference/v1-workflow-generation/agent-node) |
| `agent` | `agent_custom` | Your own prompts | [Agent Node](/api-reference/v1-workflow-generation/agent-node) |
| `agent` | `agent_advanced` | Blueprint + tools | [Agent Node](/api-reference/v1-workflow-generation/agent-node) |
| `code` | `code` | Python source | [Code Node](/api-reference/v1-workflow-generation/code-node) |
| `human` | `human_task` | Instructions | [Human Node](/api-reference/v1-workflow-generation/human-node) |
| `integration` | `integration` | Action reference | [Integration Node](/api-reference/v1-workflow-generation/integration-node) |

`input` and `output` nodes take **no `process`** — they carry only schemas. Opus adds one of each automatically when you create a workflow without supplying `nodes`.

<Note>
  `sub_workflow`, `meta_node`, `obfuscate` and `deobfuscate` nodes are not currently supported through the API. Build them in the [Builder](/guides/builder) instead.
</Note>

## Rules That Apply To Every Node

<Steps>
  <Step title="The map key must equal the node's own id">
    `nodes` and `edges` are objects keyed by ID, not arrays. Each key must be identical to the `id` inside the object it holds.

    ```json theme={null}
    "nodes": {
      "3fa85f64-5717-4562-b3fc-2c963f66afa6": {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "Summarize Report",
        "type": "agent"
      }
    }
    ```
  </Step>

  <Step title="Node fields are snake_case">
    The top-level body of the create and update requests is camelCase (`activeStatus`, `orgUnitIds`), but everything inside a node or edge is snake\_case (`input_schema`, `from_node_id`, `handler_class`).

    This is deliberate: nodes and edges are forwarded to the Opus workflow executor exactly as you send them.
  </Step>

  <Step title="The executor re-validates your process">
    Opus checks the node's outer fields, then the executor validates `process` against the model named by `handler_class`. A malformed `process` is rejected there, so a `400` can describe a field you sent inside `process` rather than one at the top level.
  </Step>
</Steps>

## Schemas Are Separate From Process

Every step node also carries `input_schema` and `output_schema`, which describe the variables flowing in and out. Those are the same shape on every node type regardless of `handler_class` — see [Variable Schemas](/api-reference/v1-workflow-generation/variable-schemas).

`process` says *how the step does its work*. The schemas say *what it takes in and hands on*. A node needs both.

## Choosing An Agent Class

Agent is the only node type with more than one class, and the choice is the most consequential one you'll make:

<CardGroup cols={3}>
  <Card title="Basic" icon="wand-magic-sparkles">
    You describe the goal; Opus writes the agent. Best when you want the outcome specified and the prompting handled for you.
  </Card>

  <Card title="Custom" icon="pen-to-square">
    You supply the system and user prompts verbatim. Best when you need exact control over wording.
  </Card>

  <Card title="Advanced" icon="screwdriver-wrench">
    A Basic agent that can call other agents and code utilities as tools. Best for multi-step work.
  </Card>
</CardGroup>

See [Agent Node](/api-reference/v1-workflow-generation/agent-node) for the full field-by-field comparison.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.