---
title: "Creates an interview"
method: POST
path: "/interviews"
tags: ["interviews"]
---

# Creates an interview

`POST /interviews`

## Request body

- InterviewToCreate
  - `id` string, guid
  - `candidate` Candidate, required
    - `id` string, uuid, required
    - `status` 'accepted' | 'declined' | 'pending' | 'tentative' | 'null', nullable — This property is deprecated. Use 'timeslot.candidateStatus' instead.
  - `jobId` string, uuid, required
  - `location` string
  - `organizerId` string, required
  - `timezone` string, required — Name of the timezone as described in TZ database
  - `timeslots` Timeslot[], required
    - `id` string, guid
    - `interviewType` string
    - `title` string
    - `place` string
    - `startsOn` string, date-time, required
    - `endsOn` string, date-time, required
    - `interviewers` Interviewer[], required
      - `id` string, required
      - `status` 'accepted' | 'declined' | 'pending' | 'tentative', required
    - `candidateStatus` 'accepted' | 'declined' | 'pending' | 'tentative'
    - `noShow` boolean
  - `createdOn` string, date-time — If not set it defaults to current time
  - `refUrl` string, url
  - `refId` string, refId
  - `source` string

## Response `201`

Created interview

- Interview
  - `id` string, guid
  - `candidate` Candidate
    - `id` string, uuid, required
    - `status` 'accepted' | 'declined' | 'pending' | 'tentative' | 'null', nullable — This property is deprecated. Use 'timeslot.candidateStatus' instead.
  - `jobId` string, uuid
  - `location` string — Address, video link, phone number, etc. vary based on the locationType
  - `locationType` 'ONSITE_JOB' | 'ONSITE' | 'PHONE' | 'VIDEO' | 'VIDEO_CALENDAR' | 'VIDEO_MEETING_ZOOM' | 'OTHER' — Type of the location field: * **ONSITE_JOB**: Interview at the job's physical location * **ONSITE**: Interview at any physical location (not necessarily the job site) * **PHONE**: Phone number * **VIDEO**: Generic video meeting link * **VIDEO_CALENDAR**: Video meeting link scheduled through calendar integration * **VIDEO_MEETING_ZOOM**: Zoom video meeting link * **OTHER**: Any other location information
  - `organizerId` string
  - `timezone` string — Name of the timezone as described in TZ database
  - `timeslots` Timeslot[]
    - `id` string, guid
    - `interviewType` string
    - `title` string
    - `place` string
    - `startsOn` string, date-time, required
    - `endsOn` string, date-time, required
    - `interviewers` Interviewer[], required
      - `id` string, required
      - `status` 'accepted' | 'declined' | 'pending' | 'tentative', required
    - `candidateStatus` 'accepted' | 'declined' | 'pending' | 'tentative'
    - `noShow` boolean
  - `createdOn` string, date-time — If not set it defaults to current time
  - `refUrl` string, url
  - `refId` string, refId
  - `source` string

## Other responses

- `400` — with codes: * **INVALID_TIMEZONE** when invalid timezone
- `403` — Forbidden to create an interview
- `422` — When input validation fails or with codes: * **INACTIVE_OR_DELETED_ORGANIZER** when inactive or deleted organizer * **INACTIVE_OR_DELETED_INTERVIEWERS** when at least one of the interviewers is inactive or deleted * **END_DATE_BEFORE_START_DATE** when end date of the timeslot is before start date * **NON_EXISTING_ORGANIZER** when organizer does not exist * **NON_EXISTING_INTERVIEWERS** when at least one of the interviewers does not exist * **CANDIDATE_NOT_FOUND** when candidate with given id not found * **JOB_NOT_FOUND** when job with given id not found * **APPLICATION_NOT_FOUND** when application for given candidate id and job id not found
- `500` — Unexpected error

---

[API](https://skmtc.net/smartrecruiters/apis/apply-api.md) · [All operations](https://skmtc.net/smartrecruiters/apis/apply-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/smartrecruiters/apply-api/revisions/449bdc2516c9/schema)
