WRITE Endpoint Migration Guide

This guide includes updated write endpoints, recommendations for custom integrations, and a clear mapping of v1/v2 resources to their v3 equivalents. It’s designed to help you transition endpoints smoothly and efficiently.

Each table in this article is organized alphabetically and maps specific resources to their v1/v2 routes, the corresponding v3 equivalent, and any additional comments or considerations for those endpoints.

It is recommended to read through the READ Endpoint Migration to gather all the aliasing changes which may impact some of the attributes in the Harvest v3 WRITE endpoints.

Recommendations for custom integrations

We encourage users of custom integrations to adopt the Client Credentials Flow to familiarize themselves with the new authentication process in Harvest V3.

Note: The Client Credentials Flow is not available for Greenhouse partners. Partners must use the Authorization Code Grant Type.

Applications

ApplicationsV1 - DELETE: Delete Applications
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/applications/{id}
V3 routeDELETE https://harvest.greenhouse.io/v3/applications/{id}
Comments

ApplicationsV1 - POST: Add Application to Candidate / Prospect
V1/V2 routePOST https://harvest.greenhouse.io/v1/candidates/{id}/applications
V3 routePOST https://harvest.greenhouse.io/v3/applications
Comments

ApplicationsV1 - PATCH: Update Application
V1/V2 routePATCH https://harvest.greenhouse.io/v1/applications/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/applications/{id}
PATCH https://harvest.greenhouse.io/v3/rejection_details/{id}
CommentsNotes: Rejection details in Harvest v3 are updated in their own resource.

ApplicationsV1 - POST: Advance Application
V1/V2 routePOST https://harvest.greenhouse.io/v1/applications/{id}/advance
V3 routePOST https://harvest.greenhouse.io/v3/applications/{id}/move
CommentsLeave to_stage_idand to_job_id blank if wanting to advance the application.

ApplicationsV1 - POST: Move Application (Different Job)
V1/V2 routePOST https://harvest.greenhouse.io/v1/applications/{id}/transfer_to_job
V3 routePOST https://harvest.greenhouse.io/v3/applications/{id}/move
CommentsAdd to_stage_id and to_job_id if wanting to move the application to a different job.

ApplicationsV1 - POST: Move Application (Same Job)
V1/V2 routePOST https://harvest.greenhouse.io/v1/applications/{id}/move
V3 routePOST https://harvest.greenhouse.io/v3/applications/{id}/move
CommentsAdd to_stage_id if wanting to move the application to a different stage within the same job.

ApplicationsV1 - PATCH: Convert Prospect To Candidate
V1/V2 routePATCH https://harvest.greenhouse.io/v1/applications/{id}/convert_prospect
V3 routePOST https://harvest.greenhouse.io/v3/applications/{id}/convert_to_candidate
CommentsIf the to_job_interview_stage_id is omitted, we will defer to the initial stage.

ApplicationsV1 - POST: Add Attachment to Application
V1/V2 routePOST https://harvest.greenhouse.io/v1/applications/{id}/attachments
V3 routePOST https://harvest.greenhouse.io/v3/attachments
Comments

ApplicationsV1 - POST: Hire Application
V1/V2 routePOST https://harvest.greenhouse.io/v1/applications/{id}/hire
V3 routePOST https://harvest.greenhouse.io/v3/applications/{id}/hire
Comments


ApplicationsV1 - PATCH: Update Rejection Reason
V1/V2 routePATCH https://harvest.greenhouse.io/v1/applications/{id}/reject
V3 routePATCH https://harvest.greenhouse.io/v3/rejection_details/{id}
Comments

ApplicationsV1 - POST: Unreject Application
V1/V2 routePOST https://harvest.greenhouse.io/v1/applications/{id}/unreject
V3 routePOST https://harvest.greenhouse.io/v3/applications/{id}/unreject
Comments

Approvals



ApprovalsV1 - PUT: Create or replace an approval flow
V1/V2 routePUT https://harvest.greenhouse.io/v1/jobs/{job_id}/approval_flows
V3 routePOST https://harvest.greenhouse.io/v3/approval_flows
Comments

