---
title: "Retrieve workflow"
method: GET
path: "/api/v1/workflows/{name}"
tags: ["Workflows"]
---

# Retrieve workflow

`GET /api/v1/workflows/{name}`

Returns a single workflow definition and its dense settings snapshot.

## Path parameters

- `name` string, required

## Response `200`

Workflow details

- WorkflowDetailResponse — Workflow definition and dense settings snapshot.
  - `name` string, required
  - `slug` string, required
  - `description` string, required
  - `filename` string, required
  - `settings` WorkflowSettings, required — The persisted dense `WorkflowSettings` snapshot used for a specific run. This matches the resolved run settings recorded at launch time.
    - `project` ProjectNamespace, required
      - `name` string, nullable, required
      - `description` string, nullable, required
      - `metadata` StringMap, required
    - `workflow` WorkflowNamespace, required
      - `name` string, nullable, required
      - `description` string, nullable, required
      - `graph` string, required
      - `metadata` StringMap, required
    - `environments` object, required
    - `run` RunNamespace, required
      - `goal` union, required
        - RunGoalInline
          - `type` 'inline', required
          - `value` string, required — Config string that can contain typed interpolation tokens.
        - RunGoalFile
          - `type` 'file', required
          - `value` string, required — Config string that can contain typed interpolation tokens.
      - `working_dir` string, required — Config string that can contain typed interpolation tokens.
      - `metadata` StringMap, required
      - `inputs` object, required
      - `model` RunModelSettings, required
        - `provider` string, nullable, required
        - `name` string, nullable, required
        - `fallbacks` object, required — Ordered fallback targets keyed by the originally requested model. Each chain is independent; selecting a fallback target does not activate that target model's own chain.
        - `controls` RunModelControls — Run-level default values for typed model controls. Node and style attributes still win over these defaults.
          - `reasoning_effort` string, nullable, required
          - `speed` string, nullable, required
      - `git` RunGitSettings, required
        - `author` GitAuthorSettings, required
          - `name` string, nullable, required
          - `email` string, nullable, required
      - `prepare` RunPrepareSettings, required
        - `steps` PreparedStep[], required
          - union — A single resolved prepare step. The runnable part preserves the script-vs-argv distinction via the `type` discriminator: a `script` is a raw shell snippet kept verbatim, while a `command` is an argv whose elements are shell-quoted and joined at the run boundary (after `{{ secrets.* }}` resolution) so an interpolated value cannot inject shell syntax. Optional per-step `env` is shared by both shapes.
            - object
              - …
            - object
              - …
        - `timeout_ms` integer, required
      - `execution` RunExecutionSettings, required
        - `mode` 'normal' | 'dry_run', required
        - `approval` 'prompt' | 'auto', required
      - `checkpoint` RunCheckpointSettings, required
        - `exclude_globs` string[], required
        - `skip_git_hooks` boolean, required — When true, Fabro-managed run-branch checkpoint commits bypass local Git commit hooks. Does not affect Fabro `[[run.hooks]]` or metadata-branch snapshots. Defaults to false.
      - `clone` RunCloneSettings, required
        - `enabled` boolean, required
      - `run_branch` RunBranchSettings, required
        - `enabled` boolean, required
        - `push` boolean, required
      - `meta_branch` RunMetaBranchSettings, required
        - `enabled` boolean, required
        - `push` boolean, required
      - `environment` RunEnvironmentSettings, required
        - `id` string, required
        - `provider` 'local' | 'docker' | 'daytona', required — Desired environment provider.
        - `cwd` string, nullable — Local-provider command working directory for this environment. Docker and Daytona ignore this value.
        - `image` EnvironmentImageSettings, required
          - `docker` string, nullable, required
          - `dockerfile` union, required
            - DockerfileSourceInline
              - …
            - DockerfileSourcePath
              - …
        - `resources` EnvironmentResourcesSettings, required
          - `cpu` integer, nullable, required
          - `memory` string, nullable, required
          - `disk` string, nullable, required
        - `network` EnvironmentNetworkSettings, required
          - `mode` 'allow_all' | 'block' | 'cidr_allow_list', required
          - `allow` string[], required
        - `lifecycle` EnvironmentLifecycleSettings, required
          - `preserve` boolean, required
          - `stop_on_terminal` boolean, required
          - `auto_stop` string, nullable, required
        - `labels` StringMap, required
        - `env` object, required
      - `notifications` object, required
      - `interviews` RunInterviewsSettings, required
        - `provider` string, nullable, required
        - `slack` InterviewProviderSettings, required
          - `channel` string, nullable, required
      - `agent` RunAgentSettings, required
        - `fabro_tools` boolean, required
        - `mcps` object, required
      - `hooks` HookDefinition[], required
        - `name` string, nullable, required
        - `event` 'run_start' | 'run_complete' | 'run_failed' | 'stage_start' | 'stage_complete' | 'stage_failed' | 'stage_retrying' | 'edge_selected' | 'parallel_start' | 'parallel_complete' | 'sandbox_ready' | 'sandbox_cleanup' | 'checkpoint_saved' | 'pre_tool_use' | 'post_tool_use' | 'post_tool_use_failure', required
        - `command` string, nullable, required
        - `type` 'command' | 'http' | 'prompt' | 'agent' | 'null', nullable
        - `url` string, nullable
        - `headers` StringMap
        - `tls` 'verify' | 'no_verify' | 'off'
        - `prompt` string, nullable
        - `model` string, nullable
        - `max_tool_rounds` integer, nullable
        - `matcher` string, nullable, required
        - `blocking` boolean, nullable, required
        - `timeout_ms` integer, nullable, required
        - `sandbox` boolean, nullable, required
      - `scm` RunScmSettings, required
        - `provider` string, nullable, required
        - `owner` string, nullable, required
        - `repository` string, nullable, required
        - `github` ScmGitHubSettings, required
      - `pull_request` PullRequestSettings, required
        - `enabled` boolean, required
        - `draft` boolean, required
        - `auto_merge` boolean, required
        - `merge_strategy` 'merge' | 'squash' | 'rebase', required — GitHub merge method for a pull request.
      - `artifacts` ArtifactsSettings, required
        - `include` string[], required
      - `integrations` RunIntegrationsSettings, required
        - `github` RunIntegrationsGithubSettings, required
          - `permissions` object, required
  - `graph` string, required

## Other responses

- `404` — Workflow not found
- `501` — Workflow cataloging is not implemented in real mode

---

[API](https://skmtc.net/fabro-sh/apis/fabro-run-api.md) · [All operations](https://skmtc.net/fabro-sh/apis/fabro-run-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/fabro-sh/fabro-run-api/revisions/bee030053823/schema)
