Перейти к основному содержимому

Интервью

POST /interview​

Создает интервью для кандидата на выбранную вакансию. В ответе возвращается идентификатор созданного интервью и ссылка, которую можно отправить кандидату для прохождения.

Запрос​

POST https://api.xeniaai.com/openapi/v1/interview
Content-Type: application/json
X-API-KEY: <YOUR_API_KEY>
{
"positionId": "11111111-1111-1111-1111-111111111111",
"firstName": "Анна",
"lastName": "Иванова",
"patronymicName": "Сергеевна",
"email": "anna.ivanova@example.com",
"phone": "+79990000000",
"telegram": "@anna_ivanova"
}

Поля запроса​

ПолеТипОписание
positionIdguidИдентификатор вакансии, для которой создается интервью.
firstNamestringИмя кандидата.
lastNamestringФамилия кандидата.
patronymicNamestringОтчество кандидата.
emailstringEmail кандидата.
phonestringТелефон кандидата.
telegramstringTelegram кандидата.

Ответ​

{
"id": "22222222-2222-2222-2222-222222222222",
"interviewUrl": "https://xeniaai.com/interview?id=22222222-2222-2222-2222-222222222222"
}
ПолеТипОписание
idguidИдентификатор созданного интервью.
interviewUrlstringСсылка для прохождения интервью кандидатом.

POST /interviews​

Возвращает список интервью и кандидатов. Метод подходит для регулярной синхронизации статусов и результатов.

Запрос​

POST https://api.xeniaai.com/openapi/v1/interviews
Content-Type: application/json
X-API-KEY: <YOUR_API_KEY>
{
"positionId": "11111111-1111-1111-1111-111111111111",
"minInterviewScore": 6,
"minCoverLetterScore": null,
"minAnalyticalCaseScore": null,
"withAnyScore": true,
"isArchived": false,
"limit": 50,
"offset": 0,
"sortAscending": false,
"createdFrom": "2026-01-01T00:00:00Z",
"createdTo": "2026-12-31T23:59:59Z"
}

Поля запроса​

ПолеТипПо умолчаниюОписание
positionIdguidnullФильтр по вакансии.
minInterviewScorenumbernullМинимальная оценка за основное интервью, от 0 до 10.
minCoverLetterScorenumbernullМинимальная оценка за сопроводительное письмо, от 0 до 10.
minAnalyticalCaseScorenumbernullМинимальная оценка за аналитический кейс, от 0 до 10.
withAnyScorebooleanfalseЕсли true, возвращаются только интервью, где есть хотя бы одна оценка.
isArchivedbooleannullЕсли поле не передано — без фильтра по архиву. false — только активные, true — только архивные.
limitnumber50Размер страницы. Значение нормализуется в диапазон от 10 до 200.
offsetnumber0Смещение от начала списка.
sortAscendingbooleanfalseЕсли true, сортировка от старых записей к новым.
createdFromstringnullВернуть интервью, созданные не раньше указанной даты.
createdTostringnullВернуть интервью, созданные не позже указанной даты.

Ответ​

{
"total": 1,
"limit": 50,
"offset": 0,
"items": [
{
"id": "22222222-2222-2222-2222-222222222222",
"positionId": "11111111-1111-1111-1111-111111111111",
"firstName": "Анна",
"lastName": "Иванова",
"patronymicName": "Сергеевна",
"email": "anna.ivanova@example.com",
"phone": "+79990000000",
"telegram": "@anna_ivanova",
"questionsTotal": 10,
"questionsAnswered": 10,
"score": 8.2,
"coverLetterScore": 7.5,
"analyticalCaseScore": null,
"potentialCheatingCasesCount": 0,
"createdOn": "2026-04-10T12:00:00Z",
"startedOn": "2026-04-10T12:15:00Z",
"completedOn": "2026-04-10T12:45:00Z",
"archivedOn": null,
"hasNetworkIssues": false
}
]
}

Поля интервью в списке​

ПолеТипОписание
idguidИдентификатор интервью.
positionIdguidИдентификатор вакансии.
firstNamestring или nullИмя кандидата.
lastNamestring или nullФамилия кандидата.
patronymicNamestring или nullОтчество кандидата.
emailstring или nullEmail кандидата.
phonestring или nullТелефон кандидата.
telegramstring или nullTelegram кандидата.
questionsTotalnumberВсего вопросов в интервью.
questionsAnswerednumberКоличество отвеченных вопросов.
scorenumber или nullИтоговая оценка за основное интервью.
coverLetterScorenumber или nullОценка за сопроводительное письмо.
analyticalCaseScorenumber или nullОценка за аналитический кейс.
potentialCheatingCasesCountnumberКоличество потенциальных подозрительных действий.
createdOnstringДата создания интервью.
startedOnstring или nullДата, когда кандидат начал прохождение интервью.
completedOnstring или nullДата, когда кандидат завершил прохождение интервью.
archivedOnstring или nullДата архивации интервью, если интервью архивировано.
hasNetworkIssuesbooleanБыли ли зафиксированы сетевые проблемы.

