Интервью
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"
}
Поля запроса
| Поле | Тип | Описание |
|---|---|---|
positionId | guid | Идентификатор вакансии, для которой создается интервью. |
firstName | string | Имя кандидата. |
lastName | string | Фамилия кандидата. |
patronymicName | string | Отчество кандидата. |
email | string | Email кандидата. |
phone | string | Телефон кандидата. |
telegram | string | Telegram кандидата. |
Ответ
{
"id": "22222222-2222-2222-2222-222222222222",
"interviewUrl": "https://xeniaai.com/interview?id=22222222-2222-2222-2222-222222222222"
}
| Поле | Тип | Описание |
|---|---|---|
id | guid | Идентификатор созданного интервью. |
interviewUrl | string | Ссылка для прохождения интервью кандидатом. |
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"
}
Поля запроса
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
positionId | guid | null | Фильтр по вакансии. |
minInterviewScore | number | null | Минимальная оценка за основное интервью, от 0 до 10. |
minCoverLetterScore | number | null | Минимальная оценка за сопроводительное письмо, от 0 до 10. |
minAnalyticalCaseScore | number | null | Минимальная оценка за аналитический кейс, от 0 до 10. |
withAnyScore | boolean | false | Если true, возвращаются только интервью, где есть хотя бы одна оценка. |
isArchived | boolean | null | Если поле не передано — без фильтра по архиву. false — только активные, true — только архивные. |
limit | number | 50 | Размер страницы. Значение нормализуется в диапазон от 10 до 200. |
offset | number | 0 | Смещение от начала списка. |
sortAscending | boolean | false | Если true, сортировка от старых записей к новым. |
createdFrom | string | null | Вернуть интервью, созданные не раньше указанной даты. |
createdTo | string | null | Вернуть интервью, созданные не позже указанной даты. |
Ответ
{
"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
}
]
}
Поля интервью в списке
| Поле | Тип | Описание |
|---|---|---|
id | guid | Идентификатор интервью. |
positionId | guid | Идентификатор вакансии. |
firstName | string или null | Имя кандидата. |
lastName | string или null | Фамилия кандидата. |
patronymicName | string или null | Отчество кандидата. |
email | string или null | Email кандидата. |
phone | string или null | Телефон кандидата. |
telegram | string или null | Telegram кандидата. |
questionsTotal | number | Всего вопросов в интервью. |
questionsAnswered | number | Количество отвеченных вопросов. |
score | number или null | Итоговая оценка за основное интервью. |
coverLetterScore | number или null | Оценка за сопроводительное письмо. |
analyticalCaseScore | number или null | Оценка за аналитический кейс. |
potentialCheatingCasesCount | number | Количество потенциальных подозрительных действий. |
createdOn | string | Дата создания интервью. |
startedOn | string или null | Дата, когда кандидат начал прохождение интервью. |
completedOn | string или null | Дата, когда кандидат завершил прохождение интервью. |
archivedOn | string или null | Дата архивации интервью, если интервью архивировано. |
hasNetworkIssues | boolean | Были ли зафиксированы сетевые проблемы. |
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"
}
]
}
}
Поля результата
| Поле | Тип | Описание |
|---|---|---|
id | guid | Идентификатор интервью. |
positionId | guid | Идентификатор вакансии, по которой создано интервью. |
positionTitle | string | Название вакансии. |
firstName | string или null | Имя кандидата. |
lastName | string или null | Фамилия кандидата. |
patronymicName | string или null | Отчество кандидата. |
email | string или null | Email кандидата. |
phone | string или null | Телефон кандидата. |
telegram | string или null | Telegram кандидата. |
lastWorkPlace | string или null | Последнее место работы кандидата, если оно указано. |
createdOn | string | Дата создания интервью. |
archivedOn | string или null | Дата архивации интервью, если интервью архивировано. |
hasNetworkIssues | boolean | Были ли зафиксированы сетевые проблемы во время прохождения. |
object[] | Общий список потенциальных подозрительных действий по интервью. | |
object | Результаты основного интервью. | |
object или null | Результат сопроводительного письма. Может быть null. | |
object или null | Результат аналитического кейса. Может быть null. |
duration возвращается в секундах.