Overview
Interviews define the structure and content of phone interviews. You can create standard interviews with audio questions or questionnaire-type interviews with survey questions.
Create Interview
Create a new interview (supports standard and questionnaire types).
Endpoint: POST /qsi/gather/interviews
curl -X POST https://api.prod.qualifi.hr/qsi/gather/interviews \
-H "x-api-key: ${API_KEY}" \
-H "Content-Type: application/json" \
-d "{
"title": "Software Engineer Interview",
"displayName": "Software Engineer Interview",
"interviewType": "standard",
"questionIds": ["uuid1", "uuid2"]
}'
const response = await fetch('https://api.prod.qualifi.hr/qsi/gather/interviews', {
method: 'POST',
headers: {
'x-api-key': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Software Engineer Interview',
displayName: 'Software Engineer Interview',
interviewType: 'standard',
questionIds: ['uuid1', 'uuid2']
})
});
const interview = await response.json();
response = requests.post(
'https://api.prod.qualifi.hr/qsi/gather/interviews',
headers={
'x-api-key': api_key,
'Content-Type': 'application/json'
},
json={
'title': 'Software Engineer Interview',
'displayName': 'Software Engineer Interview',
'interviewType': 'standard',
'questionIds': ['uuid1', 'uuid2']
}
)
interview = response.json()
{
"title": "Software Engineer Interview",
"displayName": "Software Engineer Interview",
"interviewType": "standard",
"description": "Technical interview for software engineering role",
"language": "en",
"questionIds": ["uuid1", "uuid2"]
}
Get Interview
Retrieve interview details including questions.
Endpoint: GET /qsi/gather/interviews/{interviewId}
{
"data": {
"id": "uuid",
"title": "Software Engineer Interview",
"displayName": "Software Engineer Interview",
"interviewType": "standard",
"status": "active",
"description": "Technical interview for software engineering role",
"language": "en",
"questions": [
{
"id": "uuid",
"title": "Tell me about yourself",
"ordinal": 1
}
],
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
"meta": {
"requestId": "uuid",
"timestamp": "2024-01-01T00:00:00Z"
}
}
List Interviews
List all interviews with pagination and filtering.
Endpoint: GET /qsi/gather/interviews
Items per page (default: 50, max: 100)
Include archived interviews (default: false)
Filter by type: "standard" or "questionnaire"
Filter by status: "active", "archived", etc.
{
"data": [
{
"id": "uuid",
"title": "Software Engineer Interview",
"interviewType": "standard",
"status": "active",
"createdAt": "2024-01-01T00:00:00Z"
}
],
"meta": {
"pagination": {
"page": 1,
"limit": 50,
"total": 100,
"totalPages": 2
},
"requestId": "uuid",
"timestamp": "2024-01-01T00:00:00Z"
}
}
Update Interview
Update interview properties (can add/remove questions).
Endpoint: PATCH /qsi/gather/interviews/{interviewId}
UUID of the interview to update
{
"title": "Updated Interview Title",
"questionIds": ["uuid1", "uuid2", "uuid3"]
}
Delete Interview
Archive an interview.
Endpoint: DELETE /qsi/gather/interviews/{interviewId}
UUID of the interview to archive
{
"data": {
"id": "uuid",
"archivedAt": "2024-01-01T00:00:00Z",
"status": "archived"
},
"meta": {
"requestId": "uuid",
"timestamp": "2024-01-01T00:00:00Z"
}
}
Copy Interview
Copy an interview template to a different team (or the same team with a “(copy)” suffix). The copied interview includes all questions, survey questions, AI text questions, keywords (optional), score card templates, and AI interview configurations.
Endpoint: POST /qsi/gather/interviews/{interviewId}/copy
UUID of the interview to copy
curl -X POST https://api.prod.qualifi.hr/qsi/gather/interviews/{interviewId}/copy \
-H "x-api-key: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"teamId": "target-team-uuid",
"copyKeywords": false
}'
const response = await fetch(
`https://api.prod.qualifi.hr/qsi/gather/interviews/${interviewId}/copy`,
{
method: 'POST',
headers: {
'x-api-key': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
teamId: 'target-team-uuid',
copyKeywords: false
})
}
);
const interview = await response.json();
response = requests.post(
f'https://api.prod.qualifi.hr/qsi/gather/interviews/{interview_id}/copy',
headers={
'x-api-key': api_key,
'Content-Type': 'application/json'
},
json={
'teamId': 'target-team-uuid',
'copyKeywords': False
}
)
interview = response.json()
{
"teamId": "target-team-uuid",
"copyKeywords": false,
"messageGroupId": "message-group-uuid"
}
Copy Behavior
Questions:
- Different Team: Questions are copied as new questions in the target team
- Same Team: Questions are reused (not duplicated)
Survey Questions:
- Different Team: Survey questions are copied with all options and preferred options
- Same Team: Survey questions are reused
AI Text Questions:
- Different Team: AI text questions are copied as new questions
- Same Team: AI text questions are reused
Keywords:
- Only copied if
copyKeywords: true
- Creates new keyword associations for the copied interview
Score Card Templates:
- All score card templates are copied to the new interview
AI Interview Configuration:
- For AI interviews, a new Tavus persona is created
- AI configuration is copied with the new persona ID
- Original persona is not modified
MessageGroup:
- If
messageGroupId is provided, it will be used
- If not provided, the default message group for the interview type will be used
When copying to the same team, the interview title will automatically have
“(copy)” appended to avoid conflicts.
Interview Types
Standard Interviews
Standard interviews use audio questions that are played to candidates during phone calls.
Questionnaire Interviews
Questionnaire interviews use survey questions that candidates answer via web interface.
You can mix question types in standard interviews, but questionnaire-type
interviews are specifically designed for survey-style questions.