GET /interviews/{id}​

Возвращает подробные результаты конкретного интервью: данные кандидата, ответы, оценки, AI-резюме, результаты сопроводительного письма и аналитического кейса.

Запрос​

GET https://api.xeniaai.com/openapi/v1/interviews/22222222-2222-2222-2222-222222222222
X-API-KEY: <YOUR_API_KEY>

Ответ​

{
"id": "22222222-2222-2222-2222-222222222222",
"positionId": "11111111-1111-1111-1111-111111111111",
"positionTitle": "Backend Developer",
"firstName": "Анна",
"lastName": "Иванова",
"patronymicName": "Сергеевна",
"email": "anna.ivanova@example.com",
"phone": "+79990000000",
"telegram": "@anna_ivanova",
"lastWorkPlace": "Example LLC",
"createdOn": "2026-04-10T12:00:00Z",
"archivedOn": null,
"hasNetworkIssues": false,
"potentialCheatingCases": [],
"interviewResult": {
"score": 8.2,
"startedOn": "2026-04-10T12:15:00Z",
"completedOn": "2026-04-10T12:45:00Z",
"questionsTotal": 10,
"questionsAnswered": 10,
"aiSummary": "Кандидат уверенно отвечает на вопросы по .NET и SQL.",
"duration": 1800,
"feedbackStars": 5,
"feedbackText": "Удобный формат интервью.",
"answers": [
{
"index": 0,
"questionId": "33333333-3333-3333-3333-333333333333",
"questionText": "Расскажите про опыт оптимизации SQL-запросов.",
"answerText": "Я использовала индексы, анализ планов выполнения и оптимизацию JOIN.",
"score": 8,
"aiSummary": "Ответ содержит практические примеры.",
"weight": 3,
"submittedOn": "2026-04-10T12:20:00Z",
"isSkipped": false,
"potentialCheatingCases": [],
"audioUrl": "https://storage.example.com/audio.mp3",
"videoUrl": null,
"imageUrl": null
}
]
},
"coverLetterResult": {
"answerText": "Мне интересна роль, потому что...",
"score": 7.5,
"aiSummary": "Мотивация релевантна вакансии.",
"createdOn": "2026-04-10T12:00:00Z",
"submittedOn": "2026-04-10T12:10:00Z",
"updatedOn": "2026-04-10T12:10:00Z",
"duration": 600,
"potentialCheatingCases": [],
"criteria": [
{
"name": "Мотивация",
"instruction": "Оцените релевантность мотивации кандидата.",
"type": 0,
"weight": 2,
"orderIndex": 0,
"score": 8,
"aiSummary": "Мотивация хорошо раскрыта.",
"createdOn": "2026-04-01T09:15:00Z",
"updatedOn": "2026-04-10T12:10:00Z"
}
]
},
"analyticalCaseResult": {
"caseText": "Проанализируйте падение конверсии в обучающем продукте.",
"score": 8,
"aiSummary": "Кандидат структурно описал гипотезы и предложил метрики для проверки.",
"createdOn": "2026-04-10T12:00:00Z",
"startedOn": "2026-04-10T12:50:00Z",
"completedOn": "2026-04-10T13:30:00Z",
"updatedOn": "2026-04-10T13:30:00Z",
"duration": 2400,
"potentialCheatingCases": [],
"answers": [
{
"orderIndex": 0,
"questionText": "Какие гипотезы вы проверите в первую очередь?",
"questionContext": "Оцените структурность и бизнес-логику ответа.",
"answerText": "Сначала проверю источники трафика, изменения в продукте и качество лидов.",
"score": 8,
"aiSummary": "Ответ логичный и привязан к бизнес-метрикам.",
"submittedOn": "2026-04-10T13:25:00Z",
"isSkipped": false,
"imageUrl": null,
"createdOn": "2026-04-10T12:50:00Z",
"updatedOn": "2026-04-10T13:25:00Z"
}
]
}
}

Поля результата​

ПолеТипОписание
idguidИдентификатор интервью.
positionIdguidИдентификатор вакансии, по которой создано интервью.
positionTitlestringНазвание вакансии.
firstNamestring или nullИмя кандидата.
lastNamestring или nullФамилия кандидата.
patronymicNamestring или nullОтчество кандидата.
emailstring или nullEmail кандидата.
phonestring или nullТелефон кандидата.
telegramstring или nullTelegram кандидата.
lastWorkPlacestring или nullПоследнее место работы кандидата, если оно указано.
createdOnstringДата создания интервью.
archivedOnstring или nullДата архивации интервью, если интервью архивировано.
hasNetworkIssuesbooleanБыли ли зафиксированы сетевые проблемы во время прохождения.
object[]Общий список потенциальных подозрительных действий по интервью.
objectРезультаты основного интервью.
object или nullРезультат сопроводительного письма. Может быть null.
object или nullРезультат аналитического кейса. Может быть null.

duration возвращается в секундах.