---
title: "Updates scorecard candidate attributes"
method: PATCH
path: "/v3/scorecard_candidate_attributes/{id}"
tags: ["Scorecard Candidate Attributes"]
deprecated: true
---

# Updates scorecard candidate attributes

`PATCH /v3/scorecard_candidate_attributes/{id}`

## Request

- Base URL: `https://harvest.greenhouse.io`
- URL: `https://harvest.greenhouse.io/v3/scorecard_candidate_attributes/{id}`
- Auth: one of:
  - OAuth 2
    - Authorization code: `https://auth.greenhouse.io/authorize`
    - Client credentials
    - Token URL: `https://auth.greenhouse.io/token` scopes: `harvest:scorecard_candidate_attributes:update`
  - HTTP bearer

> **Deprecated.**

**Deprecated** — where available, prefer the nested `candidate_attributes` array on `PATCH /v3/scorecards/{id}`, which updates ratings by `job_candidate_attribute_id` with no row ids needed. This endpoint remains fully supported for existing integrations. Update an existing attribute rating in place. Only `candidate_attribute_rating` and `note` can be changed; the `scorecard_id` / `job_candidate_attribute_id` linkage is immutable and sending either is rejected as a disallowed property. The underlying scorecard must still be editable — submitted scorecards reject attribute-rating updates.

## Path parameters

- `id` integer, required

## Request body

- object
  - `candidate_attribute_rating` 'definitely_not' | 'no' | 'yes' | 'strong_yes' | 'mixed' | 'no_decision': New rating for this attribute. One of `definitely_not`, `no`, `yes`, `strong_yes`, `mixed`, or `no_decision`. The `scorecard_id` / `job_candidate_attribute_id` linkage is immutable — to move a rating to a different attribute, delete and recreate the row.
  - `note` string: New free-text note for this attribute. Replaces the previous note wholesale.

## Response `200`

Successful

- object
  - `id` integer
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `scorecard_id` integer: Id of the scorecard this attribute rating belongs to. One row per (scorecard, attribute) pair — the interviewer rated this candidate on this attribute on this scorecard.
  - `candidate_attribute_rating` string: Interviewer's rating for the attribute on this scorecard. One of `definitely_not`, `no`, `yes`, `strong_yes`, `mixed`, or `no_decision`. `no_decision` is recorded when the row exists (e.g. a `note` was left) but no rating was selected.
  - `job_candidate_attribute_id` integer: Id of the job's `job_candidate_attribute` being rated (the per-job attribute catalogue entry on `/v3/job_candidate_attributes`). The attribute's display name and `candidate_attribute_type` live on that record.
  - `note` string, nullable: Free-text note the interviewer left for this attribute (e.g. a brief justification for the rating). `null` when no note was provided.
  - `value` string: Read-only alias of `candidate_attribute_rating`, in the same vocabulary the nested write path accepts (`candidate_attributes[].value` on `POST`/`PATCH /v3/scorecards`). A rating cleared with `value: null` reads back as `no_decision`.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `422`: Unprocessable Content

---

[API](https://skmtc.dev/greenhouse/apis/harvest-api.md) - [All operations](https://skmtc.dev/greenhouse/apis/harvest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/greenhouse/apis/harvest-api/revisions/822822e3f771?raw)