Candidates

CandidatesV1 - DELETE: Delete Candidate
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/candidates/{id}
V3 routeDELETE https://harvest.greenhouse.io/v3/candidates/{id}
Comments

CandidatesV1 - PATCH: Edit Candidate
V1/V2 routePATCH https://harvest.greenhouse.io/v1/candidates/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/candidates/{id}
CommentsRecruiter and Coordinator information has been removed from the Candidate object and is now on the Application object.

CandidatesV1 - POST: Add Attachment
V1/V2 routePOST https://harvest.greenhouse.io/v1/candidates/{id}/attachments
V3 routePOST https://harvest.greenhouse.io/v3/attachments
CommentsAttachments should be attached to applications, instead of candidates, which can be done through the new endpoint.

CandidatesV1 - POST: Add Candidate
V1/V2 routePOST https://harvest.greenhouse.io/v1/candidates
V3 routePOST https://harvest.greenhouse.io/v3/candidates
CommentsThe v3 endpoint is also used to create Prospects which is done in the nested application object.

CandidatesV1 - POST: Add Note
V1/V2 routePOST https://harvest.greenhouse.io/v1/candidates/{id}/activity_feed/notes
V3 routePOST https://harvest.greenhouse.io/v3/notes
CommentsThe v3 endpoint has merged both Add Note and Add E-mail Note into the same endpoint and differentiates the two with the note_type attribute.

CandidatesV1 - POST: Add E-mail Note
V1/V2 routePOST https://harvest.greenhouse.io/v1/candidates/{id}/activity_feed/emails
V3 routePOST https://harvest.greenhouse.io/v3/notes
CommentsThe v3 endpoint has merged both Add Note and Add E-mail Note into the same endpoint and differentiates the two with the note_type attribute.

CandidatesV1 - POST: Add Education
V1/V2 routePOST https://harvest.greenhouse.io/v1/candidates/{id}/educations
V3 routePOST https://harvest.greenhouse.io/v3/candidate_educations
CommentsCandidate education is created and deleted in its own endpoint in Harvest v3. The custom_field_option_id is now retrieved from candidate custom fields, as opposed to their own endpoints.

CandidatesV1 - DELETE: Remove Education From Candidate
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/candidates/{candidate_id}/educations/{education_id}
V3 routeDELETE https://harvest.greenhouse.io/v3/candidate_educations/{id}
Comments



CandidatesV1 - POST: Add Prospect
V1/V2 routePOST https://harvest.greenhouse.io/v1/prospect
V3 routePOST https://harvest.greenhouse.io/v3/candidates
CommentsThe v3 endpoint is also used to create Candidates which is done in the nested application object.


CandidatesV1 - PUT: Merge Candidates
V1/V2 routePUT https://harvest.greenhouse.io/v1/candidates/merge
V3 routePOST https://harvest.greenhouse.io/v3/candidates/{id}/merge
Comments

Custom Fields

Custom FieldsV1 - POST: Create Custom Field
V1/V2 routePOST https://harvest.greenhouse.io/v1/custom_fields
V3 routePOST https://harvest.greenhouse.io/v3/custom_fields
POST https://harvest.greenhouse.io/v3/custom_field_departments
POST https://harvest.greenhouse.io/v3/custom_field_offices
CommentsHarvest v3 has separated departments and offices from custom fields.

Custom FieldsV1 - PATCH: Update Custom Field
V1/V2 routePATCH https://harvest.greenhouse.io/v1/custom_fields/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/custom_fields/{id}
CommentsThe v1 endpoint for Update Custom Field had limited body parameters accessible. In v3, you can modify additional fields.

Custom FieldsV1 - DELETE: Delete Custom Field
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/custom_fields/{id}
V3 routeDELETE https://harvest.greenhouse.io/v3/custom_fields/{id}
Comments

