---
title: "Update interview"
method: PATCH
path: "/v3/interviews/{id}"
tags: ["Interviews"]
---

# Update interview

`PATCH /v3/interviews/{id}`

## Request

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

Patch a scheduled interview's time, location, video conferencing link, external calendar event id, or interviewer panel. Reassign the panel by passing a full `interviewers` array (each entry must include `response_status` and identify the interviewer by `user_id`, `email`, or `employee_id`); the existing list is replaced wholesale. Pass `organizer_id` to change the interview's organizer; the existing organizer is kept when omitted. This endpoint updates the Greenhouse interview record only and sends no calendar invites or updates — partners scheduling through Google Calendar or Outlook should make the matching edit on the calendar event and let the calendar integration sync, rather than calling this endpoint in parallel.

## Path parameters

- `id` integer, required

## Request body

- object
  - `external_event_id` string
  - `starts_at` string, date-time
  - `ends_at` string, date-time
  - `location` string
  - `video_conferencing_url` string, uri, nullable
  - `interviewers` union[]
    - union
      - object
        - `user_id` integer, nullable, required
        - `email` string, email, nullable
        - `employee_id` string, nullable
        - `response_status` 'accepted' | 'declined' | 'tentative' | 'needs_action', required
      - object
        - `user_id` integer, nullable
        - `email` string, email, nullable, required
        - `employee_id` string, nullable
        - `response_status` 'accepted' | 'declined' | 'tentative' | 'needs_action', required
      - object
        - `user_id` integer, nullable
        - `email` string, email, nullable
        - `employee_id` string, nullable, required
        - `response_status` 'accepted' | 'declined' | 'tentative' | 'needs_action', required
  - `organizer_id` integer: Id of the Greenhouse user to record as the interview's organizer. Must be an active user who can manage the application. The existing organizer is kept when omitted. Not available to MCP integrations.

## Response `200`

Successful

- object
  - `id` integer
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `job_id` integer: Id of the job this interview is on.
  - `application_id` integer: Id of the application this interview is scheduled against. Use it to look up the candidate.
  - `job_interview_id` integer: Id of the job interview slot on the job's interview plan that this interview fulfills. Distinct from this interview's own `id`.
  - `starts_at` string, date-time, nullable: Interview start time, in ISO 8601. `null` for interviews that have not yet been scheduled (for example, assigned take-home tests or interviews awaiting candidate availability) and for all-day events — see `all_day_start_on`.
  - `ends_at` string, date-time, nullable: Interview end time, in ISO 8601. `null` when `starts_at` is also `null`, and for all-day events — see `all_day_end_on`.
  - `location` string, nullable: Free-form location string copied from the calendar event (a room name, an address, or a meeting URL when the customer puts it in the location field). Use `video_conferencing_url` for the link generated by Greenhouse's video integrations.
  - `status` 'to_be_scheduled' | 'scheduled' | 'awaiting_feedback' | 'complete' | 'skipped' | 'collect_feedback' | 'to_be_sent' | 'sent' | 'received': Lifecycle status of the interview. `to_be_scheduled` is the pre-schedule placeholder; `scheduled` is on the calendar; `awaiting_feedback` is past with scorecards outstanding; `complete` is past with all scorecards in; `collect_feedback` and `skipped` are alternative terminal states; `to_be_sent`, `sent`, and `received` are used for take-home tests sent through Greenhouse.
  - `organizer_id` integer, nullable: Id of the Greenhouse user who scheduled the interview (the organizer on the underlying calendar event). `null` for interviews not yet scheduled through a calendar integration.
  - `scheduled_at` string, date-time, nullable: Timestamp the interview was first placed on a calendar through a Greenhouse calendaring integration (Google, Outlook, or Greenhouse Schedule), in ISO 8601. `null` for interviews that have never been scheduled via the calendar pipeline.
  - `all_day_start_on` string, date, nullable: Start date of an all-day interview, in `YYYY-MM-DD`. Set instead of `starts_at`/`ends_at` when the underlying calendar event is an all-day event. `null` for time-bounded interviews.
  - `all_day_end_on` string, date, nullable: End date of an all-day interview, in `YYYY-MM-DD`. Set instead of `starts_at`/`ends_at` when the underlying calendar event is an all-day event. `null` for time-bounded interviews.
  - `external_event_id` string, nullable: Id of the calendar event on the organizer's calendar (Google Calendar event id, Outlook event id, etc.). Use this to correlate an interview with the event on the external calendar. `null` for interviews not yet pushed to an external calendar.
  - `video_conferencing_url` string, nullable: Join URL for the interview's video conference, auto-populated by Greenhouse's Zoom, Google Meet, or Microsoft Teams integrations when one is attached during scheduling. `null` when no video conferencing was added.
  - `availability_received_at` string, date-time, nullable: Timestamp Greenhouse first recorded availability for this interview's stage on this application (used to compute time-to-schedule), in ISO 8601. `null` if availability has not been collected for the stage.
  - `interviewers` object[]
    - `id` integer
    - `user_id` integer
    - `response_status` 'needs_action' | 'declined' | 'tentative' | 'accepted'

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