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

# Get a workflow

`GET /workflows/{workflow_id}`

## Request

- Base URL: `https://api.indexone.io`
- URL: `https://api.indexone.io/workflows/{workflow_id}`
- Auth: API key in header `x-api-key` and API key in header `Authorization`

Returns one workflow's whole record — metadata, calendar settings, stage, and its `operations` DAG.

This is what you poll after `POST /workflows`: watch `stage` move from `pending` to `live`, or to `failed` with a `failure_reason`.

Added 2026-07-21. Before that this path took a *team* id and returned that team's whole list, while the same path under PATCH and DELETE took a workflow id — so there was no way to fetch a single workflow at all. The list moved to `GET /workflows?team_id=`.

## Path parameters

- `workflow_id` string, required

## Response `200`

The workflow.

## Other responses

- `403`: The workflow is not in one of your teams — or does not exist. Ownership is checked before existence, so an unknown id is indistinguishable from someone else's, which keeps ids non-enumerable.
- `404`: The workflow is referenced by your team but its row is missing — a data inconsistency, not a normal outcome. A plain unknown id returns 403.

---

[API](https://skmtc.dev/indexone/apis/index-one-rest-api.md) · [All operations](https://skmtc.dev/indexone/apis/index-one-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/indexone/apis/index-one-rest-api/revisions/df5a92216a9c?raw)