Custom FieldsV1 - POST: Create Custom Field Options
V1/V2 routePOST https://harvest.greenhouse.io/v1/custom_field/{id}/custom_field_options
V3 routePOST https://harvest.greenhouse.io/v3/custom_field_options
CommentsThis endpoint creates custom field options individually. There is a separate bulk endpoint to handle asynchronous bulk creation.

Custom FieldsV1 - PATCH: Update Custom Field Options
V1/V2 routePATCH https://harvest.greenhouse.io/v1/custom_field/{id}/custom_field_options
V3 routePATCH https://harvest.greenhouse.io/v3/custom_field_options/{id}
CommentsThis endpoint updates custom field options individually. There is a separate bulk endpoint to handle asynchronous bulk updates.

Custom FieldsV1 - DELETE: Remove Custom Field Options
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/custom_field/{id}/custom_field_options
V3 routeDELETE https://harvest.greenhouse.io/v3/custom_field_options/{id}
CommentsThis endpoint permanently deletes custom field options individually. There is a separate bulk endpoint to handle asynchronous bulk deletes.

Departments

DepartmentsV1 - PATCH: Edit Department
V1/V2 routePATCH https://harvest.greenhouse.io/v1/departments/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/departments/{id}
Comments

DepartmentsV1 - POST: Add Department
V1/V2 routePOST https://harvest.greenhouse.io/v1/departments
V3 routePOST https://harvest.greenhouse.io/v3/departments
Comments

Job Openings

Job OpeningsV2 - DELETE: Destroy Openings
V1/V2 routeDELETE https://harvest.greenhouse.io/v2/jobs/{job_id}/openings
V3 routeDELETE https://harvest.greenhouse.io/v3/openings/{id}
CommentsThis endpoint permanently deletes openings individually. There is a separate bulk endpoint to handle asynchronous bulk deletes.

Job OpeningsV1 - PATCH: Edit Openings
V1/V2 routePATCH https://harvest.greenhouse.io/v1/jobs/{job_id}/openings/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/openings/{id}
Comments

Job OpeningsV1 - POST: Create New Openings
V1/V2 routePOST https://harvest.greenhouse.io/v1/jobs/{job_id}/openings
V3 routePOST https://harvest.greenhouse.io/v3/openings
CommentsThis endpoint creates openings individually. There is a separate bulk endpoint to handle asynchronous bulk creates.

Job Posts

Job PostsV1 - PATCH: Update Job Post
V1/V2 routePATCH https://harvest.greenhouse.io/v2/job_posts/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/job_posts/{id}
POST https://harvest.greenhouse.io/v3/job_post_locations
DELETE https://harvest.greenhouse.io/v3/job_post_locations/{id}
CommentsJob post locations are modified via their own Harvest v3 endpoint.

Job PostsV1 - PATCH: Update Job Post Status
V1/V2 routePATCH https://harvest.greenhouse.io/v2/job_posts/{id}/status
V3 routePATCH https://harvest.greenhouse.io/v3/job_posts/{id}
CommentsThe v2 endpoints for job post have been combined back to a singular endpoint and the service will accept/reject the action based off of the user’s permissions.

Jobs

JobsV1 - PATCH: Update Job
V1/V2 routePATCH https://harvest.greenhouse.io/v1/jobs/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/jobs/{id}
Comments

JobsV1 - POST: Create Job
V1/V2 routePOST https://harvest.greenhouse.io/v1/jobs
V3 routePOST https://harvest.greenhouse.io/v3/jobs
Comments

JobsV1 - PUT: Replace Hiring Team
V1/V2 routePUT https://harvest.greenhouse.io/v1/jobs/{id}/hiring_team
V3 routePOST https://harvest.greenhouse.io/v3/job_hiring_managers
DELETE https://harvest.greenhouse.io/v3/job_hiring_managers/{id}
POST https://harvest.greenhouse.io/v3/job_owners
DELETE https://harvest.greenhouse.io/v3/job_owners/{id}
CommentsWe modified the combined functionality to pursue individual creates and deletes instead of overwriting.


Offers

