---
title: Flow
description: Flow protocol schemas
---

{/* ⚠️  AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs go in content/docs/guides/. */}

Flow Node Types — **built-in seed set** (ADR-0018).

Historically this `z.enum` *gated* `FlowNodeSchema.type`, which made the

closed protocol reject any plugin-registered node type — defeating the open

runtime registry (`registerNodeExecutor(type: string)`). Per ADR-0018 the

gate is removed: `FlowNodeSchema.type` is now a validated `string`, checked

against the live action registry at `registerFlow()` time, not frozen here.

`FlowNodeAction` is **retained** as the canonical list of built-in type ids

(documentation + the seed descriptor set the engine registers at boot). It

no longer constrains authored flows — plugins extend the vocabulary.

<Callout type="info">
**Source:** `packages/spec/src/automation/flow.zod.ts`
</Callout>

## TypeScript Usage

```typescript
import { FlowNode, FlowNodeAction, FlowVariable } from '@objectstack/spec/automation';
import type { FlowNode, FlowNodeAction, FlowVariable } from '@objectstack/spec/automation';

// Validate data
const result = FlowNode.parse(data);
```

---

## FlowNode

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **id** | `string` | ✅ | Node unique ID |
| **type** | `string` | ✅ | Action type — a built-in FlowNodeAction id or a plugin-registered node type. Validated against the live action registry at registerFlow() (ADR-0018), not by a closed enum. |
| **label** | `string` | ✅ | Node label |
| **config** | `Record<string, any>` | optional | Node configuration |
| **connectorConfig** | `Object` | optional |  |
| **position** | `Object` | optional |  |
| **timeoutMs** | `integer` | optional | Maximum execution time for this node in milliseconds |
| **inputSchema** | `Record<string, Object>` | optional | Input parameter schema for this node |
| **outputSchema** | `Record<string, Object>` | optional | Output schema declaration for this node |
| **waitEventConfig** | `Object` | optional | Configuration for wait node event resumption |
| **boundaryConfig** | `Object` | optional | Configuration for boundary events attached to host nodes |


---

## FlowNodeAction

### Allowed Values

* `start`
* `end`
* `decision`
* `assignment`
* `loop`
* `create_record`
* `update_record`
* `delete_record`
* `get_record`
* `http`
* `http_request`
* `notify`
* `script`
* `screen`
* `wait`
* `subflow`
* `map`
* `connector_action`
* `parallel_gateway`
* `join_gateway`
* `boundary_event`


---

## FlowVariable

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **name** | `string` | ✅ | Variable name |
| **type** | `string` | ✅ | Data type (text, number, boolean, object, list) |
| **isInput** | `boolean` | ✅ | Is input parameter |
| **isOutput** | `boolean` | ✅ | Is output parameter |


---

