---
title: "Get a review"
method: GET
path: "/api/v1/reviews/{id}"
tags: ["Reviews"]
---

# Get a review

`GET /api/v1/reviews/{id}`

## Request

- Base URL: `https://api.gatewerk.com`
- URL: `https://api.gatewerk.com/api/v1/reviews/{id}`
- Auth: HTTP bearer

## Response `200`

Review (with embedded template for rendering).

- Review
  - `object` 'review', required
  - `id` string, required
  - `project_id` string, required
  - `template_id` string, nullable
  - `template_slug` string, required
  - `payload` JsonObject, required: Free-form JSON object.
  - `suggested_value` JsonObject: Free-form JSON object.
  - `approved_value` JsonObject: Free-form JSON object.
  - `edited_payload` JsonObject: Free-form JSON object.
  - `callback_url` string, nullable
  - `priority` 'low' | 'normal' | 'high' | 'critical', required
  - `actions` unknown[]
    - unknown
  - `status` 'pending' | 'awaiting_iteration' | 'decided' | 'expired' | 'archived', required: Canonical review status. Wire-format output is always one of these five values. Query-param status filter additionally accepts the legacy 'changes_requested' alias as a deprecated input for one minor version per spec §11.3 — removed in v2.0.
  - `decision` 'approved' | 'rejected' | 'edited' | 'retried' | 'expired'
  - `feedback` string, nullable
  - `decided_by` string, nullable
  - `decided_by_verified` boolean, nullable: Whether decided_by names a confirmed identity. False only for a decision made through a PUBLIC review link, where the decider is the recipient_label the sharer typed and nothing verified it. Null for reviews decided before this field existed: render no claim rather than assuming unverified.
  - `decided_at` string, date-time, nullable
  - `current_version` integer, required
  - `assignee` string, nullable
  - `metadata` JsonObject: Free-form JSON object.
  - `action_value` string, nullable
  - `action_label` string, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `template` object: Embedded snapshot of the template used at creation time.
    - `name` string
    - `fields` TemplateField[]
      - `name` string, required
      - `label` string, required
      - `type` 'text' | 'markdown' | 'json' | 'image' | 'video' | 'number' | 'boolean' | 'select' | 'buttons' | 'date' | 'url', required
      - `editable` boolean
      - `options` string[]: Required when `type` is `select` or `buttons`.
    - `actions` unknown[]
      - unknown
    - `auto_approve` boolean, nullable
    - `instructions` string, nullable
    - `enable_review_links` boolean: Per-template toggle gating the Inbox kebab `Generate token link` affordance.
  - `template_fields` TemplateField[], nullable: Normalized field schema captured at review creation. Frozen — template re-publish or deletion does not affect this value. Null for reviews created before migration 073.
    - `name` string, required
    - `label` string, required
    - `type` 'text' | 'markdown' | 'json' | 'image' | 'video' | 'number' | 'boolean' | 'select' | 'buttons' | 'date' | 'url', required
    - `editable` boolean
    - `options` string[]: Required when `type` is `select` or `buttons`.
  - `active_token` object, nullable: Latest live (un-used, un-revoked, un-expired) review_tokens row, projected read-only on review.get and review.list. Null when no live token exists. Absent on mutation responses (create/decide/ retry/etc.) which don't run the projection.
    - `id` string, required
    - `recipient_label` string, required
    - `auth_level` string, required
    - `created_at` string, date-time, required
    - `expires_at` string, date-time, required
    - `opened_at` string, date-time, nullable

## Other responses

- `401`: 401. Missing or invalid API key.
- `404`: 404. Resource not found.

---

[API](https://skmtc.dev/gatewerk/apis/gatewerk-api.md) · [All operations](https://skmtc.dev/gatewerk/apis/gatewerk-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gatewerk/apis/gatewerk-api/revisions/dc634ad16f5c?raw)
