---
title: "Create job owner"
method: POST
path: "/v3/job_owners"
tags: ["Job Owners"]
---

# Create job owner

`POST /v3/job_owners`

## Request

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

Add a user to a job's hiring team as a `recruiter`, `sourcer`, or `coordinator`. The user must already exist in your organization and have permission to edit the job. For `recruiter` and `coordinator`, pass `candidate_responsibility` to make this user the responsible owner for `active`, `inactive`, `future`, or `all` candidates on the job — omitting it leaves new applications without a responsible recruiter or coordinator. This is the V3 replacement for the V1 `POST /v1/jobs/{id}/hiring_team` flow for these three roles; hiring managers are assigned via `POST /v3/job_hiring_managers`. To remove a user from the hiring team, call `DELETE /v3/job_owners/{id}` with the row id returned here.

## Request body

- object
  - `job_id` integer, required: Id of the job to assign the user to. Must belong to your organization.
  - `user_id` integer, required: Id of the user to add to the hiring team. The user must already exist in your organization and have permission to edit the job.
  - `type` 'sourcer' | 'recruiter' | 'coordinator', required: Hiring-team role to assign. One of `sourcer`, `recruiter`, or `coordinator`. To assign a hiring manager instead, use `POST /v3/job_hiring_managers`.
  - `candidate_responsibility` 'active' | 'inactive' | 'future' | 'all': For `recruiter` and `coordinator` only, which existing and future candidates on the job this user becomes the responsible owner for: `active` (in-process), `inactive` (rejected and hired), `future` (new applications only), or `all`. Ignored for `sourcer`. If omitted for a recruiter or coordinator, no existing or future candidates are assigned to the user, which can leave new applications without a responsible recruiter — pass `all` to match the legacy V1 `POST /v1/jobs/{id}/hiring_team` behavior.

## Response `201`

Successful

- object
  - `id` integer
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `job_id` integer: Id of the job this hiring-team assignment belongs to. References a `/v3/jobs` row.
  - `user_id` integer: Id of the user assigned to the job in this role. References a `/v3/users` row. The same user can hold multiple roles on the same job; each role is a separate row.
  - `type` 'sourcer' | 'recruiter' | 'coordinator': Hiring-team role this user holds on the job. One of `sourcer`, `recruiter`, or `coordinator`. Hiring managers are exposed on the separate `/v3/job_hiring_managers` endpoint.
  - `responsible` boolean: If `true`, this user is the responsible recruiter or coordinator for the job — the default assignee for new applications created against this job. Always `false` for `sourcer` rows, which do not carry candidate responsibility.

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