### API Migration Guide - v1/v2 to v3 Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Comprehensive guide for migrating from Greenhouse Harvest API v1/v2 to v3, including deprecated fields, endpoint changes, and restructured data access patterns. ```APIDOC ## API Migration Guide: v1/v2 to v3 ### Overview The Greenhouse Harvest API v3 introduces significant structural changes to candidate-related endpoints, with data reorganized across dedicated endpoints. ### Endpoint Changes #### Candidates Endpoint - **V1/V2**: GET /v1/candidates/{id} - **V3**: GET /v3/candidates #### Related Data Access - **Applications**: GET /v3/applications (filter by candidate_id) - **Attachments**: GET /v3/attachments (filter by application_id) - **Educations**: GET /v3/candidate_educations (filter by candidate_id) - **Employments**: GET /v3/candidate_employments (filter by candidate_id) - **Tags**: GET /v3/candidate_tags or available in tags array - **Referrers**: GET /v3/referrers ### Deprecated Fields and Changes #### Removed/Deprecated Fields - `photo_url` - No longer available - `attachments` - Use GET /v3/attachments endpoint - `application_ids` - Filter Application endpoint by candidate_id - `applications[]` - Filter Application endpoint by candidate_id #### Renamed Fields - `is_private` → `private` #### Moved Objects - `recruiter` object - Now available in Applications endpoint - `coordinator` object - Now available in Applications endpoint #### Access Pattern Changes - Candidate educations - Retrieve via custom field options endpoint - Candidate tags - Available in candidate tags array and dedicated endpoint ### Migration Strategy 1. Update endpoints from v1/v1 to v3 routes 2. Use dedicated endpoints for related data (applications, attachments, etc.) 3. Update field references (is_private → private) 4. Retrieve recruiter/coordinator from Applications endpoint 5. Use GET /v3/attachments for attachments by application ### Notes - For application-level data changes, visit the Application endpoint detail - All v3 endpoints support filtering by relevant ID parameters ``` -------------------------------- ### GET /v3/openings Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of openings in V3. ```APIDOC ## GET /v3/openings ### Description Retrieves a list of openings. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/openings ### Parameters #### Query Parameters - **job_id** (integer) - Optional - Filter openings by job ID. - **opens_after** (string) - Optional - Filter openings opened after this date (ISO 8601 format). - **opens_before** (string) - Optional - Filter openings opened before this date (ISO 8601 format). - **page** (integer) - Optional - Page number for pagination. - **per_page** (integer) - Optional - Number of results per page. ### Response #### Success Response (200) - **openings** (array) - An array of opening objects. #### Response Example { "openings": [ { "id": 456, "job_id": 789, "open": true } ] } ``` -------------------------------- ### GET /v3/openings Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of job openings. ```APIDOC ## GET /v3/openings ### Description Retrieves a list of all job openings available in the Greenhouse system. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/openings ### Parameters There are no specific query parameters documented for this endpoint in the provided text. ### Request Example ```bash curl -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://harvest.greenhouse.io/v3/openings" ``` ### Response #### Success Response (200) - **id** (integer) - The unique identifier for the job opening. - **name** (string) - The name or title of the job opening. - **requisition_id** (string) - The internal requisition ID for the opening. #### Response Example ```json { "data": [ { "id": 101, "name": "Software Engineer", "requisition_id": "REQ-12345" } ] } ``` ``` -------------------------------- ### GET /v3/offers Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of offers in V3. ```APIDOC ## GET /v3/offers ### Description Retrieves a list of offers. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/offers ### Parameters #### Query Parameters - **sent_after** (string) - Optional - Filter offers sent after this date (ISO 8601 format). - **sent_before** (string) - Optional - Filter offers sent before this date (ISO 8601 format). - **created_after** (string) - Optional - Filter offers created after this date (ISO 8601 format). - **created_before** (string) - Optional - Filter offers created before this date (ISO 8601 format). - **page** (integer) - Optional - Page number for pagination. - **per_page** (integer) - Optional - Number of results per page. ### Response #### Success Response (200) - **offers** (array) - An array of offer objects. #### Response Example { "offers": [ { "id": 123, "status": "sent", "sent_on": "2023-10-27", "starts_on": "2023-11-01" } ] } ``` -------------------------------- ### GET /v3/interview_kits Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of interview kits. ```APIDOC ## GET /v3/interview_kits ### Description Retrieves a list of all interview kits available in the Greenhouse system. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/interview_kits ### Parameters There are no specific query parameters documented for this endpoint. ### Request Example ```bash curl -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://harvest.greenhouse.io/v3/interview_kits" ``` ### Response #### Success Response (200) - **id** (integer) - The unique identifier for the interview kit. - **name** (string) - The name of the interview kit. - **content** (array) - An array of objects, where each object represents an exercise or a component within the interview kit. This field maps to `interviewer_kit.exercises` in older versions or related systems. #### Response Example ```json { "data": [ { "id": 701, "name": "Standard Engineering Interview", "content": [ { "type": "question", "question_id": 801 } ] } ] } ``` ``` -------------------------------- ### GET /v3/offers Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of offers using the V3 API. ```APIDOC ## GET /v3/offers ### Description Retrieves a list of all offers using the V3 API routes. This endpoint can also be used to filter for current offers. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/offers ### Parameters #### Query Parameters - **current_only** (boolean) - Optional - Filters the results to include only the current offer for an application (`true`) or all offers (`false`). ### Request Example ```bash curl -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://harvest.greenhouse.io/v3/offers?current_only=true" ``` ### Response #### Success Response (200) - **id** (integer) - The unique identifier for the offer. - **application_id** (integer) - The ID of the application associated with the offer. - **sent_at** (string) - The timestamp when the offer was sent. - **starts_at** (string) - The proposed start date of employment. #### Response Example ```json { "data": [ { "id": 1001, "application_id": 201, "sent_at": "2023-01-15T10:00:00Z", "starts_at": "2023-02-01T09:00:00Z" } ] } ``` ``` -------------------------------- ### GET /v1/offers Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of offers using the V1/V2 API. ```APIDOC ## GET /v1/offers ### Description Retrieves a list of all offers using the legacy V1/V2 API routes. ### Method GET ### Endpoint https://harvest.greenhouse.io/v1/offers ### Parameters There are no specific query parameters documented for this endpoint in the provided text. ### Request Example ```bash curl -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://harvest.greenhouse.io/v1/offers" ``` ### Response #### Success Response (200) - **offer_id** (integer) - The unique identifier for the offer. - **application_id** (integer) - The ID of the application associated with the offer. - **sent_on** (string) - The date the offer was sent (legacy field, maps to `sent_at` in V3). - **starts_on** (string) - The proposed start date of employment (legacy field, maps to `starts_at` in V3). #### Response Example ```json { "data": [ { "offer_id": 1001, "application_id": 201, "sent_on": "2023-01-15T10:00:00Z", "starts_on": "2023-02-01T09:00:00Z" } ] } ``` ``` -------------------------------- ### GET /v3/job_interview_steps Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of job interview steps. ```APIDOC ## GET /v3/job_interview_steps ### Description Retrieves a list of job interview steps. ### Method GET ### Endpoint /v3/job_interview_steps ### Response #### Success Response (200) - **job_interview_steps** (array) - A list of job interview step objects. #### Response Example { "job_interview_steps": [ { "id": 1, "name": "Phone Screen" } ] } ``` -------------------------------- ### GET /v3/* - Access Harvest V3 API Endpoints Source: https://harvestdocs.greenhouse.io/docs/harvest-partner-oauth Make authenticated requests to any Greenhouse Harvest V3 API endpoint using the stored access token. Include the access token in the Authorization header as a Bearer token for all API calls. ```APIDOC ## GET /v3/* (Generic Harvest V3 API Access) ### Description Access any Greenhouse Harvest V3 API endpoint with proper authentication. All requests require a valid, non-expired access token in the Authorization header. Use the access token obtained from the OAuth2 flow or token refresh endpoint. ### Method GET (or other HTTP methods as per specific endpoint documentation) ### Endpoint https://harvest.greenhouse.io/v3/{endpoint} ### Parameters #### Headers - **Authorization** (string) - Required - Bearer token in format "Bearer " ### Request Example ```http GET /v3/job_posts HTTP/1.1 Host: harvest.greenhouse.io Authorization: Bearer stored_access_token_string... ``` ### Response #### Success Response (200) Response format varies by endpoint. Refer to Greenhouse Harvest V3 API documentation for specific endpoint response schemas. #### Error Response (401 Unauthorized) Indicates the access token has expired or is invalid. - **Action**: Attempt to refresh the token using the refresh token (POST /token endpoint) - If refresh fails, prompt user to re-authorize through the complete authorization flow #### Error Response (403 Forbidden) Indicates insufficient permissions for the requested action. - **Cause 1**: The Greenhouse user who authorized the connection lacks required in-app permissions to perform the requested action (e.g., creating a candidate, accessing specific data) - **Cause 2**: List endpoints require authorization by a Greenhouse user with Site Admin privileges. Non-Site Admin users will receive 403 for these endpoints - **Action**: Verify the authorizing user has appropriate permissions in the Greenhouse application ### Important Notes - Access tokens expire after 1 hour; refresh before expiration - All list endpoints require Site Admin authorization - User permissions in Greenhouse application determine endpoint access - Refer to official Greenhouse Harvest V3 API documentation for complete endpoint reference - 401 errors typically indicate token expiration; attempt refresh before re-authorization ``` -------------------------------- ### Handle Greenhouse OAuth Callback and Exchange Code for Tokens Source: https://harvestdocs.greenhouse.io/docs/harvest-partner-oauth This snippet demonstrates how to handle the callback from Greenhouse after user authentication, verify the authorization code and state, and then exchange the code for access and refresh tokens using a POST request. It includes error checking for 'error' and 'error_description' parameters and a cURL example for the token exchange. ```shell curl \ --location \ --request POST 'https://auth.greenhouse.io/token?grant_type=authorization_code&code=auth_code_received_from_greenhouse' \ --header 'Authorization: Basic [Your Base64 Encoded ClientID:ClientSecret]' \ --data '' ``` ```json { "token_type": "Bearer", "access_token": "received_access_token_string...", "refresh_token": "received_refresh_token_string...", "expires_at": "iso8601_datetime_string..." } ``` -------------------------------- ### Generate Access Token (Example) Source: https://harvestdocs.greenhouse.io/docs/authentication Example of how to generate an access token for Harvest V3 authentication. ```APIDOC ## POST /oauth/token ### Description Generates an access token for authenticating API requests. ### Method POST ### Endpoint `/oauth/token` ### Parameters #### Query Parameters - **grant_type** (string) - Required - The grant type for the token request (e.g., `client_credentials`, `authorization_code`). #### Request Body (for Client Credentials Flow) - **sub** (string) - Required - The `user_id` to identify the authorizing user. ### Request Example (Client Credentials Flow) ```json { "grant_type": "client_credentials", "sub": "user-12345" } ``` ### Response #### Success Response (200) - **access_token** (string) - The generated JWT access token. - **token_type** (string) - The type of token (e.g., `Bearer`). - **expires_in** (integer) - The lifetime in seconds of the access token. #### Response Example ```json { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "Bearer", "expires_in": 7200 } ``` ``` -------------------------------- ### GET /interviews Source: https://harvestdocs.greenhouse.io/reference/get_v3-scorecards Retrieves a list of interviews. This endpoint allows you to fetch all interview records associated with your account. You can use this to get an overview of past and upcoming interviews. ```APIDOC ## GET /interviews ### Description Retrieves a list of interviews. ### Method GET ### Endpoint /interviews ### Parameters #### Query Parameters - **limit** (integer) - Optional - The maximum number of interviews to return. - **offset** (integer) - Optional - The number of interviews to skip before returning results. ### Request Example ```http GET /interviews?limit=10&offset=0 ``` ### Response #### Success Response (200) - **id** (integer) - Unique identifier for the interview. - **interview_kit_id** (integer) - The ID of the interview kit used. - **interviewer_id** (integer) - The ID of the interviewer. - **submitter_id** (integer) - The ID of the user who submitted the interview. - **application_id** (integer) - The ID of the application associated with the interview. - **notes** (string) - General notes about the interview. - **notes_with_tags** (string) - Notes with tags. - **private_notes** (string) - Private notes about the interview. - **private_notes_with_tags** (string) - Private notes with tags. - **public_notes** (string) - Public notes about the interview. - **public_notes_with_tags** (string) - Public notes with tags. - **status** (string) - The status of the interview (e.g., 'draft', 'complete'). - **interviewed_at** (string) - The date and time the interview was conducted (ISO 8601 format). - **submitted_at** (string) - The date and time the interview was submitted (ISO 8601 format). - **created_at** (string) - The date and time the interview record was created (ISO 8601 format). - **updated_at** (string) - The date and time the interview record was last updated (ISO 8601 format). - **candidate_rating** (string) - The rating given to the candidate. #### Response Example ```json [ { "id": 10020916, "interview_kit_id": 5245613, "interviewer_id": 11737791, "submitter_id": 11737791, "application_id": 879420, "notes": "My notes", "notes_with_tags": null, "private_notes": null, "private_notes_with_tags": null, "public_notes": null, "public_notes_with_tags": null, "status": "draft", "interviewed_at": "2025-10-07T21:01:31.494Z", "submitted_at": "2025-10-07T21:01:31.494Z", "created_at": "2025-10-07T21:01:31.494Z", "updated_at": "2025-10-07T21:01:31.508Z", "candidate_rating": "strong_yes" } ] ``` ``` -------------------------------- ### Example Successful Job Data Response Source: https://harvestdocs.greenhouse.io/reference/get_v3-approver-groups This snippet provides an example of a successful API response containing job data. It illustrates the format of the returned array of job objects, including sample values for IDs, timestamps, approval details, and resolution status. This example helps in understanding the expected data structure for job applications. ```json [ { "id": 644205, "approval_flow_id": 607399, "approvals_required": 1, "created_at": "2024-01-01T12:30:30.000Z", "updated_at": "2024-01-01T12:30:30.000Z", "required_for_exception": false, "resolved_at": null, "sort_order": 0 }, { "id": 644204, "approval_flow_id": 607399, "approvals_required": 1, "created_at": "2024-01-01T12:30:30.000Z", "updated_at": "2024-01-01T12:30:30.000Z", "required_for_exception": false, "resolved_at": null, "sort_order": 0 } ] ``` -------------------------------- ### V3 Application Stages API Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Endpoints for retrieving and managing application stages within the Greenhouse system via the v3 API. ```APIDOC ## GET /v3/application_stages ### Description Retrieves a list of application stages using the v3 API. ### Method GET ### Endpoint /v3/application_stages ### Response #### Success Response (200) - **application_stages** (array) - A list of application stage objects. #### Response Example ```json { "application_stages": [ { "id": "example_stage_id", "name": "Screening" } ] } ``` ``` -------------------------------- ### Successful API Response Example (JSON) Source: https://harvestdocs.greenhouse.io/reference/get_v3-close-reasons Provides an example of a successful API response ('200 OK') for a request, showcasing the structure of returned data including 'id', 'name', 'created_at', and 'updated_at' fields. ```JSON { "value": [ { "id": 1841069, "name": "CloseReason", "created_at": "2024-01-01T12:30:30.000Z", "updated_at": "2024-01-01T12:30:30.000Z" } ] } ``` -------------------------------- ### GET /v3/candidates Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieve a list of candidates from the Greenhouse Harvest system. This endpoint replaces the v1/v2 GET /v1/candidates/{id} route and provides access to candidate data with updated field names and structure. ```APIDOC ## GET /v3/candidates ### Description Retrieve candidate information from Greenhouse Harvest API. In v3, candidate data has been restructured with deprecated fields moved to dedicated endpoints. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/candidates ### Parameters #### Query Parameters - **id** (integer) - Optional - Filter candidates by specific candidate ID ### Response #### Success Response (200) - **id** (integer) - Candidate ID - **private** (boolean) - Whether candidate is private (formerly `is_private`) - **tags** (array) - Array of candidate tags ### Notes - Deprecated `photo_url` field - no longer available in v3 - Deprecated `attachments` field - use GET /v3/attachments endpoint instead - Deprecated `application_ids` and `applications[]` - filter Application endpoint by `candidate_id` - Recruiter and Coordinator objects moved to Applications object - Field `is_private` renamed to `private` - Candidate educations retrieved via custom field options endpoint ``` -------------------------------- ### Get Applications V1/V2 Route Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves applications using the v1/v2 API. This is an older endpoint and may have different data structures compared to v3. ```HTTP GET https://harvest.greenhouse.io/v1/applications ``` -------------------------------- ### API Response Example - Approval Record Source: https://harvestdocs.greenhouse.io/reference/get_v3-approval-flows Example JSON response showing a single approval record with all populated fields. Demonstrates the structure of approval objects returned by the API including timestamps, job/offer associations, and approval status. ```json { "id": 594191, "offer_id": null, "approval_type": "open_job", "sequential": true, "created_at": "2024-01-01T12:30:30.000Z", "updated_at": "2024-01-01T12:30:30.000Z", "version": 1, "requested_by_id": null, "approval_status": "pending", "job_id": 3060311 } ``` -------------------------------- ### Example Job Board Data Object Source: https://harvestdocs.greenhouse.io/reference/get_v3-sources An example JSON object representing a single job board entry. It showcases the typical fields found in the data, including 'id', 'created_at', 'updated_at', 'name', and 'type'. The 'type' indicates it's a 'Third-party board'. ```json { "id": 9, "created_at": "2025-10-07T16:08:50.623Z", "updated_at": "2025-10-07T16:08:50.623Z", "name": "Dribbble", "type": { "id": 4, "name": "Third-party boards" } } ``` -------------------------------- ### V3 Sources API Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Provides access to sourcing information via the v3 API. ```APIDOC ## GET /v3/sources ### Description Retrieves a list of sources using the v3 API. ### Method GET ### Endpoint /v3/sources ### Response #### Success Response (200) - **sources** (array) - A list of source objects. #### Response Example ```json { "sources": [ { "id": "source_abc", "name": "LinkedIn" } ] } ``` ``` -------------------------------- ### V3 Applications API Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Provides endpoints for managing applications within the Greenhouse system using the v3 API. ```APIDOC ## GET /v3/applications ### Description Retrieves a list of applications using the v3 API. ### Method GET ### Endpoint /v3/applications ### Response #### Success Response (200) - **applications** (array) - A list of application objects. #### Response Example ```json { "applications": [ { "id": "example_app_id", "name": "Sample Application" } ] } ``` ``` -------------------------------- ### GET /v3/interviewers Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of interviewers. ```APIDOC ## GET /v3/interviewers ### Description Retrieves a list of interviewers. ### Method GET ### Endpoint /v3/interviewers ### Response #### Success Response (200) - **interviewers** (array) - A list of interviewer objects. #### Response Example { "interviewers": [ { "id": 1, "name": "Jane Doe" } ] } ``` -------------------------------- ### GET /v3/job_stages Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of job stages. ```APIDOC ## GET /v3/job_stages ### Description Retrieves a list of job stages. ### Method GET ### Endpoint /v3/job_stages ### Response #### Success Response (200) - **job_stages** (array) - A list of job stage objects. #### Response Example { "job_stages": [ { "id": 1, "name": "Application Review" } ] } ``` -------------------------------- ### Office and Opening Management APIs Source: https://harvestdocs.greenhouse.io/reference/get_v3-job-interview-stages Endpoints for managing office locations and job openings, including creating, updating, and tracking available positions. ```APIDOC ## Office and Opening Management ### Available Endpoints #### GET /offices - **Description**: List all office locations - **Method**: GET - **Response**: Array of office objects #### POST /offices - **Description**: Create a new office - **Method**: POST - **Request Body**: - **name** (string) - Required - Office name - **location** (string) - Required - Office location/city - **Response**: Created office object #### PUT /offices/{id} - **Description**: Update an existing office - **Method**: PUT - **Path Parameters**: - **id** (integer) - Required - Office ID - **Request Body**: Office fields to update - **Response**: Updated office object #### GET /openings - **Description**: List all job openings - **Method**: GET - **Response**: Array of opening objects #### POST /openings - **Description**: Create a new job opening - **Method**: POST - **Request Body**: - **job_id** (integer) - Required - Job ID - **opening_count** (integer) - Required - Number of openings - **Response**: Created opening object #### PUT /openings/{id} - **Description**: Update a job opening - **Method**: PUT - **Path Parameters**: - **id** (integer) - Required - Opening ID - **Request Body**: Opening fields to update - **Response**: Updated opening object #### DELETE /openings/{id} - **Description**: Delete a job opening - **Method**: DELETE - **Path Parameters**: - **id** (integer) - Required - Opening ID - **Response**: Confirmation of deletion ``` -------------------------------- ### GET /v3/scorecard_questions Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of scorecard questions. ```APIDOC ## GET /v3/scorecard_questions ### Description Retrieves a list of questions used in scorecards. ### Method GET ### Endpoint /v3/scorecard_questions ### Response #### Success Response (200) - **scorecard_questions** (array) - A list of scorecard question objects. #### Response Example { "scorecard_questions": [ { "id": 1, "question": "Rate the candidate's technical proficiency." } ] } ``` -------------------------------- ### Applications API Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Endpoint for retrieving application information (V3). ```APIDOC ## GET /v3/applications ### Description Retrieves a list of applications (V3). ### Method GET ### Endpoint /v3/applications ### Response #### Success Response (200) - **applications** (array) - A list of application objects. #### Response Example ```json { "applications": [ { "id": "string", "candidate_id": "string", "job_id": "string" } ] } ``` ``` -------------------------------- ### GET /v3/offices Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of offices in V3. ```APIDOC ## GET /v3/offices ### Description Retrieves a list of offices. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/offices ### Parameters #### Query Parameters - **page** (integer) - Optional - Page number for pagination. - **per_page** (integer) - Optional - Number of results per page. ### Response #### Success Response (200) - **offices** (array) - An array of office objects. #### Response Example { "offices": [ { "id": 1, "name": "New York", "location": "123 Main St, New York, NY 10001", "primary_in_house_contact_id": 101 } ] } ``` -------------------------------- ### GET /v3/interview_kits Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieve interview kits containing interview exercises and materials. This endpoint provides access to structured interview content used during the hiring process. ```APIDOC ## GET /v3/interview_kits ### Description Retrieve a list of interview kits with interview exercises and materials. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/interview_kits ### Parameters None ### Response #### Success Response (200) Returns an array of interview kit objects with exercises and related content. ### Migration Notes - Legacy `interview_kit.content` maps to `interviewer_kit.exercises` in V3 - Legacy `interview_kit.questions []` are now accessed via `scorecard_questions` with `interview_kit_id` as parent ``` -------------------------------- ### GET /v1/offices Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of offices in V1/V2. ```APIDOC ## GET /v1/offices ### Description Retrieves a list of offices. ### Method GET ### Endpoint https://harvest.greenhouse.io/v1/offices ### Response #### Success Response (200) - **offices** (array) - An array of office objects. #### Response Example { "offices": [ { "id": 1, "name": "New York", "location": { "street_address": "123 Main St", "city": "New York", "state": "NY", "zip": "10001" } } ] } ``` -------------------------------- ### Harvest V3 Applications API Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions This section details the V1/V2 and V3 API endpoints for retrieving application-related data, including applications, application stages, prospect details, and more. ```APIDOC ## Harvest V3 Applications API ### Description This section details the V1/V2 and V3 API endpoints for retrieving application-related data, including applications, application stages, prospect details, and more. ### Method GET ### Endpoint `/v1/applications` ### Response #### Success Response (200) - **applications** (array) - A list of applications. #### Response Example { "applications": [ { "id": 1, "name": "John Doe", "applied_at": "2023-01-01T12:00:00Z" } ] } ``` ```APIDOC ## GET /v3/applications ### Description Retrieves a list of applications using the V3 API. ### Method GET ### Endpoint `/v3/applications` ### Response #### Success Response (200) - **applications** (array) - A list of applications. #### Response Example { "applications": [ { "id": 1, "name": "John Doe", "created_at": "2023-01-01T12:00:00Z" } ] } ``` ```APIDOC ## GET /v3/application_stages ### Description Retrieves a list of application stages using the V3 API. ### Method GET ### Endpoint `/v3/application_stages` ### Response #### Success Response (200) - **application_stages** (array) - A list of application stages. #### Response Example { "application_stages": [ { "id": 1, "name": "Applied" } ] } ``` ```APIDOC ## GET /v3/prospect_details ### Description Retrieves prospect details using the V3 API. ### Method GET ### Endpoint `/v3/prospect_details` ### Response #### Success Response (200) - **prospect_details** (array) - A list of prospect details. #### Response Example { "prospect_details": [ { "id": 1, "office_id": 10, "department_id": 20, "pool_id": 30, "pool_stage_id": 40, "prospect_owner_id": 50 } ] } ``` ```APIDOC ## GET /v3/prospect_pool_stages ### Description Retrieves a list of prospect pool stages using the V3 API. ### Method GET ### Endpoint `/v3/prospect_pool_stages` ### Response #### Success Response (200) - **prospect_pool_stages** (array) - A list of prospect pool stages. #### Response Example { "prospect_pool_stages": [ { "id": 40, "name": "Warm Lead" } ] } ``` ```APIDOC ## GET /v3/prospect_pools ### Description Retrieves a list of prospect pools using the V3 API. ### Method GET ### Endpoint `/v3/prospect_pools` ### Response #### Success Response (200) - **prospect_pools** (array) - A list of prospect pools. #### Response Example { "prospect_pools": [ { "id": 30, "name": "Sales Development" } ] } ``` ```APIDOC ## GET /v3/attachments ### Description Retrieves a list of attachments using the V3 API. ### Method GET ### Endpoint `/v3/attachments` ### Response #### Success Response (200) - **attachments** (array) - A list of attachments. #### Response Example { "attachments": [ { "id": 1, "filename": "resume.pdf", "attached_to_type": "Candidate" } ] } ``` ```APIDOC ## GET /v3/sources ### Description Retrieves a list of sources using the V3 API. ### Method GET ### Endpoint `/v3/sources` ### Response #### Success Response (200) - **sources** (array) - A list of sources. #### Response Example { "sources": [ { "id": 1, "name": "LinkedIn" } ] } ``` ```APIDOC ## GET /v3/users ### Description Retrieves a list of users using the V3 API. ### Method GET ### Endpoint `/v3/users` ### Response #### Success Response (200) - **users** (array) - A list of users. #### Response Example { "users": [ { "id": 1, "name": "Alice Smith" } ] } ``` ```APIDOC ## GET /v3/rejection_details ### Description Retrieves rejection details using the V3 API. ### Method GET ### Endpoint `/v3/rejection_details` ### Response #### Success Response (200) - **rejection_details** (array) - A list of rejection details. #### Response Example { "rejection_details": [ { "id": 1, "question_custom_fields": "Additional notes" } ] } ``` ```APIDOC ## GET /v3/rejection_reasons ### Description Retrieves a list of rejection reasons using the V3 API. ### Method GET ### Endpoint `/v3/rejection_reasons` ### Response #### Success Response (200) - **rejection_reasons** (array) - A list of rejection reasons. #### Response Example { "rejection_reasons": [ { "id": 1, "name": "Not a good fit" } ] } ``` ```APIDOC ## GET /v3/jobs ### Description Retrieves a list of jobs using the V3 API. ### Method GET ### Endpoint `/v3/jobs` ### Response #### Success Response (200) - **jobs** (array) - A list of jobs. #### Response Example { "jobs": [ { "id": 1, "name": "Software Engineer" } ] } ``` -------------------------------- ### Get Sources V3 Route Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves sources using the v3 API. This endpoint provides information about the different sources from which candidates or applications originate. ```HTTP GET https://harvest.greenhouse.io/v3/sources ``` -------------------------------- ### Create User Source: https://harvestdocs.greenhouse.io/reference/post_v3-custom-field-departments Creates a new user in the system. ```APIDOC ## POST /harvest/users ### Description Creates a new user account. ### Method POST ### Endpoint /harvest/users ### Parameters #### Request Body - **name** (string) - Required - The full name of the user. - **email** (string) - Required - The primary email address for the user. - **role_id** (integer) - Optional - The ID of the role to assign to the user. ### Request Example ```json { "name": "Jane Doe", "email": "jane.doe@example.com", "role_id": 2 } ``` ### Response #### Success Response (201) - **id** (integer) - The unique identifier for the newly created user. - **name** (string) - The name of the user. - **email** (string) - The email address of the user. - **role** (object) - The role assigned to the user. #### Response Example ```json { "id": 123, "name": "Jane Doe", "email": "jane.doe@example.com", "role": { "id": 2, "name": "Recruiter" } } ``` ``` -------------------------------- ### Create Application Source: https://harvestdocs.greenhouse.io/reference/get_v3-email-templates Creates a new application. ```APIDOC ## POST /harvest/applications ### Description Creates a new application. ### Method POST ### Endpoint /harvest/applications ### Parameters #### Request Body - **candidate_id** (integer) - Required - The ID of the candidate. - **job_id** (integer) - Required - The ID of the job. - **source_id** (integer) - Optional - The ID of the source. ### Request Example ```json { "candidate_id": 10, "job_id": 5, "source_id": 1 } ``` ### Response #### Success Response (201) - **id** (integer) - The ID of the newly created application. - **candidate_id** (integer) - The candidate ID. - **job_id** (integer) - The job ID. #### Response Example ```json { "id": 2, "candidate_id": 10, "job_id": 5 } ``` ``` -------------------------------- ### GET /v3/default_interviewers Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of default interviewers. ```APIDOC ## GET /v3/default_interviewers ### Description Retrieves a list of default interviewers configured in the Greenhouse system. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/default_interviewers ### Parameters There are no specific query parameters documented for this endpoint. ### Request Example ```bash curl -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://harvest.greenhouse.io/v3/default_interviewers" ``` ### Response #### Success Response (200) - **id** (integer) - The unique identifier for the default interviewer. - **user_id** (integer) - The ID of the user designated as a default interviewer. - **job_id** (integer) - The ID of the job this interviewer is a default for. #### Response Example ```json { "data": [ { "id": 901, "user_id": 401, "job_id": 101 } ] } ``` ``` -------------------------------- ### GET /v3/scorecard_questions Source: https://harvestdocs.greenhouse.io/docs/step-by-step-migration-instructions Retrieves a list of scorecard questions. ```APIDOC ## GET /v3/scorecard_questions ### Description Retrieves a list of all scorecard questions available in the Greenhouse system. ### Method GET ### Endpoint https://harvest.greenhouse.io/v3/scorecard_questions ### Parameters #### Query Parameters - **interview_kit_id** (integer) - Optional - Filters scorecard questions associated with a specific interview kit ID. This acts as a parent filter. ### Request Example ```bash curl -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://harvest.greenhouse.io/v3/scorecard_questions?interview_kit_id=701" ``` ### Response #### Success Response (200) - **id** (integer) - The unique identifier for the scorecard question. - **question** (string) - The text of the scorecard question. - **interview_kit_id** (integer) - The ID of the interview kit this question belongs to. #### Response Example ```json { "data": [ { "id": 801, "question": "Assess the candidate's problem-solving skills.", "interview_kit_id": 701 } ] } ``` ``` -------------------------------- ### Offer Management APIs Source: https://harvestdocs.greenhouse.io/reference/get_v3-job-interview-stages Endpoints for creating, listing, and updating employment offers to candidates. ```APIDOC ## Offer Management ### Available Endpoints #### GET /offers - **Description**: List all offers - **Method**: GET - **Response**: Array of offer objects #### POST /offers - **Description**: Create a new offer - **Method**: POST - **Request Body**: - **application_id** (integer) - Required - Application ID - **job_id** (integer) - Required - Job ID - **created_by_user_id** (integer) - Required - Creator user ID - **Response**: Created offer object #### PUT /offers/{id} - **Description**: Update an existing offer - **Method**: PUT - **Path Parameters**: - **id** (integer) - Required - Offer ID - **Request Body**: Offer fields to update - **Response**: Updated offer object ```