---
title: "Update note"
method: PATCH
path: "/v3/notes/{id}"
tags: ["Notes"]
---

# Update note

`PATCH /v3/notes/{id}`

## Request

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

Update a candidate note. Fields that are omitted are left unchanged, and the acting user must be a Site Admin or the note's author. The endpoint follows the Greenhouse UI: `body` and `visibility` can be edited on `NOTE`, `TOUCHPOINT` and `FEEDBACK` notes, `visibility` can only switch between `public` and `admin_only` on a `NOTE` that is not private, and any other change returns `422`. Greenhouse's own internal integrations can also edit other note types, `subject`, `user_id` and the email fields. Changing `body` clears `body_with_tags` and removes the note's `@`-mentions, since the API takes plain text; sending the current body changes nothing.

## Path parameters

- `id` integer, required

## Request body

- object
  - `body` string: New free-text body of the note. Replaces the stored body. The API takes plain text, so a changed body also drops the `@`-mentions in `body_with_tags`, and users who could only see the note because they were mentioned lose access to it. Sending the current body changes nothing.
  - `visibility` 'admin_only' | 'private' | 'public': New visibility. Matches the Greenhouse UI: only a `NOTE` that is not private can change visibility, and only between `public` and `admin_only`. Greenhouse internal integrations can set any value, where `private` requires the "see private notes" permission on the candidate.
  - `subject` string: New subject line. Greenhouse internal integrations only; other callers receive `422`.
  - `user_id` integer: Id of the Greenhouse user to record as the note's author. Must belong to the organization; deactivated users are accepted. Greenhouse internal integrations only; other callers receive `422`.
  - `email_from` string[]: `From` addresses of the logged email. Only allowed on an `EMAIL` note, and only for Greenhouse internal integrations.
  - `email_to` string[]: `To` addresses of the logged email. Only allowed on an `EMAIL` note, and only for Greenhouse internal integrations.
  - `email_cc` string[]: `Cc` addresses of the logged email. Only allowed on an `EMAIL` note, and only for Greenhouse internal integrations.

## Response `200`

Successful

- object
  - `id` integer
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `candidate_id` integer, nullable: Id of the candidate this note is attached to. Notes are always anchored to a candidate; `application_id` is an optional second anchor for application-scoped notes.
  - `application_id` integer, nullable: Id of the application this note is attached to, when the note was authored against a specific application (for example a stage transition or a feedback note). `null` for candidate-level notes that are not tied to any single application.
  - `body` string, nullable: Free-text body of the note. `@`-mentions are rendered as plain user names; use `body_with_tags` for the version that preserves mention markup. Newline characters are stored verbatim and rendered as line breaks in the Greenhouse UI.
  - `subject` string, nullable: Subject line on the note. Always populated for `EMAIL` notes; usually `null` for other types.
  - `type` 'NOTE' | 'ACTIVITY' | 'INTERVIEW' | 'EMAIL' | 'FOLLOW_UP' | 'TAKE_HOME_TEST' | 'LINKEDIN_NOTE' | 'LINKEDIN_INMAIL' | 'AVAILABILITY_REQUEST' | 'MIGRATION_ERROR' | 'TOUCHPOINT' | 'FORM' | 'FEEDBACK': Note classification. `NOTE` and `EMAIL` are user-authored candidate notes and logged emails; `ACTIVITY` covers system-generated activity feed entries plus partner-logged activities. Other values (`INTERVIEW`, `FEEDBACK`, `TOUCHPOINT`, `FOLLOW_UP`, `TAKE_HOME_TEST`, `LINKEDIN_NOTE`, `LINKEDIN_INMAIL`, `AVAILABILITY_REQUEST`, `FORM`, `MIGRATION_ERROR`) identify notes produced by specific Greenhouse features. They cannot be created through this API, and only Greenhouse internal integrations can edit them.
  - `user_id` integer, nullable: Id of the Greenhouse user who authored the note. `null` for notes generated by the system rather than a specific user.
  - `email_from` string, nullable: Comma-separated list of `From` addresses on the logged email. Only populated when `type` is `EMAIL`.
  - `email_to` string, nullable: Comma-separated list of `To` addresses on the logged email. Only populated when `type` is `EMAIL`.
  - `email_cc` string[], nullable: `Cc` addresses on the logged email, one entry per recipient. Only populated when `type` is `EMAIL`.
  - `import_hash` string, nullable: Stable de-duplication key set when the note was created by a bulk import or migration. `null` for notes authored through the UI or Harvest. Use it to detect re-runs of the same import.
  - `body_with_tags` string, nullable: `body` with `@`-mentions rendered as embedded user tags (e.g. `@[User Name](user:123)`) instead of plain user names, for partners that need to resolve mentioned users.
  - `visibility` 'admin_only_visible' | 'privately_visible' | 'publicly_visible' | 'null', nullable: Who can see this note. `publicly_visible` is visible to anyone with access to the candidate, `privately_visible` is restricted to users with the "see private notes" permission, and `admin_only_visible` is restricted to Job Admins and Site Admins. Defaults to `admin_only_visible` on create.
  - `email_attachment_file_names` string[], nullable: File names of attachments on the logged email, one entry per attachment, when the source captured them. Only populated when `type` is `EMAIL`.

## 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)
