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

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

`PUT /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`

Saves (as draft) or submits the caller's answers to a review. Required scope: `w_reviews`. Requires a user token, or an account token with `member_id`, whose employee is the reviewer of the review (an account token without `member_id` gets `403`).

The review cycle must be `active` and the review must not already be submitted. Only the questions listed in `answers` are changed; other answers are kept. With `action: submit` all mandatory questions must be answered and, when rating is enabled for the review type, an overall rating must be present.

## Path parameters

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

## Query parameters

- `member_id` string

## Request body

- object
  - `action` 'save' | 'submit', required: `save` stores the answers as a draft; `submit` stores them and submits the review
  - `rating` integer, nullable: Overall rating of the review. When omitted, the choice of the overall rating question is used.
  - `answers` object[], required: Answers to apply. May be empty.
    - `question_id` string, uuid, required: Id of a question of the review's questionnaire
    - `answer` string, nullable: Free text answer. HTML tags are stripped. `null` or `""` clears it.
    - `choices` string[]: Selected choice keys / rating values (e.g. `["4"]`) for rated and choice questions

## Response `200`

200

- object
  - `review` object
    - `id` string: Review id
    - `type` 'self' | 'manager' | 'peer' | 'upwards'
    - `status` 'draft' | 'ready': Preparation status of the review form
    - `master_template_id` string, nullable: Master template configured on the cycle for this review type
    - `follower_template_id` string, nullable: Per-employee customized (follower) template id, `null` when the master template is used
    - `update_form_url` string: Relative URL of the form endpoint for this review
    - `state` 'not_started' | 'draft' | 'submitted'
    - `submit_deadline` string, date-time, nullable
    - `share_deadline` string, date-time, nullable
    - `write_url` string, nullable: Relative URL to submit answers; only set when the caller is the reviewer and the review is not yet submitted
  - `questionnaire` object
    - `template_id` string, nullable
    - `overall_rating` number, nullable
    - `sections` object[]
      - `id` string
      - `name` string
      - `rating` number, nullable
      - `questions` object[]
        - `id` string
        - `body` string
        - `position` integer
        - `section_id` string
        - `answer` string, nullable
        - `type` string
        - `metadata` object
        - `choices` string[]: Selected choices (labels when the question defines choice labels)

## Other responses

- `400`: 400
- `401`: 401
- `403`: 403
- `404`: 404
- `409`: 409

## Changes

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

[Operation history](https://skmtc.dev/workable/apis/account-root/changes/review-cycles/:reviewCycleId/reviews/:id/put.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)
