Overview
The Interviews API enables you to schedule AI-powered interview sessions for your candidates. Each interview is conducted by an AI agent and produces detailed transcripts, recordings, and candidate analysis.Resource Structure
Required Scopes
| Operation | Required Scope | Additional |
|---|---|---|
| List interviews | read:interviews | read:candidates, read:agents |
| Get interview by ID | read:interviews | |
| Create interview | write:interviews | read:candidates, read:agents |
| Delete interview | delete:interviews |
Creating Interviews
With Existing Candidate and Agent
Job Selection: When using an existing
candidateId, you can optionally
specify jobId to indicate which job the interview is for. This is
required when the candidate is associated with multiple jobs. The jobId
must exist in the candidate’s job_ids array.With Inline Candidate
Create an interview with a candidate that doesn’t exist yet. You can optionally associate the candidate with a job: With Job Association:Inline Candidate Fields: The
gdprExpiryDate field is required for inline
candidates and must be a valid ISO 8601 date string representing when the
candidate’s data will expire per GDPR. The jobId field is optional—omit it
to add the candidate to your candidate pool without job association. You can
assign them to jobs later using the update candidate
endpoint.With Inline Job (Existing Candidate)
Create an interview for an existing candidate while defining the job inline. This is useful when you know the job details but don’t want to create a separate job resource first.Inline Job Fields: -
jobTitle is required and must be between 5–200
characters. - Arrays like requiredSkills and niceToHaveSkills accept up to
10 skills each; each skill is a non-empty string up to 128 characters.
Combined total cannot exceed 10 skills. - Enum fields (such as languages,
education, experience, contractType) use the same values as the Jobs
API. - Nested objects location and salary reuse the core Job DTOs, so data
stored is identical to jobs created via the Jobs API. The inline job is
persisted as a regular Job entity during interview creation, and the
interview is linked to this job.XOR with
jobId: - Use jobId when you already have a job created. - Use
job when you want to define the job inline. - You must not send both jobId
and job in the same request (XOR behavior).With Inline Candidate and Inline Job
Create a complete interview with both candidate and job defined inline. This is the most streamlined approach when you have all the necessary information:Complete Inline Workflow: When combining
candidate with job: - A new
Job entity is created in your company - A new Candidate entity is
created and automatically linked to the new job - The Interview is
associated with both the new candidate and job - All entities are persisted as
permanent resources - This eliminates the need to create candidates or jobs
separately before scheduling interviewsJob Specification Methods: You have multiple flexible ways to specify the
job: 1. Inline job creation: Use
job at the DTO level to define and
create the job in one request 2. Existing job reference: Use jobId at
the DTO level when you have a pre-existing job 3. Compact syntax: Use
jobId within candidate for a more concise payload when creating a new
candidate Priority order: If multiple sources are provided, job > DTO
jobId > candidate.jobId Important: Do not combine candidate.jobId
with DTO-level job fields (jobId or job) in the same request, as this
creates ambiguity about which job to use.Scheduling
ThescheduleTime field is optional. Omit it to start the interview immediately, or provide a future timestamp to schedule it.
Deleting Interviews
Interviews can be deleted to remove them from list and get operations.Deleting an interview removes it from list and get operations. The interview will no longer appear in API queries.
Interview Status
- scheduled
- in_progress
- completed
- cancelled
- failed
Waiting for start time - Interview is scheduled for future - Reminders will
be sent
Retrieving Results
Get Interview with Analysis
List Candidate’s Interviews
Analysis Structure
The analysis object provides comprehensive candidate evaluation. It contains ageneral object with overall assessment and an optional specific object for interview-type-specific data.
General Analysis Fields
| Field | Type | Description |
|---|---|---|
overallRating | number | Overall rating (0-100) |
companyFitRating | string | Company fit: UNDEFINED, LOW, MEDIUM, HIGH |
education | string | Education level (see enum values below) |
experience | string | Experience level (see enum values below) |
strongPoints | string[] | Candidate’s strong points and advantages |
weakPoints | string[] | Areas for improvement |
evaluation | string[] | Overall evaluation summary and recommendations |
status | number | Analysis status: 1=PENDING, 2=PROCESSING, 3=COMPLETED, 4=FAILED |
createdAt | string | ISO 8601 timestamp |
updatedAt | string | ISO 8601 timestamp |
UNDEFINED, PRIMARY_EDUCATION, SECONDARY_SCHOOL_STUDENT, SECONDARY_WITHOUT_DIPLOMA, SECONDARY_WITH_DIPLOMA, POST_SECONDARY_VOCATIONAL, UNIVERSITY_STUDENT, BACHELOR_LEVEL, MASTER_LEVEL, POSTGRADUATE
Experience Level Values: UNDEFINED, NO_EXPERIENCE, LESS_THAN_1_YEAR, ONE_TO_3_YEARS, THREE_TO_5_YEARS, FIVE_TO_10_YEARS, TEN_TO_15_YEARS, MORE_THAN_15_YEARS
Interview Types & Analysis
Thespecific field in the analysis contains interview-type-specific data based on the agent’s focus. There are four interview types:
- SCREENING
- OUTREACH
- GENERIC
- LANGUAGE_TEST
Standard candidate screening interviewUsed for evaluating candidates against job requirements. The analysis uses only the
general fields—there is no specific data.Best Practices
Check Billing
Verify billing limits before bulk scheduling
Set Realistic Times
Schedule with buffer time for candidate convenience
Monitor Status
Poll interview status for real-time updates
Store Analysis
Save analysis data to your database