Skip to main content
Glama

Create interview

create_interview
Destructive

[Interviews] Create a new interview. Without questions its question sequence is generated from the position data. With questions (an explicit list) they are stored as you wrote them, and in the session the avatar says each one in its tone, rephrased, unless you pass interview_tone="exact", which reads them verbatim (compliance, translated or legally reviewed text). With questions, a rapport question is added first unless include_rapport_question=false (3 sent are 4 asked), and the candidate expectations are generated from them. type is the product (interview, assessment, coaching); interview_type is the style of an interview (pre-screening, second-interview...); invite-only hiring is visibility=merchant_invite. A position's pre-screening STEP (resume and form) is something else: added with set_position_process, configured with update_position_step. The interview_template_id also sets the modality (voice-only vs realtime/pre-recorded avatar); list_avatars lists the templates. Full-session recording (recording_full_session) and a longer max_duration raise the credit cost.

Every argument in full, with examples: get_tool_reference.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "name": "<name>",
      "location": "<location>",
      "interview_template_id": "<interview_template_id>",
      "mojito_language_code": "<mojito_language_code>",
      "status": "<status>",
      "type": "<type>",
      "visibility": "<visibility>"
    },
    "name": "create_interview"
  }
}

Input Schema

NameRequiredDescriptionDefault
codeNoOptional external code/reference for the interview.
nameYesInterview / position name.
tagsNoFree-form tags stored on the interview. Only `active` sessions with visibility `merchant_public` (or the platform's own `public`) are listed.
typeYesProduct type of the interview. Values: `interview`: Standard candidate interview for a role | `coaching`: candidate-facing feedback to help them improve; not a hiring evaluation | `assessment`: evaluates competencies and is scored like an interview.
statusYesLifecycle status of the interview. Values: `draft`: Created but not published | `active`: candidates can run it.
locationYesJob location — a city/country, or `remote`. Required and must not be empty: when the job description gives no location, pass `Not specified`.
llm_modelNoYour model id, e.g. "claude-opus-4-8"; "unknown" if unsure. For analytics.
questionsNoOPTIONAL: your own ordered list of questions, in the format get_interview_definition returns. With questions, description becomes required; interview_length and include_closing_prompt are ignored; include_rapport_question defaults to true; max_duration keeps its meaning here (stored, 1200 when omitted). Omit to have the AI generate the description and questions.
recordingNoCheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Omit, null or `none` to disable. Values: `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 | `video_first_5_answers`: Audio + video cheating detection, first 5 answers only | `none`: No cheating detection.
visibilityYesWho can discover and access the interview. Values: `merchant_public`: Listed on the merchant's public interview list | `merchant_invite`: only candidates explicitly invited | `merchant_unlisted`: Reachable only via a direct link.
descriptionNoShort, two-sentence job description shown to the candidate. Required with `questions`. Without `questions`, provide it to use it as-is, or leave it null/blank and it is AI-generated from the position name and any other context.
environmentNoWhich of your webhook environments results from this interview are delivered to. Defaults to production. Values: `production`: Live hiring | `uat`: User-acceptance testing - an isolated environment for pre-release verification | `development`: Development/testing | `demo`: Demonstrations and sales trials.
is_embeddedNoSet true when the interview will be embedded as an iframe on an external page. A signed coaching embed (name, email, signature) signs the visitor in as a learner of that portal, and the session is charged to the merchant's interview credits on completion, not to the learner's coaching credits; it cannot start while the merchant has none.
merchant_idNoMerchant id. Admin / sub-merchant callers only; otherwise taken from your token.
result_viewNoResult 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. Values: `none`: No results screen at all | `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.
max_durationNoMaximum interview duration in seconds. Defaults to 1200 (20 minutes) when omitted.
max_followupsNoMaximum 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).
custom_scoringNoCustom result-scoring overrides merged with defaults and template overrides.
interview_toneNoInterview tone — configures the AI avatar's speaking style and the tone of the AI-generated questions and follow-ups. Case-insensitive; omit to default to relaxed. Values: `relaxed`: Friendly and conversational tone that helps candidates feel at ease | `simple`: Plain language at CEFR A2 level | `professional`: Formal and business-like approach suitable for senior roles | `persuasive`: Engaging style that encourages candidates to elaborate | `exact`: Asks the questions exactly as provided, without rephrasing.
interview_typeNoInterview style — configures the AI avatar and shapes both the AI-generated questions and the follow-up questions asked during the interview. Defaults to pre-screening when omitted. Values: `pre-screening`: quick qualification check focusing on basic requirements and availability | `pre-screening-with-test-questions`: pre-screening plus practical questions to test relevant skills | `second-interview`: deeper dive for candidates who passed initial screening | `remote-freelancer-verification`: verify remote work capabilities and communication skills | `strength-based-interview`: focus on what candidates enjoy and excel at to predict job satisfaction | `potential-based-interview`: assess learning ability and growth potential rather than past experience | `process-verification-from-knowledge-base`: generate questions from your knowledge base documents | `knockout-screening`: a short (about 5 minute) check of the role's must-haves with closed questions.
conversation_idNoThe conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics.
cover_image_urlNoCover image URL.
seniority_levelNoTarget seniority level for the role; auto-detected from the job description when omitted. Values: `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.
welcome_messageNoCustom welcome message shown to the candidate.
description_longNoFull job description in Markdown (Job Purpose, Responsibilities, Required & Preferred Qualifications). Provide it to use it as-is; leave it null/blank and it is AI-generated (interview and assessment types only).
interview_lengthNoNumber of questions to generate (1-40). Omit this field to let the AI pick 5-8.
interview_salaryNoSalary range shown for the position.
thank_you_messageNoCustom thank-you message shown after the interview.
additional_contextNoArbitrary additional context object merged into AI generation.
hiring_for_companyNoWho the position is really for. Omit/null (or an object with name null/blank) when hiring for yourself; { name: 'undisclosed' } for an unnamed external client; or { name: '<company>' } plus optional description/location/sector/company_size for a named client.
interview_attemptsNoAllowed candidate attempts (1-20).
interview_categoryNoJob category shown on public listings, above the department (free text, e.g. "Ashore"). Blank is stored as null.
instructional_videoNoShow an instructional video before approval. Defaults to false.
country_availabilityNoWhich countries the interview / position is open to on the candidate portal, judged by the IP address the candidate opens it from (an unknown location only passes when countries_allowed / countries_allowed_eu are empty). From a closed country it is left out of the portal listings, and a direct link shows "not available in your region". Invited candidates (personal invitation links) and candidates who already started keep access; API and MCP calls themselves are never restricted. Null = not used, every country.
interview_departmentNoDepartment the position belongs to.
mojito_language_codeYesPlatform language code used for the interview.
recruiter_profile_idNoProfile id of the recruiter owning this interview. A user of the company who is not read only: an owner, recruiter or admin from list_users.
disable_deduplicationNoWith questions only: when true, every question is stored as a new record instead of reusing an identical one.
interview_template_idYesId of the interview template to base this interview on.
candidate_expectationsNoFree-text candidate expectations folded into AI generation.
include_closing_promptNoInclude a closing prompt. Defaults to true.
pdf_export_auto_configNoAuto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.
recording_full_sessionNoFull interview-session recording (includes the avatar and voice) produced as a single file. Omit, null or `none` to disable. Values: `audio_all`: Record the whole session audio | `video_all`: Record the whole session video + audio | `none`: No full-session recording.
required_pronunciationNoRequire pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.
knowledge_base_store_idNoKnowledge base store id to source additional context from. Documents limited to chosen interviews are left out, because a new interview is on no list yet.
microphone_test_messageNoCustom microphone-test instruction for a recorded (offline avatar) interview, spoken by the avatar and shown on screen before the first question. Omitted uses the default prompt in the interview language.
questions_random_subsetNoAsk only a random subset of the questions, expressed as a fraction between 0.01 and 0.9 (e.g. 0.5 = 50%). null asks all questions.
include_rapport_questionNoInclude an opening rapport question. Defaults to false (true when questions is given).
interview_available_tillNoISO date/time after which the interview is no longer available to candidates. null keeps it always available.
candidate_expectations_jsonNoWith questions only: pre-generated candidate expectations, bucketed by requirement level (weak/moderate/strong); generated from your questions when omitted for type interview.
candidate_video_introductionNoWhether a candidate video introduction is optional or required.
interview_conversation_speedNoConversation pace of the AI avatar. Omit/null keeps the template default pace. Values: `slower`: The avatar speaks more slowly | `normal`: Default speaking pace | `faster`: The avatar speaks more quickly for a snappier conversation | `fluent`: Talking pace: the avatar answers 300 ms after the candidate stops speaking.
result_enable_edit_transcriptNoAllow editing the transcript on the result view. Defaults to true.
candidate_notification_channelNoSMS / WhatsApp notifications to the candidate, sent alongside the e-mails: "reminders" = with both e-mail reminders (day 1 and day 3); "last_reminder" = only with the final day-3 reminder; "all" = invitation, both reminders and the pre-screening-accepted step. null switches them off.
instructional_video_custom_textNoCustom narration text for the instructional video.
microphone_test_no_speech_messageNoCustom text shown when the microphone test hears nothing. Omitted uses the default text in the candidate's language.

Output Schema

NameRequiredDescriptionDefault
embed_idNo
max_durationYes
_mcp_instructionsNoServer-issued metadata for this conversation.
embed_signing_keyNo
questions_generatedYes
interview_def_set_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changed
    • changedInput schema / properties / candidate_video_introduction / enum
      Previous value: -[
      -  "optional",
      -  "required",
      -  null
      -]New value: +[
      +  "hidden",
      +  "optional",
      +  "required",
      +  null
      +]
    • changedInput schema / properties / country_availability / description
      Previous value: -"Which countries the interview / position is open to on the candidate portal, judged by the IP address the candidate opens it from (an unknown location only passes when countries_allowed / countries_allowed_eu are empty). From a closed country it is left out of the portal listings, and a direct link shows \"not available in your region\". Invited candidates (register_users / invite links) and candidates who already started keep access; API and MCP calls themselves are never restricted. Null = not used, every country."New value: +"Which countries the interview / position is open to on the candidate portal, judged by the IP address the candidate opens it from (an unknown location only passes when countries_allowed / countries_allowed_eu are empty). From a closed country it is left out of the portal listings, and a direct link shows \"not available in your region\". Invited candidates (personal invitation links) and candidates who already started keep access; API and MCP calls themselves are never restricted. Null = not used, every country."
    • removedInput schema / properties / custom_fields
      Removed value: -{
      -  "additionalProperties": {},
      -  "description": "Company-defined position fields, as job-interview-update takes them. They belong to multi-stage positions only: while the company has custom fields switched on, sending a non-empty object here is refused with 422 (create the position instead); while they are off, the field is ignored.",
      -  "type": "object"
      -}
    • changedInput schema / properties / description / description
      Previous value: -"Short, two-sentence job description shown to the candidate. Provide it to use it as-is; leave it null/blank and it is AI-generated from the position name and any other context."New value: +"Short, two-sentence job description shown to the candidate. Required with `questions`. Without `questions`, provide it to use it as-is, or leave it null/blank and it is AI-generated from the position name and any other context."
    • changedInput schema / properties / environment / description
      Previous value: -"Which of your webhook environments results from this interview are delivered to. Defaults to production."New value: +"Which of your webhook environments results from this interview are delivered to. Defaults to production. Values: `production`: Live hiring | `uat`: User-acceptance testing - an isolated environment for pre-release verification | `development`: Development/testing | `demo`: Demonstrations and sales trials."
    • changedInput schema / properties / interview_conversation_speed / description
      Previous value: -"Conversation pace of the AI avatar. Omit/null keeps the template default pace."New value: +"Conversation pace of the AI avatar. Omit/null keeps the template default pace. Values: `slower`: The avatar speaks more slowly | `normal`: Default speaking pace | `faster`: The avatar speaks more quickly for a snappier conversation | `fluent`: Talking pace: the avatar answers 300 ms after the candidate stops speaking."
    • removedInput schema / properties / interview_length / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  },
      -  {}
      -]
    • addedInput schema / properties / interview_length / maximum
      Added value: +40
    • addedInput schema / properties / interview_length / minimum
      Added value: +1
    • addedInput schema / properties / interview_length / type
      Added value: +"integer"
    • changedInput schema / properties / interview_tone / description
      Previous value: -"Interview tone — configures the AI avatar's speaking style and the tone of the AI-generated questions and follow-ups. Case-insensitive; omit to default to relaxed."New value: +"Interview tone — configures the AI avatar's speaking style and the tone of the AI-generated questions and follow-ups. Case-insensitive; omit to default to relaxed. Values: `relaxed`: Friendly and conversational tone that helps candidates feel at ease | `simple`: Plain language at CEFR A2 level | `professional`: Formal and business-like approach suitable for senior roles | `persuasive`: Engaging style that encourages candidates to elaborate | `exact`: Asks the questions exactly as provided, without rephrasing."
    • changedInput schema / properties / interview_type / description
      Previous value: -"Interview style — configures the AI avatar and shapes both the AI-generated questions and the follow-up questions asked during the interview. Defaults to pre-screening when omitted."New value: +"Interview style — configures the AI avatar and shapes both the AI-generated questions and the follow-up questions asked during the interview. Defaults to pre-screening when omitted. Values: `pre-screening`: quick qualification check focusing on basic requirements and availability | `pre-screening-with-test-questions`: pre-screening plus practical questions to test relevant skills | `second-interview`: deeper dive for candidates who passed initial screening | `remote-freelancer-verification`: verify remote work capabilities and communication skills | `strength-based-interview`: focus on what candidates enjoy and excel at to predict job satisfaction | `potential-based-interview`: assess learning ability and growth potential rather than past experience | `process-verification-from-knowledge-base`: generate questions from your knowledge base documents | `knockout-screening`: a short (about 5 minute) check of the role's must-haves with closed questions."
    • addedInput schema / properties / knowledge_base_store_id / format
      Added value: +"uuid"
    • changedInput schema / properties / questions / description
      Previous value: -"OPTIONAL: your own ordered list of questions, in the format job-interview-get returns. When given, nothing is generated by AI except the candidate expectations (type interview, unless candidate_expectations_json is given): description becomes required; interview_length, include_closing_prompt and use_enhanced_expectations are ignored; include_rapport_question defaults to true; max_duration keeps its meaning here (stored, 1200 when omitted). Omit to have the AI generate the description and questions."New value: +"OPTIONAL: your own ordered list of questions, in the format get_interview_definition returns. With questions, description becomes required; interview_length and include_closing_prompt are ignored; include_rapport_question defaults to true; max_duration keeps its meaning here (stored, 1200 when omitted). Omit to have the AI generate the description and questions."
    • changedInput schema / properties / recording / description
      Previous value: -"Cheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Omit/null to disable."New value: +"Cheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Omit, null or `none` to disable. Values: `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 | `video_first_5_answers`: Audio + video cheating detection, first 5 answers only | `none`: No cheating detection."
    • changedInput schema / properties / recording / enum
      Previous value: -[
      -  "audio_first_5_answers",
      -  "audio_all",
      -  "video_all",
      -  "video_first_5_answers",
      -  null
      -]New value: +[
      +  "audio_first_5_answers",
      +  "audio_all",
      +  "video_all",
      +  "video_first_5_answers",
      +  "none",
      +  null
      +]
    • changedInput schema / properties / recording_full_session / description
      Previous value: -"Full interview-session recording (includes the avatar and voice) produced as a single file. Omit/null to disable."New value: +"Full interview-session recording (includes the avatar and voice) produced as a single file. Omit, null or `none` to disable. Values: `audio_all`: Record the whole session audio | `video_all`: Record the whole session video + audio | `none`: No full-session recording."
    • changedInput schema / properties / recording_full_session / enum
      Previous value: -[
      -  "audio_all",
      -  "video_all",
      -  null
      -]New value: +[
      +  "audio_all",
      +  "video_all",
      +  "none",
      +  null
      +]
    • changedInput schema / properties / recruiter_profile_id / description
      Previous value: -"Profile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant."New value: +"Profile id of the recruiter owning this interview. A user of the company who is not read only: an owner, recruiter or admin from list_users."
    • changedInput schema / properties / result_view / description
      Previous value: -"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."New value: +"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. Values: `none`: No results screen at all | `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."
    • changedInput schema / properties / seniority_level / description
      Previous value: -"Target seniority level for the role; auto-detected from the job description when omitted."New value: +"Target seniority level for the role; auto-detected from the job description when omitted. Values: `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."
    • changedInput schema / properties / status / description
      Previous value: -"Lifecycle status of the interview."New value: +"Lifecycle status of the interview. Values: `draft`: Created but not published | `active`: candidates can run it."
    • changedInput schema / properties / tags / description
      Previous value: -"Free-form tags stored on the interview. Only `active` sessions with visibility `public` or `merchant_public` are listed."New value: +"Free-form tags stored on the interview. Only `active` sessions with visibility `merchant_public` (or the platform's own `public`) are listed."
    • changedInput schema / properties / type / description
      Previous value: -"Product type of the interview."New value: +"Product type of the interview. Values: `interview`: Standard candidate interview for a role | `coaching`: candidate-facing feedback to help them improve; not a hiring evaluation | `assessment`: evaluates competencies and is scored like an interview."
    • removedInput schema / properties / use_enhanced_expectations
      Removed value: -{
      -  "description": "Reserved flag passed through to generation.",
      -  "type": [
      -    "boolean",
      -    "null"
      -  ]
      -}
    • changedInput schema / properties / visibility / description
      Previous value: -"Who can discover and access the interview."New value: +"Who can discover and access the interview. Values: `merchant_public`: Listed on the merchant's public interview list | `merchant_invite`: only candidates explicitly invited | `merchant_unlisted`: Reachable only via a direct link."
  2. Changed2 schema fields changed
    • changedInput schema / properties / mojito_language_code / description
      Previous value: -"Platform language code used for the interview. Must be one of the platform-languages.json codes."New value: +"Platform language code used for the interview."
    • changedInput schema / properties / questions / description
      Previous value: -"OPTIONAL: your own ordered list of questions, in the format job-interview-create-from-array takes and job-interview-get returns. description becomes required; interview_length, include_closing_prompt and use_enhanced_expectations are ignored; include_rapport_question defaults to true (as job-interview-create-from-array); max_duration keeps its meaning here (stored, 1200 when omitted). Omit to have the AI generate the description and questions."New value: +"OPTIONAL: your own ordered list of questions, in the format job-interview-get returns. When given, nothing is generated by AI except the candidate expectations (type interview, unless candidate_expectations_json is given): description becomes required; interview_length, include_closing_prompt and use_enhanced_expectations are ignored; include_rapport_question defaults to true; max_duration keeps its meaning here (stored, 1200 when omitted). Omit to have the AI generate the description and questions."
  3. Changed126 schema fields changed
    • changedInput schema / properties / candidate_expectations_json / description
      Previous value: -"With questions only: pre-generated candidate expectations, bucketed by requirement level (weak/moderate/strong); generated from your questions when omitted for type interview. Ignored without questions."New value: +"With questions only: pre-generated candidate expectations, bucketed by requirement level (weak/moderate/strong); generated from your questions when omitted for type interview."
    • removedInput schema / properties / candidate_expectations_json / properties / moderate / description
      Removed value: -"Requirements expected of a solid, competent candidate."
    • removedInput schema / properties / candidate_expectations_json / properties / strong / description
      Removed value: -"High-bar requirements only standout candidates clear."
    • removedInput schema / properties / candidate_expectations_json / properties / weak / description
      Removed value: -"Baseline requirements every viable candidate should meet (table stakes)."
    • changedInput schema / properties / candidate_notification_channel / description
      Previous value: -"SMS / WhatsApp notifications to the candidate, sent alongside the e-mails: \"reminders\" = with both e-mail reminders (day 1 and day 3); \"last_reminder\" = only with the final day-3 reminder; \"all\" = invitation, both reminders and the pre-screening-accepted step. null switches them off. WhatsApp is tried first, SMS when the number is not on WhatsApp. Available on paid plans (Starter and above) and needs a phone number on the candidate."New value: +"SMS / WhatsApp notifications to the candidate, sent alongside the e-mails: \"reminders\" = with both e-mail reminders (day 1 and day 3); \"last_reminder\" = only with the final day-3 reminder; \"all\" = invitation, both reminders and the pre-screening-accepted step. null switches them off."
    • removedInput schema / properties / candidate_video_introduction / example
      Removed value: -"optional"
    • removedInput schema / properties / code / example
      Removed value: -"my code"
    • removedInput schema / properties / country_availability / properties / countries_allowed / description
      Removed value: -"Available ONLY to candidates in these countries (ISO 3166-1 alpha-2)."
    • removedInput schema / properties / country_availability / properties / countries_allowed / example
      Removed value: -[
      -  "PH",
      -  "IN"
      -]
    • removedInput schema / properties / country_availability / properties / countries_allowed_eu / description
      Removed value: -"Adds every EU country (plus EEA and Switzerland) to countries_allowed."
    • removedInput schema / properties / country_availability / properties / countries_blocked / description
      Removed value: -"NOT available to candidates in these countries (ISO 3166-1 alpha-2). Wins over the allowed side."
    • removedInput schema / properties / country_availability / properties / countries_blocked / example
      Removed value: -[
      -  "US"
      -]
    • removedInput schema / properties / country_availability / properties / countries_blocked_eu / description
      Removed value: -"Adds every EU country (plus EEA and Switzerland) to countries_blocked."
    • removedInput schema / properties / cover_image_url / example
      Removed value: -"https://example.com/cover.png"
    • removedInput schema / properties / description / example
      Removed value: -"Backend role focused on Python, async APIs, and AWS."
    • changedInput schema / properties / description_long / description
      Previous value: -"Full job description in Markdown (Job Purpose, Responsibilities, Required & Preferred Qualifications). Provide it to use it as-is; leave it null/blank and it is AI-generated (interview and assessment types only). 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"New value: +"Full job description in Markdown (Job Purpose, Responsibilities, Required & Preferred Qualifications). Provide it to use it as-is; leave it null/blank and it is AI-generated (interview and assessment types only)."
    • changedInput schema / properties / disable_deduplication / description
      Previous value: -"With questions only: when true, every question is stored as a new record instead of reusing an identical one. Ignored without questions."New value: +"With questions only: when true, every question is stored as a new record instead of reusing an identical one."
    • changedInput schema / properties / environment / description
      Previous value: -"Which of your webhook environments results from this interview are delivered to. Defaults to production. Options — `production`: Live hiring. Results reach the webhooks configured as production. This is the default when the field is omitted. | `uat`: User-acceptance testing - an isolated environment for pre-release verification. | `development`: Development/testing. Use for interviews created by a test or preview app so their results never reach the production webhook. | `demo`: Demonstrations and sales trials.."New value: +"Which of your webhook environments results from this interview are delivered to. Defaults to production."
    • removedInput schema / properties / environment / example
      Removed value: -"production"
    • changedInput schema / properties / hiring_for_company / description
      Previous value: -"Who the position is really for. Omit/null (or an object with name null/blank) when hiring for yourself; { name: 'undisclosed' } for an unnamed external client; or { name: '<company>' } plus optional description/location/sector/company_size for a named client. Stored in creation_parameters.hiring_for_company."New value: +"Who the position is really for. Omit/null (or an object with name null/blank) when hiring for yourself; { name: 'undisclosed' } for an unnamed external client; or { name: '<company>' } plus optional description/location/sector/company_size for a named client."
    • removedInput schema / properties / hiring_for_company / example
      Removed value: -{
      -  "name": "undisclosed"
      -}
    • removedInput schema / properties / hiring_for_company / properties / company_size / description
      Removed value: -"Approximate headcount of the end employer."
    • removedInput schema / properties / hiring_for_company / properties / company_size / example
      Removed value: -"100-200"
    • removedInput schema / properties / hiring_for_company / properties / description / description
      Removed value: -"Short description of the end employer, used as background context by the agent."
    • removedInput schema / properties / hiring_for_company / properties / description / example
      Removed value: -"Unimo Enterprises is a leading logistics and supply chain solutions provider."
    • removedInput schema / properties / hiring_for_company / properties / location / description
      Removed value: -"Primary location of the end employer."
    • removedInput schema / properties / hiring_for_company / properties / location / example
      Removed value: -"Sri Lanka"
    • removedInput schema / properties / hiring_for_company / properties / name / description
      Removed value: -"End-employer name. Omit/null when hiring for yourself, 'undisclosed' for an unnamed external client, or the client's company name."
    • removedInput schema / properties / hiring_for_company / properties / name / example
      Removed value: -"Unimo Enterprises"
    • removedInput schema / properties / hiring_for_company / properties / sector / description
      Removed value: -"Industry / sector of the end employer."
    • removedInput schema / properties / hiring_for_company / properties / sector / example
      Removed value: -"Logistics and Supply Chain"
    • removedInput schema / properties / include_closing_prompt / example
      Removed value: -true
    • removedInput schema / properties / include_rapport_question / example
      Removed value: -true
    • removedInput schema / properties / instructional_video / example
      Removed value: -true
    • removedInput schema / properties / interview_attempts / example
      Removed value: -1
    • removedInput schema / properties / interview_available_till / example
      Removed value: -"2026-12-31"
    • removedInput schema / properties / interview_category / example
      Removed value: -"Ashore"
    • changedInput schema / properties / interview_conversation_speed / description
      Previous value: -"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. | `fluent`: Talking pace: the avatar answers 300 ms after the candidate stops speaking. A pause mid-sentence also ends their turn.."New value: +"Conversation pace of the AI avatar. Omit/null keeps the template default pace."
    • removedInput schema / properties / interview_conversation_speed / example
      Removed value: -"normal"
    • removedInput schema / properties / interview_department / example
      Removed value: -"Engineering"
    • changedInput schema / properties / interview_length / description
      Previous value: -"Number of questions to generate (1-40). Also capped by max_duration, which allows one question per 2 minutes: 20 min -> 10 questions, 30 min -> 15, 45 min -> 22, 60 min -> 30, 80 min -> 40. Asking for more than the cap is not an error — you get the cap, and the response reports the real count in questions_generated. Omit this field to let the AI pick 5-8."New value: +"Number of questions to generate (1-40). Omit this field to let the AI pick 5-8."
    • removedInput schema / properties / interview_length / example
      Removed value: -8
    • removedInput schema / properties / interview_salary / example
      Removed value: -"$80k - $100k"
    • removedInput schema / properties / interview_template_id / example
      Removed value: -"baa3bf7c-6926-46fd-9005-16738a31f72d"
    • changedInput schema / properties / interview_tone / description
      Previous value: -"Interview tone — configures the AI avatar's speaking style and the tone of the AI-generated questions and follow-ups. Case-insensitive; omit to default to relaxed. Options — `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. | `exact`: Asks the questions exactly as provided, without rephrasing — for interviews built from your own questions (create_interview_from_questions) where the wording is a script.."New value: +"Interview tone — configures the AI avatar's speaking style and the tone of the AI-generated questions and follow-ups. Case-insensitive; omit to default to relaxed."
    • removedInput schema / properties / interview_tone / example
      Removed value: -"professional"
    • changedInput schema / properties / interview_type / description
      Previous value: -"Interview style — configures the AI avatar and shapes both the AI-generated questions and the follow-up questions asked during the interview. Defaults to pre-screening when omitted. 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. | `knockout-screening`: Knock-out screening — a short (about 5 minute) check of the role's must-haves with closed questions; ends early, politely, when a must-have is clearly not met. On creation it defaults custom_scoring.early_stop to true (where the avatar supports early stop) and max_followups to 1 unless you send them.."New value: +"Interview style — configures the AI avatar and shapes both the AI-generated questions and the follow-up questions asked during the interview. Defaults to pre-screening when omitted."
    • removedInput schema / properties / interview_type / example
      Removed value: -"pre-screening-with-test-questions"
    • changedInput schema / properties / is_embedded / description
      Previous value: -"Set true when the interview will be embedded as an iframe on an external page. Provisions an embed key and returns embed_id / embed_signing_key, which are used to authenticate/sign the iframe embed. Where it runs depends on the type: interviews, assessments and interview role-plays embed on the interview portal (`https://<interview portal domain>/embed?embed_id=...`); coaching sessions and coaching personas embed on the consumer (coaching) portal (`https://<coaching portal domain>/embed?embed_id=...`, a link built on the interview portal is forwarded there). A signed coaching embed (name, email, signature) signs the visitor in as a learner of that portal, and the session is charged to the merchant's interview credits on completion, not to the learner's coaching credits; it cannot start while the merchant has none."New value: +"Set true when the interview will be embedded as an iframe on an external page. A signed coaching embed (name, email, signature) signs the visitor in as a learner of that portal, and the session is charged to the merchant's interview credits on completion, not to the learner's coaching credits; it cannot start while the merchant has none."
    • removedInput schema / properties / is_embedded / example
      Removed value: -false
    • addedInput schema / properties / llm_model
      Added value: +{
      +  "description": "Your model id, e.g. \"claude-opus-4-8\"; \"unknown\" if unsure. For analytics.",
      +  "type": "string"
      +}
    • removedInput schema / properties / location / example
      Removed value: -"remote"
    • changedInput schema / properties / max_duration / description
      Previous value: -"Maximum interview duration in seconds. Scopes how many questions are generated (see interview_length) and is stored on the interview as the live session limit and the basis for the credit multiplier. Defaults to 1200 (20 minutes) when omitted."New value: +"Maximum interview duration in seconds. Defaults to 1200 (20 minutes) when omitted."
    • removedInput schema / properties / max_duration / example
      Removed value: -1200
    • removedInput schema / properties / max_followups / example
      Removed value: -2
    • removedInput schema / properties / merchant_id / example
      Removed value: -"28106cba-1c27-4e53-b149-32113e5e8e31"
    • removedInput schema / properties / microphone_test_message / example
      Removed value: -"Before we start, let's check your microphone. Say \"Hello, I'm ready.\""
    • removedInput schema / properties / microphone_test_no_speech_message / example
      Removed value: -"We can't hear you. Check your microphone and try again."
    • removedInput schema / properties / mojito_language_code / example
      Removed value: -"en"
    • removedInput schema / properties / name / example
      Removed value: -"Project manager"
    • removedInput schema / properties / pdf_export_auto_config / properties / ai_recruiter_assessment / description
      Removed value: -"Include the AI recruiter assessment."
    • removedInput schema / properties / pdf_export_auto_config / properties / ai_scoring_rubric / description
      Removed value: -"Include the AI scoring rubric."
    • removedInput schema / properties / pdf_export_auto_config / properties / analytics / description
      Removed value: -"Include analytics."
    • removedInput schema / properties / pdf_export_auto_config / properties / answer_recording / description
      Removed value: -"Include per-answer recordings."
    • removedInput schema / properties / pdf_export_auto_config / properties / contact_details / description
      Removed value: -"Include candidate contact details."
    • removedInput schema / properties / pdf_export_auto_config / properties / files / description
      Removed value: -"Include uploaded candidate files."
    • removedInput schema / properties / pdf_export_auto_config / properties / group_by_question / description
      Removed value: -"Group transcript answers by expected question."
    • removedInput schema / properties / pdf_export_auto_config / properties / mojito_language_code / description
      Removed value: -"Report language code (a platform-languages.json code)."
    • removedInput schema / properties / pdf_export_auto_config / properties / mojito_language_code / example
      Removed value: -"en"
    • removedInput schema / properties / pdf_export_auto_config / properties / session_recording / description
      Removed value: -"Include the full-session recording."
    • removedInput schema / properties / pdf_export_auto_config / properties / template / description
      Removed value: -"Report layout: classic, modern, or one_pager. Omit for the merchant default (modern when unset)."
    • removedInput schema / properties / pdf_export_auto_config / properties / transcript / description
      Removed value: -"Include the interview transcript."
    • changedInput schema / properties / questions / description
      Previous value: -"OPTIONAL: your own ordered list of questions, in the format job-interview-create-from-array takes and job-interview-get returns. When given, nothing is generated by AI except the candidate expectations (type interview, unless candidate_expectations_json is given): the call then behaves exactly as job-interview-create-from-array. description becomes required; interview_length, include_closing_prompt and use_enhanced_expectations are ignored; include_rapport_question defaults to true (as job-interview-create-from-array); max_duration keeps its meaning here (stored, 1200 when omitted). Omit to have the AI generate the description and questions."New value: +"OPTIONAL: your own ordered list of questions, in the format job-interview-create-from-array takes and job-interview-get returns. description becomes required; interview_length, include_closing_prompt and use_enhanced_expectations are ignored; include_rapport_question defaults to true (as job-interview-create-from-array); max_duration keeps its meaning here (stored, 1200 when omitted). Omit to have the AI generate the description and questions."
    • removedInput schema / properties / questions / items / properties / candidate_expectations_json / description
      Removed value: -"Per-question candidate expectations, bucketed by requirement level (weak/moderate/strong). Extra keys are preserved."
    • removedInput schema / properties / questions / items / properties / candidate_expectations_json / properties / moderate / description
      Removed value: -"Requirements expected of a solid, competent candidate."
    • removedInput schema / properties / questions / items / properties / candidate_expectations_json / properties / strong / description
      Removed value: -"High-bar requirements only standout candidates clear."
    • removedInput schema / properties / questions / items / properties / candidate_expectations_json / properties / weak / description
      Removed value: -"Baseline requirements every viable candidate should meet (table stakes)."
    • removedInput schema / properties / questions / items / properties / conditional_question_answer / description
      Removed value: -"With conditional_question_main_id: the answer to the yes/no question that shows this follow-up. `true` (the default) asks it after a yes, `false` after a no, so each answer can lead to its own follow-ups. Ignored on a question without conditional_question_main_id."
    • removedInput schema / properties / questions / items / properties / conditional_question_answer / example
      Removed value: -false
    • removedInput schema / properties / questions / items / properties / conditional_question_main_id / description
      Removed value: -"For a follow-up question, the id (the \"id\" field above) of the yes/no question (is_conditional) in this same array that decides whether it is asked. The yes/no question must appear earlier in the array. Use conditional_question_answer to choose the answer that shows it."
    • removedInput schema / properties / questions / items / properties / duration / description
      Removed value: -"Answer duration in seconds for this question."
    • removedInput schema / properties / questions / items / properties / external_data / description
      Removed value: -"Arbitrary JSON metadata stored on the question."
    • removedInput schema / properties / questions / items / properties / external_id / description
      Removed value: -"External identifier stored on the question. job-interview-update matches on this first, so an ATS that owns stable ids can send its own array and have the diff line up without round-tripping our ids."
    • removedInput schema / properties / questions / items / properties / id / description
      Removed value: -"Identifier for this question. job-interview-get returns the question's real id here; send it back to job-interview-update so an unchanged question keeps its existing record (and with it its answer rules and any rendered avatar video). Also the handle another question references via conditional_question_main_id. On job-interview-create-from-array it is a caller-local value, only needed for those references."
    • removedInput schema / properties / questions / items / properties / is_candidate_asking_recruiter / description
      Removed value: -"Candidate-asks-recruiter prompt (view 'candidate asking recruiter')."
    • removedInput schema / properties / questions / items / properties / is_conditional / description
      Removed value: -"A yes/no question that decides which follow-ups are asked (view 'with listening conditional'). Its follow-ups point at it with conditional_question_main_id."
    • removedInput schema / properties / questions / items / properties / is_expert / description
      Removed value: -"Expert listening question (view 'with listening expert')."
    • removedInput schema / properties / questions / items / properties / is_multiple_choice / description
      Removed value: -"Multiple-choice question (view 'multiple choice')."
    • removedInput schema / properties / questions / items / properties / is_skippable / description
      Removed value: -"The candidate may skip this question: the recorded (offline avatar) interview shows a Skip button on it, and a skipped question is saved without an answer. Defaults to false."
    • removedInput schema / properties / questions / items / properties / is_skippable / example
      Removed value: -false
    • removedInput schema / properties / questions / items / properties / is_without_scoring / description
      Removed value: -"Question is asked but not scored (view 'without scoring')."
    • removedInput schema / properties / questions / items / properties / knowledge_base_id / description
      Removed value: -"Knowledge-base store id (uuid) the question draws context from."
    • removedInput schema / properties / questions / items / properties / label / description
      Removed value: -"Optional label/tag stored on the question."
    • removedInput schema / properties / questions / items / properties / mojito_language_code / description
      Removed value: -"Per-question language override (one of the platform-languages.json codes). Inherits the interview language when omitted."
    • removedInput schema / properties / questions / items / properties / mojito_language_code / example
      Removed value: -"en"
    • removedInput schema / properties / questions / items / properties / question / description
      Removed value: -"The question text shown to the candidate."
    • removedInput schema / properties / questions / items / properties / question_alternatives / description
      Removed value: -"Alternative phrasings for the question."
    • removedInput schema / properties / questions_random_subset / example
      Removed value: -0.5
    • changedInput schema / properties / recording / description
      Previous value: -"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.."New value: +"Cheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Omit/null to disable."
    • removedInput schema / properties / recording / example
      Removed value: -"video_all"
    • changedInput schema / properties / recording_full_session / description
      Previous value: -"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.."New value: +"Full interview-session recording (includes the avatar and voice) produced as a single file. Omit/null to disable."
    • removedInput schema / properties / recording_full_session / example
      Removed value: -"video_all"
    • removedInput schema / properties / recruiter_profile_id / example
      Removed value: -"28106cba-1c27-4e53-b149-32113e5e8e31"
    • removedInput schema / properties / required_pronunciation / example
      Removed value: -false
    • removedInput schema / properties / result_enable_edit_transcript / example
      Removed value: -true
    • changedInput schema / properties / result_view / description
      Previous value: -"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.."New value: +"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."
    • removedInput schema / properties / result_view / example
      Removed value: -"full"
    • changedInput schema / properties / seniority_level / description
      Previous value: -"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.."New value: +"Target seniority level for the role; auto-detected from the job description when omitted."
    • removedInput schema / properties / seniority_level / example
      Removed value: -"senior"
    • changedInput schema / properties / status / description
      Previous value: -"Lifecycle status of the interview. Options — `draft`: Created but not published — not visible to candidates and cannot be run yet. Use to stage an interview before going live. | `active`: Published and live — candidates can run it.."New value: +"Lifecycle status of the interview."
    • removedInput schema / properties / status / example
      Removed value: -"active"
    • changedInput schema / properties / tags / description
      Previous value: -"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."New value: +"Free-form tags stored on the interview. Only `active` sessions with visibility `public` or `merchant_public` are listed."
    • removedInput schema / properties / tags / example
      Removed value: -[
      -  "interview-practice",
      -  "sales"
      -]
    • changedInput schema / properties / type / description
      Previous value: -"Product type of the interview. Options — `interview`: Standard candidate interview for a role — answers are AI-scored and produce a hiring recommendation. | `coaching`: Practice/coaching session — candidate-facing feedback to help them improve; not a hiring evaluation. Only available on the coaching portal, NOT the interview portal. | `assessment`: Skills/knowledge assessment — evaluates competencies and is scored like an interview.."New value: +"Product type of the interview."
    • removedInput schema / properties / type / example
      Removed value: -"interview"
    • changedInput schema / properties / visibility / description
      Previous value: -"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.."New value: +"Who can discover and access the interview."
    • removedInput schema / properties / visibility / example
      Removed value: -"merchant_public"
    • removedOutput schema / description
      Removed value: -"Id of the created interview, the number of questions generated and the stored max_duration. Includes embed_id/embed_signing_key when is_embedded=true."
    • removedOutput schema / properties / embed_id / description
      Removed value: -"Embed id, present only when is_embedded=true."
    • removedOutput schema / properties / embed_signing_key / description
      Removed value: -"Embed signing key, present only when is_embedded=true."
    • removedOutput schema / properties / interview_def_set_id / description
      Removed value: -"Id of the newly created interview definition set."
    • removedOutput schema / properties / interview_def_set_id / example
      Removed value: -"00000000-0000-0000-0000-000000000000"
    • removedOutput schema / properties / max_duration / description
      Removed value: -"Live session limit in seconds stored on the interview — the value sent, or the 1200 default when omitted."
    • removedOutput schema / properties / max_duration / example
      Removed value: -1200
    • removedOutput schema / properties / questions_generated / description
      Removed value: -"Number of questions actually generated (with questions: the number of questions you sent). May be lower than the requested interview_length, which is capped by max_duration."
    • removedOutput schema / properties / questions_generated / example
      Removed value: -8
  4. Changed9 schema fields changed
    • addedInput schema / properties / candidate_expectations_json
      Added value: +{
      +  "description": "With questions only: pre-generated candidate expectations, bucketed by requirement level (weak/moderate/strong); generated from your questions when omitted for type interview. Ignored without questions.",
      +  "properties": {
      +    "moderate": {
      +      "description": "Requirements expected of a solid, competent candidate.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "strong": {
      +      "description": "High-bar requirements only standout candidates clear.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "weak": {
      +      "description": "Baseline requirements every viable candidate should meet (table stakes).",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / candidate_notification_channel
      Added value: +{
      +  "description": "SMS / WhatsApp notifications to the candidate, sent alongside the e-mails: \"reminders\" = with both e-mail reminders (day 1 and day 3); \"last_reminder\" = only with the final day-3 reminder; \"all\" = invitation, both reminders and the pre-screening-accepted step. null switches them off. WhatsApp is tried first, SMS when the number is not on WhatsApp. Available on paid plans (Starter and above) and needs a phone number on the candidate.",
      +  "enum": [
      +    "reminders",
      +    "last_reminder",
      +    "all",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / country_availability
      Added value: +{
      +  "description": "Which countries the interview / position is open to on the candidate portal, judged by the IP address the candidate opens it from (an unknown location only passes when countries_allowed / countries_allowed_eu are empty). From a closed country it is left out of the portal listings, and a direct link shows \"not available in your region\". Invited candidates (register_users / invite links) and candidates who already started keep access; API and MCP calls themselves are never restricted. Null = not used, every country.",
      +  "properties": {
      +    "countries_allowed": {
      +      "description": "Available ONLY to candidates in these countries (ISO 3166-1 alpha-2).",
      +      "example": [
      +        "PH",
      +        "IN"
      +      ],
      +      "items": {
      +        "pattern": "^[A-Za-z]{2}$",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "countries_allowed_eu": {
      +      "description": "Adds every EU country (plus EEA and Switzerland) to countries_allowed.",
      +      "type": "boolean"
      +    },
      +    "countries_blocked": {
      +      "description": "NOT available to candidates in these countries (ISO 3166-1 alpha-2). Wins over the allowed side.",
      +      "example": [
      +        "US"
      +      ],
      +      "items": {
      +        "pattern": "^[A-Za-z]{2}$",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "countries_blocked_eu": {
      +      "description": "Adds every EU country (plus EEA and Switzerland) to countries_blocked.",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / custom_fields
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Company-defined position fields, as job-interview-update takes them. They belong to multi-stage positions only: while the company has custom fields switched on, sending a non-empty object here is refused with 422 (create the position instead); while they are off, the field is ignored.",
      +  "type": "object"
      +}
    • addedInput schema / properties / disable_deduplication
      Added value: +{
      +  "description": "With questions only: when true, every question is stored as a new record instead of reusing an identical one. Ignored without questions.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • changedInput schema / properties / include_rapport_question / description
      Previous value: -"Include an opening rapport question. Defaults to false."New value: +"Include an opening rapport question. Defaults to false (true when questions is given)."
    • addedInput schema / properties / interview_category
      Added value: +{
      +  "description": "Job category shown on public listings, above the department (free text, e.g. \"Ashore\"). Blank is stored as null.",
      +  "example": "Ashore",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / questions
      Added value: +{
      +  "description": "OPTIONAL: your own ordered list of questions, in the format job-interview-create-from-array takes and job-interview-get returns. When given, nothing is generated by AI except the candidate expectations (type interview, unless candidate_expectations_json is given): the call then behaves exactly as job-interview-create-from-array. description becomes required; interview_length, include_closing_prompt and use_enhanced_expectations are ignored; include_rapport_question defaults to true (as job-interview-create-from-array); max_duration keeps its meaning here (stored, 1200 when omitted). Omit to have the AI generate the description and questions.",
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "candidate_expectations_json": {
      +        "description": "Per-question candidate expectations, bucketed by requirement level (weak/moderate/strong). Extra keys are preserved.",
      +        "properties": {
      +          "moderate": {
      +            "description": "Requirements expected of a solid, competent candidate.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "strong": {
      +            "description": "High-bar requirements only standout candidates clear.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "weak": {
      +            "description": "Baseline requirements every viable candidate should meet (table stakes).",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "conditional_question_answer": {
      +        "description": "With conditional_question_main_id: the answer to the yes/no question that shows this follow-up. `true` (the default) asks it after a yes, `false` after a no, so each answer can lead to its own follow-ups. Ignored on a question without conditional_question_main_id.",
      +        "example": false,
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "conditional_question_main_id": {
      +        "description": "For a follow-up question, the id (the \"id\" field above) of the yes/no question (is_conditional) in this same array that decides whether it is asked. The yes/no question must appear earlier in the array. Use conditional_question_answer to choose the answer that shows it.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "duration": {
      +        "description": "Answer duration in seconds for this question.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "external_data": {
      +        "additionalProperties": {},
      +        "description": "Arbitrary JSON metadata stored on the question.",
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "external_id": {
      +        "description": "External identifier stored on the question. job-interview-update matches on this first, so an ATS that owns stable ids can send its own array and have the diff line up without round-tripping our ids.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "id": {
      +        "description": "Identifier for this question. job-interview-get returns the question's real id here; send it back to job-interview-update so an unchanged question keeps its existing record (and with it its answer rules and any rendered avatar video). Also the handle another question references via conditional_question_main_id. On job-interview-create-from-array it is a caller-local value, only needed for those references.",
      +        "type": "string"
      +      },
      +      "is_candidate_asking_recruiter": {
      +        "description": "Candidate-asks-recruiter prompt (view 'candidate asking recruiter').",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "is_conditional": {
      +        "description": "A yes/no question that decides which follow-ups are asked (view 'with listening conditional'). Its follow-ups point at it with conditional_question_main_id.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "is_expert": {
      +        "description": "Expert listening question (view 'with listening expert').",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "is_multiple_choice": {
      +        "description": "Multiple-choice question (view 'multiple choice').",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "is_skippable": {
      +        "description": "The candidate may skip this question: the recorded (offline avatar) interview shows a Skip button on it, and a skipped question is saved without an answer. Defaults to false.",
      +        "example": false,
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "is_without_scoring": {
      +        "description": "Question is asked but not scored (view 'without scoring').",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "knowledge_base_id": {
      +        "description": "Knowledge-base store id (uuid) the question draws context from.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "label": {
      +        "description": "Optional label/tag stored on the question.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "mojito_language_code": {
      +        "description": "Per-question language override (one of the platform-languages.json codes). Inherits the interview language when omitted.",
      +        "enum": [
      +          "ar",
      +          "bg",
      +          "zh",
      +          "hr",
      +          "cs",
      +          "da",
      +          "nl",
      +          "en",
      +          "fil",
      +          "fi",
      +          "fr",
      +          "de",
      +          "el",
      +          "hi",
      +          "hu",
      +          "id",
      +          "it",
      +          "ja",
      +          "ko",
      +          "ms",
      +          "no",
      +          "pl",
      +          "pt",
      +          "br",
      +          "ro",
      +          "ru",
      +          "sk",
      +          "es",
      +          "sv",
      +          "ta",
      +          "th",
      +          "tr",
      +          "uk",
      +          "vi",
      +          null
      +        ],
      +        "example": "en",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "question": {
      +        "description": "The question text shown to the candidate.",
      +        "type": "string"
      +      },
      +      "question_alternatives": {
      +        "description": "Alternative phrasings for the question.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": [
      +          "array",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "question"
      +    ],
      +    "type": "object"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedOutput schema / properties / questions_generated / description
      Previous value: -"Number of questions actually generated. May be lower than the requested interview_length, which is capped by max_duration."New value: +"Number of questions actually generated (with questions: the number of questions you sent). May be lower than the requested interview_length, which is capped by max_duration."
  5. Changed29 schema fields changed
    • changedInput schema / properties / conversation_id / description
      Previous value: -"Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."New value: +"The conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics."
    • changedInput schema / properties / environment / enum
      Previous value: -[
      -  "production",
      -  "uat",
      -  "development",
      -  "demo",
      -  null
      -]New value: +[
      +  "production",
      +  "uat",
      +  "development",
      +  "demo"
      +]
    • changedInput schema / properties / environment / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / interview_template_id / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / interview_type / enum
      Previous value: -[
      -  "pre-screening",
      -  "pre-screening-with-test-questions",
      -  "second-interview",
      -  "remote-freelancer-verification",
      -  "strength-based-interview",
      -  "potential-based-interview",
      -  "process-verification-from-knowledge-base",
      -  "knockout-screening",
      -  null
      -]New value: +[
      +  "pre-screening",
      +  "pre-screening-with-test-questions",
      +  "second-interview",
      +  "remote-freelancer-verification",
      +  "strength-based-interview",
      +  "potential-based-interview",
      +  "process-verification-from-knowledge-base",
      +  "knockout-screening"
      +]
    • changedInput schema / properties / interview_type / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / location / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / mojito_language_code / enum
      Previous value: -[
      -  "ar",
      -  "bg",
      -  "zh",
      -  "hr",
      -  "cs",
      -  "da",
      -  "nl",
      -  "en",
      -  "fil",
      -  "fi",
      -  "fr",
      -  "de",
      -  "el",
      -  "hi",
      -  "hu",
      -  "id",
      -  "it",
      -  "ja",
      -  "ko",
      -  "ms",
      -  "no",
      -  "pl",
      -  "pt",
      -  "br",
      -  "ro",
      -  "ru",
      -  "sk",
      -  "es",
      -  "sv",
      -  "ta",
      -  "th",
      -  "tr",
      -  "uk",
      -  "vi",
      -  null
      -]New value: +[
      +  "ar",
      +  "bg",
      +  "zh",
      +  "hr",
      +  "cs",
      +  "da",
      +  "nl",
      +  "en",
      +  "fil",
      +  "fi",
      +  "fr",
      +  "de",
      +  "el",
      +  "hi",
      +  "hu",
      +  "id",
      +  "it",
      +  "ja",
      +  "ko",
      +  "ms",
      +  "no",
      +  "pl",
      +  "pt",
      +  "br",
      +  "ro",
      +  "ru",
      +  "sk",
      +  "es",
      +  "sv",
      +  "ta",
      +  "th",
      +  "tr",
      +  "uk",
      +  "vi"
      +]
    • changedInput schema / properties / mojito_language_code / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / name / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / pdf_export_auto_config / properties / ai_recruiter_assessment / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / pdf_export_auto_config / properties / ai_scoring_rubric / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / pdf_export_auto_config / properties / analytics / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / pdf_export_auto_config / properties / answer_recording / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / pdf_export_auto_config / properties / contact_details / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / pdf_export_auto_config / properties / files / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / pdf_export_auto_config / properties / group_by_question / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / pdf_export_auto_config / properties / mojito_language_code / enum
      Previous value: -[
      -  "ar",
      -  "bg",
      -  "zh",
      -  "hr",
      -  "cs",
      -  "da",
      -  "nl",
      -  "en",
      -  "fil",
      -  "fi",
      -  "fr",
      -  "de",
      -  "el",
      -  "hi",
      -  "hu",
      -  "id",
      -  "it",
      -  "ja",
      -  "ko",
      -  "ms",
      -  "no",
      -  "pl",
      -  "pt",
      -  "br",
      -  "ro",
      -  "ru",
      -  "sk",
      -  "es",
      -  "sv",
      -  "ta",
      -  "th",
      -  "tr",
      -  "uk",
      -  "vi",
      -  null
      -]New value: +[
      +  "ar",
      +  "bg",
      +  "zh",
      +  "hr",
      +  "cs",
      +  "da",
      +  "nl",
      +  "en",
      +  "fil",
      +  "fi",
      +  "fr",
      +  "de",
      +  "el",
      +  "hi",
      +  "hu",
      +  "id",
      +  "it",
      +  "ja",
      +  "ko",
      +  "ms",
      +  "no",
      +  "pl",
      +  "pt",
      +  "br",
      +  "ro",
      +  "ru",
      +  "sk",
      +  "es",
      +  "sv",
      +  "ta",
      +  "th",
      +  "tr",
      +  "uk",
      +  "vi"
      +]
    • changedInput schema / properties / pdf_export_auto_config / properties / mojito_language_code / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / pdf_export_auto_config / properties / session_recording / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / pdf_export_auto_config / properties / template / enum
      Previous value: -[
      -  "classic",
      -  "modern",
      -  "one_pager",
      -  null
      -]New value: +[
      +  "classic",
      +  "modern",
      +  "one_pager"
      +]
    • changedInput schema / properties / pdf_export_auto_config / properties / template / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / pdf_export_auto_config / properties / transcript / type
      Previous value: -[
      -  "boolean",
      -  "null"
      -]New value: +"boolean"
    • changedInput schema / properties / status / enum
      Previous value: -[
      -  "draft",
      -  "active",
      -  null
      -]New value: +[
      +  "draft",
      +  "active"
      +]
    • changedInput schema / properties / status / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "interview",
      -  "coaching",
      -  "assessment",
      -  null
      -]New value: +[
      +  "interview",
      +  "coaching",
      +  "assessment"
      +]
    • changedInput schema / properties / type / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / visibility / enum
      Previous value: -[
      -  "merchant_public",
      -  "merchant_invite",
      -  "merchant_unlisted",
      -  null
      -]New value: +[
      +  "merchant_public",
      +  "merchant_invite",
      +  "merchant_unlisted"
      +]
    • changedInput schema / properties / visibility / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
  6. Changed1 schema field changed
    • changedInput schema / properties / knowledge_base_store_id / description
      Previous value: -"Knowledge base store id to source additional context from."New value: +"Knowledge base store id to source additional context from. Documents limited to chosen interviews are left out, because a new interview is on no list yet."
  7. Changed2 schema fields changed
    • addedInput schema / properties / microphone_test_message
      Added value: +{
      +  "description": "Custom microphone-test instruction for a recorded (offline avatar) interview, spoken by the avatar and shown on screen before the first question. Omitted uses the default prompt in the interview language.",
      +  "example": "Before we start, let's check your microphone. Say \"Hello, I'm ready.\"",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / microphone_test_no_speech_message
      Added value: +{
      +  "description": "Custom text shown when the microphone test hears nothing. Omitted uses the default text in the candidate's language.",
      +  "example": "We can't hear you. Check your microphone and try again.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  8. Changed2 schema fields changed
    • changedInput schema / properties / interview_conversation_speed / description
      Previous value: -"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.."New value: +"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. | `fluent`: Talking pace: the avatar answers 300 ms after the candidate stops speaking. A pause mid-sentence also ends their turn.."
    • changedInput schema / properties / interview_conversation_speed / enum
      Previous value: -[
      -  "slower",
      -  "normal",
      -  "faster",
      -  null
      -]New value: +[
      +  "slower",
      +  "normal",
      +  "faster",
      +  "fluent",
      +  null
      +]
  9. Changed2 schema fields changed
    • changedInput schema / properties / interview_type / description
      Previous value: -"Interview style — configures the AI avatar and shapes both the AI-generated questions and the follow-up questions asked during the interview. Defaults to pre-screening when omitted. 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.."New value: +"Interview style — configures the AI avatar and shapes both the AI-generated questions and the follow-up questions asked during the interview. Defaults to pre-screening when omitted. 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. | `knockout-screening`: Knock-out screening — a short (about 5 minute) check of the role's must-haves with closed questions; ends early, politely, when a must-have is clearly not met. On creation it defaults custom_scoring.early_stop to true (where the avatar supports early stop) and max_followups to 1 unless you send them.."
    • changedInput schema / properties / interview_type / enum
      Previous value: -[
      -  "pre-screening",
      -  "pre-screening-with-test-questions",
      -  "second-interview",
      -  "remote-freelancer-verification",
      -  "strength-based-interview",
      -  "potential-based-interview",
      -  "process-verification-from-knowledge-base",
      -  null
      -]New value: +[
      +  "pre-screening",
      +  "pre-screening-with-test-questions",
      +  "second-interview",
      +  "remote-freelancer-verification",
      +  "strength-based-interview",
      +  "potential-based-interview",
      +  "process-verification-from-knowledge-base",
      +  "knockout-screening",
      +  null
      +]
  10. Changed1 schema field changed
    • changedInput schema / properties / is_embedded / description
      Previous value: -"Set true when the interview will be embedded as an iframe on an external page. Provisions an embed key and returns embed_id / embed_signing_key, which are used to authenticate/sign the iframe embed."New value: +"Set true when the interview will be embedded as an iframe on an external page. Provisions an embed key and returns embed_id / embed_signing_key, which are used to authenticate/sign the iframe embed. Where it runs depends on the type: interviews, assessments and interview role-plays embed on the interview portal (`https://<interview portal domain>/embed?embed_id=...`); coaching sessions and coaching personas embed on the consumer (coaching) portal (`https://<coaching portal domain>/embed?embed_id=...`, a link built on the interview portal is forwarded there). A signed coaching embed (name, email, signature) signs the visitor in as a learner of that portal, and the session is charged to the merchant's interview credits on completion, not to the learner's coaching credits; it cannot start while the merchant has none."
  11. Changed1 schema field changed
    • changedInput schema / properties / conversation_id / description
      Previous value: -"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."New value: +"Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
  12. Changed2 schema fields changed
    • addedInput schema / properties / conversation_id
      Added value: +{
      +  "description": "Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _mcp_instructions
      Added value: +{
      +  "description": "Server-issued metadata for this conversation.",
      +  "properties": {
      +    "conversation_id": {
      +      "description": "The server-issued conversation identifier.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  13. Changed5 schema fields changed
    • changedInput schema / properties / interview_tone / description
      Previous value: -"Interview tone — configures the AI avatar's speaking style and the tone of the AI-generated questions and follow-ups; omit to default to relaxed. 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."New value: +"Interview tone — configures the AI avatar's speaking style and the tone of the AI-generated questions and follow-ups. Case-insensitive; omit to default to relaxed. Options — `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. | `exact`: Asks the questions exactly as provided, without rephrasing — for interviews built from your own questions (create_interview_from_questions) where the wording is a script.."
    • addedInput schema / properties / interview_tone / enum
      Added value: +[
      +  "relaxed",
      +  "simple",
      +  "professional",
      +  "persuasive",
      +  "exact",
      +  null
      +]
    • changedInput schema / properties / location / description
      Previous value: -"Job location."New value: +"Job location — a city/country, or `remote`. Required and must not be empty: when the job description gives no location, pass `Not specified`."
    • changedInput schema / properties / pdf_export_auto_config / properties / mojito_language_code / description
      Previous value: -"Report language code (platform-languages.json code)."New value: +"Report language code (a platform-languages.json code)."
    • addedInput schema / properties / pdf_export_auto_config / properties / mojito_language_code / enum
      Added value: +[
      +  "ar",
      +  "bg",
      +  "zh",
      +  "hr",
      +  "cs",
      +  "da",
      +  "nl",
      +  "en",
      +  "fil",
      +  "fi",
      +  "fr",
      +  "de",
      +  "el",
      +  "hi",
      +  "hu",
      +  "id",
      +  "it",
      +  "ja",
      +  "ko",
      +  "ms",
      +  "no",
      +  "pl",
      +  "pt",
      +  "br",
      +  "ro",
      +  "ru",
      +  "sk",
      +  "es",
      +  "sv",
      +  "ta",
      +  "th",
      +  "tr",
      +  "uk",
      +  "vi",
      +  null
      +]
  14. Changed1 schema field changed
    • addedInput schema / properties / environment
      Added value: +{
      +  "description": "Which of your webhook environments results from this interview are delivered to. Defaults to production. Options — `production`: Live hiring. Results reach the webhooks configured as production. This is the default when the field is omitted. | `uat`: User-acceptance testing - an isolated environment for pre-release verification. | `development`: Development/testing. Use for interviews created by a test or preview app so their results never reach the production webhook. | `demo`: Demonstrations and sales trials..",
      +  "enum": [
      +    "production",
      +    "uat",
      +    "development",
      +    "demo",
      +    null
      +  ],
      +  "example": "production",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  15. Changed1 schema field changed
    • changedInput schema / properties / pdf_export_auto_config / properties / template / description
      Previous value: -"Report layout: classic (default), modern, or one_pager."New value: +"Report layout: classic, modern, or one_pager. Omit for the merchant default (modern when unset)."
  16. Changed1 schema field changed
    • addedInput schema / properties / pdf_export_auto_config / properties / template
      Added value: +{
      +  "description": "Report layout: classic (default), modern, or one_pager.",
      +  "enum": [
      +    "classic",
      +    "modern",
      +    "one_pager",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  17. Changed1 schema field changed
    • changedInput schema / properties / description_long / description
      Previous value: -"Full job description in Markdown (Job Purpose, Responsibilities, Required & Preferred Qualifications). Provide it to use it as-is; leave it null/blank and it is AI-generated (interview and assessment types only)."New value: +"Full job description in Markdown (Job Purpose, Responsibilities, Required & Preferred Qualifications). Provide it to use it as-is; leave it null/blank and it is AI-generated (interview and assessment types only). 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"
  18. Changed2 schema fields changed
    • changedInput schema / properties / tags / description
      Previous value: -"Free-form tags stored on the interview."New value: +"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."
    • changedInput schema / properties / tags / example
      Previous value: -[
      -  "engineering",
      -  "remote"
      -]New value: +[
      +  "interview-practice",
      +  "sales"
      +]
  19. Changed7 schema fields changed
    • changedInput schema / properties / interview_length / description
      Previous value: -"Number of questions to generate (max 40)."New value: +"Number of questions to generate (1-40). Also capped by max_duration, which allows one question per 2 minutes: 20 min -> 10 questions, 30 min -> 15, 45 min -> 22, 60 min -> 30, 80 min -> 40. Asking for more than the cap is not an error — you get the cap, and the response reports the real count in questions_generated. Omit this field to let the AI pick 5-8."
    • changedInput schema / properties / max_duration / description
      Previous value: -"Maximum interview duration in minutes used to scope question generation."New value: +"Maximum interview duration in seconds. Scopes how many questions are generated (see interview_length) and is stored on the interview as the live session limit and the basis for the credit multiplier. Defaults to 1200 (20 minutes) when omitted."
    • changedInput schema / properties / max_duration / example
      Previous value: -30New value: +1200
    • changedOutput schema / description
      Previous value: -"Id of the created interview. Includes embed_id/embed_signing_key when is_embedded=true."New value: +"Id of the created interview, the number of questions generated and the stored max_duration. Includes embed_id/embed_signing_key when is_embedded=true."
    • addedOutput schema / properties / max_duration
      Added value: +{
      +  "description": "Live session limit in seconds stored on the interview — the value sent, or the 1200 default when omitted.",
      +  "example": 1200,
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / questions_generated
      Added value: +{
      +  "description": "Number of questions actually generated. May be lower than the requested interview_length, which is capped by max_duration.",
      +  "example": 8,
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "interview_def_set_id"
      -]New value: +[
      +  "interview_def_set_id",
      +  "questions_generated",
      +  "max_duration"
      +]
  20. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and openWorldHint=true; the description goes further by disclosing cost behavior (recording_full_session and a longer max_duration raise credit cost) and hidden side effects (a rapport question is silently prepended, so 3 questions become 4 asked; descriptions/expectations are AI-generated). It does not address retry/idempotency risk for a non-idempotent create, leaving duplicate-creation hazards undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the primary fork (questions vs generated), then decomposes into parameter-specific clauses. The dense semicolon-chained first paragraph and the trailing pointer to get_tool_reference cost some readability but nothing is wasted or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 56-parameter destructive create tool with an output schema and full annotation coverage, the description covers the decisions an agent must get right: question sourcing, tone/verbatim mode, rapport question, type vs interview_type, invite-only visibility, and cost drivers. Lower-risk settings such as country_availability, result_view, and notification channels are left to the schema, which is a reasonable division of labor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so per-parameter meaning is already supplied; the description still adds cross-parameter interactions the schema states only locally — that interview_template_id also determines modality, that interview_length and include_closing_prompt are ignored when `questions` is given, and that max_duration is stored as 1200 when omitted. Not exhaustive across all 56 parameters, but the highest-risk ones are clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Create a new interview") and immediately disambiguates what the tool is not: a position's pre-screening STEP is created with set_position_process and configured with update_position_step. It also separates the two confusable parameters, `type` (product) vs `interview_type` (style), which an agent could not resolve from names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the two core paths: omit `questions` to have the sequence generated from position data, or supply `questions` to store them verbatim. It names the alternative tools for the adjacent-but-different resource (set_position_process / update_position_step) and routes the agent to list_avatars for templates, plus a clear conditional (interview_tone="exact") for compliance/legal text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.