---
title: "Get Workflow"
method: GET
path: "/api/v3/meta/bases/{baseId}/workflows/{workflowId}"
tags: ["Workflows"]
---

# Get Workflow

`GET /api/v3/meta/bases/{baseId}/workflows/{workflowId}`

## Request

- Base URL: `https://app.nocodb.com`
- URL: `https://app.nocodb.com/api/v3/meta/bases/{baseId}/workflows/{workflowId}`
- Auth: one of:
  - API key in header `xc-token`
  - HTTP bearer
- TypeScript: <https://skmtc.dev/nocodb/apis/nocodb-v3/docs/api/v3/meta/bases/:baseId/workflows/:workflowId/get.ts> (a function with typed inputs; its response is checked against the schema)

Retrieve the details of a specific workflow.

**Note**: Workflow APIs are available on cloud-hosted **Business** plans and above, and on licensed self-hosted deployments (**Business** plan and above).

## Path parameters

- `baseId` string, required
- `workflowId` string, required

## Response `200`

Workflow retrieved.

- WorkflowGetResponse: Workflow with full details including nodes and edges
  - `id` string, required: Unique identifier for the workflow
  - `title` string, required: Title of the workflow
  - `description` string, nullable: Description of the workflow
  - `base_id` string, required: Unique identifier for the base
  - `workspace_id` string, required: Unique identifier for the workspace
  - `enabled` boolean: Whether the workflow is enabled
  - `nodes` WorkflowNode[]: Published workflow node definitions
    - `id` string, required: Unique identifier for this node within the workflow
    - `type` string, required: Node type identifier determining behavior and available configuration. Categories: trigger (start events), action (operations), flow (control flow). Examples: 'nocodb.trigger.after_insert', 'core.action.http', 'core.flow.if', 'core.flow.iterate', 'core.flow.delay', 'slack.send_message', 'ai.action.generate-text'
    - `position` object, required: Position of the node on the workflow canvas
      - `x` number, required: X coordinate
      - `y` number, required: Y coordinate
    - `data` WorkflowNodeData, required: Data payload of a workflow node containing its configuration and metadata
      - `title` string, required: Display title of the node
      - `description` string: Description of the node
      - `config` object, required: Node-specific configuration. Structure varies by node type — e.g. table ID for record triggers, conditions array for If nodes, duration/unit for Delay nodes, array expression for Iterate nodes
      - `testResult` WorkflowNodeExecutionResult: Result of executing a single workflow node
        - `nodeId` string, required: ID of the node that was executed
        - `nodeTitle` string, required: Title of the node at execution time
        - `status` 'pending' | 'running' | 'success' | 'error' | 'skipped', required: Execution status of the node
        - `input` object: Interpolated input data passed to the node
        - `output` object: Output data produced by the node
        - `error` string: Error message if the node failed
        - `startTime` number, required: Execution start time (Unix timestamp in milliseconds)
        - `endTime` number: Execution end time (Unix timestamp in milliseconds)
        - `nextNode` string: Explicit next node title for routing (used by conditional nodes)
        - `logs` object[]: Execution log entries from the node
          - `level` 'info' | 'warn' | 'error', required: Log level
          - `message` string, required: Log message
          - `ts` number: Timestamp of the log entry
          - `data` object: Additional structured log data
        - `metrics` object: Execution metrics (e.g. execution time, condition count)
        - `inputVariables` WorkflowVariableDefinition[]: Input variable definitions at execution time
          - `key` string, required: Expression reference key (e.g. 'fields.Title', 'meta.id')
          - `name` string, required: Human-readable display name
          - `type` 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'date' | 'datetime', required: Data type of the variable
          - `groupKey` 'meta' | 'fields' | 'iteration': Grouping category — 'meta' for system fields, 'fields' for user data, 'iteration' for loop variables
          - `isArray` boolean: Whether this variable represents an array of values
          - `extra` object: Additional metadata (entity references, icons, UI type hints)
            - `entity_id` string: ID of the referenced entity (column, table, or view)
            - `entity` 'column' | 'table' | 'view': Type of the referenced entity
            - `icon` string: Icon identifier for display
            - `uiType` string: UI data type hint
            - `description` string: Description of the variable
            - `port` string: Port ID this variable belongs to (for multi-port nodes like If/Iterate)
          - `children` WorkflowVariableDefinition[]: Nested variable definitions for object/array types
        - `outputVariables` WorkflowVariableDefinition[]: Output variable definitions at execution time
          - `key` string, required: Expression reference key (e.g. 'fields.Title', 'meta.id')
          - `name` string, required: Human-readable display name
          - `type` 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'date' | 'datetime', required: Data type of the variable
          - `groupKey` 'meta' | 'fields' | 'iteration': Grouping category — 'meta' for system fields, 'fields' for user data, 'iteration' for loop variables
          - `isArray` boolean: Whether this variable represents an array of values
          - `extra` object: Additional metadata (entity references, icons, UI type hints)
            - `entity_id` string: ID of the referenced entity (column, table, or view)
            - `entity` 'column' | 'table' | 'view': Type of the referenced entity
            - `icon` string: Icon identifier for display
            - `uiType` string: UI data type hint
            - `description` string: Description of the variable
            - `port` string: Port ID this variable belongs to (for multi-port nodes like If/Iterate)
          - `children` WorkflowVariableDefinition[]: Nested variable definitions for object/array types
        - `loopContext` object: Loop context for iterate nodes — contains loop state, body port, and exit port
          - `state` object: Serializable loop state
            - `items` unknown[]: Array of items being iterated
              - …
            - `currentIndex` number: Current iteration index (0-based)
            - `totalItems` number: Total number of items to iterate
          - `bodyPort` string: Port ID for the loop body (e.g. 'body')
          - `exitPort` string: Port ID for the loop exit (e.g. 'output')
        - `isStale` boolean: Whether this test result is stale (node config changed since last test)
      - `inputVariables` WorkflowVariableDefinition[]: Input variable definitions for this node
        - `key` string, required: Expression reference key (e.g. 'fields.Title', 'meta.id')
        - `name` string, required: Human-readable display name
        - `type` 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'date' | 'datetime', required: Data type of the variable
        - `groupKey` 'meta' | 'fields' | 'iteration': Grouping category — 'meta' for system fields, 'fields' for user data, 'iteration' for loop variables
        - `isArray` boolean: Whether this variable represents an array of values
        - `extra` object: Additional metadata (entity references, icons, UI type hints)
          - `entity_id` string: ID of the referenced entity (column, table, or view)
          - `entity` 'column' | 'table' | 'view': Type of the referenced entity
          - `icon` string: Icon identifier for display
          - `uiType` string: UI data type hint
          - `description` string: Description of the variable
          - `port` string: Port ID this variable belongs to (for multi-port nodes like If/Iterate)
        - `children` WorkflowVariableDefinition[]: Nested variable definitions for object/array types
      - `outputVariables` WorkflowVariableDefinition[]: Output variable definitions produced by this node
        - `key` string, required: Expression reference key (e.g. 'fields.Title', 'meta.id')
        - `name` string, required: Human-readable display name
        - `type` 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'date' | 'datetime', required: Data type of the variable
        - `groupKey` 'meta' | 'fields' | 'iteration': Grouping category — 'meta' for system fields, 'fields' for user data, 'iteration' for loop variables
        - `isArray` boolean: Whether this variable represents an array of values
        - `extra` object: Additional metadata (entity references, icons, UI type hints)
          - `entity_id` string: ID of the referenced entity (column, table, or view)
          - `entity` 'column' | 'table' | 'view': Type of the referenced entity
          - `icon` string: Icon identifier for display
          - `uiType` string: UI data type hint
          - `description` string: Description of the variable
          - `port` string: Port ID this variable belongs to (for multi-port nodes like If/Iterate)
        - `children` WorkflowVariableDefinition[]: Nested variable definitions for object/array types
    - `targetPosition` 'top' | 'bottom' | 'left' | 'right': Position of the incoming connection handle
    - `sourcePosition` 'top' | 'bottom' | 'left' | 'right': Position of the outgoing connection handle
  - `edges` WorkflowEdge[]: Published connections between workflow nodes
    - `id` string, required: Unique identifier for this edge
    - `source` string, required: ID of the source node
    - `target` string, required: ID of the target node
    - `animated` boolean: Whether the edge should be animated in the UI
    - `label` string: Display label on the edge (e.g. 'True', 'False', 'For Each Item')
    - `sourcePortId` string: Output port ID on the source node. Used for branching — e.g. 'true'/'false' for If nodes, 'body'/'output' for Iterate nodes
    - `targetPortId` string: Input port ID on the target node
  - `draft` WorkflowDraft: Draft version of workflow nodes and edges with unpublished changes. Must be published via the publish endpoint for changes to take effect.
    - `nodes` WorkflowNode[]: Draft workflow node definitions
      - `id` string, required: Unique identifier for this node within the workflow
      - `type` string, required: Node type identifier determining behavior and available configuration. Categories: trigger (start events), action (operations), flow (control flow). Examples: 'nocodb.trigger.after_insert', 'core.action.http', 'core.flow.if', 'core.flow.iterate', 'core.flow.delay', 'slack.send_message', 'ai.action.generate-text'
      - `position` object, required: Position of the node on the workflow canvas
        - `x` number, required: X coordinate
        - `y` number, required: Y coordinate
      - `data` WorkflowNodeData, required: Data payload of a workflow node containing its configuration and metadata
        - `title` string, required: Display title of the node
        - `description` string: Description of the node
        - `config` object, required: Node-specific configuration. Structure varies by node type — e.g. table ID for record triggers, conditions array for If nodes, duration/unit for Delay nodes, array expression for Iterate nodes
        - `testResult` WorkflowNodeExecutionResult: Result of executing a single workflow node
          - `nodeId` string, required: ID of the node that was executed
          - `nodeTitle` string, required: Title of the node at execution time
          - `status` 'pending' | 'running' | 'success' | 'error' | 'skipped', required: Execution status of the node
          - `input` object: Interpolated input data passed to the node
          - `output` object: Output data produced by the node
          - `error` string: Error message if the node failed
          - `startTime` number, required: Execution start time (Unix timestamp in milliseconds)
          - `endTime` number: Execution end time (Unix timestamp in milliseconds)
          - `nextNode` string: Explicit next node title for routing (used by conditional nodes)
          - `logs` object[]: Execution log entries from the node
            - `level` 'info' | 'warn' | 'error', required: Log level
            - `message` string, required: Log message
            - `ts` number: Timestamp of the log entry
            - `data` object: Additional structured log data
          - `metrics` object: Execution metrics (e.g. execution time, condition count)
          - `inputVariables` WorkflowVariableDefinition[]: Input variable definitions at execution time
            - `key` string, required: Expression reference key (e.g. 'fields.Title', 'meta.id')
            - `name` string, required: Human-readable display name
            - `type` 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'date' | 'datetime', required: Data type of the variable
            - `groupKey` 'meta' | 'fields' | 'iteration': Grouping category — 'meta' for system fields, 'fields' for user data, 'iteration' for loop variables
            - `isArray` boolean: Whether this variable represents an array of values
            - `extra` object: Additional metadata (entity references, icons, UI type hints)
              - …
            - `children` WorkflowVariableDefinition[]: Nested variable definitions for object/array types
          - `outputVariables` WorkflowVariableDefinition[]: Output variable definitions at execution time
            - `key` string, required: Expression reference key (e.g. 'fields.Title', 'meta.id')
            - `name` string, required: Human-readable display name
            - `type` 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'date' | 'datetime', required: Data type of the variable
            - `groupKey` 'meta' | 'fields' | 'iteration': Grouping category — 'meta' for system fields, 'fields' for user data, 'iteration' for loop variables
            - `isArray` boolean: Whether this variable represents an array of values
            - `extra` object: Additional metadata (entity references, icons, UI type hints)
              - …
            - `children` WorkflowVariableDefinition[]: Nested variable definitions for object/array types
          - `loopContext` object: Loop context for iterate nodes — contains loop state, body port, and exit port
            - `state` object: Serializable loop state
              - …
            - `bodyPort` string: Port ID for the loop body (e.g. 'body')
            - `exitPort` string: Port ID for the loop exit (e.g. 'output')
          - `isStale` boolean: Whether this test result is stale (node config changed since last test)
        - `inputVariables` WorkflowVariableDefinition[]: Input variable definitions for this node
          - `key` string, required: Expression reference key (e.g. 'fields.Title', 'meta.id')
          - `name` string, required: Human-readable display name
          - `type` 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'date' | 'datetime', required: Data type of the variable
          - `groupKey` 'meta' | 'fields' | 'iteration': Grouping category — 'meta' for system fields, 'fields' for user data, 'iteration' for loop variables
          - `isArray` boolean: Whether this variable represents an array of values
          - `extra` object: Additional metadata (entity references, icons, UI type hints)
            - `entity_id` string: ID of the referenced entity (column, table, or view)
            - `entity` 'column' | 'table' | 'view': Type of the referenced entity
            - `icon` string: Icon identifier for display
            - `uiType` string: UI data type hint
            - `description` string: Description of the variable
            - `port` string: Port ID this variable belongs to (for multi-port nodes like If/Iterate)
          - `children` WorkflowVariableDefinition[]: Nested variable definitions for object/array types
        - `outputVariables` WorkflowVariableDefinition[]: Output variable definitions produced by this node
          - `key` string, required: Expression reference key (e.g. 'fields.Title', 'meta.id')
          - `name` string, required: Human-readable display name
          - `type` 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'date' | 'datetime', required: Data type of the variable
          - `groupKey` 'meta' | 'fields' | 'iteration': Grouping category — 'meta' for system fields, 'fields' for user data, 'iteration' for loop variables
          - `isArray` boolean: Whether this variable represents an array of values
          - `extra` object: Additional metadata (entity references, icons, UI type hints)
            - `entity_id` string: ID of the referenced entity (column, table, or view)
            - `entity` 'column' | 'table' | 'view': Type of the referenced entity
            - `icon` string: Icon identifier for display
            - `uiType` string: UI data type hint
            - `description` string: Description of the variable
            - `port` string: Port ID this variable belongs to (for multi-port nodes like If/Iterate)
          - `children` WorkflowVariableDefinition[]: Nested variable definitions for object/array types
      - `targetPosition` 'top' | 'bottom' | 'left' | 'right': Position of the incoming connection handle
      - `sourcePosition` 'top' | 'bottom' | 'left' | 'right': Position of the outgoing connection handle
    - `edges` WorkflowEdge[]: Draft connections between nodes
      - `id` string, required: Unique identifier for this edge
      - `source` string, required: ID of the source node
      - `target` string, required: ID of the target node
      - `animated` boolean: Whether the edge should be animated in the UI
      - `label` string: Display label on the edge (e.g. 'True', 'False', 'For Each Item')
      - `sourcePortId` string: Output port ID on the source node. Used for branching — e.g. 'true'/'false' for If nodes, 'body'/'output' for Iterate nodes
      - `targetPortId` string: Input port ID on the target node
  - `options` WorkflowOptions: Workflow options including execution configuration and display settings
    - `run_as` object: Execution identity — determines the permissions context under which the workflow runs
      - `type` 'service_account' | 'role' | 'user', required: Identity type. 'service_account' runs as a system user with creator role, 'role' runs with a specified role, 'user' runs as a specific user
      - `value` string: Role name (when type='role') or user ID (when type='user'). Not required for 'service_account'
    - `icon` string: Custom emoji icon for the workflow
  - `created_at` string, date-time, required: Timestamp when the workflow was created
  - `updated_at` string, date-time, required: Timestamp when the workflow was last updated
  - `created_by` string: User ID of the creator
  - `updated_by` string: User ID of the last updater

## Other responses

- `403`: Authenticated, but not allowed: the role is too low, the token scope does not cover the operation, or the plan does not include the feature or allows no more of this resource.
- `422`: The request was well formed but could not be acted on — most commonly a referenced base, table, field, view, script, dashboard, widget or workflow does not exist.
- `500`: Unexpected server error. The body carries `message` only — no `error` code.

---

[API](https://skmtc.dev/nocodb/apis/nocodb-v3.md) - [All operations](https://skmtc.dev/nocodb/apis/nocodb-v3/llms.txt) - [OpenAPI document](https://skmtc.dev/nocodb/apis/nocodb-v3/revisions/62a735aaf849?raw)
