---
title: "Update job"
method: PATCH
path: "/v3/jobs/{id}"
tags: ["Jobs"]
---

# Update job

`PATCH /v3/jobs/{id}`

Patch an existing job's editable fields. Only the keys included in the request body are modified; omitted keys are left untouched. `office_ids` / `external_office_ids` and `custom_fields` replace their existing collections wholesale — send the full desired list, not a delta. Department and office can be set either by Greenhouse id or by partner `external_id`; the two forms are mutually exclusive. To open, close, or re-open a job, modify its openings through `/v3/openings` — the job's `status` and `opened_at`/`closed_at` follow automatically.

## Path parameters

- `id` integer, required

## Request body

- object
  - `name` string — Internal job title shown to the hiring team in Greenhouse.
  - `notes` string — Internal HTML notes about the job. Replaces the existing value when supplied.
  - `anywhere` boolean, nullable — If `true`, the job is marked as remote-anywhere and `office_ids` is cleared. Mutually exclusive with supplying `office_ids` or `external_office_ids`.
  - `requisition_id` string, nullable — Partner-supplied external identifier for the requisition. Pass `null` to clear the value.
  - `team_and_responsibilities` string — Internal description of the team and the role's responsibilities, shown to the hiring team in the Greenhouse UI.
  - `how_to_sell_this_job` string — Internal selling-points note used by recruiters when pitching the role, shown to the hiring team in the Greenhouse UI.
  - `office_ids` integer[], nullable — Replace the job's office assignments with these office ids. Send the full desired list, not a delta. Mutually exclusive with `external_office_ids` and with `anywhere: true`.
  - `external_office_ids` string[], nullable — Replace the job's office assignments by partner-supplied office `external_id` values. Each entry is resolved to a Greenhouse `office_id` in the caller's organization; unknown values are rejected. Mutually exclusive with `office_ids`.
  - `department_id` integer, nullable — Set the job's department by Greenhouse id. Pass `null` to clear. Mutually exclusive with `external_department_id`.
  - `external_department_id` string, nullable — Set the job's department by partner-supplied department `external_id`. Resolved to a Greenhouse `department_id` in the caller's organization; unknown values are rejected. Mutually exclusive with `department_id`.
  - `custom_fields` union[] — Values to set on this job's job custom fields. Replaces the existing collection wholesale — send the full desired list, not a delta. Each entry identifies the field by `custom_field_id` or `name_key` and supplies a `value` matching the field's `value_type`.
    - union
      - object
        - `name_key` string, required — Required if custom_field_id is not provided. Exactly one of name_key or custom_field_id must be specified.
        - `custom_field_id` integer — Required if name_key is not provided. Exactly one of name_key or custom_field_id must be specified.
        - `value` union
          - string
          - string
          - string
          - string
          - string
          - boolean
          - number — User ID
          - union
            - string[]
            - number[]
          - number
          - object
            - `amount` number, required
            - `currency_code` string, required
          - object
            - `min_amount` number, required
            - `max_amount` number, required
            - `currency_code` string, required
          - object
            - `min_value` number, required
            - `max_value` number, required
      - object
        - `name_key` string — Required if custom_field_id is not provided. Exactly one of name_key or custom_field_id must be specified.
        - `custom_field_id` integer, required — Required if name_key is not provided. Exactly one of name_key or custom_field_id must be specified.
        - `value` union
          - string
          - string
          - string
          - string
          - string
          - boolean
          - number — User ID
          - union
            - string[]
            - number[]
          - number
          - object
            - `amount` number, required
            - `currency_code` string, required
          - object
            - `min_amount` number, required
            - `max_amount` number, required
            - `currency_code` string, required
          - object
            - `min_value` number, required
            - `max_value` number, required

## Response `200`

Successful

- object
  - `id` integer
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `name` string — Internal job title shown to the hiring team in Greenhouse (e.g. `Senior Backend Engineer`). Distinct from the external-facing title on each `job_post`.
  - `requisition_id` string, nullable — Partner-supplied external identifier for the requisition (e.g. an HRIS or ATS code). Free-form string, not unique across the organization, and `null` when no external id has been set.
  - `notes` string, nullable — Internal HTML notes about the job, surfaced to the hiring team in the Greenhouse UI. Not exposed on public job posts.
  - `confidential` boolean — If `true`, the job is restricted to users explicitly granted access on the Hiring Team. The legacy Confidential Jobs feature has been sunset — this flag cannot be set on new jobs and is preserved for jobs that already had it enabled.
  - `status` 'open' | 'draft' | 'closed' — Lifecycle status of the job. `draft` while it is being scaffolded, `open` once it has at least one open opening, and `closed` after every opening is closed. A job moves to `closed` automatically when its last open opening is closed via `PATCH /v3/openings/{id}`.
  - `opened_at` string, date-time, nullable — Timestamp the job first transitioned to `open`, in ISO 8601. `null` while the job is still in `draft`.
  - `closed_at` string, date-time, nullable — Timestamp the job most recently transitioned to `closed`, in ISO 8601. `null` for jobs that are still `open` or `draft`.
  - `is_template` boolean, nullable — If `true`, this job is a template used as the source for new jobs rather than a real requisition. Templates do not accept applications; reference them via `template_job_id` on `POST /v3/jobs`.
  - `copied_from_id` integer, nullable — Id of the job (typically a template) this job was copied from on creation. `null` when the job was not created from another job.
  - `department_id` integer, nullable — Id of the department this job is assigned to. `null` when no department is set.
  - `office_ids` integer[], nullable — Ids of the offices this job is assigned to. A job can span multiple offices; empty array or `null` when no offices are set.
  - `custom_fields` object, nullable

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