OffersV1 - PATCH: Update Current Offer
V1/V2 routePATCH https://harvest.greenhouse.io/v1/applications/{id}/offers/current_offer
V3 routePATCH https://harvest.greenhouse.io/v3/offers/{id}
Comments

Offices

OfficesV1 - PATCH: Edit Office
V1/V2 routePATCH https://harvest.greenhouse.io/v1/offices/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/offices/{id}
Comments

OfficesV1 - POST: Add Office
V1/V2 routePOST https://harvest.greenhouse.io/v1/offices
V3 routePOST https://harvest.greenhouse.io/v3/offices
Comments

Scheduled Interviews

Scheduled InterviewsV2 POST: Create Scheduled Interview
V1/V2 routePOST https://harvest.greenhouse.io/v2/scheduled_interviews
V3 routePOST https://harvest.greenhouse.io/v3/interviews
Comments

Scheduled InterviewsV2 PATCH: Update Scheduled Interview
V1/V2 routePATCH https://harvest.greenhouse.io/v2/scheduled_interviews/{id}
V3 routePATCH https://harvest.greenhouse.io/v3/interviews/{id}
Comments

Scheduled InterviewsV1 - Delete: Remove Scheduled Interview
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/scheduled_interviews/{id}
V3 routeDELETE https://harvest.greenhouse.io/v3/interviews/{id}
Comments

Tags

TagsV1 - POST: Add New Candidate Tag
V1/V2 routePOST https://harvest.greenhouse.io/v1/tags/candidate
V3 routePOST https://harvest.greenhouse.io/v3/candidate_tags
Comments

TagsV1 - DELETE: Destroy a candidate tag
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/tags/candidate/{tag_id}
V3 routeDELETE https://harvest.greenhouse.io/v3/candidate_tags/{id}
Comments


Users

UsersV2 - PATCH: Edit User
V1/V2 routePATCH https://harvest.greenhouse.io/v2/users/
V3 routePATCH https://harvest.greenhouse.io/v3/users/{id}
Comments

UsersV2 - PATCH: Disable User
V1/V2 routePATCH https://harvest.greenhouse.io/v2/users/disable
V3 routePOST https://harvest.greenhouse.io/v3/users/{id}/deactivate
Comments

UsersV2 - PATCH: Enable User
V1/V2 routePATCH https://harvest.greenhouse.io/v2/users/enable
V3 routePOST https://harvest.greenhouse.io/v3/users/{id}/activate
Comments

UsersV1 - PATCH: Change user permission level
V1/V2 routePATCH https://harvest.greenhouse.io/v1/users/permission_level
V3 routePOST https://harvest.greenhouse.io/v3/users/{id}/revoke_permissions
Comments

UsersV1 - POST: Add User
V1/V2 routePOST https://harvest.greenhouse.io/v1/users
V3 routePOST https://harvest.greenhouse.io/v3/users
Comments

UsersV1 - POST: Add E-mail Address To User
V1/V2 routePOST https://harvest.greenhouse.io/v1/users/{id}/email_addresses
V3 routePOST https://harvest.greenhouse.io/v3/user_emails
Comments

User Permissions

User PermissionsV1 - DELETE: Remove a Job Permission
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/users/{id}/permissions/jobs
V3 routeDELETE https://harvest.greenhouse.io/v3/user_job_permissions/{id}
Comments

User PermissionsV1 - PUT: Add a Job Permission
V1/V2 routePUT https://harvest.greenhouse.io/v1/users/{id}/permissions/jobs
V3 routePOST https://harvest.greenhouse.io/v3/user_job_permissions
Comments

User PermissionsV1 - DELETE: Remove a Future Job Permission
V1/V2 routeDELETE https://harvest.greenhouse.io/v1/users/{id}/permissions/future_jobs
V3 routeDELETE https://harvest.greenhouse.io/v3/future_job_permissions/{id}
Comments

User PermissionsV1 - PUT: Add a Future Job Permission
V1/V2 routePUT https://harvest.greenhouse.io/v1/users/{id}/permissions/future_jobs
V3 routePOST https://harvest.greenhouse.io/v3/future_job_permissions
Comments