---
title: "/review-cycles/:reviewCycleId/employees/:employeeId"
method: GET
path: "/review-cycles/{reviewCycleId}/employees/{employeeId}"
---

# /review-cycles/:reviewCycleId/employees/:employeeId

`GET /review-cycles/{reviewCycleId}/employees/{employeeId}`

## Request

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

Returns an employee's review task (aggregate) in a cycle, including every review the caller may see, each with its questionnaire and saved answers. Required scope: `r_reviews`. Requires a user token, or an account token with `member_id` (the request is then evaluated with that member's permissions); an account token without `member_id` gets `403`. The caller must be able to view review cycles: either the `View review cycles` permission (global or scoped), or `View employee directory` in an account with performance reviews enabled.

The caller must participate in the employee's review (reviewee, manager, someone in the reporting line, reviewer, or scoped/global review admin); otherwise `404`. Callers who are only peer or upward reviewers see just their own review.

## Path parameters

- `reviewCycleId` string, required
- `employeeId` string, required

## Query parameters

- `member_id` string

## Response `200`

200

- object
  - `id` string: Review task (aggregate) SPI key
  - `status` 'ready' | 'draft' | 'not_ready': Form preparation status of the task
  - `state` 'not_started' | 'in_progress' | 'shared' | 'signed': Overall state of the task
  - `review_cycle` object
    - `id` string: Review cycle SPI key
    - `name` string
    - `state` 'draft' | 'scheduled' | 'in_preparation' | 'active' | 'ended'
    - `customization_start_date` string, date-time, nullable
    - `customization_end_date` string, date-time, nullable
  - `reviewee` object
    - `id` string: Employee SPI key
    - `name` string: Employee name, formatted as `Lastname, Firstname`
  - `manager` object, nullable: Reviewing manager, or `null`
    - `id` string: Employee SPI key
    - `name` string: Employee name, formatted as `Lastname, Firstname`
  - `reviews` object[]: Reviews of the aggregate visible to the caller
    - `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
              - …
            - `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/employees/:employeeId/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)
