# List workflows

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

Lists workflows that the caller can read. Filter by source, status, execution mode, or name.

```text
GET https://moi.matrixorigin.cn/newmoi/workflow/v2/workflow-apps
```

## Before you call

Prepare a [personal access token](../../../../../guides/genesis/api-keys.md#create-and-manage-personal-access-tokens) with workflow read permission and the [target workspace ID](../../../../../guides/ai-studio/resource-center/workspace.md#copy-the-workspace-id).

## Query parameters

Replace `$AI_STUDIO_API_KEY`, `$WORKSPACE_ID`, and the query values in the examples with your own values.

:::::::{div} mo-api-tabs
::::::{tab-set}
:::::{tab-item} Call examples

::::{tab-set}
:::{tab-item} First page

```bash
curl "https://moi.matrixorigin.cn/newmoi/workflow/v2/workflow-apps?offset=0&limit=20" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID"
```

:::
:::{tab-item} Next page

```bash
curl "https://moi.matrixorigin.cn/newmoi/workflow/v2/workflow-apps?offset=20&limit=20&status=ready" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID"
```

:::
::::

:::::
:::::{tab-item} Parameter reference

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `offset` | integer | No | Starting position in the result list. |
| `limit` | integer | No | Maximum number of results to return. |
| `source_type` | string | No | Filters by workflow source type. |
| `status` | string | No | Filters by current workflow status. |
| `execution_mode` | string | No | Filters by execution mode. |
| `name_search` | string | No | Searches workflow names. |
| `include_dynamic_service` | boolean | No | Includes dynamic service workflows. |

:::::
::::::
:::::::

## Successful response

Returns 200 and a page of workflow summaries with the matching total. Increase `offset` until the number of read items reaches the total.

:::::::{div} mo-api-tabs
::::::{tab-set}
:::::{tab-item} Response example

```json
{
  "code": "OK",
  "msg": "OK",
  "data": {
    "total": 1,
    "workflows": [
      {
        "id": "wf-001",
        "name": "daily-import",
        "source_type": "manual_dsl",
        "status": "ready",
        "available_actions": ["update", "delete", "run", "pause"],
        "execution_mode": "cron",
        "cron_expression": "0 2 * * *",
        "latest_workflow_version_id": "ver-001",
        "latest_version": 3,
        "parameter_summary": {
          "status": "valid",
          "total_fields": 1,
          "required_fields": 0,
          "filled_required_fields": 0,
          "missing_required_fields": 0
        },
        "execution_summary": {
          "total_executions": 8,
          "active_executions": 0,
          "latest_execution_id": "run-008",
          "latest_execution_status": "completed"
        },
        "trigger_summary": {
          "mode": "cron",
          "configured": true,
          "enabled": true,
          "cron_expression": "0 2 * * *"
        },
        "created_at": "2026-08-18T10:00:00Z",
        "updated_at": "2026-08-18T11:00:00Z"
      }
    ]
  }
}
```

:::::
:::::{tab-item} Field reference

::::{tab-set}
:::{tab-item} Common fields

| Field | Type | Description |
| --- | --- | --- |
| `code` | string | `OK` on success. |
| `msg` | string | `OK` on success. |
| `data.total` | integer | Total workflows matching the filters. |
| `data.workflows` | object[] | Workflow summary list. |

:::
:::{tab-item} Workflow summary

The following fields are in each `data.workflows[]` item.

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Workflow ID. |
| `name` | string | Workflow name. |
| `description` | string | Workflow description, when set. |
| `source_type` | string | Workflow source type. |
| `status` | string | Current workflow status. |
| `available_actions` | string[] | Actions allowed in the current state. Read again before calling an action. |
| `execution_mode` | string | Configured execution mode. |
| `cron_expression` | string | Cron expression for scheduled workflows. |
| `draft_id` | string | Draft ID, when provided. |
| `candidate_id` | string | Candidate ID, when provided. |
| `latest_workflow_version_id` | string | Latest workflow version ID, when provided. |
| `latest_version` | integer | Latest workflow version number, when provided. |
| `latest_version_status` | string | Latest workflow version status, when provided. |
| `compute_resource_id` | string | Workflow-level compute resource ID, when associated. |
| `created_at` | string | Creation time, when provided. |
| `updated_at` | string | Last update time, when provided. |

:::
:::{tab-item} Parameter and execution summaries

| Field | Type | Description |
| --- | --- | --- |
| `parameter_summary` | object | Runtime parameter validation summary. |
| `parameter_summary.status` | string | Parameter validation status. |
| `parameter_summary.total_fields` | integer | Total parameters. |
| `parameter_summary.required_fields` | integer | Required parameters. |
| `parameter_summary.filled_required_fields` | integer | Required parameters that have values. |
| `parameter_summary.missing_required_fields` | integer | Missing required parameters. |
| `parameter_summary.missing_required_field_ids` | string[] | Missing parameter IDs, when any. |
| `parameter_summary.missing_required_field_labels` | string[] | Missing parameter labels, when any. |
| `execution_summary` | object | Execution summary. |
| `execution_summary.total_executions` | integer | Total executions. |
| `execution_summary.active_executions` | integer | Active executions. |
| `execution_summary.active_execution_id` | string | Active execution ID, when any. |
| `execution_summary.active_execution_status` | string | Active execution status, when any. |
| `execution_summary.latest_execution_id` | string | Latest execution ID, when any. |
| `execution_summary.latest_execution_status` | string | Latest execution status, when any. |
| `execution_summary.latest_execution_at` | string | Latest execution time, when any. |

:::
:::{tab-item} Triggers and compute resources

| Field | Type | Description |
| --- | --- | --- |
| `trigger_summary` | object | Trigger summary. |
| `trigger_summary.mode` | string | Trigger mode. |
| `trigger_summary.configured` | boolean | Whether the trigger is configured. |
| `trigger_summary.enabled` | boolean | Whether the trigger is enabled. |
| `trigger_summary.volume_id` | integer | Associated volume ID for volume triggers. |
| `trigger_summary.cron_expression` | string | Cron expression for scheduled workflows. |
| `trigger_summary.service_name` | string | Service name for dynamic services. |
| `compute_resource_bindings` | object[] | Workflow-level or node-level compute resource bindings. |
| `compute_resource_bindings[].id` | string | Compute resource ID. |
| `compute_resource_bindings[].name` | string | Compute resource name, when provided. |
| `compute_resource_bindings[].workflow_level` | boolean | Whether this is a workflow-level binding. |
| `compute_resource_bindings[].node_names` | string[] | Names of nodes using the binding. |

`[]` in a field path means each array item. For example, `compute_resource_bindings[].id` is the `id` field in each `compute_resource_bindings` item.

:::
::::

:::::
::::::
:::::::

## Error response

:::::::{div} mo-api-tabs
::::::{tab-set}
:::::{tab-item} Response example

```json
{
  "code": "ErrParamInvalid",
  "msg": "Invalid request parameter",
  "data": null
}
```

:::::
:::::{tab-item} Field reference

| Field | Type | Description |
| --- | --- | --- |
| `code` | string | Error code. |
| `msg` | string | Error message. |
| `data` | null | Empty on error. |

:::::
::::::
:::::::

## Next steps

Keep each workflow `id`. Use [Get workflow details](get-workflow.md#path-parameters) for the full definition or [Update workflow](update-workflow.md#path-parameters) to change it.
