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

# Manage workflows

> List, find, update, pause, resume, and delete workflows, and read their run history.

Find the workflows that need you, change their settings, and pause or delete the ones you no longer need.

## List workflows

**Dashboard**

1. Select **Workflows** in the sidebar. The list groups your team's workflows by status, with your pinned workflows first.
2. To find a workflow by name, type in **Search workflows**.
3. To narrow the list, select the filter icon and pick **Tags**, **User**, **Quality**, **Notification channel**, **Template**, or **Status**.

To show the list without status groups, select the display options icon, then **Don't group**.

**SDK & API**

```typescript Node SDK theme={null}
const workflows = await client.workflow.list({ limit: 100 });

for (const workflow of workflows) {
  console.log(`${workflow.id}: ${workflow.name}`);
}
```

```python Python SDK theme={null}
from kadoa_sdk import KadoaClient, KadoaClientConfig
from kadoa_sdk.workflows import ListWorkflowsRequest

client = KadoaClient(KadoaClientConfig(api_key="YOUR_API_KEY"))

workflows = client.workflow.list(ListWorkflowsRequest(limit=100))

for workflow in workflows:
    print(f"{workflow.id}: {workflow.name}")
```

```bash REST API theme={null}
curl -X GET "https://api.kadoa.com/v4/workflows" \
  -H "x-api-key: YOUR_API_KEY"
```

**MCP**

Ask your AI tool, for example:

```text theme={null}
> "List my Kadoa workflows"
```

Your AI tool calls `list_workflows`.

## Find workflows that need attention

A workflow needs your attention when Kadoa's agent asked you a question or a preview is ready to review. Workflows with open support cases appear in the support group instead, even when they await your reply.

**Dashboard**

1. Select **Workflows** in the sidebar.
2. Open the **Needs your attention** group. Each workflow shows **Reply needed** when the agent asked a question, or **Preview ready** when a preview waits for review. It also shows how long it has been waiting.
3. Select a workflow to reply to the agent or review the preview.

To show only these workflows, select the filter icon, then **Status** > **Needs your attention**. Pinned workflows stay in **Pinned**, even when they need attention. Workflows with open support cases appear under **In support**.

**SDK & API**

