---
title: "Create note"
method: POST
path: "/v3/notes"
tags: ["Notes"]
---

# Create note

`POST /v3/notes`

Create a candidate note, log an email, or record an activity-feed entry on a candidate. `note_type` selects which: `NOTE` posts to the Notes tab, `EMAIL` logs an email into the activity feed (and requires the `email_*` fields), and `ACTIVITY` writes a free-form activity-feed entry. Other note types (interview, feedback, touchpoint, LinkedIn, etc.) are produced by Greenhouse features and cannot be created through this endpoint. The note is always attached to `candidate_id`; pass `application_id` as well to anchor it to a specific application — that application must belong to the same candidate.

## Request body

- object
  - `candidate_id` integer — Id of the candidate the note is attached to. Required for every note. When `application_id` is also supplied, the application must belong to this candidate.
  - `body` unknown, required
  - `subject` unknown
  - `note_type` 'EMAIL' | 'ACTIVITY' | 'NOTE', required — Classification of the note being created. `NOTE` posts a candidate note in the Notes tab; `EMAIL` logs an email into the activity feed and requires the `email_*` fields; `ACTIVITY` logs a free-form entry into the activity feed. Other note types (interview, feedback, touchpoint, etc.) are produced by Greenhouse features and cannot be created through this endpoint.
  - `user_id` integer — Id of the Greenhouse user to record as the note's author. Defaults to the authenticated user when omitted.
  - `email_from` string[] — `From` addresses on the email being logged. Required when `note_type` is `EMAIL` and forbidden for other types.
  - `email_to` string[] — `To` addresses on the email being logged. Required when `note_type` is `EMAIL` and forbidden for other types.
  - `email_cc` string[] — `Cc` addresses on the email being logged. Required (may be an empty array) when `note_type` is `EMAIL` and forbidden for other types.
  - `visibility` 'admin_only' | 'private' | 'public', required — Who will be able to see this note. `public` is visible to anyone with access to the candidate, `private` requires the "see private notes" permission, and `admin_only` is restricted to Job Admins and Site Admins.
  - `application_id` integer — Id of the application to anchor this note to. The application must belong to `candidate_id`. Omit for candidate-level notes that are not tied to any single application.

## Response `201`

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 and are read-only via this API.
  - `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, 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/auth-api.md) · [All operations](https://skmtc.dev/greenhouse/apis/auth-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/greenhouse/auth-api/revisions/9517a2e54640/schema)
