---
title: "List workflows"
method: GET
path: "/hub/workflows"
tags: ["Workflows"]
---

# List workflows

`GET /hub/workflows`

## Request

- Base URL: `https://api.quiva.ai`
- URL: `https://api.quiva.ai/hub/workflows`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/quivaworks/apis/quiva-ai-gateway-3/docs/hub/workflows/get.ts> (a function with typed inputs; its response is checked against the schema)

Retrieves a list of workflows, optionally filtered by collection and type

## Query parameters

- `collection_topic` string
- `version` 'draft' | 'published'

## Response `200`

Workflows retrieved successfully

- ListWorkflowsResponse
  - `results` object[]
    - `subject` string: Subject identifier for the workflow
    - `name` string: Name of the workflow
    - `description` string: Description of the workflow
    - `config` WorkflowConfig: The execution graph. Must be acyclic (not server-checked). Nodes run in topological order; condition nodes can alter the path.
      - `nodes` NodeWorkflow[]
        - `id` string, required: Must equal data.id
        - `data` union, required: Node definition. id: unique, ^[a-zA-Z_][a-zA-Z0-9_:]*$, not a reserved word (trigger, static, RESOLVE_ERROR, RESOLVE_SUCCESS). payload is REQUIRED on every node type. Reference a node's output downstream via $.{id}.
          - TriggerNodeData: Entry-point metadata for the visual editor. SKIPPED at runtime — optional; run input arrives via the run request 'trigger' field ($.trigger), not through this node.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'trigger', required
            - `trigger_type` 'manual' | 'schedule' | 'webhook' | 'gateway' | 'embed' | 'email' | 'object-store' | 'record' | 'task' | 'email-delivery' | 'mail': How the flow starts. `email-delivery` fires on delivery events of emails sent from templates. `mail` fires from a Microsoft 365 mail automation with the filed email, its attachment files riding as knowledge. `task` starts from a task event.
            - `payload` object, required: Config varies by `trigger_type`; `{}` for manual. For `email-delivery`: `event_type` (array of `bounce`, `blocked`, `dropped`, `undeliverable`, `deferred`, and other delivery events; default is bounce, blocked, dropped and undeliverable, `deferred` is left out because it is usually temporary), `class` (only emails of this class) and `template_key` (only emails sent from this template). For `task`: `space_id`, `event_type`, `folder`, `status`, `status_from`, `status_to`, `allow_self_trigger`. The trigger data reaches the flow at `$.trigger`.
          - AgentNodeData: Invoke an LLM agent. The inline definition MUST be nested under payload.agent — flat payloads (api_key/llm_provider/model at payload top level) are silently dropped at runtime and the node fails with 'a subject, node_subject or agent property is required'. IMPORTANT: the node output at $.{id}.result is a JSON-ENCODED STRING even when output_schema is set — add an eval node to JSON.parse it before branching on its fields.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'agent', required
            - `payload` object, required: One of 'agent' (inline definition), 'subject' (saved agent subject) or 'node_subject' (agent node template) is required. prompt/await live at this level, NOT inside agent.
              - …
          - FunctionNodeData: Invoke a compute function. subject is REQUIRED and must exist — discover via GET /compute/functions.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'function', required
            - `subject` string, required
            - `payload` unknown, required
            - `response_map` unknown
            - `options` NodeOptions: Execution options for function/flow/integration/http nodes
              - …
          - IntegrationNodeData: HTTP request to a third-party API, optionally via an OAuth connection. Result shape: { status, statusText, headers, data }. 4xx/5xx responses become node errors (tolerate/retry via options).
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'integration', required
            - `integration_id` string: e.g. 'slack'
            - `request_type_id` string: e.g. 'post_chat_postMessage'
            - `oauth` string: OAuth connection identifier
            - `payload` HttpPayload, required: JSONPath supported in all fields. IMPORTANT: the base URL key is snake_case 'base_url' — a 'baseURL' key is silently ignored.
              - …
            - `options` NodeOptions: Execution options for function/flow/integration/http nodes
              - …
          - HttpNodeData: Plain HTTP request (no OAuth metadata). Same payload and behaviour as integration.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'http', required
            - `payload` HttpPayload, required: JSONPath supported in all fields. IMPORTANT: the base URL key is snake_case 'base_url' — a 'baseURL' key is silently ignored.
              - …
            - `options` NodeOptions: Execution options for function/flow/integration/http nodes
              - …
          - FlowNodeData: Invoke another published workflow as a sub-flow. subject is REQUIRED and must exist.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'flow', required
            - `subject` string, required: Sub-workflow subject: ms.hub.config.workflow.{collection}.{flow} (published form, no 'published' segment); must exist
            - `payload` unknown, required
            - `await` boolean: Wait for sub-flow completion
            - `response_map` unknown
            - `options` NodeOptions: Execution options for function/flow/integration/http nodes
              - …
          - EvalNodeData: Run a JavaScript expression over named params.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'eval', required
            - `payload` object, required
              - …
            - `options` NodeOptions: Execution options for function/flow/integration/http nodes
              - …
          - ConditionNodeData: Branching. Evaluates rules and activates the listed node ids; non-selected branches are skipped. Reserved targets: RESOLVE_SUCCESS (end flow ok), RESOLVE_ERROR (fail flow). Any other target must be an existing node id, and you should also add edges from this node to each then/else target.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'condition', required
            - `payload` object, required
              - …
          - RulesNodeData: Evaluate a rules object against facts/context; output is { <ruleKey>: outcome }.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'rules', required
            - `payload` object, required
              - …
          - MapNodeData: Reshape data: the payload template is JSONPath-resolved and becomes the node output.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'map', required
            - `payload` union, required: Object or array template; string values may be JSONPath references
              - …
            - `options` object
              - …
          - StaticNodeData: Merge literal values into $.static. LITERALS ONLY — JSONPath is not resolved in this payload.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'static', required
            - `payload` object, required
          - DelayNodeData: Pause the branch for time_ms milliseconds. The node type is 'delay' — 'wait' is NOT a valid type (the engine silently ignores it).
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'delay', required
            - `payload` object, required
              - …
          - ScheduleNodeData: Schedule another workflow run for later.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'schedule', required
            - `payload` object, required
              - …
          - InputNodeData: Pause the flow for human input: creates an escalation task (emailing assignees) and pauses. Resume via runWorkflow with the run_id and the human response as trigger — that response becomes this node's output.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'input', required
            - `payload` EscalationPayload, required
              - …
          - HumanInTheLoopNodeData: Alias of 'input': pause for human approval/input via an escalation task.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'human-in-the-loop', required
            - `payload` EscalationPayload, required
              - …
          - QuivaEndpointNodeData: Invoke a Quiva endpoint. subject is REQUIRED — discover via GET /hub/quiva-endpoints.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'quiva-endpoint', required
            - `subject` string, required
            - `payload` unknown, required
          - ErrorNodeData: Terminate the flow with an error status code and message.
            - `id` string, required
            - `name` string
            - `description` string
            - `node_type` 'error', required
            - `payload` object, required
              - …
        - `position` object: Optional visual editor position { x, y }
      - `edges` Edge[]
        - `id` string, required
        - `source` string, required: Source node id
        - `target` string, required: Target node id
      - `static` object: Static variables accessible via $.static
      - `result` string: JSONPath selecting the run's return value, e.g. '$.FINAL_NODE.result'. Without it the run returns the full step log array.
      - `options` object
        - `run_type` 'normal' | 'debounced' | 'ordered'
        - `order_on` string: JSONPath key for run_type=ordered
        - `debounce_on` string: JSONPath key for run_type=debounced
        - `debounce_time` integer: ms
        - `debounce_max` integer: ms
    - `modified` integer: Timestamp of last modification
  - `results_total` integer: Total number of results

## Other responses

- `400`: Bad request

## Changes

- **2026-11-12** `f80cd5f3ac1c`: 2 warning, 2 info
  - deleted the `path` request parameter `collection_topic`
  - deleted the `query` request parameter `filter`
  - added the new optional `query` request parameter `collection_topic`
  - added the new optional `query` request parameter `version`
- …earlier changes not shown

[Operation history](https://skmtc.dev/quivaworks/apis/quiva-ai-gateway-3/changes/hub/workflows/get.md)

---

[API](https://skmtc.dev/quivaworks/apis/quiva-ai-gateway-3.md) - [All operations](https://skmtc.dev/quivaworks/apis/quiva-ai-gateway-3/llms.txt) - [OpenAPI document](https://skmtc.dev/quivaworks/apis/quiva-ai-gateway-3/revisions/f80cd5f3ac1c?raw)
