---
title: "Read a workflow preview"
method: GET
path: "/v1/farm/{farm_id}/workflows/previews/{preview_id}"
tags: ["workflows"]
---

# Read a workflow preview

`GET /v1/farm/{farm_id}/workflows/previews/{preview_id}`

## Request

- Base URL: `https://api.ranch.bot`
- URL: `https://api.ranch.bot/v1/farm/{farm_id}/workflows/previews/{preview_id}`
- Auth: HTTP bearer

External credential scope: read:records. Minimum farm role: EDITOR. Returns the pinned review and, when committed, the saved outcome. Committed receipts survive preview expiry and template archival.

## Path parameters

- `farm_id` string, uuid, required
- `preview_id` string, uuid, required

## Response `200`

Success

- WorkflowPreview
  - `preview_id` string, uuid, required
  - `template_id` string, uuid, required
  - `template_version` integer, required
  - `resolved_values` object
  - `default_sources` object
  - `proposed_changes` object
    - `template_version` integer
    - `bundle` object: The exact normalized birth snapshot (schema defaults included) that commit saves verbatim. It is frozen at preview and never rebuilt from current template definitions.
  - `review` object, nullable: The stored, authorized review snapshot: dam identity/metadata, dam history, resolved group names, identifier warnings, unresolved facts, and remaining birth-review fields. Null when preparation produced no review. Duplicate identifiers are advisory warnings here, never blocking errors or merges.
  - `validation_issues` object[]
    - `path` string, required
    - `code` string, required
    - `severity` 'error' | 'warning', required
    - `message` string, required
  - `preview_hash` string, required
  - `expires_at` string, date-time
  - `status` 'pending' | 'invalid' | 'replaced' | 'committed' | 'discarded', required
  - `committed_at` string, date-time
  - `saved_entity_ids` object
  - `outcome` object

## Other responses

- `400`: Request validation failed.
- `401`: Missing/invalid authentication or insufficient farm role.
- `403`: Missing required scope or credential type is disallowed.
- `404`: Resource or active farm membership not found.
- `409`: Concurrent change, archived template, expired preview, or conflicting approval.

---

[API](https://skmtc.dev/ranch/apis/ranch-bot-http-api.md) · [All operations](https://skmtc.dev/ranch/apis/ranch-bot-http-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ranch/apis/ranch-bot-http-api/revisions/24109d33fa02?raw)