Filter by `group:attention`. Workflows with open support cases appear in `group:support`. See [all groups](https://docs.kadoa.com/docs/workflows/lifecycle.md#filtering-workflows).

`awaitingUserInput` contains the wait's start time and optional question text.

```typescript Node SDK theme={null}
import { WorkflowStatusFilter } from "@kadoa/node-sdk";

const needsAttention = await client.workflow.list({
  statusFilters: [WorkflowStatusFilter.Attention],
});

for (const workflow of needsAttention) {
  const question = workflow.awaitingUserInput?.prompt;
  console.log(workflow.name, question ?? "waiting on preview approval");
}
```

```bash REST API theme={null}
curl -X GET "https://api.kadoa.com/v4/workflows?statusFilters=group:attention" \
  -H "x-api-key: YOUR_API_KEY"
```

Check `availableActions.approve` before approving. An incomplete update can block approval even in this group.

> [!NOTE]
>
> `statusFilters` is available in the Node SDK, the REST API, and the MCP server. The Python SDK does not expose it yet, so call `GET /v4/workflows?statusFilters=group:attention` directly from Python.

**MCP**

Ask your AI tool, for example:

```text theme={null}
> What needs my attention in Kadoa?
```

Your AI tool calls `list_workflows` with `statusFilters: ["group:attention"]`.

Then [reply to the agent](https://docs.kadoa.com/docs/workflows/agent.md) or [review the preview](https://docs.kadoa.com/docs/ui/workflows/human-in-the-loop.md).

## Get a workflow

**Dashboard**

1. Select **Workflows** in the sidebar, then select the workflow to open it.
2. To copy its ID, open the three-dot menu in the header and select **Copy workflow ID**.

**SDK & API**

```typescript Node SDK theme={null}
const workflow = await client.workflow.get('YOUR_WORKFLOW_ID');
```

```python Python SDK theme={null}
from kadoa_sdk import KadoaClient, KadoaClientConfig

client = KadoaClient(KadoaClientConfig(api_key="YOUR_API_KEY"))

workflow = client.workflow.get("YOUR_WORKFLOW_ID")
```

```bash REST API theme={null}
curl -X GET "https://api.kadoa.com/v4/workflows/YOUR_WORKFLOW_ID" \
  -H "x-api-key: YOUR_API_KEY"
```

**MCP**

Ask your AI tool, for example:

```text theme={null}
> "Show me the prompt and schedule of my Product Monitor workflow"
```

Your AI tool calls `get_workflow`.

## Update a workflow

**Dashboard**

Open the workflow, then:

* To rename it, select its name in the header, enter the new name, and select **Save**.
* To change how often it runs, select **Frequency** in the side rail. See [Scheduling](https://docs.kadoa.com/docs/workflows/scheduling.md).
* To change its fields, row limit, notifications, or tags, select **Schema**, **Row limit**, **Notifications**, or **Tags** in the side rail.
* To change what it extracts or how it navigates, ask the agent. See [Agent](https://docs.kadoa.com/docs/workflows/agent.md).

**SDK & API**

```typescript Node SDK theme={null}
await client.workflow.update("YOUR_WORKFLOW_ID", {
  name: "New Name",
  updateInterval: "DAILY",
});
```

```python Python SDK theme={null}
from kadoa_sdk import KadoaClient, KadoaClientConfig
from kadoa_sdk.workflows import UpdateWorkflowRequest

client = KadoaClient(KadoaClientConfig(api_key="YOUR_API_KEY"))

client.workflow.update(
    "YOUR_WORKFLOW_ID",
    UpdateWorkflowRequest(name="New Name", update_interval="DAILY"),
)
```

```bash REST API theme={null}
curl -X PUT "https://api.kadoa.com/v4/workflows/YOUR_WORKFLOW_ID/metadata" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "New Name", "updateInterval": "DAILY"}'
```

**MCP**

Ask your AI tool, for example:

```text theme={null}
> "Rename my Product Monitor workflow to Daily Prices and run it every day"
```

Your AI tool calls `update_workflow`. To change what the agent extracts or how it navigates, it calls `request_workflow_update` instead.

> [!NOTE]
>
> A workflow linked to a [template](https://docs.kadoa.com/docs/templates.md) takes its prompt, schema, data quality rules, notifications, frequency, and row limit from the template. Those settings are read-only on the workflow. In the dashboard, the side rail marks them **Controlled by template**. See [Templates](https://docs.kadoa.com/docs/templates.md) to link, unlink, or apply template updates.

## Pause and resume a workflow

A paused workflow skips its scheduled runs until you resume it. Only `ACTIVE` workflows can be paused.

**Dashboard**

1. Open the workflow.
2. Open the three-dot menu in the header.
3. Select **Pause**. For a paused workflow, select **Resume**.

**SDK & API**

```typescript Node SDK theme={null}
// Pause
await client.workflow.pause('YOUR_WORKFLOW_ID');

// Resume
await client.workflow.resume('YOUR_WORKFLOW_ID');
```

```python Python SDK theme={null}
from kadoa_sdk import KadoaClient, KadoaClientConfig

client = KadoaClient(KadoaClientConfig(api_key="YOUR_API_KEY"))

# Pause
client.workflow.pause("YOUR_WORKFLOW_ID")

# Resume
client.workflow.resume("YOUR_WORKFLOW_ID")
```

**MCP**

Ask your AI tool, for example:

```text theme={null}
> "Pause my Product Monitor workflow"
```

Your AI tool calls `pause_workflow`. The MCP server has no tool to resume a workflow, so resume it in the dashboard or with the SDK.

## View run history

Run history is the execution record for one workflow. It includes outcome, start and finish times, record counts, and public errors.

**Dashboard**

1. Open the workflow.
2. Select **History** in the side rail.
3. Select **Runs**.

**SDK & API**

The Node SDK can filter the history by `success`, `failed`, or `in_progress` and paginate it.

```typescript Node SDK theme={null}
const history = await client.workflow.listWorkflowRuns("WORKFLOW_ID", {
  page: 1,
  limit: 25,
  status: "failed",
});

for (const run of history.workflowRuns) {
  console.log(run.id, run.state, run.startedAt, run.errors);
}
```

```bash REST API theme={null}
curl "https://api.kadoa.com/v4/workflows/WORKFLOW_ID/history?page=1&limit=25&status=failed" \
  -H "x-api-key: YOUR_API_KEY"
```

See the [workflow run history API reference](https://docs.kadoa.com/api-reference/workflows/get-the-workflow-history.md) for the complete response.

**MCP**

Ask your AI tool, for example:

```text theme={null}
> Show the last 25 failed runs for my Product Monitor and summarize the errors.
```

Your AI tool calls `list_workflow_runs`, which filters by `success`, `failed`, or `in_progress` and paginates.

## Delete a workflow

> [!WARNING]
>
> This permanently deletes the workflow and all its data.

**Dashboard**

1. Open the workflow.
2. Open the three-dot menu in the header and select **Delete workflow**.
3. Select **Delete** to confirm.

**SDK & API**

```typescript Node SDK theme={null}
await client.workflow.delete('YOUR_WORKFLOW_ID');
```

```python Python SDK theme={null}
from kadoa_sdk import KadoaClient, KadoaClientConfig

client = KadoaClient(KadoaClientConfig(api_key="YOUR_API_KEY"))

client.workflow.delete("YOUR_WORKFLOW_ID")
```

```bash REST API theme={null}
curl -X DELETE "https://api.kadoa.com/v4/workflows/YOUR_WORKFLOW_ID" \
  -H "x-api-key: YOUR_API_KEY"
```

**MCP**

Ask your AI tool, for example:

```text theme={null}
> "Delete my Product Monitor workflow"
```

Your AI tool calls `delete_workflow`.

## Act on several workflows at once

This task exists in the dashboard only.

1. Select **Workflows** in the sidebar.
2. Hover over a workflow's icon and select its checkbox. Repeat for each workflow, or Shift-click to select a range.
3. In the bar that replaces search and filters, select **Approve**, **Run**, **Stop**, **Pause**, **Resume**, **Pin**, **Tags**, **Copy IDs**, or **Delete**.

If an action applies to only some of the selected workflows, its button shows the count, such as **Pause (3)**. Hover over the button to see why Kadoa skips the others. Deleting asks you to confirm and cannot be undone.

## Fetch data from every workflow

This task exists in the SDK and API only. To download data in the dashboard, see [Export data](https://docs.kadoa.com/docs/export-data.md).

List the workflows, then fetch each one's data:

```typescript Node SDK theme={null}
const workflows = await client.workflow.list({ limit: 100 });

for (const workflow of workflows) {
  if (!workflow.id) {
    continue;
  }

  const data = await client.extraction.fetchAllData({
    workflowId: workflow.id,
  });
  console.log(`${workflow.name}: ${data.length} records`);
}
```

```python Python SDK theme={null}
from kadoa_sdk import FetchDataOptions, KadoaClient, KadoaClientConfig
from kadoa_sdk.workflows import ListWorkflowsRequest

client = KadoaClient(KadoaClientConfig(api_key="YOUR_API_KEY"))

workflows = client.workflow.list(ListWorkflowsRequest(limit=100))

for workflow in workflows:
    data = client.extraction.fetch_all_data(
        FetchDataOptions(workflow_id=workflow.id)
    )
    print(f"{workflow.name}: {len(data)} records")
```

```bash REST API theme={null}
curl -X GET "https://api.kadoa.com/v4/workflows/YOUR_WORKFLOW_ID/data?limit=50&page=2" \
  -H "x-api-key: YOUR_API_KEY"
```

## Related

* [Create workflows](https://docs.kadoa.com/docs/workflows/create/dashboard.md)
* [Scheduling](https://docs.kadoa.com/docs/workflows/scheduling.md)
* [Lifecycle](https://docs.kadoa.com/docs/workflows/lifecycle.md)
* [Templates](https://docs.kadoa.com/docs/templates.md)
* [Export data](https://docs.kadoa.com/docs/export-data.md)


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