---
title: "List workflows"
method: GET
path: "/api/apps/{app_id}/workflows"
---

# List workflows

`GET /api/apps/{app_id}/workflows`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Lists the app's workflows.

Archived workflows are left out unless you set `include_archived`. Use `limit` and `offset` to page through the results.

Passing `file_keys` switches this to a lookup by file name and ignores `limit` and `offset` entirely, returning every match. That is the only way to fetch more than 200 workflows in one call, and it is meant for resolving names you already hold rather than for paging.

The response omits each workflow's definition. Read one workflow with [Get workflow](/api-reference/get-workflow) when you need it.

This endpoint is limited to 60 requests per minute.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>

## Path parameters

- `app_id` string, required — ID of the app whose workflows you want to work with.

## Query parameters

- `include_archived` boolean — Include archived workflows in the results.
- `limit` integer — Most workflows to return.
- `offset` integer — How many workflows to skip, for paging.
- `file_keys` string[], nullable — Look workflows up by their file name instead of paging. Repeat the parameter for several. At most 50, each at most 256 characters and free of path separators.

## Response `200`

The app's workflows.

- WorkflowListItem[]
  - `id` string, required — ID of the workflow.
  - `app_id` string, required — ID of the app the workflow belongs to.
  - `file_key` string, nullable — Name of the workflow's file in the app's code.
  - `name` string, required — Name of the workflow.
  - `description` string, nullable — What the workflow is for.
  - `status` string, required — Whether the workflow runs: `active`, `inactive`, or `archived`.
  - `status_reason` string, nullable — Why Base44 stopped the workflow itself, as a fixed code: `consecutive_failures`, `end_condition_reached`, `migration_activation_failed`, or `workflows_not_available`. `null` when you set the status yourself.
  - `trigger` object — What starts the workflow. The trigger sits under `config`, keyed by `trigger_type`.
  - `total_runs` integer — Runs the workflow has started, ever.
  - `consecutive_failures` integer — Runs that have failed in a row.
  - `last_run_at` string, date-time, nullable — When the workflow last started running. `null` before its first run.
  - `last_run_status` string, nullable — How that run ended: `success`, `failed`, or `cancelled`. `null` before the first run. Note this is a different set of values from a run's own `status`, which reports `completed` rather than `success`.
  - `created_date` string, date-time, nullable — When the workflow was created.

## Other responses

- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, the app does not exist, the app still runs the older automations engine instead of workflows, or you used a workspace API key. A missing app and an app you cannot reach are deliberately the same answer.
- `422` — `file_keys` has more than 50 entries, or one is longer than 256 characters or contains a path separator.

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/idealspot/base44-app-management-api/revisions/31ef75eb64ab/schema)
