---
title: "List workflows"
method: GET
path: "/api/v2/workflows"
tags: ["workflows"]
---

# List workflows

`GET /api/v2/workflows`

Return workflows visible to the caller.

System workflows are visible to everyone. For org workflows, visibility
is role-scoped: ADMIN and OWNER see every workflow in the active org.
VIEWER and MEMBER see the workflows they own plus any in a group they
belong to; a member in the virtual "All workflows" group sees every org
workflow (VA-499).

## Query parameters

- `cursor` string, nullable — Opaque pagination cursor.
- `limit` integer, nullable — Page size (max 200).
- `is_system` boolean, nullable — If true, only system workflows. If false, only user workflows.
- `mine` boolean — If true, restrict to workflows owned by the active org (organization_id == active org). Combine with is_system=true to list the system workflows this org promoted (its manage view).
- `owned_by_me` boolean — If true, restrict to workflows whose ``owner_user_id`` is the caller. Used by the post-login redirect on the web app to decide between the empty-state and the workflow list.
- `status` 'active' | 'draft' | 'deleted' — Lifecycle state of a workflow row. Transitions: ``draft`` -> ``active`` -> ``deleted``. Non-draft rows skip to ``active`` on creation.
- `tags` string[], nullable — Filter to workflows carrying any of the given tags. Repeat the param for multiple tags.
- `q` string, nullable — Substring match against workflow name/description (case-insensitive).

## Response `200`

Successful Response

- PaginatedWorkflowSummary
  - `items` WorkflowSummary[], required — Page of items in the order the endpoint defines; see the endpoint's order_by for the sort.
    - `id` string, required — Stable family id, unchanged across edits.
    - `name` string, required — Current human-readable workflow name.
    - `description` string, nullable — Optional long-form description of the workflow's purpose.
    - `tags` string[] — Tag values (system or org-custom) for filtering/grouping.
    - `is_system` boolean, required — True when this is a system workflow visible to every org.
    - `system_source` 'registry' | 'user', nullable — Provenance of a system workflow: 'registry' for a built-in seeded into the environment, 'user' for one promoted from an org's workflow. Null for non-system workflows.
    - `is_tiliter_created` boolean — True when this system workflow is Tiliter-authored. Tiliter-created entries sort ahead of community-promoted ones in the picker. Always false for non-system workflows.
    - `is_deleted` boolean — True when the workflow has been soft-deleted.
    - `status` 'active' | 'draft' | 'deleted' — Lifecycle state of a workflow row. Transitions: ``draft`` -> ``active`` -> ``deleted``. Non-draft rows skip to ``active`` on creation.
    - `allow_step_skip` boolean — When True, the job can be completed with steps left uncaptured. When False, every step must be captured first.
    - `allow_out_of_order_steps` boolean — When True, steps may be captured in any order. When False, they must be captured in ascending sort_order.
    - `allow_step_failure` boolean — Selects the job pass policy. When False (strict), any step that fails its pass_criteria or errors makes the job's result FAILED. When True (threshold), failures are tolerated until the percentage of evaluable steps that failed exceeds ``fail_threshold_percent``. Either way the job's lifecycle status is unaffected -- only a technical error makes a job COMPLETED_WITH_ERRORS.
    - `fail_threshold_percent` integer — Maximum percentage (0-100) of evaluable steps that may fail before the job is FAILED when ``allow_step_failure`` is True. Ignored when ``allow_step_failure`` is False.
    - `allow_adhoc_step` boolean — When True, the operator may append ad-hoc steps during a run.
    - `owner_user_id` string, nullable — Owning user id. Null for system workflows.
    - `organization_id` string, nullable — Owning organization id. Null for personal workflows.
    - `parent_workflow_id` string, nullable — Set on an edit draft (a 'draft' row that stages changes to a live workflow): the id of the live workflow these edits will publish to. Null on active workflows and on brand-new-workflow drafts.
    - `unpublished_draft_id` string, nullable — On an active workflow, the id of the caller's own in-progress edit draft for it, if one exists (so the client can offer 'resume editing' and show an 'unpublished changes' indicator). Null when the caller has no edit draft for this workflow.
    - `step_count` integer — Number of steps in the workflow.
    - `active_job_count` integer — Number of non-completed jobs currently running against this workflow.
    - `access_user_count` integer — Number of distinct users who have access to this workflow via group membership or direct ownership. Zero for system workflows.
    - `created_at` string, date-time, required — When the workflow was first created.
    - `updated_at` string, date-time, nullable — When the workflow was last modified.
  - `next_cursor` string, nullable — Opaque cursor to fetch the next page. Null when this is the last page.
  - `limit` integer, required — Page size that was applied.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/tiliter/apis/tiliter-vision-ai-public-api.md) · [All operations](https://skmtc.net/tiliter/apis/tiliter-vision-ai-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tiliter/tiliter-vision-ai-public-api/revisions/30b6f7f148f8/schema)
