API Reference
API Reference

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

Returns a review with its questionnaire and saved answers, for the review's reviewer. Required scope: r_reviews.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
🚧

This endpoint uses the r_reviews scope, which must be enabled through the Integrations section found within the Settings menu.

Requires a user token, or an account token together with the member_id query parameter of the reviewer (the request is then evaluated as that member). An account token without member_id gets 403 Account tokens need a member_id for this operation.

Only the reviewer of the review (the member's employee record must be the assigned reviewer) can call this endpoint; anyone else receives 403, regardless of admin permissions. Review ids are discovered via the actions.view.url of the reviews in GET /review-cycles/:reviewCycleId/tasks.

The response has the same shape as GET /review-cycles/:reviewCycleId/tasks/:id/forms/:reviewType. While the review is not yet submitted, review.write_url points to PUT /review-cycles/:reviewCycleId/reviews/:id, which saves or submits the answers.

Results

{
  "review": {
    "id": "4d3",
    "type": "self",
    "status": "ready",
    "master_template_id": "1000",
    "follower_template_id": null,
    "update_form_url": "/spi/v3/review-cycles/4d3/tasks/4d3/forms/self",
    "state": "draft",
    "submit_deadline": "2024-11-30T00:00:00.000Z",
    "share_deadline": "2024-11-15T00:00:00.000Z",
    "write_url": "/spi/v3/review-cycles/4d3/reviews/4d3"
  },
  "questionnaire": {
    "template_id": "1",
    "overall_rating": 4,
    "sections": [
      {
        "id": "25012984-7b5b-57df-86ce-43d640f23648",
        "name": "<p>Job Performance</p>",
        "rating": 4,
        "questions": [
          {
            "id": "25012946-72fb-5069-8797-6b5ccc2912dd",
            "body": "<p>How do you feel you have performed in fulfilling the core responsibilities of your role?</p>",
            "position": 0,
            "section_id": "25012984-7b5b-57df-86ce-43d640f23648",
            "answer": "I delivered three major projects on time and improved our release process.",
            "type": "paragraph"
          },
          {
            "id": "2501297b-1920-5e4c-b21b-fc3caf56a162",
            "body": "<p>What are your main pillars of improvement?</p>",
            "position": 1,
            "section_id": "25012984-7b5b-57df-86ce-43d640f23648",
            "answer": null,
            "type": "multiple_choice",
            "metadata": {
              "mandatory": true,
              "answer_options": {
                "choices": {
                  "1": "Team building",
                  "2": "Technical skills",
                  "3": "Interpersonal skills"
                }
              }
            },
            "choices": [
              "Technical skills",
              "Interpersonal skills"
            ]
          },
          {
            "id": "2501297b-1920-5e4c-b21b-fc3caf56b295",
            "body": "<p>Section Rating</p>",
            "position": 2,
            "section_id": "25012984-7b5b-57df-86ce-43d640f23648",
            "answer": null,
            "type": "numeric_rated",
            "metadata": {
              "mandatory": true,
              "semantic_type": "section_rating",
              "rating_options": {}
            },
            "choices": [
              "4"
            ]
          }
        ]
      },
      {
        "id": "25012984-7b5b-57df-86ce-43d640f23610",
        "name": "<p>Overall rating</p>",
        "rating": null,
        "questions": [
          {
            "id": "2501297b-1920-5e4c-b21b-fc3caf56b335",
            "body": "<p>Overall rating</p>",
            "position": 0,
            "section_id": "25012984-7b5b-57df-86ce-43d640f23610",
            "answer": null,
            "type": "numeric_rated",
            "metadata": {
              "mandatory": true,
              "semantic_type": "overall_rating",
              "rating_options": {}
            },
            "choices": [
              "4"
            ]
          }
        ]
      }
    ]
  }
}
keytypedescription
reviewobjectThe review
review.idstringReview SPI key
review.typestringOne of: self, manager, peer, upwards
review.statusstringForm status: ready once the review's form has been finalized, otherwise draft
review.master_template_idstring | nullId of the master template configured for this review type in the cycle
review.follower_template_idstring | nullId of the customized (follower) template for this review; null if the form has not been customized
review.update_form_urlstringRelative URL of this review's form endpoint (GET to read, PUT to customize)
review.statestringAnswering state. One of: not_started, draft, submitted
review.submit_deadlinestring | nullISO 8601 deadline for submitting the review
review.share_deadlinestring | nullISO 8601 deadline for sharing the review
review.write_urlstring | nullRelative URL to submit answers. Set only when the caller is the reviewer and the review is not yet submitted
questionnaireobjectThe review's questionnaire, merged with any answers saved so far
questionnaire.template_idstring | nullId of the template the questionnaire was built from
questionnaire.overall_ratingnumber | nullOverall rating, when saved
questionnaire.sectionsarrayOrdered list of sections
questionnaire.sections[].idstringSection id
questionnaire.sections[].namestringSection title (may contain HTML)
questionnaire.sections[].ratingnumber | nullSection rating, when saved
questionnaire.sections[].questionsarrayOrdered list of questions
questionnaire.sections[].questions[].idstringQuestion id (UUID)
questionnaire.sections[].questions[].bodystringQuestion text (may contain HTML)
questionnaire.sections[].questions[].positionintegerPosition within the section
questionnaire.sections[].questions[].section_idstringId of the parent section
questionnaire.sections[].questions[].typestringQuestion type in snake_case. One of: paragraph, paragraph_star_rated, paragraph_numeric_rated, paragraph_custom_rated, single_choice, multiple_choice, star_rated, numeric_rated, custom_rated
questionnaire.sections[].questions[].answerstring | nullFree-text answer. Omitted when nothing has been saved for the question
questionnaire.sections[].questions[].choicesarraySelected choices. Choice keys are replaced by their labels when the question has answer_options; for rating questions this holds the selected rating value. Omitted when empty
questionnaire.sections[].questions[].metadataobjectOptional question metadata: mandatory (boolean), semantic_type (section_rating or overall_rating), rating_options (map of rating value to label), answer_options.choices (map of choice key to label)

Error responses

Error bodies come in three shapes. 400 validation errors are a JSON object keyed by the invalid parameter, e.g. {"limit": {"code": "number.max", "message": "\"limit\" must be less than or equal to 200"}}. 401 and 403 are plain-text bodies, e.g. Required scopes missing: ["r_reviews"], or Forbidden when the member lacks permission. 404 is JSON, e.g. {"message": "Review cycle not found"}.

StatusCondition
400reviewCycleId or id is not a valid SPI key
401Missing or invalid token
403Missing r_reviews scope, account token without member_id, or the member is not the reviewer of this review
404The review does not exist in the cycle, or the cycle is archived or deleted
Path Params
string
required

Review cycle SPI key (hexadecimal)

string
required

Review SPI key

Query Params
string

Required when using an account token: the member (SPI key, from GET /members) whose employee is the reviewer of the review. Without it the request gets 403. Ignored for user tokens.

Headers
string
enum
Defaults to application/json

Generated from available response content types

Allowed:
Responses

Language
Credentials
Header
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json
text/plain