curl --request POST \
--url https://cool.jobmojito.com/functions/v1/job-interview-update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"position_id": "00000000-0000-0000-0000-000000000000",
"status": "active",
"visibility": "merchant_public",
"name": "Project manager",
"code": "<string>",
"location": "remote",
"cover_image_url": "<string>",
"description": "<string>",
"description_long": "<string>",
"interview_department": "Engineering",
"interview_salary": "$80k - $100k",
"interview_available_till": "2026-12-31",
"recruiter_profile_id": "<string>",
"tags": [
"interview-practice",
"sales"
],
"questions": [
{
"question": "<string>",
"id": "<string>",
"duration": 123,
"mojito_language_code": "en",
"label": "<string>",
"is_conditional": true,
"is_without_scoring": true,
"is_candidate_asking_recruiter": true,
"is_expert": true,
"is_multiple_choice": true,
"question_alternatives": [
"<string>"
],
"conditional_question_main_id": "<string>",
"knowledge_base_id": "<string>",
"external_id": "<string>",
"external_data": {},
"candidate_expectations_json": {
"weak": [
"<string>"
],
"moderate": [
"<string>"
],
"strong": [
"<string>"
]
}
}
],
"regenerate_candidate_expectations": false,
"type": "interview",
"type_credit": "interview_coach_manager",
"coach_plan": "screening",
"interview_template_id": "46b98d37-1557-4391-beca-03037ead19f2",
"knowledge_base_store_id": "<string>",
"recording": "video_all",
"recording_full_session": "video_all",
"result_view": "full",
"interview_conversation_speed": "normal",
"max_followups": 2,
"max_duration": 1200,
"questions_random_subset": 0.5,
"interview_attempts": 1,
"required_pronunciation": true,
"result_enable_edit_transcript": true,
"candidate_expectations": "<string>",
"candidate_expectations_json": {
"weak": [
"<string>"
],
"moderate": [
"<string>"
],
"strong": [
"<string>"
]
},
"custom_scoring": {},
"pdf_export_auto_config": {
"mojito_language_code": "en",
"contact_details": true,
"ai_recruiter_assessment": true,
"ai_scoring_rubric": true,
"analytics": true,
"files": true,
"transcript": true,
"answer_recording": true,
"session_recording": true,
"group_by_question": true
},
"interview_type": "pre-screening-with-test-questions",
"interview_tone": "professional",
"seniority_level": "senior",
"hiring_for_company": {
"name": "undisclosed"
}
}
'import requests
url = "https://cool.jobmojito.com/functions/v1/job-interview-update"
payload = {
"position_id": "00000000-0000-0000-0000-000000000000",
"status": "active",
"visibility": "merchant_public",
"name": "Project manager",
"code": "<string>",
"location": "remote",
"cover_image_url": "<string>",
"description": "<string>",
"description_long": "<string>",
"interview_department": "Engineering",
"interview_salary": "$80k - $100k",
"interview_available_till": "2026-12-31",
"recruiter_profile_id": "<string>",
"tags": ["interview-practice", "sales"],
"questions": [
{
"question": "<string>",
"id": "<string>",
"duration": 123,
"mojito_language_code": "en",
"label": "<string>",
"is_conditional": True,
"is_without_scoring": True,
"is_candidate_asking_recruiter": True,
"is_expert": True,
"is_multiple_choice": True,
"question_alternatives": ["<string>"],
"conditional_question_main_id": "<string>",
"knowledge_base_id": "<string>",
"external_id": "<string>",
"external_data": {},
"candidate_expectations_json": {
"weak": ["<string>"],
"moderate": ["<string>"],
"strong": ["<string>"]
}
}
],
"regenerate_candidate_expectations": False,
"type": "interview",
"type_credit": "interview_coach_manager",
"coach_plan": "screening",
"interview_template_id": "46b98d37-1557-4391-beca-03037ead19f2",
"knowledge_base_store_id": "<string>",
"recording": "video_all",
"recording_full_session": "video_all",
"result_view": "full",
"interview_conversation_speed": "normal",
"max_followups": 2,
"max_duration": 1200,
"questions_random_subset": 0.5,
"interview_attempts": 1,
"required_pronunciation": True,
"result_enable_edit_transcript": True,
"candidate_expectations": "<string>",
"candidate_expectations_json": {
"weak": ["<string>"],
"moderate": ["<string>"],
"strong": ["<string>"]
},
"custom_scoring": {},
"pdf_export_auto_config": {
"mojito_language_code": "en",
"contact_details": True,
"ai_recruiter_assessment": True,
"ai_scoring_rubric": True,
"analytics": True,
"files": True,
"transcript": True,
"answer_recording": True,
"session_recording": True,
"group_by_question": True
},
"interview_type": "pre-screening-with-test-questions",
"interview_tone": "professional",
"seniority_level": "senior",
"hiring_for_company": { "name": "undisclosed" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
position_id: '00000000-0000-0000-0000-000000000000',
status: 'active',
visibility: 'merchant_public',
name: 'Project manager',
code: '<string>',
location: 'remote',
cover_image_url: '<string>',
description: '<string>',
description_long: '<string>',
interview_department: 'Engineering',
interview_salary: '$80k - $100k',
interview_available_till: '2026-12-31',
recruiter_profile_id: '<string>',
tags: ['interview-practice', 'sales'],
questions: [
{
question: '<string>',
id: '<string>',
duration: 123,
mojito_language_code: 'en',
label: '<string>',
is_conditional: true,
is_without_scoring: true,
is_candidate_asking_recruiter: true,
is_expert: true,
is_multiple_choice: true,
question_alternatives: ['<string>'],
conditional_question_main_id: '<string>',
knowledge_base_id: '<string>',
external_id: '<string>',
external_data: {},
candidate_expectations_json: {weak: ['<string>'], moderate: ['<string>'], strong: ['<string>']}
}
],
regenerate_candidate_expectations: false,
type: 'interview',
type_credit: 'interview_coach_manager',
coach_plan: 'screening',
interview_template_id: '46b98d37-1557-4391-beca-03037ead19f2',
knowledge_base_store_id: '<string>',
recording: 'video_all',
recording_full_session: 'video_all',
result_view: 'full',
interview_conversation_speed: 'normal',
max_followups: 2,
max_duration: 1200,
questions_random_subset: 0.5,
interview_attempts: 1,
required_pronunciation: true,
result_enable_edit_transcript: true,
candidate_expectations: '<string>',
candidate_expectations_json: {weak: ['<string>'], moderate: ['<string>'], strong: ['<string>']},
custom_scoring: {},
pdf_export_auto_config: {
mojito_language_code: 'en',
contact_details: true,
ai_recruiter_assessment: true,
ai_scoring_rubric: true,
analytics: true,
files: true,
transcript: true,
answer_recording: true,
session_recording: true,
group_by_question: true
},
interview_type: 'pre-screening-with-test-questions',
interview_tone: 'professional',
seniority_level: 'senior',
hiring_for_company: {name: 'undisclosed'}
})
};
fetch('https://cool.jobmojito.com/functions/v1/job-interview-update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cool.jobmojito.com/functions/v1/job-interview-update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'position_id' => '00000000-0000-0000-0000-000000000000',
'status' => 'active',
'visibility' => 'merchant_public',
'name' => 'Project manager',
'code' => '<string>',
'location' => 'remote',
'cover_image_url' => '<string>',
'description' => '<string>',
'description_long' => '<string>',
'interview_department' => 'Engineering',
'interview_salary' => '$80k - $100k',
'interview_available_till' => '2026-12-31',
'recruiter_profile_id' => '<string>',
'tags' => [
'interview-practice',
'sales'
],
'questions' => [
[
'question' => '<string>',
'id' => '<string>',
'duration' => 123,
'mojito_language_code' => 'en',
'label' => '<string>',
'is_conditional' => true,
'is_without_scoring' => true,
'is_candidate_asking_recruiter' => true,
'is_expert' => true,
'is_multiple_choice' => true,
'question_alternatives' => [
'<string>'
],
'conditional_question_main_id' => '<string>',
'knowledge_base_id' => '<string>',
'external_id' => '<string>',
'external_data' => [
],
'candidate_expectations_json' => [
'weak' => [
'<string>'
],
'moderate' => [
'<string>'
],
'strong' => [
'<string>'
]
]
]
],
'regenerate_candidate_expectations' => false,
'type' => 'interview',
'type_credit' => 'interview_coach_manager',
'coach_plan' => 'screening',
'interview_template_id' => '46b98d37-1557-4391-beca-03037ead19f2',
'knowledge_base_store_id' => '<string>',
'recording' => 'video_all',
'recording_full_session' => 'video_all',
'result_view' => 'full',
'interview_conversation_speed' => 'normal',
'max_followups' => 2,
'max_duration' => 1200,
'questions_random_subset' => 0.5,
'interview_attempts' => 1,
'required_pronunciation' => true,
'result_enable_edit_transcript' => true,
'candidate_expectations' => '<string>',
'candidate_expectations_json' => [
'weak' => [
'<string>'
],
'moderate' => [
'<string>'
],
'strong' => [
'<string>'
]
],
'custom_scoring' => [
],
'pdf_export_auto_config' => [
'mojito_language_code' => 'en',
'contact_details' => true,
'ai_recruiter_assessment' => true,
'ai_scoring_rubric' => true,
'analytics' => true,
'files' => true,
'transcript' => true,
'answer_recording' => true,
'session_recording' => true,
'group_by_question' => true
],
'interview_type' => 'pre-screening-with-test-questions',
'interview_tone' => 'professional',
'seniority_level' => 'senior',
'hiring_for_company' => [
'name' => 'undisclosed'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cool.jobmojito.com/functions/v1/job-interview-update"
payload := strings.NewReader("{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"status\": \"active\",\n \"visibility\": \"merchant_public\",\n \"name\": \"Project manager\",\n \"code\": \"<string>\",\n \"location\": \"remote\",\n \"cover_image_url\": \"<string>\",\n \"description\": \"<string>\",\n \"description_long\": \"<string>\",\n \"interview_department\": \"Engineering\",\n \"interview_salary\": \"$80k - $100k\",\n \"interview_available_till\": \"2026-12-31\",\n \"recruiter_profile_id\": \"<string>\",\n \"tags\": [\n \"interview-practice\",\n \"sales\"\n ],\n \"questions\": [\n {\n \"question\": \"<string>\",\n \"id\": \"<string>\",\n \"duration\": 123,\n \"mojito_language_code\": \"en\",\n \"label\": \"<string>\",\n \"is_conditional\": true,\n \"is_without_scoring\": true,\n \"is_candidate_asking_recruiter\": true,\n \"is_expert\": true,\n \"is_multiple_choice\": true,\n \"question_alternatives\": [\n \"<string>\"\n ],\n \"conditional_question_main_id\": \"<string>\",\n \"knowledge_base_id\": \"<string>\",\n \"external_id\": \"<string>\",\n \"external_data\": {},\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n }\n }\n ],\n \"regenerate_candidate_expectations\": false,\n \"type\": \"interview\",\n \"type_credit\": \"interview_coach_manager\",\n \"coach_plan\": \"screening\",\n \"interview_template_id\": \"46b98d37-1557-4391-beca-03037ead19f2\",\n \"knowledge_base_store_id\": \"<string>\",\n \"recording\": \"video_all\",\n \"recording_full_session\": \"video_all\",\n \"result_view\": \"full\",\n \"interview_conversation_speed\": \"normal\",\n \"max_followups\": 2,\n \"max_duration\": 1200,\n \"questions_random_subset\": 0.5,\n \"interview_attempts\": 1,\n \"required_pronunciation\": true,\n \"result_enable_edit_transcript\": true,\n \"candidate_expectations\": \"<string>\",\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n },\n \"custom_scoring\": {},\n \"pdf_export_auto_config\": {\n \"mojito_language_code\": \"en\",\n \"contact_details\": true,\n \"ai_recruiter_assessment\": true,\n \"ai_scoring_rubric\": true,\n \"analytics\": true,\n \"files\": true,\n \"transcript\": true,\n \"answer_recording\": true,\n \"session_recording\": true,\n \"group_by_question\": true\n },\n \"interview_type\": \"pre-screening-with-test-questions\",\n \"interview_tone\": \"professional\",\n \"seniority_level\": \"senior\",\n \"hiring_for_company\": {\n \"name\": \"undisclosed\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cool.jobmojito.com/functions/v1/job-interview-update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"status\": \"active\",\n \"visibility\": \"merchant_public\",\n \"name\": \"Project manager\",\n \"code\": \"<string>\",\n \"location\": \"remote\",\n \"cover_image_url\": \"<string>\",\n \"description\": \"<string>\",\n \"description_long\": \"<string>\",\n \"interview_department\": \"Engineering\",\n \"interview_salary\": \"$80k - $100k\",\n \"interview_available_till\": \"2026-12-31\",\n \"recruiter_profile_id\": \"<string>\",\n \"tags\": [\n \"interview-practice\",\n \"sales\"\n ],\n \"questions\": [\n {\n \"question\": \"<string>\",\n \"id\": \"<string>\",\n \"duration\": 123,\n \"mojito_language_code\": \"en\",\n \"label\": \"<string>\",\n \"is_conditional\": true,\n \"is_without_scoring\": true,\n \"is_candidate_asking_recruiter\": true,\n \"is_expert\": true,\n \"is_multiple_choice\": true,\n \"question_alternatives\": [\n \"<string>\"\n ],\n \"conditional_question_main_id\": \"<string>\",\n \"knowledge_base_id\": \"<string>\",\n \"external_id\": \"<string>\",\n \"external_data\": {},\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n }\n }\n ],\n \"regenerate_candidate_expectations\": false,\n \"type\": \"interview\",\n \"type_credit\": \"interview_coach_manager\",\n \"coach_plan\": \"screening\",\n \"interview_template_id\": \"46b98d37-1557-4391-beca-03037ead19f2\",\n \"knowledge_base_store_id\": \"<string>\",\n \"recording\": \"video_all\",\n \"recording_full_session\": \"video_all\",\n \"result_view\": \"full\",\n \"interview_conversation_speed\": \"normal\",\n \"max_followups\": 2,\n \"max_duration\": 1200,\n \"questions_random_subset\": 0.5,\n \"interview_attempts\": 1,\n \"required_pronunciation\": true,\n \"result_enable_edit_transcript\": true,\n \"candidate_expectations\": \"<string>\",\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n },\n \"custom_scoring\": {},\n \"pdf_export_auto_config\": {\n \"mojito_language_code\": \"en\",\n \"contact_details\": true,\n \"ai_recruiter_assessment\": true,\n \"ai_scoring_rubric\": true,\n \"analytics\": true,\n \"files\": true,\n \"transcript\": true,\n \"answer_recording\": true,\n \"session_recording\": true,\n \"group_by_question\": true\n },\n \"interview_type\": \"pre-screening-with-test-questions\",\n \"interview_tone\": \"professional\",\n \"seniority_level\": \"senior\",\n \"hiring_for_company\": {\n \"name\": \"undisclosed\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cool.jobmojito.com/functions/v1/job-interview-update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"status\": \"active\",\n \"visibility\": \"merchant_public\",\n \"name\": \"Project manager\",\n \"code\": \"<string>\",\n \"location\": \"remote\",\n \"cover_image_url\": \"<string>\",\n \"description\": \"<string>\",\n \"description_long\": \"<string>\",\n \"interview_department\": \"Engineering\",\n \"interview_salary\": \"$80k - $100k\",\n \"interview_available_till\": \"2026-12-31\",\n \"recruiter_profile_id\": \"<string>\",\n \"tags\": [\n \"interview-practice\",\n \"sales\"\n ],\n \"questions\": [\n {\n \"question\": \"<string>\",\n \"id\": \"<string>\",\n \"duration\": 123,\n \"mojito_language_code\": \"en\",\n \"label\": \"<string>\",\n \"is_conditional\": true,\n \"is_without_scoring\": true,\n \"is_candidate_asking_recruiter\": true,\n \"is_expert\": true,\n \"is_multiple_choice\": true,\n \"question_alternatives\": [\n \"<string>\"\n ],\n \"conditional_question_main_id\": \"<string>\",\n \"knowledge_base_id\": \"<string>\",\n \"external_id\": \"<string>\",\n \"external_data\": {},\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n }\n }\n ],\n \"regenerate_candidate_expectations\": false,\n \"type\": \"interview\",\n \"type_credit\": \"interview_coach_manager\",\n \"coach_plan\": \"screening\",\n \"interview_template_id\": \"46b98d37-1557-4391-beca-03037ead19f2\",\n \"knowledge_base_store_id\": \"<string>\",\n \"recording\": \"video_all\",\n \"recording_full_session\": \"video_all\",\n \"result_view\": \"full\",\n \"interview_conversation_speed\": \"normal\",\n \"max_followups\": 2,\n \"max_duration\": 1200,\n \"questions_random_subset\": 0.5,\n \"interview_attempts\": 1,\n \"required_pronunciation\": true,\n \"result_enable_edit_transcript\": true,\n \"candidate_expectations\": \"<string>\",\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n },\n \"custom_scoring\": {},\n \"pdf_export_auto_config\": {\n \"mojito_language_code\": \"en\",\n \"contact_details\": true,\n \"ai_recruiter_assessment\": true,\n \"ai_scoring_rubric\": true,\n \"analytics\": true,\n \"files\": true,\n \"transcript\": true,\n \"answer_recording\": true,\n \"session_recording\": true,\n \"group_by_question\": true\n },\n \"interview_type\": \"pre-screening-with-test-questions\",\n \"interview_tone\": \"professional\",\n \"seniority_level\": \"senior\",\n \"hiring_for_company\": {\n \"name\": \"undisclosed\"\n }\n}"
response = http.request(request)
puts response.read_body{
"position_id": "<string>",
"is_multistage": true,
"updated_fields": [
"name",
"tags"
],
"questions_diff": {
"kept": [
"<string>"
],
"added": [
"<string>"
],
"removed": [
"<string>"
],
"replaced": [
{
"from": "<string>",
"to": "<string>"
}
],
"question_ids": [
"<string>"
],
"reactivated": true
}
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}Update an interview or position
Updates the configuration of an existing interview (single-stage) or position (multi-stage). Only the fields present in the request body are written — everything else keeps its current value, and sending null clears a nullable field. The question list is only touched when you send questions; omit that field and the questions are left exactly as they are. When sent, it must be the complete list and is applied as a diff against what is stored (matched on external_id, then id, then identical content), so unchanged questions keep their existing records, edited ones are unlinked and re-created, and dropped ones are unlinked — and re-sending the array job-interview-get returned changes nothing. See the field description, and questions_diff in the response for what was decided. Questions of an interview that is already active can only be changed on interactive avatar templates, where re-publishing is instant; on the offline (pre-rendered video) templates set the interview back to draft first. The welcome / thank-you messages and the instructional-video screen are stored as steps rather than questions and are never changed here. mojito_language_code cannot be changed — the existing questions and rendered videos are in the original language — so create a new interview to change language. A multi-stage position only carries the shared identity fields (name, code, location, description, description_long, cover_image_url, department, salary, available_till, recruiter, status, visibility, hiring_for_company); sending an interview-only field for a position is a 422.
curl --request POST \
--url https://cool.jobmojito.com/functions/v1/job-interview-update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"position_id": "00000000-0000-0000-0000-000000000000",
"status": "active",
"visibility": "merchant_public",
"name": "Project manager",
"code": "<string>",
"location": "remote",
"cover_image_url": "<string>",
"description": "<string>",
"description_long": "<string>",
"interview_department": "Engineering",
"interview_salary": "$80k - $100k",
"interview_available_till": "2026-12-31",
"recruiter_profile_id": "<string>",
"tags": [
"interview-practice",
"sales"
],
"questions": [
{
"question": "<string>",
"id": "<string>",
"duration": 123,
"mojito_language_code": "en",
"label": "<string>",
"is_conditional": true,
"is_without_scoring": true,
"is_candidate_asking_recruiter": true,
"is_expert": true,
"is_multiple_choice": true,
"question_alternatives": [
"<string>"
],
"conditional_question_main_id": "<string>",
"knowledge_base_id": "<string>",
"external_id": "<string>",
"external_data": {},
"candidate_expectations_json": {
"weak": [
"<string>"
],
"moderate": [
"<string>"
],
"strong": [
"<string>"
]
}
}
],
"regenerate_candidate_expectations": false,
"type": "interview",
"type_credit": "interview_coach_manager",
"coach_plan": "screening",
"interview_template_id": "46b98d37-1557-4391-beca-03037ead19f2",
"knowledge_base_store_id": "<string>",
"recording": "video_all",
"recording_full_session": "video_all",
"result_view": "full",
"interview_conversation_speed": "normal",
"max_followups": 2,
"max_duration": 1200,
"questions_random_subset": 0.5,
"interview_attempts": 1,
"required_pronunciation": true,
"result_enable_edit_transcript": true,
"candidate_expectations": "<string>",
"candidate_expectations_json": {
"weak": [
"<string>"
],
"moderate": [
"<string>"
],
"strong": [
"<string>"
]
},
"custom_scoring": {},
"pdf_export_auto_config": {
"mojito_language_code": "en",
"contact_details": true,
"ai_recruiter_assessment": true,
"ai_scoring_rubric": true,
"analytics": true,
"files": true,
"transcript": true,
"answer_recording": true,
"session_recording": true,
"group_by_question": true
},
"interview_type": "pre-screening-with-test-questions",
"interview_tone": "professional",
"seniority_level": "senior",
"hiring_for_company": {
"name": "undisclosed"
}
}
'import requests
url = "https://cool.jobmojito.com/functions/v1/job-interview-update"
payload = {
"position_id": "00000000-0000-0000-0000-000000000000",
"status": "active",
"visibility": "merchant_public",
"name": "Project manager",
"code": "<string>",
"location": "remote",
"cover_image_url": "<string>",
"description": "<string>",
"description_long": "<string>",
"interview_department": "Engineering",
"interview_salary": "$80k - $100k",
"interview_available_till": "2026-12-31",
"recruiter_profile_id": "<string>",
"tags": ["interview-practice", "sales"],
"questions": [
{
"question": "<string>",
"id": "<string>",
"duration": 123,
"mojito_language_code": "en",
"label": "<string>",
"is_conditional": True,
"is_without_scoring": True,
"is_candidate_asking_recruiter": True,
"is_expert": True,
"is_multiple_choice": True,
"question_alternatives": ["<string>"],
"conditional_question_main_id": "<string>",
"knowledge_base_id": "<string>",
"external_id": "<string>",
"external_data": {},
"candidate_expectations_json": {
"weak": ["<string>"],
"moderate": ["<string>"],
"strong": ["<string>"]
}
}
],
"regenerate_candidate_expectations": False,
"type": "interview",
"type_credit": "interview_coach_manager",
"coach_plan": "screening",
"interview_template_id": "46b98d37-1557-4391-beca-03037ead19f2",
"knowledge_base_store_id": "<string>",
"recording": "video_all",
"recording_full_session": "video_all",
"result_view": "full",
"interview_conversation_speed": "normal",
"max_followups": 2,
"max_duration": 1200,
"questions_random_subset": 0.5,
"interview_attempts": 1,
"required_pronunciation": True,
"result_enable_edit_transcript": True,
"candidate_expectations": "<string>",
"candidate_expectations_json": {
"weak": ["<string>"],
"moderate": ["<string>"],
"strong": ["<string>"]
},
"custom_scoring": {},
"pdf_export_auto_config": {
"mojito_language_code": "en",
"contact_details": True,
"ai_recruiter_assessment": True,
"ai_scoring_rubric": True,
"analytics": True,
"files": True,
"transcript": True,
"answer_recording": True,
"session_recording": True,
"group_by_question": True
},
"interview_type": "pre-screening-with-test-questions",
"interview_tone": "professional",
"seniority_level": "senior",
"hiring_for_company": { "name": "undisclosed" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
position_id: '00000000-0000-0000-0000-000000000000',
status: 'active',
visibility: 'merchant_public',
name: 'Project manager',
code: '<string>',
location: 'remote',
cover_image_url: '<string>',
description: '<string>',
description_long: '<string>',
interview_department: 'Engineering',
interview_salary: '$80k - $100k',
interview_available_till: '2026-12-31',
recruiter_profile_id: '<string>',
tags: ['interview-practice', 'sales'],
questions: [
{
question: '<string>',
id: '<string>',
duration: 123,
mojito_language_code: 'en',
label: '<string>',
is_conditional: true,
is_without_scoring: true,
is_candidate_asking_recruiter: true,
is_expert: true,
is_multiple_choice: true,
question_alternatives: ['<string>'],
conditional_question_main_id: '<string>',
knowledge_base_id: '<string>',
external_id: '<string>',
external_data: {},
candidate_expectations_json: {weak: ['<string>'], moderate: ['<string>'], strong: ['<string>']}
}
],
regenerate_candidate_expectations: false,
type: 'interview',
type_credit: 'interview_coach_manager',
coach_plan: 'screening',
interview_template_id: '46b98d37-1557-4391-beca-03037ead19f2',
knowledge_base_store_id: '<string>',
recording: 'video_all',
recording_full_session: 'video_all',
result_view: 'full',
interview_conversation_speed: 'normal',
max_followups: 2,
max_duration: 1200,
questions_random_subset: 0.5,
interview_attempts: 1,
required_pronunciation: true,
result_enable_edit_transcript: true,
candidate_expectations: '<string>',
candidate_expectations_json: {weak: ['<string>'], moderate: ['<string>'], strong: ['<string>']},
custom_scoring: {},
pdf_export_auto_config: {
mojito_language_code: 'en',
contact_details: true,
ai_recruiter_assessment: true,
ai_scoring_rubric: true,
analytics: true,
files: true,
transcript: true,
answer_recording: true,
session_recording: true,
group_by_question: true
},
interview_type: 'pre-screening-with-test-questions',
interview_tone: 'professional',
seniority_level: 'senior',
hiring_for_company: {name: 'undisclosed'}
})
};
fetch('https://cool.jobmojito.com/functions/v1/job-interview-update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cool.jobmojito.com/functions/v1/job-interview-update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'position_id' => '00000000-0000-0000-0000-000000000000',
'status' => 'active',
'visibility' => 'merchant_public',
'name' => 'Project manager',
'code' => '<string>',
'location' => 'remote',
'cover_image_url' => '<string>',
'description' => '<string>',
'description_long' => '<string>',
'interview_department' => 'Engineering',
'interview_salary' => '$80k - $100k',
'interview_available_till' => '2026-12-31',
'recruiter_profile_id' => '<string>',
'tags' => [
'interview-practice',
'sales'
],
'questions' => [
[
'question' => '<string>',
'id' => '<string>',
'duration' => 123,
'mojito_language_code' => 'en',
'label' => '<string>',
'is_conditional' => true,
'is_without_scoring' => true,
'is_candidate_asking_recruiter' => true,
'is_expert' => true,
'is_multiple_choice' => true,
'question_alternatives' => [
'<string>'
],
'conditional_question_main_id' => '<string>',
'knowledge_base_id' => '<string>',
'external_id' => '<string>',
'external_data' => [
],
'candidate_expectations_json' => [
'weak' => [
'<string>'
],
'moderate' => [
'<string>'
],
'strong' => [
'<string>'
]
]
]
],
'regenerate_candidate_expectations' => false,
'type' => 'interview',
'type_credit' => 'interview_coach_manager',
'coach_plan' => 'screening',
'interview_template_id' => '46b98d37-1557-4391-beca-03037ead19f2',
'knowledge_base_store_id' => '<string>',
'recording' => 'video_all',
'recording_full_session' => 'video_all',
'result_view' => 'full',
'interview_conversation_speed' => 'normal',
'max_followups' => 2,
'max_duration' => 1200,
'questions_random_subset' => 0.5,
'interview_attempts' => 1,
'required_pronunciation' => true,
'result_enable_edit_transcript' => true,
'candidate_expectations' => '<string>',
'candidate_expectations_json' => [
'weak' => [
'<string>'
],
'moderate' => [
'<string>'
],
'strong' => [
'<string>'
]
],
'custom_scoring' => [
],
'pdf_export_auto_config' => [
'mojito_language_code' => 'en',
'contact_details' => true,
'ai_recruiter_assessment' => true,
'ai_scoring_rubric' => true,
'analytics' => true,
'files' => true,
'transcript' => true,
'answer_recording' => true,
'session_recording' => true,
'group_by_question' => true
],
'interview_type' => 'pre-screening-with-test-questions',
'interview_tone' => 'professional',
'seniority_level' => 'senior',
'hiring_for_company' => [
'name' => 'undisclosed'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cool.jobmojito.com/functions/v1/job-interview-update"
payload := strings.NewReader("{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"status\": \"active\",\n \"visibility\": \"merchant_public\",\n \"name\": \"Project manager\",\n \"code\": \"<string>\",\n \"location\": \"remote\",\n \"cover_image_url\": \"<string>\",\n \"description\": \"<string>\",\n \"description_long\": \"<string>\",\n \"interview_department\": \"Engineering\",\n \"interview_salary\": \"$80k - $100k\",\n \"interview_available_till\": \"2026-12-31\",\n \"recruiter_profile_id\": \"<string>\",\n \"tags\": [\n \"interview-practice\",\n \"sales\"\n ],\n \"questions\": [\n {\n \"question\": \"<string>\",\n \"id\": \"<string>\",\n \"duration\": 123,\n \"mojito_language_code\": \"en\",\n \"label\": \"<string>\",\n \"is_conditional\": true,\n \"is_without_scoring\": true,\n \"is_candidate_asking_recruiter\": true,\n \"is_expert\": true,\n \"is_multiple_choice\": true,\n \"question_alternatives\": [\n \"<string>\"\n ],\n \"conditional_question_main_id\": \"<string>\",\n \"knowledge_base_id\": \"<string>\",\n \"external_id\": \"<string>\",\n \"external_data\": {},\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n }\n }\n ],\n \"regenerate_candidate_expectations\": false,\n \"type\": \"interview\",\n \"type_credit\": \"interview_coach_manager\",\n \"coach_plan\": \"screening\",\n \"interview_template_id\": \"46b98d37-1557-4391-beca-03037ead19f2\",\n \"knowledge_base_store_id\": \"<string>\",\n \"recording\": \"video_all\",\n \"recording_full_session\": \"video_all\",\n \"result_view\": \"full\",\n \"interview_conversation_speed\": \"normal\",\n \"max_followups\": 2,\n \"max_duration\": 1200,\n \"questions_random_subset\": 0.5,\n \"interview_attempts\": 1,\n \"required_pronunciation\": true,\n \"result_enable_edit_transcript\": true,\n \"candidate_expectations\": \"<string>\",\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n },\n \"custom_scoring\": {},\n \"pdf_export_auto_config\": {\n \"mojito_language_code\": \"en\",\n \"contact_details\": true,\n \"ai_recruiter_assessment\": true,\n \"ai_scoring_rubric\": true,\n \"analytics\": true,\n \"files\": true,\n \"transcript\": true,\n \"answer_recording\": true,\n \"session_recording\": true,\n \"group_by_question\": true\n },\n \"interview_type\": \"pre-screening-with-test-questions\",\n \"interview_tone\": \"professional\",\n \"seniority_level\": \"senior\",\n \"hiring_for_company\": {\n \"name\": \"undisclosed\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cool.jobmojito.com/functions/v1/job-interview-update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"status\": \"active\",\n \"visibility\": \"merchant_public\",\n \"name\": \"Project manager\",\n \"code\": \"<string>\",\n \"location\": \"remote\",\n \"cover_image_url\": \"<string>\",\n \"description\": \"<string>\",\n \"description_long\": \"<string>\",\n \"interview_department\": \"Engineering\",\n \"interview_salary\": \"$80k - $100k\",\n \"interview_available_till\": \"2026-12-31\",\n \"recruiter_profile_id\": \"<string>\",\n \"tags\": [\n \"interview-practice\",\n \"sales\"\n ],\n \"questions\": [\n {\n \"question\": \"<string>\",\n \"id\": \"<string>\",\n \"duration\": 123,\n \"mojito_language_code\": \"en\",\n \"label\": \"<string>\",\n \"is_conditional\": true,\n \"is_without_scoring\": true,\n \"is_candidate_asking_recruiter\": true,\n \"is_expert\": true,\n \"is_multiple_choice\": true,\n \"question_alternatives\": [\n \"<string>\"\n ],\n \"conditional_question_main_id\": \"<string>\",\n \"knowledge_base_id\": \"<string>\",\n \"external_id\": \"<string>\",\n \"external_data\": {},\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n }\n }\n ],\n \"regenerate_candidate_expectations\": false,\n \"type\": \"interview\",\n \"type_credit\": \"interview_coach_manager\",\n \"coach_plan\": \"screening\",\n \"interview_template_id\": \"46b98d37-1557-4391-beca-03037ead19f2\",\n \"knowledge_base_store_id\": \"<string>\",\n \"recording\": \"video_all\",\n \"recording_full_session\": \"video_all\",\n \"result_view\": \"full\",\n \"interview_conversation_speed\": \"normal\",\n \"max_followups\": 2,\n \"max_duration\": 1200,\n \"questions_random_subset\": 0.5,\n \"interview_attempts\": 1,\n \"required_pronunciation\": true,\n \"result_enable_edit_transcript\": true,\n \"candidate_expectations\": \"<string>\",\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n },\n \"custom_scoring\": {},\n \"pdf_export_auto_config\": {\n \"mojito_language_code\": \"en\",\n \"contact_details\": true,\n \"ai_recruiter_assessment\": true,\n \"ai_scoring_rubric\": true,\n \"analytics\": true,\n \"files\": true,\n \"transcript\": true,\n \"answer_recording\": true,\n \"session_recording\": true,\n \"group_by_question\": true\n },\n \"interview_type\": \"pre-screening-with-test-questions\",\n \"interview_tone\": \"professional\",\n \"seniority_level\": \"senior\",\n \"hiring_for_company\": {\n \"name\": \"undisclosed\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cool.jobmojito.com/functions/v1/job-interview-update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"status\": \"active\",\n \"visibility\": \"merchant_public\",\n \"name\": \"Project manager\",\n \"code\": \"<string>\",\n \"location\": \"remote\",\n \"cover_image_url\": \"<string>\",\n \"description\": \"<string>\",\n \"description_long\": \"<string>\",\n \"interview_department\": \"Engineering\",\n \"interview_salary\": \"$80k - $100k\",\n \"interview_available_till\": \"2026-12-31\",\n \"recruiter_profile_id\": \"<string>\",\n \"tags\": [\n \"interview-practice\",\n \"sales\"\n ],\n \"questions\": [\n {\n \"question\": \"<string>\",\n \"id\": \"<string>\",\n \"duration\": 123,\n \"mojito_language_code\": \"en\",\n \"label\": \"<string>\",\n \"is_conditional\": true,\n \"is_without_scoring\": true,\n \"is_candidate_asking_recruiter\": true,\n \"is_expert\": true,\n \"is_multiple_choice\": true,\n \"question_alternatives\": [\n \"<string>\"\n ],\n \"conditional_question_main_id\": \"<string>\",\n \"knowledge_base_id\": \"<string>\",\n \"external_id\": \"<string>\",\n \"external_data\": {},\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n }\n }\n ],\n \"regenerate_candidate_expectations\": false,\n \"type\": \"interview\",\n \"type_credit\": \"interview_coach_manager\",\n \"coach_plan\": \"screening\",\n \"interview_template_id\": \"46b98d37-1557-4391-beca-03037ead19f2\",\n \"knowledge_base_store_id\": \"<string>\",\n \"recording\": \"video_all\",\n \"recording_full_session\": \"video_all\",\n \"result_view\": \"full\",\n \"interview_conversation_speed\": \"normal\",\n \"max_followups\": 2,\n \"max_duration\": 1200,\n \"questions_random_subset\": 0.5,\n \"interview_attempts\": 1,\n \"required_pronunciation\": true,\n \"result_enable_edit_transcript\": true,\n \"candidate_expectations\": \"<string>\",\n \"candidate_expectations_json\": {\n \"weak\": [\n \"<string>\"\n ],\n \"moderate\": [\n \"<string>\"\n ],\n \"strong\": [\n \"<string>\"\n ]\n },\n \"custom_scoring\": {},\n \"pdf_export_auto_config\": {\n \"mojito_language_code\": \"en\",\n \"contact_details\": true,\n \"ai_recruiter_assessment\": true,\n \"ai_scoring_rubric\": true,\n \"analytics\": true,\n \"files\": true,\n \"transcript\": true,\n \"answer_recording\": true,\n \"session_recording\": true,\n \"group_by_question\": true\n },\n \"interview_type\": \"pre-screening-with-test-questions\",\n \"interview_tone\": \"professional\",\n \"seniority_level\": \"senior\",\n \"hiring_for_company\": {\n \"name\": \"undisclosed\"\n }\n}"
response = http.request(request)
puts response.read_body{
"position_id": "<string>",
"is_multistage": true,
"updated_fields": [
"name",
"tags"
],
"questions_diff": {
"kept": [
"<string>"
],
"added": [
"<string>"
],
"removed": [
"<string>"
],
"replaced": [
{
"from": "<string>",
"to": "<string>"
}
],
"question_ids": [
"<string>"
],
"reactivated": true
}
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}Authorizations
Supabase JWT — Authorization: Bearer <token>.
Body
Id of the interview definition (single-stage) or position definition (multi-stage) to update. The same id you pass to job-interview-get.
1"00000000-0000-0000-0000-000000000000"
New lifecycle status. Applied through the same interview_set_status routine as job-interview-set-state (which is also where you manage the iframe embed key).
draft, active, archived, deleted, preparing, completed "active"
Who can discover and access the interview. Options — merchant_public: Listed on the merchant's public interview list — anyone with the merchant link can find and start it. | merchant_invite: Invite-only — only candidates explicitly invited (by email/link) can access it; not listed anywhere. | merchant_unlisted: Reachable only via a direct link — not listed anywhere; share the link manually..
merchant_public, merchant_invite, merchant_unlisted "merchant_public"
Interview / position name.
"Project manager"
External code/reference. Blank is stored as null.
Interview location (column interview_location). Blank is stored as null.
"remote"
Cover image URL.
Short interview description.
Long-form interview description (column interview_description_long). Rendered as Markdown on the candidate-facing position page, including chips, callouts, cards, columns and buttons — formatting guide: https://developer.jobmojito.com/cookbooks/format-content-with-markdown
Department the position belongs to. Blank is stored as null.
"Engineering"
Salary range shown for the position. Blank is stored as null.
"$80k - $100k"
ISO date/time after which the interview is no longer available to candidates. null keeps it always available.
"2026-12-31"
Profile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant. null clears it.
Free-form tags stored on the interview. Tags are also the coaching-catalogue mapping key: a catalogue directory (see the catalogue-tag-create / catalogue-tag-update endpoints) lists a coaching or persona session when the session's tags contain EVERY tag in that directory's tags_interview_set_filter. Only active sessions with visibility public or merchant_public are listed.
["interview-practice", "sales"]
OPTIONAL. Omit this field entirely and the interview's questions are left exactly as they are — this endpoint only touches questions when you send the array. When you do send it, send the COMPLETE list you want the interview to end up with, in order, in the same format job-interview-create-from-array accepts and job-interview-get returns: there is no way to change a single question on its own, so read the interview, edit that array, and send the whole thing back. An empty array is rejected. It is applied as a DIFF, not a replace, so resending the array job-interview-get gave you changes nothing at all. Each entry is matched against what is stored — first on external_id, then on id, then on identical content — and: an entry matching an unchanged question keeps that question exactly as it is, including its answer rules and any rendered avatar video; an entry matching a question whose content differs unlinks the old question and creates a new one in its place (fields you omit are carried over from the old one); an entry matching nothing is created; and a stored question no entry matches is unlinked. questions_diff in the response reports exactly what was decided. Questions are shared records, so nothing is ever deleted — removing one only unlinks it from this interview, and an edit is always unlink-old + create-new so the change cannot leak into another interview reusing the same question. The welcome, thank-you and instructional-video steps are not part of this array and are left in place. Single-stage interviews only; for a multi-stage position, update its interview stages individually.
1Show child attributes
Show child attributes
Re-derive the interview-level candidate_expectations_json scoring rubric from the resulting question list, the way job-interview-create-from-array derives it at creation time. Only applies when questions is sent, the interview type is interview, and candidate_expectations_json is not also being set explicitly (an explicit value wins).
false
Product type of the interview. Changing it also re-derives type_credit (null for interview/assessment, otherwise interview_coach_manager) unless you send type_credit explicitly. Single-stage interviews only.
interview, coaching, assessment "interview"
Credit bucket the session draws from. Only meaningful for candidate-paid coaching/persona sessions; hiring interviews and assessments are merchant-billed and carry null. Options — resume_check: Resume-check credits. | interview_coach_starter: Coaching credits — starter tier. | interview_coach_contributor: Coaching credits — contributor tier. | interview_coach_manager: Coaching credits — manager tier. | cover_letter: Cover-letter credits..
resume_check, interview_coach_starter, interview_coach_contributor, interview_coach_manager, cover_letter "interview_coach_manager"
Coaching-plan stage this item belongs to, used by the coaching-plan progress view. Omit/null to leave it out of any plan. Options — demo: Demo session. | screening: Screening-interview practice. | 2nd: Second-interview practice. | 3rd: Third-interview practice. | closing: Closing / salary-negotiation practice. | job-specific: Job-specific coaching. | other: Anything that does not fit the other buckets..
demo, screening, 2nd, 3rd, closing, job-specific, other "screening"
Id of the interview template (avatar/voice) to use. Must reference an existing interview_templates row. Also decides the modality — see list_avatars / merchant-avatar-list.
1"46b98d37-1557-4391-beca-03037ead19f2"
Knowledge base store id the interview draws context from; validated for existence. null unlinks it.
Cheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Video options also record the candidate. Omit/null to disable. Options — audio_first_5_answers: Audio-only cheating detection, first 5 answers only. | audio_all: Audio-only cheating detection on every answer. | video_all: Audio + video cheating detection on every answer (candidate is recorded for all answers). | video_first_5_answers: Audio + video cheating detection, first 5 answers only..
audio_first_5_answers, audio_all, video_all, video_first_5_answers "video_all"
Full interview-session recording (includes the avatar and voice) produced as a single file. Independent of recording. Omit/null to disable. Options — audio_all: Record the whole session audio (avatar + candidate voice) into a single file. Adds +0.2 credits. | video_all: Record the whole session video + audio (avatar + candidate) into a single file. Adds +0.4 credits..
audio_all, video_all "video_all"
Result screen shown to the candidate after finishing. With any value other than none, the candidate sees a results screen where they can provide feedback, record an intro video and edit the transcript, and must then submit the result; the value sets how much score/result detail is shown. Options — none: No results screen at all — the interview is submitted immediately when the candidate finishes (no feedback, intro video, transcript edit or manual submit step). | minimal: Minimal results layout, no score shown. | minimal_with_score: Minimal results layout including the overall score. | advanced: Advanced results layout with more detail. | full: Full results layout with all sections. | full_expand_scores: Full results with every score breakdown expanded..
none, minimal, minimal_with_score, advanced, full, full_expand_scores "full"
Whether a candidate video introduction is hidden, optional or required. null is treated like hidden.
hidden, optional, required Conversation pace of the AI avatar. Omit/null keeps the template default pace. Options — slower: The avatar speaks more slowly — easier to follow for non-native speakers. | normal: Default speaking pace. | faster: The avatar speaks more quickly for a snappier conversation..
slower, normal, faster "normal"
Maximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).
0 <= x <= 9992
Live session limit in seconds. Also the basis for the credit multiplier.
1200
Ask only a random subset of the questions, as a fraction between 0.01 and 0.9. null asks all questions.
0.01 <= x <= 0.90.5
Allowed candidate attempts (1-20). Stored as result_scoring.max_retries.
1 <= x <= 201
Require pronunciation assessment (restricts to pronunciation-capable languages).
Allow editing the transcript on the result view.
Free-text candidate expectations.
Structured candidate expectations (the scoring rubric), bucketed by requirement level (weak/moderate/strong). null clears the rubric. Extra keys are preserved.
Show child attributes
Show child attributes
Result-scoring overrides (max_score, early_stop, speech_cadence, ai_pronunciation, sentiment_analysis, ai_assessment_answer, ai_assessment_resume, ai_assessment_session). Merged onto the stored configuration, so keys you omit keep their current value.
Show child attributes
Show child attributes
Auto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.
Show child attributes
Show child attributes
Interview style — configures the AI avatar and the follow-up questions it generates during the interview. Stored in creation_parameters; existing questions are NOT regenerated. Options — pre-screening: Pre-screening — quick qualification check focusing on basic requirements and availability. | pre-screening-with-test-questions: Pre-screening with test questions — pre-screening plus practical questions to test relevant skills. | second-interview: Second round interview — deeper dive for candidates who passed initial screening. | remote-freelancer-verification: Remote worker verification — verify remote work capabilities and communication skills. | strength-based-interview: Strength-based interview — focus on what candidates enjoy and excel at to predict job satisfaction. | potential-based-interview: Potential-based interview — assess learning ability and growth potential rather than past experience. | process-verification-from-knowledge-base: Knowledge Base interview — generate questions from your knowledge base documents..
pre-screening, pre-screening-with-test-questions, second-interview, remote-freelancer-verification, strength-based-interview, potential-based-interview, process-verification-from-knowledge-base "pre-screening-with-test-questions"
Tone — configures the AI avatar's speaking style and the follow-up questions it generates. Stored in creation_parameters; existing questions are NOT regenerated. Suggested values — relaxed: Friendly and conversational tone that helps candidates feel at ease. | simple: Plain language at CEFR A2 level — short sentences and simple words. | professional: Formal and business-like approach suitable for senior roles. | persuasive: Engaging style that encourages candidates to elaborate.. Case-insensitive; other strings are accepted but unknown tones fall back to the default.
"professional"
Target seniority level for the role; auto-detected from the job description when omitted. Options — entry-level: Early-career or graduate roles. | intermediate: Some experience required. | senior: Experienced professional. | managerial: Team or department lead. | director: Director-level responsibility. | executive: C-suite or executive role..
entry-level, intermediate, senior, managerial, director, executive "senior"
Who the position is really for. null (or an object with name null/blank) means hiring for yourself; { name: 'undisclosed' } for an unnamed external client; or { name: '' } plus optional description/location/sector/company_size. Stored in creation_parameters.hiring_for_company.
Show child attributes
Show child attributes
{ "name": "undisclosed" }
Response
Interview / position updated.
Confirmation of what was updated.
The id that was updated.
True when the id resolved to a multi-stage position (position_def_set) rather than a single interview.
Names of the stored columns that were written, plus status when the lifecycle status was changed and questions when the question list was diffed.
["name", "tags"]
What the question diff decided, question by question. Absent when questions was not sent.
Show child attributes
Show child attributes