---
title: "/review-cycles/:reviewCycleId/reviews/:id"
method: GET
path: "/review-cycles/{reviewCycleId}/reviews/{id}"
---

# /review-cycles/:reviewCycleId/reviews/:id

`GET /review-cycles/{reviewCycleId}/reviews/{id}`

## Request

- Base URL: `https://subdomain.workable.com/spi/v3`
- URL: `https://subdomain.workable.com/spi/v3/review-cycles/{reviewCycleId}/reviews/{id}`
- Auth: API key in header `Authorization`

Returns a single review with its questionnaire and the answers saved so far. Required scope: `r_reviews`. Requires a user token, or an account token with the reviewer's `member_id` (an account token without `member_id` gets `403`).

Only the review's reviewer may call this endpoint. Reviews in archived or deleted cycles return `404`.

## Path parameters

- `reviewCycleId` string, required
- `id` string, required

## Query parameters

- `member_id` string

## Response `200`

200

- object
  - `review` object
    - `id` string: Review SPI key
    - `type` 'self' | 'manager' | 'peer' | 'upwards': Review type
    - `status` 'ready' | 'draft': Form status: `ready` once the review's form has been finalized, otherwise `draft`
    - `master_template_id` string, nullable: Id of the master template configured for this review type in the cycle
    - `follower_template_id` string, nullable: Id of the follower (customized) template for this review, or `null` if the form has not been customized
    - `update_form_url` string: Relative URL of the form endpoint for this review (GET to read, PUT to customize)
    - `state` 'not_started' | 'draft' | 'submitted': Answering state of the review
    - `submit_deadline` string, date-time, nullable: Deadline for submitting the review
    - `share_deadline` string, date-time, nullable: Deadline for sharing the review
    - `write_url` string, nullable: Relative URL to submit answers. Present only when the caller is the reviewer and the review is not yet submitted; otherwise `null`
  - `questionnaire` object: The review's questionnaire (sections and questions) merged with any saved answers
    - `template_id` string, nullable: Id of the template the questionnaire was built from
    - `overall_rating` number, nullable: Overall rating, when one has been saved
    - `sections` object[]
      - `id` string: Section id
      - `name` string: Section title (may contain HTML)
      - `rating` number, nullable: Section rating, when one has been saved
      - `position` integer: Section position
      - `questions` object[]
        - `id` string: Question id (UUID)
        - `body` string: Question text (may contain HTML)
        - `position` integer: Position of the question within its section
        - `section_id` string: Id of the section the question belongs to
        - `type` 'paragraph' | 'paragraph_star_rated' | 'paragraph_numeric_rated' | 'paragraph_custom_rated' | 'single_choice' | 'multiple_choice' | 'star_rated' | 'numeric_rated' | 'custom_rated': Question type in snake_case
        - `answer` string, nullable: Free-text answer, when one has been saved
        - `rating` number, nullable: Rating, when one has been saved
        - `choices` string[]: Selected choices. For choice questions with answer options, the choice keys are replaced by their labels; for rating questions this is the selected rating value
        - `metadata` object: Optional question metadata
          - `mandatory` boolean: Whether an answer is required
          - `semantic_type` 'section_rating' | 'overall_rating': Semantic role of the question
          - `rating_options` object: Map of rating value to label
          - `answer_options` object
            - `choices` object: Map of choice key to label
          - `has_conditional_navigation` boolean
          - `navigation_config` object

## Other responses

- `400`: Validation error: an object keyed by the invalid parameter, each entry holding the Joi error `code` and `message`
- `401`: Missing token (plain-text body)
- `403`: Plain-text body: `Required scopes missing: ["r_reviews"]`, `Account tokens need a member_id for this operation` for an account token without `member_id`, or `Forbidden` when the member is not allowed to access the resource
- `404`: 404

## Changes

- **2026-11-03** `13ad2e8e2ee9`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/workable/apis/account-root/changes/review-cycles/:reviewCycleId/reviews/:id/get.md)

---

[API](https://skmtc.dev/workable/apis/account-root.md) - [All operations](https://skmtc.dev/workable/apis/account-root/llms.txt) - [OpenAPI document](https://skmtc.dev/workable/apis/account-root/revisions/13ad2e8e2ee9?raw)
