---
title: "Create candidate employment"
method: POST
path: "/v3/candidate_employments"
tags: ["Candidate Employments"]
---

# Create candidate employment

`POST /v3/candidate_employments`

## Request

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

Add a new work history entry to a candidate's profile. `candidate_id`, `company_name`, `title`, and `start_date` are required; `company_name` and `title` are free-text strings (no custom-field option lookup is needed). Omit `end_date` to record the entry as the candidate's current job — Greenhouse will then recompute the `latest` flag across the candidate's employments, with the current job winning over any historical entries.

## Request body

- object
  - `candidate_id` integer, required: Id of the candidate (person) the employment entry belongs to.
  - `company_name` string, required: Free-text name of the employer.
  - `title` string, required: Free-text job title held at this employer.
  - `start_date` string, date, required: Start date of this employment, as an ISO 8601 date (`YYYY-MM-DD`). Only the month and year are surfaced on the candidate profile.
  - `end_date` string, date: End date of this employment, as an ISO 8601 date (`YYYY-MM-DD`). Omit when the candidate currently holds this job — Greenhouse treats an entry with no `end_date` as the candidate's current employment.

## Response `201`

Successful

- object
  - `id` integer
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `candidate_id` integer: Id of the candidate (person) this employment entry belongs to.
  - `company_name` string: Free-text name of the employer, as entered on the candidate's profile.
  - `title` string: Free-text job title held at this employer.
  - `start_date` string, date: Start date of this employment, as an ISO 8601 date. The Greenhouse UI displays only the month and year.
  - `end_date` string, date, nullable: End date of this employment, as an ISO 8601 date. `null` indicates the employment is current (ongoing). The Greenhouse UI displays only the month and year.
  - `latest` boolean, nullable: `true` when this is the candidate's most recent employment. Greenhouse maintains this flag automatically — the current job (`end_date: null`) wins, otherwise the entry with the latest `end_date` — and at most one employment per candidate has `latest: true`. Mirrors the `company` and `title` shown on the parent candidate record.

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