---
title: "Get a workflow"
method: GET
path: "/v1/workflows/{workflowId}"
tags: ["Workflows"]
---

# Get a workflow

`GET /v1/workflows/{workflowId}`

Retrieve a workflow graph with node type names, connections, and selected display fields.

## Response `200`

Successful.

- SimplifiedWorkflow
  - `id` string, required — The ID of the workflow.
  - `url` string, uri, required — The URL of the workflow in the Loops app.
  - `workflowRevisionId` string, nullable, required — The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation. Will be `null` for workflows without a revision token yet.
  - `status` 'Draft' | 'Sending' | 'Paused' | 'PausedAndQueueing', required
  - `name` string — The name of the workflow.
  - `description` string — The description of the workflow.
  - `mailingListId` string, nullable, required — The ID of the mailing list the workflow sends to.
  - `rootNodeId` string, required — The ID of the root node in the workflow graph.
  - `nodes` object, required — A map of node IDs to simplified node objects. Each node includes `typeName` and `nextNodeIds`, plus type-specific fields when present. To get the full node object, use the `GET /v1/workflows/{workflowId}/nodes/{nodeId}` endpoint.

## Other responses

- `400` — Invalid `workflowId`.
- `401` — Invalid API key.
- `404` — Workflow not found.
- `405` — Wrong HTTP request method.

## Changes

> 9 revisions in range; 1 not diffed, 2 could not be searched.

- **2026-07-21** `df77516a130a` — 21 info
  - removed `SignupTrigger, EventTrigger, ContactPropertyTrigger, AddToListTrigger, BlankTrigger, AudienceFilter, TimerAction, SendEmailAction, ExitAction, BranchNode, ExperimentBranchNode, VariantNode` discriminator mapping keys from the `nodes/additionalProperties/` response property for the response status `200`
  - removed the `accepted_opt_in` enum value from the `nodes/additionalProperties/oneOf[#/components/schemas/SimplifiedContactPropertyTriggerWorkflowNode]/contactPropertyQuery/oneOf[#/components/schemas/WorkflowContactPropertyQuery]/is/operator` response property for the response status `200`
  - removed the `accepted_opt_in` enum value from the `nodes/additionalProperties/oneOf[#/components/schemas/SimplifiedContactPropertyTriggerWorkflowNode]/contactPropertyQuery/oneOf[#/components/schemas/WorkflowContactPropertyQuery]/was/operator` response property for the response status `200`
  - removed the `any_loop_email` enum value from the `nodes/additionalProperties/oneOf[#/components/schemas/SimplifiedContactPropertyTriggerWorkflowNode]/contactPropertyQuery/oneOf[#/components/schemas/WorkflowContactPropertyQuery]/is/operator` response property for the response status `200`
  - …17 more

[Change history](https://skmtc.dev/loops/apis/loops-openapi-spec/changes/v1/workflows/:workflowId/get.md)

---

[API](https://skmtc.dev/loops/apis/loops-openapi-spec.md) · [All operations](https://skmtc.dev/loops/apis/loops-openapi-spec/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/loops/loops-openapi-spec/revisions/8bd0098300ec/schema)
