---
title: "Get the workflow summary"
method: GET
path: "/api/policy_version/workflow_summary"
tags: ["Policy Versions"]
---

# Get the workflow summary

`GET /api/policy_version/workflow_summary`

## Request

- Base URL: `https://app.herondata.io`
- URL: `https://app.herondata.io/api/policy_version/workflow_summary`
- Auth: API key in header `x-api-key`

Return the default workflow's latest published version laid out as the tree customers read: the parsers and enrichers that produce data and the active policy version's sections, with forks named by what decides them. Sections no workflow node evaluates are listed separately.

## Query parameters

- `user_id` integer

## Response `200`

OK

- PolicyWorkflowSummarySchema
  - `nodes` PolicyWorkflowTreeNode[], required: The workflow as customers read it, from the trigger down. Failure handles are left out.
    - `arms` PolicyWorkflowTreeArm[], required: For a fork
      - `nodes` PolicyWorkflowTreeNode[], required
      - `reasons` PolicyWorkflowBranchReason[], required: Why a run takes this arm, in the order it decides; empty when nothing customers see decides it
        - `kind` 'outcomes' | 'answer', required: outcomes: the policy outcomes taken; answer: what the branch means, as its node names it
        - `outcomes` string[], required: For outcomes, the policy handles taken
        - `text` string, required: The reason as one sentence, e.g. Fraud checks passed
    - `kind` 'step' | 'fork' | 'goto' | 'group', required: step: one step; fork: arms a run picks one of, laid out side by side when parallel; goto: the run continues at a step drawn earlier; group: data steps that feed the same section, placed before it
    - `parallel` boolean, required: For a fork, whether its arms are laid out side by side: steps that run together, or the routes of a decision customers don't see. False when a run takes one named arm
    - `question` string, nullable, required: For a fork, the question its arms answer, e.g. Required files present?; each arm's answer reason is then a short answer such as Yes
    - `rejoins` boolean, required: For a fork, whether its arms meet again; when not, each arm ends the run
    - `step` PolicyWorkflowSummaryStep, required
      - `id` string, required: Opaque id, unique within this response; a goto names the step it points back to by it
      - `kind` 'parser' | 'enricher' | 'data' | 'policy_section', required
      - `label` string, required
      - `section_heron_id` string, nullable: Match sections on this, never on the label
      - `section_name` string, nullable
    - `steps` PolicyWorkflowSummaryStep[], required: For a group, in no particular order
      - `id` string, required: Opaque id, unique within this response; a goto names the step it points back to by it
      - `kind` 'parser' | 'enricher' | 'data' | 'policy_section', required
      - `label` string, required
      - `section_heron_id` string, nullable: Match sections on this, never on the label
      - `section_name` string, nullable
  - `sections_not_in_workflow` PolicyWorkflowSummarySectionNotInWorkflow[], required: Active policy version sections no workflow node evaluates, in policy order
    - `section_heron_id` string, nullable, required
    - `section_name` string, required
  - `workflow_readable` boolean, required: False when the default workflow has no published version or cannot be read; nodes are then empty and every section is listed as not in the workflow

## Other responses

- `404`: Not found

## Changes

- **2026-11-03** `bd8008e49534`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/herondata/apis/heron-data-api/changes/api/policy_version/workflow_summary/get.md)

---

[API](https://skmtc.dev/herondata/apis/heron-data-api.md) - [All operations](https://skmtc.dev/herondata/apis/heron-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/herondata/apis/heron-data-api/revisions/36168f46a500?raw)
