Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "create_interview", "create_interview_from_questions" and "update_interview"
⟨1000 unchanged words⟩ interview — generate questions from your knowledge basedocuments..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..","enum":["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],"example":"pre-screening-with-test-questions","type" ⟨1269 unchanged words⟩
⟨892 unchanged words⟩ interview — generate questions from your knowledge basedocuments..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..","enum":["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],"example":"pre-screening-with-test-questions","type" ⟨1514 unchanged words⟩
⟨1229 unchanged words⟩ interview — generate questions from your knowledge basedocuments..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..","enum":["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],"example":"pre-screening-with-test-questions","type" ⟨1752 unchanged words⟩
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "create_catalogue_directory", "get_catalogue_directory", "list_catalogue_directories" and 1 more
⟨44 unchanged words⟩ session:…]` and `[plan-progress]` directives. One directory can hold several languages: the top-level fields are the default language, `translations` adds the others. Coaching-platform feature. Creates a directory (page) in ⟨43 unchanged words⟩
⟨702 unchanged words⟩ "type":["array","null"]},"translations":{"additionalProperties":{"additionalProperties":false,"properties":{"content_md":{"description":"Markdown for a custom directory page. When set (even as an empty string) the markdown replaces the default grid and decides the layout itself; null renders the plain grid of sub-directories and sessions. Alongside normal Markdown you can place these directives, each ALONE on its own line: `[plan-progress]` (the learner's coaching-plan progress), `[directory:<tag-id>]` (a card for one sub-directory), `[session:<interview-id>]` (a card for one session), `[sessions]` (every session in this directory), `[sessions:<term>]` (sessions matching a term), `[sessions:filter=<term>,limit=<n>]` (a filtered, capped list). A directive on a line with other text is rendered as ordinary text. Chips, callouts, cards, columns and buttons are available here too — full vocabulary: https://developer.jobmojito.com/cookbooks/format-content-with-markdown","example":"## Sales coaching\n\nPick a session to practise with.\n\n[chip:6 sessions] [chip:Beginner,tone=accent]\n\n[sessions:filter=objection-handling,limit=6]\n","type":["string","null"]},"cover_image_url":{"description":"Cover image for this language. Omit to show the default language's cover.","type":["string","null"]},"description":{"description":"Card description in this language.","type":["string","null"]},"name":{"description":"Page title and card name in this language.","example":"Obchodný koučing","minLength":1,"type":["string","null"]},"tags_interview_set_filter":{"description":"Tag filter selecting which coaching sessions this directory lists: a session appears when its own `tags` contain EVERY tag here (an AND, not an OR). Only `active` coaching/persona sessions with visibility `public` or `merchant_public` are listed. Set the matching tags on the session with the create-interview / job-interview-update `tags` field.","example":["sales","objection-handling"],"items":{"type":"string"},"type":["array","null"]},"tags_sub":{"description":"Ids of the directories nested under this one, in display order. Replaces the whole list — send the full set, not just the additions. A referenced directory only appears if it exists and is visible to the viewer.","example":["sales-coaching-objections-en","sales-coaching-closing-en"],"items":{"type":"string"},"type":["array","null"]}},"required":["name"],"type":"object"},"description":"Other language versions of the directory, keyed by mojito language code. The top-level fields are the default language (`mojito_language_code`); each version is a page of its own (name, Markdown, session filter, sub-directories) shown to learners who pick that language. A key may not equal `mojito_language_code`.","example":{"sk":{"name":"Obchodný koučing","tags_interview_set_filter":["sales-sk"]}},"type":["object","null"]},"
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "create_interview", "create_persona" and "set_interview_state"
⟨1049 unchanged words⟩ 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.","example":false,"type":["boolean" ⟨1138 unchanged words⟩
⟨441 unchanged words⟩ Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "get_interview_result_details"
⟨197 unchanged words⟩ assessment blobs. This is the default.\n- `full`:the API responseeveryverbatimfield, including therawper-answerpronunciation/sentimentrawdata.assessmentLargedata —acondensed:longpronunciationinterviewandcan
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "get_interview_definition" and "update_interview"
⟨153 unchanged words⟩ "type":["string","null"]},"country_availability":{"description":"Portal availability by the candidate's country: {countries_allowed?: string[], countries_allowed_eu?: boolean, countries_blocked?: string[], countries_blocked_eu?: boolean} (ISO 3166-1 alpha-2, EU = EU + EEA + Switzerland; blocked wins), judged by the candidate's IP on the portal; invited candidates keep access. Null = not used, every country. Set it with job-interview-update."},"cover_image_url":{"description":"Cover image URL.", ⟨1294 unchanged words⟩
⟨341 unchanged words⟩ new request.","type":"string"},"country_availability":{"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","null"]},"countries_allowed_eu":{"description":"Adds every EU country (plus EEA and Switzerland) to countries_allowed.","type":["boolean","null"]},"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","null"]},"countries_blocked_eu":{"description":"Adds every EU country (plus EEA and Switzerland) to countries_blocked.","type":["boolean","null"]}},"type":["object","null"]},"
Changed the definition of "list_candidates"
⟨79 unchanged words⟩ :"string"},"filter_text":{"description":"Case-insensitive searchSearch on candidate name,oremail,email.external id, phone and CV skills. Every word must match (case and accents ignored; longer words tolerate typos). Without order_by, the best matches come first.","type":"string"},"limit":{ ⟨131 unchanged words⟩
⟨221 unchanged words⟩ "type":["number","null"]},"skills":{"description":"Skills read from the candidate's latest CV; null until extracted.","items":{"type":"string"},"type":["array","null"]},"
Changed the definition of "create_catalogue_directory", "create_interview", "create_interview_from_questions" and 26 more
⟨224 unchanged words⟩ "null"]},"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"cover_image_url":{ ⟨494 unchanged words⟩
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "get_interview_definition", "register_users_for_interview" and "update_interview"
before
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"calc_definition_json":{"description":"The compiled interview definition JSON (structure varies by interview type)."},"candidate_expectations":{"description":"Free-text candidate expectations. Null for multi-stage positions.","type":["string","null"]},"candidate_expectations_json":{"description":"Structured candidate expectations JSON — the scoring rubric. Null for multi-stage positions."},"candidate_video_introduction":{"description":"Whether a candidate video introduction is hidden/optional/required. Null for multi-stage positions.","enum":["hidden","optional","required",null],"type":["string","null"]},"coach_plan":{"description":"Coaching-plan stage this session belongs to. Null for multi-stage positions and for sessions outside any plan.","enum":["demo","screening","2nd","3rd","closing","job-specific","other",null],"type":["string","null"]},"code":{"description":"Caller-supplied external code/reference.","type":["string","null"]},"cover_image_url":{"description":"Cover image URL.","type":["string","null"]},"created_at":{"example":"2026-01-15T09:30:00.000Z","type":["string","null"]},"creation_parameters":{"description":"The creation parameters recorded at build time (interview_type, interview_tone, interview_length, additional_context, include_rapport_question, include_closing_prompt, knowledge_base_store_id, seniority_level, hiring_for_company)."},"description":{"description":"Short description.","type":["string","null"]},"environment":{"description":"Which webhook environment this interview's results are delivered to. Null for multi-stage positions, whose stages each carry their own.","enum":["production","uat","development","demo",null],"example":"production","type":["string","null"]},"interview_available_till":{"description":"ISO date/time after which the interview is no longer available to candidates. Null means always available.","type":["string","null"]},"interview_conversation_speed":{"description":"Conversation pace of the AI avatar (slower/normal/faster). Null keeps the template default. Null for multi-stage positions.","type":["string","null"]},"interview_department":{"description":"Department the position belongs to.","example":"Engineering","type":["string","null"]},"interview_description_long":{"description":"Long description (create/update field `description_long`). Rendered as Markdown on the candidate-facing position page — formatting guide: https://developer.jobmojito.com/cookbooks/format-content-with-markdown","type":["string","null"]},"interview_location":{"description":"Location (create field `location`).","type":["string","null"]},"interview_salary":{"description":"Salary range shown for the position.","example":"$80k - $100k","type":["string","null"]},"interview_template_id":{"description":"Interview template id. For multi-stage positions this is the first interview step's template.","type":["string","null"]},"interview_template_type":{"description":"Type of the linked interview template. `interactive_elevenlabs` is voice-only; the others (`interactive_spatius`, `interactive_heygen`, `offline_heygen`, `offline_elai`, `offline_synthesia`) are avatar-based. Null when the template could not be resolved.","enum":["offline_elai","offline_synthesia","interactive_heygen","offline_heygen","interactive_elevenlabs","interactive_spatius",null],"type":["string","null"]},"is_multistage":{"description":"True when the id resolved to a multi-stage position rather than a single interview.","type":["boolean","null"]},"is_voice_only":{"description":"Convenience flag derived from interview_template_type: true when voice-only (`interactive_elevenlabs`), false when avatar-based, null when the template type could not be resolved.","type":["boolean","null"]},"knowledge_base_store_id":{"description":"Linked knowledge base store id. Null for multi-stage positions.","type":["string","null"]},"max_duration":{"description":"Live session limit in seconds. Null for multi-stage positions.","type":["number","null"]},"max_followups":{"description":"Maximum number of AI follow-up questions; null uses the template default. Null for multi-stage positions.","type":["number","null"]},"merchant_id":{"description":"Owning merchant id.","type":["string","null"]},"mojito_language_code":{"description":"Platform (mojito) language code.","example":"en","type":["string","null"]},"name":{"description":"Interview or position name.","type":["string","null"]},"pdf_export_auto_config":{"description":"Auto-PDF-report options applied when the interview completes; null when auto-export is off. Null for multi-stage positions."},"questions":{"description":"The interview questions, in the order they are asked, in the same format job-interview-create-from-array accepts — so this array can be edited and sent straight back to job-interview-update, or used to create a copy of this interview. Each `id` is the question's real identifier: send it back unchanged and the question keeps its existing record (and with it its answer rules and any rendered avatar video). The welcome, thank-you and instructional-video steps are NOT included — they are not questions in this format, and job-interview-update leaves them untouched. Null for multi-stage positions, whose questions live on the individual interview stages.","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","null"]},"strong":{"description":"High-bar requirements only standout candidates clear.","items":{"type":"string"},"type":["array","null"]},"weak":{"description":"Baseline requirements every viable candidate should meet (table stakes).","items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"conditional_question_main_id":{"description":"For a conditional question, the id (the \"id\" field above) of the parent question in this same array that triggers it. The parent must appear earlier in the array than the conditional question referencing 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","null"]},"is_candidate_asking_recruiter":{"description":"Candidate-asks-recruiter prompt (view 'candidate asking recruiter').","type":["boolean","null"]},"is_conditional":{"description":"Conditional follow-up question (view 'with listening conditional'). Use 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_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","null"]},"question_alternatives":{"description":"Alternative phrasings for the question.","items":{"type":"string"},"type":["array","null"]}},"required":["question"],"type":"object"},"type":["array","null"]},"questions_random_subset":{"description":"Fraction of the questions actually asked (0.01-0.9); null asks all of them. Null for multi-stage positions.","type":["number","null"]},"recording":{"description":"Per-answer recording mode. Null for multi-stage positions.","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"type":["string","null"]},"recording_full_session":{"description":"Full-session recording mode. Null for multi-stage positions.","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"type":["string","null"]},"recruiter_profile_id":{"description":"Profile id of the recruiter owning this interview/position.","type":["string","null"]},"required_pronunciation":{"description":"Whether a pronunciation assessment is required. Null for multi-stage positions.","type":["boolean","null"]},"result_enable_edit_transcript":{"description":"Whether the candidate may edit the transcript on the result view. Null for multi-stage positions.","type":["boolean","null"]},"result_scoring":{"description":"Resolved result-scoring config (update field `custom_scoring`; its `max_retries` is the update field `interview_attempts`). Null means the platform defaults apply. Null for multi-stage positions."},"result_view":{"description":"Result view level. Null for multi-stage positions.","enum":["minimal","advanced","full","full_expand_scores","minimal_with_score","none",null],"type":["string","null"]},"slug":{"description":"URL slug of the public listing, when one was generated.","type":["string","null"]},"speech_language_code":{"description":"Azure speech language code. Null for multi-stage positions.","type":["string","null"]},"speech_language_name":{"description":"Azure speech language display name. Null for multi-stage positions.","type":["string","null"]},"stage":{"description":"Hiring-pipeline stage. Null for multi-stage positions.","enum":["Interest","Application submitted","Interview 1st planned","Interview 1st completed","Interview 2nd planned","Interview 2nd completed","Interview 3rd planned","Interview 3rd completed","Offer negotiations","Hired","Rejected","Offer declined","Other",null],"type":["string","null"]},"status":{"description":"Lifecycle status of the interview/position.","enum":["draft","active","archived","deleted","preparing","completed",null],"type":["string","null"]},"tags":{"description":"Free-form tags. Also the coaching-catalogue mapping key: a catalogue directory lists this session when its `tags_interview_set_filter` is a subset of these tags. Null for multi-stage positions.","example":["interview-practice","sales"],"items":{"type":"string"},"type":["array","null"]},"type":{"description":"Interview type. Null for multi-stage positions.","enum":["coaching","interview","persona","persona_interview","public_avatar","assessment",null],"type":["string","null"]},"type_credit":{"description":"Credit bucket the interview draws from. Null for multi-stage positions.","enum":["resume_check","interview_coach_starter","interview_coach_contributor","interview_coach_manager","cover_letter",null],"type":["string","null"]},"updated_at":{"example":"2026-01-20T14:05:00.000Z","type":["string","null"]},"visibility":{"description":"Who can see and access the interview/position.","enum":["public","merchant_public","merchant_invite","merchant_unlisted","sub_item",null],"type":["string","null"]}},"required":["name","created_at","updated_at","questions","is_multistage","status","visibility","stage","type","environment","code","interview_location","cover_image_url","merchant_id","interview_template_id","interview_template_type","is_voice_only","knowledge_base_store_id","mojito_language_code","speech_language_code","speech_language_name","recording","recording_full_session","type_credit","result_view","candidate_video_introduction","description","interview_description_long","candidate_expectations","interview_department","interview_salary","interview_available_till","recruiter_profile_id","slug","tags","coach_plan","interview_conversation_speed","max_followups","max_duration","questions_random_subset","required_pronunciation","result_enable_edit_transcript"],"type":"object","x-fastmcp-top-level-schema":"JobInterviewGetResponse"}Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "create_catalogue_directory", "create_interview", "create_interview_from_questions" and 26 more
⟨222 unchanged words⟩ "type":["string","null"]},"conversation_id":{"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"},"cover_image_url":{"description":"Cover image URL shown ⟨489 unchanged words⟩
{"description":"The created catalogue directory.","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"catalogue_url":{"description":"Public URL of the ⟨69 unchanged words⟩
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "create_interview", "create_interview_from_questions", "create_persona" and 2 more
⟨185 unchanged words⟩ "type":["string","null"]},"environment":{"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"]},"hiring_for_company":{"description":"Who the position is ⟨1772 unchanged words⟩
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "list_avatars", "list_catalogue_directories", "list_interview_results" and 1 more
⟨12 unchanged words⟩ `interactive_elevenlabs` = voice-only (no video avatar);`interactive_heygen``interactive_spatius` = realtime interactive 3D avatar (videorendered in the candidate's browser, 1.25 credits, no early stop); `interactive_heygen` = premium realtime interactive video avatar; `offline_heygen` = pre-recorded, non-interactive avatar. An item's ⟨89 unchanged words⟩
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
Changed the definition of "create_interview", "create_interview_from_questions", "generate_interview_report" and 3 more
⟨1188 unchanged words⟩ "template":{"description":"Report layout: classic(default), modern, or one_pager. Omit for the merchant default (modern when unset).","enum":["classic","modern"," ⟨758 unchanged words⟩
⟨1027 unchanged words⟩ "template":{"description":"Report layout: classic(default), modern, or one_pager. Omit for the merchant default (modern when unset).","enum":["classic","modern","
Changed the definition of "get_interview_result_details"
⟨37 unchanged words⟩ analyses keyed by analysis name (jsonb).`hiring_reasons``strengths_concerns`: {reasons_to_hirestrengths: string[],reasons_not_to_hireconcerns: string[] } (0-4 items each,recruiter-facingrecruiter-facing; called `hiring_reasons` with `reasons_to_hire` / `reasons_not_to_hire` inside before 2026-09-15, and rows written before then may still carry that shape). `takeaways`: { what_went_well: string[], ⟨118 unchanged words⟩ hire (list). Deprecated: a copy ofai_analysis_other.hiring_reasons.reasons_to_hireai_analysis_other.strengths_concerns.strengths, kept for existing integrations."},"ai_analysis_recruiter_why_not_hire": ⟨4 unchanged words⟩ hire (list). Deprecated: a copy ofai_analysis_other.hiring_reasons.reasons_not_to_hire
Changed the definition of "create_interview", "create_interview_from_questions", "generate_interview_report" and 2 more
⟨1185 unchanged words⟩ "type":["boolean","null"]},"template":{"description":"Report layout: classic (default), modern, or one_pager.","enum":["classic","modern","one_pager",null],"type":["string","null"]},"transcript":{"description":"Include the interview transcript. ⟨747 unchanged words⟩
⟨1024 unchanged words⟩ "type":["boolean","null"]},"template":{"description":"Report layout: classic (default), modern, or one_pager.","enum":["classic","modern","one_pager",null],"type":["string","null"]},"transcript":{"description":"Include the interview transcript. ⟨1136 unchanged words⟩
Certificate recorded, valid to 2027-02-12
Authorization not required, issuer https://momsbvnltsydezmoesqt.supabase.co/auth/v1
First tool surface recorded: 29 tools (server version 1.2.1)
Showing the latest 35 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨54 unchanged words⟩ you need the current value to extend it. Other language versions of the page are in `translations` (`languages` lists them, default first). Reads one catalogue directory in full: its ⟨46 unchanged words⟩
⟨76 unchanged words⟩ directory to read (the catalogue URL segment). The old id of a renamed directory also works; the response carries its current `id`.","example":"sales-coaching-en","minLength":1, ⟨21 unchanged words⟩ ","example":"28106cba-1c27-4e53-b149-32113e5e8e31","format":"uuid","type":"string"},"mojito_language_code":{"description":"Show `sub_directories` and `matched_sessions` for this language version of the directory (one of its `languages`) instead of the default one - how you verify a translation lists the right sessions.","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"],"example":"en","type":"string"}},"required": ⟨3 unchanged words⟩
⟨275 unchanged words⟩ "type":["boolean","null"]},"languages":{"description":"Every language the directory has, the default (`mojito_language_code`) first. `matched_sessions` and `sub_directories` describe the default language unless the request names another one in `mojito_language_code`.","example":["en","sk"],"items":{"type":"string"},"type":["array","null"]},"matched_sessions":{"description":"The coaching/persona sessions this ⟨180 unchanged words⟩ "type":["string","null"]},"merged_into":{"description":"Set when this directory was folded into another as one of its language versions: the directory to edit instead. Its old URL redirects there.","type":["string","null"]},"mojito_language_code":{"description":"Directory language.","example ⟨221 unchanged words⟩ "type":["array","null"]},"translations":{"additionalProperties":{"additionalProperties":{},"properties":{},"type":"object"},"description":"The directory's OTHER language versions, keyed by mojito language code. The top-level fields are the default language (`mojito_language_code`); each version here is a page of its own with its own name, Markdown, session filter and sub-directories, shown to learners who pick that language in the catalogue (falling back to English, then the default). A key may not equal `mojito_language_code`.","type":["object","null"]},"updated_at":{"description":"Last update timestamp (ISO 8601).","type":["string","null"]},"viewed_language":{"description":"The language version `sub_directories` and `matched_sessions` were resolved for: the requested `mojito_language_code`, else the default.","example":"sk","type":["string","null"]},"visibility":{"description":"Who can see it. ⟨12 unchanged words⟩ ","merchant_id","tags_sub","tags_interview_set_filter","content_md","translations","languages","viewed_language","merged_into","created_at","updated_at","catalogue_url","is_start_directory ⟨7 unchanged words⟩
⟨147 unchanged words⟩ },"mojito_language_code":{"description":"Filter bythelanguage:directorydirectorieslanguage.whose default language or one of whose language versions is this one. Omit for all languages.","enum":[" ⟨133 unchanged words⟩
⟨137 unchanged words⟩ "type":["boolean","null"]},"languages":{"description":"Every language the directory has, its default (`mojito_language_code`) first. Read a version with catalogue-tag-get (`translations`).","example":["en","sk"],"items":{"type":"string"},"type":["array","null"]},"merchant_id":{"description":"Owning merchant id. Null ⟨4 unchanged words⟩ "type":["string","null"]},"merged_into":{"description":"Set when this directory was folded into another as one of its language versions (it is archived; its URL redirects there).","type":["string","null"]},"mojito_language_code":{"description":"Directory language.","example ⟨88 unchanged words⟩ ","null"]}},"required":["id","languages","has_content_page","is_start_directory"],"type":" ⟨79 unchanged words⟩
⟨14 unchanged words⟩ (`tags_interview_set_filter`), re-order its sub-directories (`tags_sub`),orauthor its custom Markdown page (`content_md`), or add, replace or remove a language version (`translations`, per language; null removes one). Only the fields you send are changed. ⟨47 unchanged words⟩ re-order or replace its sub-directories (`tags_sub`),orauthor its custom Markdown page (`content_md`), or add, replace and remove its other language versions (`translations`).
⟨272 unchanged words⟩ the catalogue URL segment). The id itselfcannotisbenot changed here —createrename anewdirectoryinstead.in the admin catalogue editor, which moves every link to it.","example":"sales-coaching-en","minLength":1, ⟨246 unchanged words⟩ "type":"string"},"type":["array","null"]},"translations":{"additionalProperties":{"additionalProperties":false,"properties":{"content_md":{"description":"Markdown for a custom directory page. When set (even as an empty string) the markdown replaces the default grid and decides the layout itself; null renders the plain grid of sub-directories and sessions. Alongside normal Markdown you can place these directives, each ALONE on its own line: `[plan-progress]` (the learner's coaching-plan progress), `[directory:<tag-id>]` (a card for one sub-directory), `[session:<interview-id>]` (a card for one session), `[sessions]` (every session in this directory), `[sessions:<term>]` (sessions matching a term), `[sessions:filter=<term>,limit=<n>]` (a filtered, capped list). A directive on a line with other text is rendered as ordinary text. Chips, callouts, cards, columns and buttons are available here too — full vocabulary: https://developer.jobmojito.com/cookbooks/format-content-with-markdown","example":"## Sales coaching\n\nPick a session to practise with.\n\n[chip:6 sessions] [chip:Beginner,tone=accent]\n\n[sessions:filter=objection-handling,limit=6]\n","type":["string","null"]},"cover_image_url":{"description":"Cover image for this language. Omit to show the default language's cover.","type":["string","null"]},"description":{"description":"Card description in this language.","type":["string","null"]},"name":{"description":"Page title and card name in this language.","example":"Obchodný koučing","minLength":1,"type":["string","null"]},"tags_interview_set_filter":{"description":"Tag filter selecting which coaching sessions this directory lists: a session appears when its own `tags` contain EVERY tag here (an AND, not an OR). Only `active` coaching/persona sessions with visibility `public` or `merchant_public` are listed. Set the matching tags on the session with the create-interview / job-interview-update `tags` field.","example":["sales","objection-handling"],"items":{"type":"string"},"type":["array","null"]},"tags_sub":{"description":"Ids of the directories nested under this one, in display order. Replaces the whole list — send the full set, not just the additions. A referenced directory only appears if it exists and is visible to the viewer.","example":["sales-coaching-objections-en","sales-coaching-closing-en"],"items":{"type":"string"},"type":["array","null"]}},"required":["name"],"type":"object"},"description":"The directory's OTHER language versions, keyed by mojito language code. The top-level fields are the default language (`mojito_language_code`); each version here is a page of its own with its own name, Markdown, session filter and sub-directories, shown to learners who pick that language in the catalogue (falling back to English, then the default). A key may not equal `mojito_language_code`. Only the languages you send change: an object replaces that version, null removes it. Send `translations: null` to remove every version.","example":{"sk":{"name":"Obchodný koučing","tags_interview_set_filter":["sales-sk"]}},"type":["object","null"]},"visibility":{"description" ⟨81 unchanged words⟩
⟨100 unchanged words⟩ , removes the embed keys (disables embedding). 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.","type":["boolean","null"]} ⟨43 unchanged words⟩
⟨60 unchanged words⟩ "null"]},"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"cover_image_url":{ ⟨2068 unchanged words⟩
⟨117 unchanged words⟩ "null"]},"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"cover_image_url":{ ⟨2239 unchanged words⟩
⟨58 unchanged words⟩ "null"]},"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"cover_image_url":{ ⟨1628 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"export_features_result":{ ⟨429 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"hide_menu":{ ⟨98 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"id":{ ⟨48 unchanged words⟩
{"additionalProperties":false,"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"max_chars":{ ⟨26 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"position_id":{ ⟨31 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"get_signed_recordings":{ ⟨175 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"date_from":{ ⟨158 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"interview_id":{ ⟨128 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"merchant_id":{ ⟨27 unchanged words⟩
{"additionalProperties":false,"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"}},"type":"object"}
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"filter_text":{ ⟨217 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"filter_emoji":{ ⟨152 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"filter_text":{ ⟨221 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"filter_emoji":{ ⟨148 unchanged words⟩ ":{"description":"Filter by pipeline step type (pre-screeningvs, interview or meeting). Omit forboth.all.","enum":["pre-screening","interview","meeting"],"example":"interview","type":" ⟨51 unchanged words⟩
⟨183 unchanged words⟩ "type":["string","null"]},"position_def_step_id":{"description":"Position step definition id the row belongs to (null for single-stage interviews).","type":["string","null"]},"position_name":{"description":"Position / interview name. ⟨12 unchanged words⟩ ]},"position_step":{"description":"Pipeline step.","type":["string","null"]},"position_step_count":{"description":"Number of steps in the position process.","type":["number","null"]},"position_step_index":{"description":"1-based position of the step in the position process.","type":["number","null"]},"position_step_name":{"description":"Custom name of the position step, null when the step uses its default label.","type":["string","null"]} ⟨206 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"filter_emoji":{ ⟨165 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"}},"required": ⟨2 unchanged words⟩
{"additionalProperties":false,"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"search":{ ⟨12 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"filter_text":{ ⟨97 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"hide_iframe":{ ⟨301 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"interview_result_id":{ ⟨22 unchanged words⟩
{"additionalProperties":false,"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"limit":{ ⟨42 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"is_embedded":{ ⟨82 unchanged words⟩
⟨166 unchanged words⟩ "null"]},"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"cover_image_url":{ ⟨390 unchanged words⟩
⟨275 unchanged words⟩ "null"]},"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"cover_image_url":{ ⟨2476 unchanged words⟩
{"properties":{"conversation_id":{"description":"EchoPass the exact conversation_id from the server's previousresponse.response, unchanged. The server provides it on the first call ⟨7 unchanged words⟩ 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.","type":"string"},"file":{ ⟨66 unchanged words⟩
after
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"calc_definition_json":{"description":"The compiled interview definition JSON (structure varies by interview type)."},"candidate_expectations":{"description":"Free-text candidate expectations. Null for multi-stage positions.","type":["string","null"]},"candidate_expectations_json":{"description":"Structured candidate expectations JSON — the scoring rubric. Null for multi-stage positions."},"candidate_notification_channel":{"description":"SMS / WhatsApp candidate notifications: null = off, reminders = with both e-mail reminders, last_reminder = only with the final reminder, all = invitation + reminders + pre-screening accepted.","enum":["reminders","last_reminder","all",null],"type":["string","null"]},"candidate_video_introduction":{"description":"Whether a candidate video introduction is hidden/optional/required. Null for multi-stage positions.","enum":["hidden","optional","required",null],"type":["string","null"]},"coach_plan":{"description":"Coaching-plan stage this session belongs to. Null for multi-stage positions and for sessions outside any plan.","enum":["demo","screening","2nd","3rd","closing","job-specific","other",null],"type":["string","null"]},"code":{"description":"Caller-supplied external code/reference.","type":["string","null"]},"cover_image_url":{"description":"Cover image URL.","type":["string","null"]},"created_at":{"example":"2026-01-15T09:30:00.000Z","type":["string","null"]},"creation_parameters":{"description":"The creation parameters recorded at build time (interview_type, interview_tone, interview_length, additional_context, include_rapport_question, include_closing_prompt, knowledge_base_store_id, seniority_level, hiring_for_company)."},"description":{"description":"Short description.","type":["string","null"]},"environment":{"description":"Which webhook environment this interview's results are delivered to. Null for multi-stage positions, whose stages each carry their own.","enum":["production","uat","development","demo",null],"example":"production","type":["string","null"]},"interview_available_till":{"description":"ISO date/time after which the interview is no longer available to candidates. Null means always available.","type":["string","null"]},"interview_conversation_speed":{"description":"Conversation pace of the AI avatar (slower/normal/faster). Null keeps the template default. Null for multi-stage positions.","type":["string","null"]},"interview_department":{"description":"Department the position belongs to.","example":"Engineering","type":["string","null"]},"interview_description_long":{"description":"Long description (create/update field `description_long`). Rendered as Markdown on the candidate-facing position page — formatting guide: https://developer.jobmojito.com/cookbooks/format-content-with-markdown","type":["string","null"]},"interview_location":{"description":"Location (create field `location`).","type":["string","null"]},"interview_salary":{"description":"Salary range shown for the position.","example":"$80k - $100k","type":["string","null"]},"interview_template_id":{"description":"Interview template id. For multi-stage positions this is the first interview step's template.","type":["string","null"]},"interview_template_type":{"description":"Type of the linked interview template. `interactive_elevenlabs` is voice-only; the others (`interactive_spatius`, `interactive_heygen`, `offline_heygen`, `offline_elai`, `offline_synthesia`) are avatar-based. Null when the template could not be resolved.","enum":["offline_elai","offline_synthesia","interactive_heygen","offline_heygen","interactive_elevenlabs","interactive_spatius",null],"type":["string","null"]},"is_multistage":{"description":"True when the id resolved to a multi-stage position rather than a single interview.","type":["boolean","null"]},"is_voice_only":{"description":"Convenience flag derived from interview_template_type: true when voice-only (`interactive_elevenlabs`), false when avatar-based, null when the template type could not be resolved.","type":["boolean","null"]},"knowledge_base_store_id":{"description":"Linked knowledge base store id. Null for multi-stage positions.","type":["string","null"]},"max_duration":{"description":"Live session limit in seconds. Null for multi-stage positions.","type":["number","null"]},"max_followups":{"description":"Maximum number of AI follow-up questions; null uses the template default. Null for multi-stage positions.","type":["number","null"]},"merchant_id":{"description":"Owning merchant id.","type":["string","null"]},"mojito_language_code":{"description":"Platform (mojito) language code.","example":"en","type":["string","null"]},"name":{"description":"Interview or position name.","type":["string","null"]},"pdf_export_auto_config":{"description":"Auto-PDF-report options applied when the interview completes; null when auto-export is off. Null for multi-stage positions."},"questions":{"description":"The interview questions, in the order they are asked, in the same format job-interview-create-from-array accepts — so this array can be edited and sent straight back to job-interview-update, or used to create a copy of this interview. Each `id` is the question's real identifier: send it back unchanged and the question keeps its existing record (and with it its answer rules and any rendered avatar video). The welcome, thank-you and instructional-video steps are NOT included — they are not questions in this format, and job-interview-update leaves them untouched. Null for multi-stage positions, whose questions live on the individual interview stages.","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","null"]},"strong":{"description":"High-bar requirements only standout candidates clear.","items":{"type":"string"},"type":["array","null"]},"weak":{"description":"Baseline requirements every viable candidate should meet (table stakes).","items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"conditional_question_main_id":{"description":"For a conditional question, the id (the \"id\" field above) of the parent question in this same array that triggers it. The parent must appear earlier in the array than the conditional question referencing 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","null"]},"is_candidate_asking_recruiter":{"description":"Candidate-asks-recruiter prompt (view 'candidate asking recruiter').","type":["boolean","null"]},"is_conditional":{"description":"Conditional follow-up question (view 'with listening conditional'). Use 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_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","null"]},"question_alternatives":{"description":"Alternative phrasings for the question.","items":{"type":"string"},"type":["array","null"]}},"required":["question"],"type":"object"},"type":["array","null"]},"questions_random_subset":{"description":"Fraction of the questions actually asked (0.01-0.9); null asks all of them. Null for multi-stage positions.","type":["number","null"]},"recording":{"description":"Per-answer recording mode. Null for multi-stage positions.","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"type":["string","null"]},"recording_full_session":{"description":"Full-session recording mode. Null for multi-stage positions.","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"type":["string","null"]},"recruiter_profile_id":{"description":"Profile id of the recruiter owning this interview/position.","type":["string","null"]},"required_pronunciation":{"description":"Whether a pronunciation assessment is required. Null for multi-stage positions.","type":["boolean","null"]},"result_enable_edit_transcript":{"description":"Whether the candidate may edit the transcript on the result view. Null for multi-stage positions.","type":["boolean","null"]},"result_scoring":{"description":"Resolved result-scoring config (update field `custom_scoring`; its `max_retries` is the update field `interview_attempts`). Null means the platform defaults apply. Null for multi-stage positions."},"result_view":{"description":"Result view level. Null for multi-stage positions.","enum":["minimal","advanced","full","full_expand_scores","minimal_with_score","none",null],"type":["string","null"]},"slug":{"description":"URL slug of the public listing, when one was generated.","type":["string","null"]},"speech_language_code":{"description":"Azure speech language code. Null for multi-stage positions.","type":["string","null"]},"speech_language_name":{"description":"Azure speech language display name. Null for multi-stage positions.","type":["string","null"]},"stage":{"description":"Hiring-pipeline stage. Null for multi-stage positions.","enum":["Interest","Application submitted","Interview 1st planned","Interview 1st completed","Interview 2nd planned","Interview 2nd completed","Interview 3rd planned","Interview 3rd completed","Offer negotiations","Hired","Rejected","Offer declined","Other",null],"type":["string","null"]},"status":{"description":"Lifecycle status of the interview/position.","enum":["draft","active","archived","deleted","preparing","completed",null],"type":["string","null"]},"tags":{"description":"Free-form tags. Also the coaching-catalogue mapping key: a catalogue directory lists this session when its `tags_interview_set_filter` is a subset of these tags. Null for multi-stage positions.","example":["interview-practice","sales"],"items":{"type":"string"},"type":["array","null"]},"type":{"description":"Interview type. Null for multi-stage positions.","enum":["coaching","interview","persona","persona_interview","public_avatar","assessment",null],"type":["string","null"]},"type_credit":{"description":"Credit bucket the interview draws from. Null for multi-stage positions.","enum":["resume_check","interview_coach_starter","interview_coach_contributor","interview_coach_manager","cover_letter",null],"type":["string","null"]},"updated_at":{"example":"2026-01-20T14:05:00.000Z","type":["string","null"]},"visibility":{"description":"Who can see and access the interview/position.","enum":["public","merchant_public","merchant_invite","merchant_unlisted","sub_item",null],"type":["string","null"]}},"required":["name","created_at","updated_at","questions","is_multistage","status","visibility","stage","type","environment","code","interview_location","cover_image_url","merchant_id","interview_template_id","interview_template_type","is_voice_only","knowledge_base_store_id","mojito_language_code","speech_language_code","speech_language_name","recording","recording_full_session","type_credit","result_view","candidate_video_introduction","description","interview_description_long","candidate_expectations","interview_department","interview_salary","interview_available_till","candidate_notification_channel","recruiter_profile_id","slug","tags","coach_plan","interview_conversation_speed","max_followups","max_duration","questions_random_subset","required_pronunciation","result_enable_edit_transcript"],"type":"object","x-fastmcp-top-level-schema":"JobInterviewGetResponse"}⟨285 unchanged words⟩ ","type":["string","null"]},"phone":{"description":"Optional mobile number in international format (E.164, e.g. +421903123456). Enables SMS / WhatsApp invitation and reminder notifications when the interview has candidate_notification_channel set. Never overwrites a phone already stored on the candidate.","example":"+421903123456","type":["string","null"]}},"type":"object"},"type":[ ⟨7 unchanged words⟩
⟨63 unchanged words⟩ "type":["string","null"]},"phone":{"type":["string","null"]},"result":{"description":"\"ok\" on ⟨27 unchanged words⟩
⟨79 unchanged words⟩ "type":["object","null"]},"candidate_notification_channel":{"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"]},"candidate_video_introduction":{"description":"Whether a candidate video ⟨2616 unchanged words⟩
before
{"properties":{"additional_context":{"additionalProperties":{},"description":"Arbitrary additional context object merged into AI generation.","type":["object","null"]},"candidate_expectations":{"description":"Free-text candidate expectations folded into AI generation.","type":["string","null"]},"candidate_video_introduction":{"description":"Whether a candidate video introduction is optional or required.","enum":["optional","required",null],"example":"optional","type":["string","null"]},"code":{"description":"Optional external code/reference for the interview.","example":"my code","type":["string","null"]},"cover_image_url":{"description":"Cover image URL.","example":"https://example.com/cover.png","type":["string","null"]},"custom_scoring":{"additionalProperties":{},"description":"Custom result-scoring overrides merged with defaults and template overrides.","type":["object","null"]},"description":{"description":"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.","example":"Backend role focused on Python, async APIs, and AWS.","type":["string","null"]},"description_long":{"description":"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","type":["string","null"]},"environment":{"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"]},"hiring_for_company":{"description":"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.","example":{"name":"undisclosed"},"properties":{"company_size":{"description":"Approximate headcount of the end employer.","example":"100-200","type":["string","null"]},"description":{"description":"Short description of the end employer, used as background context by the agent.","example":"Unimo Enterprises is a leading logistics and supply chain solutions provider.","type":["string","null"]},"location":{"description":"Primary location of the end employer.","example":"Sri Lanka","type":["string","null"]},"name":{"description":"End-employer name. Omit/null when hiring for yourself, 'undisclosed' for an unnamed external client, or the client's company name.","example":"Unimo Enterprises","type":["string","null"]},"sector":{"description":"Industry / sector of the end employer.","example":"Logistics and Supply Chain","type":["string","null"]}},"type":["object","null"]},"include_closing_prompt":{"description":"Include a closing prompt. Defaults to true.","example":true,"type":["boolean","null"]},"include_rapport_question":{"description":"Include an opening rapport question. Defaults to false.","example":true,"type":["boolean","null"]},"instructional_video":{"description":"Show an instructional video before approval. Defaults to false.","example":true,"type":["boolean","null"]},"instructional_video_custom_text":{"description":"Custom narration text for the instructional video.","type":["string","null"]},"interview_attempts":{"description":"Allowed candidate attempts (1-20).","example":1,"maximum":20,"minimum":1,"type":["number","null"]},"interview_available_till":{"description":"ISO date/time after which the interview is no longer available to candidates. null keeps it always available.","example":"2026-12-31","type":["string","null"]},"interview_conversation_speed":{"description":"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..","enum":["slower","normal","faster",null],"example":"normal","type":["string","null"]},"interview_department":{"description":"Department the position belongs to.","example":"Engineering","type":["string","null"]},"interview_length":{"anyOf":[{"type":"number"},{"type":"string"},{}],"description":"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.","example":8},"interview_salary":{"description":"Salary range shown for the position.","example":"$80k - $100k","type":["string","null"]},"interview_template_id":{"description":"Id of the interview template to base this interview on.","example":"baa3bf7c-6926-46fd-9005-16738a31f72d","format":"uuid","minLength":1,"type":["string","null"]},"interview_tone":{"description":"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.","example":"professional","type":["string","null"]},"interview_type":{"description":"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..","enum":["pre-screening","pre-screening-with-test-questions","second-interview","remote-freelancer-verification","strength-based-interview","potential-based-interview","process-verification-from-knowledge-base",null],"example":"pre-screening-with-test-questions","type":["string","null"]},"is_embedded":{"description":"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.","example":false,"type":["boolean","null"]},"knowledge_base_store_id":{"description":"Knowledge base store id to source additional context from.","type":["string","null"]},"location":{"description":"Job location.","example":"remote","minLength":1,"type":["string","null"]},"max_duration":{"description":"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.","example":1200,"type":["number","null"]},"max_followups":{"description":"Maximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).","example":2,"maximum":999,"minimum":0,"type":["integer","null"]},"merchant_id":{"description":"Merchant id. Admin / sub-merchant callers only; otherwise taken from your token.","example":"28106cba-1c27-4e53-b149-32113e5e8e31","type":["string","null"]},"mojito_language_code":{"description":"Platform language code used for the interview. Must be one of the platform-languages.json codes.","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"]},"name":{"description":"Interview / position name.","example":"Project manager","minLength":1,"type":["string","null"]},"pdf_export_auto_config":{"description":"Auto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.","properties":{"ai_recruiter_assessment":{"description":"Include the AI recruiter assessment.","type":["boolean","null"]},"ai_scoring_rubric":{"description":"Include the AI scoring rubric.","type":["boolean","null"]},"analytics":{"description":"Include analytics.","type":["boolean","null"]},"answer_recording":{"description":"Include per-answer recordings.","type":["boolean","null"]},"contact_details":{"description":"Include candidate contact details.","type":["boolean","null"]},"files":{"description":"Include uploaded candidate files.","type":["boolean","null"]},"group_by_question":{"description":"Group transcript answers by expected question.","type":["boolean","null"]},"mojito_language_code":{"description":"Report language code (platform-languages.json code).","example":"en","type":["string","null"]},"session_recording":{"description":"Include the full-session recording.","type":["boolean","null"]},"template":{"description":"Report layout: classic, modern, or one_pager. Omit for the merchant default (modern when unset).","enum":["classic","modern","one_pager",null],"type":["string","null"]},"transcript":{"description":"Include the interview transcript.","type":["boolean","null"]}},"type":["object","null"]},"questions_random_subset":{"description":"Ask 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.","example":0.5,"maximum":0.9,"minimum":0.01,"type":["number","null"]},"recording":{"description":"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..","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"example":"video_all","type":["string","null"]},"recording_full_session":{"description":"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..","enum":["audio_all","video_all",null],"example":"video_all","type":["string","null"]},"recruiter_profile_id":{"description":"Profile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.","example":"28106cba-1c27-4e53-b149-32113e5e8e31","type":["string","null"]},"required_pronunciation":{"description":"Require pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.","example":false,"type":["boolean","null"]},"result_enable_edit_transcript":{"description":"Allow editing the transcript on the result view. Defaults to true.","example":true,"type":["boolean","null"]},"result_view":{"description":"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..","enum":["none","minimal","minimal_with_score","advanced","full","full_expand_scores",null],"example":"full","type":["string","null"]},"seniority_level":{"description":"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..","enum":["entry-level","intermediate","senior","managerial","director","executive",null],"example":"senior","type":["string","null"]},"status":{"description":"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..","enum":["draft","active",null],"example":"active","type":["string","null"]},"tags":{"description":"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.","example":["interview-practice","sales"],"items":{"type":"string"},"type":["array","null"]},"thank_you_message":{"description":"Custom thank-you message shown after the interview.","type":["string","null"]},"type":{"description":"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..","enum":["interview","coaching","assessment",null],"example":"interview","type":["string","null"]},"use_enhanced_expectations":{"description":"Reserved flag passed through to generation.","type":["boolean","null"]},"visibility":{"description":"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..","enum":["merchant_public","merchant_invite","merchant_unlisted",null],"example":"merchant_public","type":["string","null"]},"welcome_message":{"description":"Custom welcome message shown to the candidate.","type":["string","null"]}},"required":["name","location","interview_template_id","mojito_language_code","status","type","visibility"],"type":"object"}after
{"properties":{"additional_context":{"additionalProperties":{},"description":"Arbitrary additional context object merged into AI generation.","type":["object","null"]},"candidate_expectations":{"description":"Free-text candidate expectations folded into AI generation.","type":["string","null"]},"candidate_video_introduction":{"description":"Whether a candidate video introduction is optional or required.","enum":["optional","required",null],"example":"optional","type":["string","null"]},"code":{"description":"Optional external code/reference for the interview.","example":"my code","type":["string","null"]},"conversation_id":{"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"},"cover_image_url":{"description":"Cover image URL.","example":"https://example.com/cover.png","type":["string","null"]},"custom_scoring":{"additionalProperties":{},"description":"Custom result-scoring overrides merged with defaults and template overrides.","type":["object","null"]},"description":{"description":"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.","example":"Backend role focused on Python, async APIs, and AWS.","type":["string","null"]},"description_long":{"description":"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","type":["string","null"]},"environment":{"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"]},"hiring_for_company":{"description":"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.","example":{"name":"undisclosed"},"properties":{"company_size":{"description":"Approximate headcount of the end employer.","example":"100-200","type":["string","null"]},"description":{"description":"Short description of the end employer, used as background context by the agent.","example":"Unimo Enterprises is a leading logistics and supply chain solutions provider.","type":["string","null"]},"location":{"description":"Primary location of the end employer.","example":"Sri Lanka","type":["string","null"]},"name":{"description":"End-employer name. Omit/null when hiring for yourself, 'undisclosed' for an unnamed external client, or the client's company name.","example":"Unimo Enterprises","type":["string","null"]},"sector":{"description":"Industry / sector of the end employer.","example":"Logistics and Supply Chain","type":["string","null"]}},"type":["object","null"]},"include_closing_prompt":{"description":"Include a closing prompt. Defaults to true.","example":true,"type":["boolean","null"]},"include_rapport_question":{"description":"Include an opening rapport question. Defaults to false.","example":true,"type":["boolean","null"]},"instructional_video":{"description":"Show an instructional video before approval. Defaults to false.","example":true,"type":["boolean","null"]},"instructional_video_custom_text":{"description":"Custom narration text for the instructional video.","type":["string","null"]},"interview_attempts":{"description":"Allowed candidate attempts (1-20).","example":1,"maximum":20,"minimum":1,"type":["number","null"]},"interview_available_till":{"description":"ISO date/time after which the interview is no longer available to candidates. null keeps it always available.","example":"2026-12-31","type":["string","null"]},"interview_conversation_speed":{"description":"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..","enum":["slower","normal","faster",null],"example":"normal","type":["string","null"]},"interview_department":{"description":"Department the position belongs to.","example":"Engineering","type":["string","null"]},"interview_length":{"anyOf":[{"type":"number"},{"type":"string"},{}],"description":"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.","example":8},"interview_salary":{"description":"Salary range shown for the position.","example":"$80k - $100k","type":["string","null"]},"interview_template_id":{"description":"Id of the interview template to base this interview on.","example":"baa3bf7c-6926-46fd-9005-16738a31f72d","format":"uuid","minLength":1,"type":["string","null"]},"interview_tone":{"description":"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..","enum":["relaxed","simple","professional","persuasive","exact",null],"example":"professional","type":["string","null"]},"interview_type":{"description":"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..","enum":["pre-screening","pre-screening-with-test-questions","second-interview","remote-freelancer-verification","strength-based-interview","potential-based-interview","process-verification-from-knowledge-base",null],"example":"pre-screening-with-test-questions","type":["string","null"]},"is_embedded":{"description":"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.","example":false,"type":["boolean","null"]},"knowledge_base_store_id":{"description":"Knowledge base store id to source additional context from.","type":["string","null"]},"location":{"description":"Job location — a city/country, or `remote`. Required and must not be empty: when the job description gives no location, pass `Not specified`.","example":"remote","minLength":1,"type":["string","null"]},"max_duration":{"description":"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.","example":1200,"type":["number","null"]},"max_followups":{"description":"Maximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).","example":2,"maximum":999,"minimum":0,"type":["integer","null"]},"merchant_id":{"description":"Merchant id. Admin / sub-merchant callers only; otherwise taken from your token.","example":"28106cba-1c27-4e53-b149-32113e5e8e31","type":["string","null"]},"mojito_language_code":{"description":"Platform language code used for the interview. Must be one of the platform-languages.json codes.","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"]},"name":{"description":"Interview / position name.","example":"Project manager","minLength":1,"type":["string","null"]},"pdf_export_auto_config":{"description":"Auto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.","properties":{"ai_recruiter_assessment":{"description":"Include the AI recruiter assessment.","type":["boolean","null"]},"ai_scoring_rubric":{"description":"Include the AI scoring rubric.","type":["boolean","null"]},"analytics":{"description":"Include analytics.","type":["boolean","null"]},"answer_recording":{"description":"Include per-answer recordings.","type":["boolean","null"]},"contact_details":{"description":"Include candidate contact details.","type":["boolean","null"]},"files":{"description":"Include uploaded candidate files.","type":["boolean","null"]},"group_by_question":{"description":"Group transcript answers by expected question.","type":["boolean","null"]},"mojito_language_code":{"description":"Report language code (a platform-languages.json code).","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"]},"session_recording":{"description":"Include the full-session recording.","type":["boolean","null"]},"template":{"description":"Report layout: classic, modern, or one_pager. Omit for the merchant default (modern when unset).","enum":["classic","modern","one_pager",null],"type":["string","null"]},"transcript":{"description":"Include the interview transcript.","type":["boolean","null"]}},"type":["object","null"]},"questions_random_subset":{"description":"Ask 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.","example":0.5,"maximum":0.9,"minimum":0.01,"type":["number","null"]},"recording":{"description":"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..","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"example":"video_all","type":["string","null"]},"recording_full_session":{"description":"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..","enum":["audio_all","video_all",null],"example":"video_all","type":["string","null"]},"recruiter_profile_id":{"description":"Profile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.","example":"28106cba-1c27-4e53-b149-32113e5e8e31","type":["string","null"]},"required_pronunciation":{"description":"Require pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.","example":false,"type":["boolean","null"]},"result_enable_edit_transcript":{"description":"Allow editing the transcript on the result view. Defaults to true.","example":true,"type":["boolean","null"]},"result_view":{"description":"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..","enum":["none","minimal","minimal_with_score","advanced","full","full_expand_scores",null],"example":"full","type":["string","null"]},"seniority_level":{"description":"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..","enum":["entry-level","intermediate","senior","managerial","director","executive",null],"example":"senior","type":["string","null"]},"status":{"description":"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..","enum":["draft","active",null],"example":"active","type":["string","null"]},"tags":{"description":"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.","example":["interview-practice","sales"],"items":{"type":"string"},"type":["array","null"]},"thank_you_message":{"description":"Custom thank-you message shown after the interview.","type":["string","null"]},"type":{"description":"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..","enum":["interview","coaching","assessment",null],"example":"interview","type":["string","null"]},"use_enhanced_expectations":{"description":"Reserved flag passed through to generation.","type":["boolean","null"]},"visibility":{"description":"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..","enum":["merchant_public","merchant_invite","merchant_unlisted",null],"example":"merchant_public","type":["string","null"]},"welcome_message":{"description":"Custom welcome message shown to the candidate.","type":["string","null"]}},"required":["name","location","interview_template_id","mojito_language_code","status","type","visibility"],"type":"object"}⟨15 unchanged words⟩ Includes embed_id/embed_signing_key when is_embedded=true.","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"embed_id":{"description":"Embed id, present ⟨91 unchanged words⟩
[Interviews] Create a new interview from an explicit array of questions. The AI rephrases your wording by default; pass `interview_tone="exact"` to have each question asked verbatim, which is what you want when the wording is a script (compliance, translated, or legally reviewed text). Creates a new interview definition set from a ⟨19 unchanged words⟩
before
{"properties":{"additional_context":{"additionalProperties":{},"description":"Extra context forwarded to expectation generation.","type":["object","null"]},"candidate_expectations":{"description":"Free-text candidate expectations.","type":["string","null"]},"candidate_expectations_json":{"description":"Pre-generated candidate expectations, bucketed by requirement level (weak/moderate/strong); auto-generated when omitted for type=interview. Extra keys are preserved.","properties":{"moderate":{"description":"Requirements expected of a solid, competent candidate.","items":{"type":"string"},"type":["array","null"]},"strong":{"description":"High-bar requirements only standout candidates clear.","items":{"type":"string"},"type":["array","null"]},"weak":{"description":"Baseline requirements every viable candidate should meet (table stakes).","items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"candidate_video_introduction":{"description":"Whether a candidate video introduction is optional or required.","enum":["optional","required",null],"type":["string","null"]},"code":{"description":"Optional external code/reference.","type":["string","null"]},"cover_image_url":{"description":"Cover image URL.","type":["string","null"]},"custom_scoring":{"additionalProperties":{},"description":"Custom scoring overrides merged with defaults.","type":["object","null"]},"description":{"description":"Short interview description.","example":"Project manager role","minLength":1,"type":["string","null"]},"description_long":{"description":"Long-form interview description. 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","type":["string","null"]},"disable_deduplication":{"description":"When true, skip step deduplication on insert.","type":["boolean","null"]},"environment":{"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"]},"hiring_for_company":{"description":"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.","example":{"name":"undisclosed"},"properties":{"company_size":{"description":"Approximate headcount of the end employer.","example":"100-200","type":["string","null"]},"description":{"description":"Short description of the end employer, used as background context by the agent.","example":"Unimo Enterprises is a leading logistics and supply chain solutions provider.","type":["string","null"]},"location":{"description":"Primary location of the end employer.","example":"Sri Lanka","type":["string","null"]},"name":{"description":"End-employer name. Omit/null when hiring for yourself, 'undisclosed' for an unnamed external client, or the client's company name.","example":"Unimo Enterprises","type":["string","null"]},"sector":{"description":"Industry / sector of the end employer.","example":"Logistics and Supply Chain","type":["string","null"]}},"type":["object","null"]},"instructional_video":{"description":"Enable an instructional video before approval.","type":["boolean","null"]},"instructional_video_custom_text":{"description":"Custom text for the instructional video.","type":["string","null"]},"interview_attempts":{"description":"Allowed attempts, 1-20.","example":1,"type":["number","null"]},"interview_available_till":{"description":"ISO date/time after which the interview is no longer available to candidates. null keeps it always available.","example":"2026-12-31","type":["string","null"]},"interview_conversation_speed":{"description":"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..","enum":["slower","normal","faster",null],"example":"normal","type":["string","null"]},"interview_department":{"description":"Department the position belongs to.","example":"Engineering","type":["string","null"]},"interview_salary":{"description":"Salary range shown for the position.","example":"$80k - $100k","type":["string","null"]},"interview_template_id":{"description":"Id of the interview template to use. Must reference an existing interview_templates row.","example":"46b98d37-1557-4391-beca-03037ead19f2","minLength":1,"type":["string","null"]},"interview_tone":{"description":"Tone — configures the AI avatar's speaking style and the follow-up questions it generates; the base `questions` you supply are not affected. 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.","example":"professional","type":["string","null"]},"interview_type":{"description":"Interview style — configures the AI avatar and the follow-up questions it generates during the interview. The base `questions` you supply are used as-is and are NOT affected by this setting. 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..","enum":["pre-screening","pre-screening-with-test-questions","second-interview","remote-freelancer-verification","strength-based-interview","potential-based-interview","process-verification-from-knowledge-base",null],"example":"pre-screening-with-test-questions","type":["string","null"]},"is_embedded":{"description":"Set true when the interview will be embedded as an iframe on an external page. Creates an embed key and returns embed_id/embed_signing_key, used to authenticate/sign the iframe embed.","type":["boolean","null"]},"knowledge_base_store_id":{"description":"Optional knowledge base store id; validated for existence.","type":["string","null"]},"location":{"description":"Interview location.","example":"remote","minLength":1,"type":["string","null"]},"max_followups":{"description":"Maximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).","example":2,"maximum":999,"minimum":0,"type":["integer","null"]},"merchant_id":{"description":"Target merchant id (admins / sub-merchant only).","type":["string","null"]},"mojito_language_code":{"description":"Platform language code (one of the platform-languages.json codes); must also resolve to a supported language with an Azure speech mapping.","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"]},"name":{"description":"Interview/position name.","example":"Project manager","minLength":1,"type":["string","null"]},"pdf_export_auto_config":{"description":"Auto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.","properties":{"ai_recruiter_assessment":{"description":"Include the AI recruiter assessment.","type":["boolean","null"]},"ai_scoring_rubric":{"description":"Include the AI scoring rubric.","type":["boolean","null"]},"analytics":{"description":"Include analytics.","type":["boolean","null"]},"answer_recording":{"description":"Include per-answer recordings.","type":["boolean","null"]},"contact_details":{"description":"Include candidate contact details.","type":["boolean","null"]},"files":{"description":"Include uploaded candidate files.","type":["boolean","null"]},"group_by_question":{"description":"Group transcript answers by expected question.","type":["boolean","null"]},"mojito_language_code":{"description":"Report language code (platform-languages.json code).","example":"en","type":["string","null"]},"session_recording":{"description":"Include the full-session recording.","type":["boolean","null"]},"template":{"description":"Report layout: classic, modern, or one_pager. Omit for the merchant default (modern when unset).","enum":["classic","modern","one_pager",null],"type":["string","null"]},"transcript":{"description":"Include the interview transcript.","type":["boolean","null"]}},"type":["object","null"]},"questions":{"description":"Ordered list of interview questions to create as steps.","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","null"]},"strong":{"description":"High-bar requirements only standout candidates clear.","items":{"type":"string"},"type":["array","null"]},"weak":{"description":"Baseline requirements every viable candidate should meet (table stakes).","items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"conditional_question_main_id":{"description":"For a conditional question, the id (the \"id\" field above) of the parent question in this same array that triggers it. The parent must appear earlier in the array than the conditional question referencing 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","null"]},"is_candidate_asking_recruiter":{"description":"Candidate-asks-recruiter prompt (view 'candidate asking recruiter').","type":["boolean","null"]},"is_conditional":{"description":"Conditional follow-up question (view 'with listening conditional'). Use 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_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","null"]},"question_alternatives":{"description":"Alternative phrasings for the question.","items":{"type":"string"},"type":["array","null"]}},"required":["question"],"type":"object"},"minItems":1,"type":["array","null"]},"questions_random_subset":{"description":"Fraction of questions to randomly ask, between 0.01 and 0.9.","type":["number","null"]},"recording":{"description":"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..","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"example":"video_all","type":["string","null"]},"recording_full_session":{"description":"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..","enum":["audio_all","video_all",null],"example":"video_all","type":["string","null"]},"recruiter_profile_id":{"description":"Profile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.","type":["string","null"]},"required_pronunciation":{"description":"Require pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.","example":false,"type":["boolean","null"]},"result_enable_edit_transcript":{"description":"Allow editing the transcript on the result view. Defaults to true.","example":true,"type":["boolean","null"]},"result_view":{"description":"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..","enum":["none","minimal","minimal_with_score","advanced","full","full_expand_scores",null],"example":"full","type":["string","null"]},"seniority_level":{"description":"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..","enum":["entry-level","intermediate","senior","managerial","director","executive",null],"example":"senior","type":["string","null"]},"status":{"description":"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..","enum":["draft","active",null],"example":"active","type":["string","null"]},"tags":{"description":"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.","example":["interview-practice","sales"],"items":{"type":"string"},"type":["array","null"]},"thank_you_message":{"description":"Custom thank-you message.","type":["string","null"]},"type":{"description":"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..","enum":["interview","coaching","assessment",null],"example":"interview","type":["string","null"]},"visibility":{"description":"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..","enum":["merchant_public","merchant_invite","merchant_unlisted",null],"example":"merchant_public","type":["string","null"]},"welcome_message":{"description":"Custom welcome message.","type":["string","null"]}},"required":["name","location","interview_template_id","mojito_language_code","description","status","type","visibility","questions"],"type":"object"}after
{"properties":{"additional_context":{"additionalProperties":{},"description":"Extra context forwarded to expectation generation.","type":["object","null"]},"candidate_expectations":{"description":"Free-text candidate expectations.","type":["string","null"]},"candidate_expectations_json":{"description":"Pre-generated candidate expectations, bucketed by requirement level (weak/moderate/strong); auto-generated when omitted for type=interview. Extra keys are preserved.","properties":{"moderate":{"description":"Requirements expected of a solid, competent candidate.","items":{"type":"string"},"type":["array","null"]},"strong":{"description":"High-bar requirements only standout candidates clear.","items":{"type":"string"},"type":["array","null"]},"weak":{"description":"Baseline requirements every viable candidate should meet (table stakes).","items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"candidate_video_introduction":{"description":"Whether a candidate video introduction is optional or required.","enum":["optional","required",null],"type":["string","null"]},"code":{"description":"Optional external code/reference.","type":["string","null"]},"conversation_id":{"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"},"cover_image_url":{"description":"Cover image URL.","type":["string","null"]},"custom_scoring":{"additionalProperties":{},"description":"Custom scoring overrides merged with defaults.","type":["object","null"]},"description":{"description":"Short interview description.","example":"Project manager role","minLength":1,"type":["string","null"]},"description_long":{"description":"Long-form interview description. 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","type":["string","null"]},"disable_deduplication":{"description":"When true, skip step deduplication on insert.","type":["boolean","null"]},"environment":{"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"]},"hiring_for_company":{"description":"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.","example":{"name":"undisclosed"},"properties":{"company_size":{"description":"Approximate headcount of the end employer.","example":"100-200","type":["string","null"]},"description":{"description":"Short description of the end employer, used as background context by the agent.","example":"Unimo Enterprises is a leading logistics and supply chain solutions provider.","type":["string","null"]},"location":{"description":"Primary location of the end employer.","example":"Sri Lanka","type":["string","null"]},"name":{"description":"End-employer name. Omit/null when hiring for yourself, 'undisclosed' for an unnamed external client, or the client's company name.","example":"Unimo Enterprises","type":["string","null"]},"sector":{"description":"Industry / sector of the end employer.","example":"Logistics and Supply Chain","type":["string","null"]}},"type":["object","null"]},"instructional_video":{"description":"Enable an instructional video before approval.","type":["boolean","null"]},"instructional_video_custom_text":{"description":"Custom text for the instructional video.","type":["string","null"]},"interview_attempts":{"description":"Allowed attempts, 1-20.","example":1,"type":["number","null"]},"interview_available_till":{"description":"ISO date/time after which the interview is no longer available to candidates. null keeps it always available.","example":"2026-12-31","type":["string","null"]},"interview_conversation_speed":{"description":"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..","enum":["slower","normal","faster",null],"example":"normal","type":["string","null"]},"interview_department":{"description":"Department the position belongs to.","example":"Engineering","type":["string","null"]},"interview_salary":{"description":"Salary range shown for the position.","example":"$80k - $100k","type":["string","null"]},"interview_template_id":{"description":"Id of the interview template to use. Must reference an existing interview_templates row.","example":"46b98d37-1557-4391-beca-03037ead19f2","minLength":1,"type":["string","null"]},"interview_tone":{"description":"Tone — configures the AI avatar's speaking style and the follow-up questions it generates; the base `questions` you supply are not affected. 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..","enum":["relaxed","simple","professional","persuasive","exact",null],"example":"professional","type":["string","null"]},"interview_type":{"description":"Interview style — configures the AI avatar and the follow-up questions it generates during the interview. The base `questions` you supply are used as-is and are NOT affected by this setting. 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..","enum":["pre-screening","pre-screening-with-test-questions","second-interview","remote-freelancer-verification","strength-based-interview","potential-based-interview","process-verification-from-knowledge-base",null],"example":"pre-screening-with-test-questions","type":["string","null"]},"is_embedded":{"description":"Set true when the interview will be embedded as an iframe on an external page. Creates an embed key and returns embed_id/embed_signing_key, used to authenticate/sign the iframe embed.","type":["boolean","null"]},"knowledge_base_store_id":{"description":"Optional knowledge base store id; validated for existence.","type":["string","null"]},"location":{"description":"Job location — a city/country, or `remote`. Required and must not be empty: when the job description gives no location, pass `Not specified`.","example":"remote","minLength":1,"type":["string","null"]},"max_followups":{"description":"Maximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).","example":2,"maximum":999,"minimum":0,"type":["integer","null"]},"merchant_id":{"description":"Target merchant id (admins / sub-merchant only).","type":["string","null"]},"mojito_language_code":{"description":"Platform language code (one of the platform-languages.json codes); must also resolve to a supported language with an Azure speech mapping.","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"]},"name":{"description":"Interview/position name.","example":"Project manager","minLength":1,"type":["string","null"]},"pdf_export_auto_config":{"description":"Auto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.","properties":{"ai_recruiter_assessment":{"description":"Include the AI recruiter assessment.","type":["boolean","null"]},"ai_scoring_rubric":{"description":"Include the AI scoring rubric.","type":["boolean","null"]},"analytics":{"description":"Include analytics.","type":["boolean","null"]},"answer_recording":{"description":"Include per-answer recordings.","type":["boolean","null"]},"contact_details":{"description":"Include candidate contact details.","type":["boolean","null"]},"files":{"description":"Include uploaded candidate files.","type":["boolean","null"]},"group_by_question":{"description":"Group transcript answers by expected question.","type":["boolean","null"]},"mojito_language_code":{"description":"Report language code (a platform-languages.json code).","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"]},"session_recording":{"description":"Include the full-session recording.","type":["boolean","null"]},"template":{"description":"Report layout: classic, modern, or one_pager. Omit for the merchant default (modern when unset).","enum":["classic","modern","one_pager",null],"type":["string","null"]},"transcript":{"description":"Include the interview transcript.","type":["boolean","null"]}},"type":["object","null"]},"questions":{"description":"Ordered list of interview questions to create as steps.","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","null"]},"strong":{"description":"High-bar requirements only standout candidates clear.","items":{"type":"string"},"type":["array","null"]},"weak":{"description":"Baseline requirements every viable candidate should meet (table stakes).","items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"conditional_question_main_id":{"description":"For a conditional question, the id (the \"id\" field above) of the parent question in this same array that triggers it. The parent must appear earlier in the array than the conditional question referencing 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","null"]},"is_candidate_asking_recruiter":{"description":"Candidate-asks-recruiter prompt (view 'candidate asking recruiter').","type":["boolean","null"]},"is_conditional":{"description":"Conditional follow-up question (view 'with listening conditional'). Use 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_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","null"]},"question_alternatives":{"description":"Alternative phrasings for the question.","items":{"type":"string"},"type":["array","null"]}},"required":["question"],"type":"object"},"minItems":1,"type":["array","null"]},"questions_random_subset":{"description":"Fraction of questions to randomly ask, between 0.01 and 0.9.","type":["number","null"]},"recording":{"description":"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..","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"example":"video_all","type":["string","null"]},"recording_full_session":{"description":"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..","enum":["audio_all","video_all",null],"example":"video_all","type":["string","null"]},"recruiter_profile_id":{"description":"Profile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.","type":["string","null"]},"required_pronunciation":{"description":"Require pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.","example":false,"type":["boolean","null"]},"result_enable_edit_transcript":{"description":"Allow editing the transcript on the result view. Defaults to true.","example":true,"type":["boolean","null"]},"result_view":{"description":"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..","enum":["none","minimal","minimal_with_score","advanced","full","full_expand_scores",null],"example":"full","type":["string","null"]},"seniority_level":{"description":"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..","enum":["entry-level","intermediate","senior","managerial","director","executive",null],"example":"senior","type":["string","null"]},"status":{"description":"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..","enum":["draft","active",null],"example":"active","type":["string","null"]},"tags":{"description":"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.","example":["interview-practice","sales"],"items":{"type":"string"},"type":["array","null"]},"thank_you_message":{"description":"Custom thank-you message.","type":["string","null"]},"type":{"description":"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..","enum":["interview","coaching","assessment",null],"example":"interview","type":["string","null"]},"visibility":{"description":"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..","enum":["merchant_public","merchant_invite","merchant_unlisted",null],"example":"merchant_public","type":["string","null"]},"welcome_message":{"description":"Custom welcome message.","type":["string","null"]}},"required":["name","location","interview_template_id","mojito_language_code","description","status","type","visibility","questions"],"type":"object"}⟨8 unchanged words⟩ embed credentials when is_embedded=true.","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"embed_id":{"description":"Embed id, present ⟨37 unchanged words⟩
⟨56 unchanged words⟩ "type":["string","null"]},"conversation_id":{"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"},"cover_image_url":{"description":"Cover image URL.", ⟨1624 unchanged words⟩
⟨6 unchanged words⟩ Includes embed_id/embed_signing_key when is_embedded=true.","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"embed_id":{"description":"Embed id, present ⟨39 unchanged words⟩
{"properties":{"conversation_id":{"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"},"export_features_result":{"properties":{"ai_recruiter_assessment":{"default ⟨426 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"result":{"anyOf":[{"description":"Returned ⟨188 unchanged words⟩
{"properties":{"conversation_id":{"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"},"hide_menu":{"anyOf":[{"type":"string ⟨95 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"result":{"description":"The signed interview URL. ⟨13 unchanged words⟩
{"properties":{"conversation_id":{"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"},"id":{"description":"Id of the catalogue ⟨43 unchanged words⟩
⟨8 unchanged words⟩ sub-directories and matched sessions.","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"catalogue_url":{"description":"Public URL of this ⟨703 unchanged words⟩
{"additionalProperties":false,"properties":{"conversation_id":{"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"},"max_chars":{"default":20000,"description":"Truncate ⟨22 unchanged words⟩
{"additionalProperties":true,"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"}},"type":"object"}
{"properties":{"conversation_id":{"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"},"position_id":{"description":"Identifier of either an ⟨26 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"calc_definition_json":{"description":"The compiled interview definition ⟨1390 unchanged words⟩
{"properties":{"conversation_id":{"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"},"get_signed_recordings":{"default":"false","description": ⟨172 unchanged words⟩
⟨16 unchanged words⟩ be present (passthrough).","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"ai_analysis":{"description":"Candidate-facing AI analysis of ⟨663 unchanged words⟩
{"properties":{"conversation_id":{"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"},"date_from":{"description":"Start of the date ⟨153 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"data":{"description":"Daily event counts for ⟨160 unchanged words⟩
{"properties":{"conversation_id":{"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"},"interview_id":{"description":"Optional interview (interview_def_set) ⟨124 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"data":{"description":"Credit-consuming analytics events for ⟨284 unchanged words⟩
{"properties":{"conversation_id":{"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"},"merchant_id":{"description":"Optional merchant to scope ⟨22 unchanged words⟩
{"additionalProperties":{},"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"candidates":{"description":"Total candidates (non-archived ⟨389 unchanged words⟩
{"additionalProperties":false,"properties":{"conversation_id":{"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"}},"type":"object"}
{"properties":{"conversation_id":{"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"},"filter_text":{"description":"Case-insensitive search on template ⟨95 unchanged words⟩ :{"description":"Filter by platform language code. Omit for all languages.","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"],"example":"en","type":"string"},"offset":{ ⟨67 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"data":{"description":"The merchant's avatar templates ⟨231 unchanged words⟩
{"properties":{"conversation_id":{"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"},"filter_emoji":{"description":"Filter by the candidate ⟨147 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"data":{"description":"The merchant's candidates for ⟨300 unchanged words⟩
{"properties":{"conversation_id":{"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"},"filter_text":{"description":"Case-insensitive search on the ⟨72 unchanged words⟩ ":{"description":"Filter by the directorylanguage (alanguage.platform-languages.jsonOmitcode,fore.g.all`en`).languages.","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"],"example":"en","type":"string"},"offset":{ ⟨94 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"data":{"description":"The catalogue directories for ⟨306 unchanged words⟩
{"properties":{"conversation_id":{"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"},"filter_emoji":{"description":"Filter by the candidate ⟨212 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"data":{"description":"The merchant's interview results ⟨392 unchanged words⟩
{"properties":{"conversation_id":{"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"},"filter_emoji":{"description":"Filter by the interview ⟨160 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"data":{"description":"The merchant's interview definitions ⟨296 unchanged words⟩
{"properties":{"conversation_id":{"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"}},"required":[],"type":"object"}
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"languages":{"description":"Supported platform languages, ⟨229 unchanged words⟩
{"additionalProperties":false,"properties":{"conversation_id":{"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"},"search":{"default":"","description":" ⟨10 unchanged words⟩
{"additionalProperties":true,"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"}},"type":"object"}
{"properties":{"conversation_id":{"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"},"filter_text":{"description":"Case-insensitive search on the ⟨92 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"data":{"description":"The sub-merchants the caller ⟨295 unchanged words⟩
{"properties":{"conversation_id":{"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"},"hide_iframe":{"anyOf":[{"type":"boolean ⟨258 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"result":{"description":"The input users, ⟨74 unchanged words⟩
{"properties":{"conversation_id":{"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"},"interview_result_id":{"description":"The interview result to ⟨17 unchanged words⟩
{"description":"Empty object on success.","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"}},"type":"object","x-fastmcp-top-level-schema":"RequestAnotherAttemptResponse"}
{"additionalProperties":false,"properties":{"conversation_id":{"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"},"limit":{"default":8,"description":"Max ⟨38 unchanged words⟩
{"additionalProperties":true,"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"}},"type":"object"}
{"properties":{"conversation_id":{"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"},"is_embedded":{"description":"Controls iframe embedding of ⟨77 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"result":{"anyOf":[{"properties":{" ⟨48 unchanged words⟩
⟨164 unchanged words⟩ "type":["string","null"]},"conversation_id":{"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"},"cover_image_url":{"description":"Cover image URL shown ⟨385 unchanged words⟩
{"description":"Confirmation of what was updated.","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"catalogue_url":{"description":"Public URL of the ⟨56 unchanged words⟩
⟨189 unchanged words⟩ "type":["string","null"]},"conversation_id":{"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"},"cover_image_url":{"description":"Cover image URL.", ⟨484 unchanged words⟩ Stored in creation_parameters; existing questions are NOT regenerated.SuggestedCase-insensitive;valuesomit to default to relaxed. Options — `relaxed`: Friendly and conversational tone that helps ⟨29 unchanged words⟩ `persuasive`: Engaging style that encourages candidates toelaborate..elaborate.Case-insensitive;|other`exact`:stringsAsksaretheacceptedquestionsbutexactlyunknownastonesprovided,fallwithoutbackrephrasingto— for interviews built from your own questions (create_interview_from_questions) where thedefault.wording is a script..","enum":["relaxed","simple","professional","persuasive","exact",null],"example":"professional","type":["string", ⟨329 unchanged words⟩ mojito_language_code":{"description":"Report language code (a platform-languages.json code).","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 ⟨1514 unchanged words⟩
{"description":"Confirmation of what was updated.","properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"is_multistage":{"description":"True when the id ⟨262 unchanged words⟩
{"properties":{"conversation_id":{"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"},"file":{"description":"The document file ( ⟨62 unchanged words⟩
{"properties":{"_mcp_instructions":{"description":"Server-issued metadata for this conversation.","properties":{"conversation_id":{"description":"The server-issued conversation identifier.","type":"string"}},"type":"object"},"knowledge_base_id":{"description":"Id of the created ⟨11 unchanged words⟩
⟨139 unchanged words⟩ "type":["string","null"]},"environment":{"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"]},"interview_attempts":{"description":"Allowed candidate attempts ( ⟨1454 unchanged words⟩
before
{"properties":{"calc_definition_json":{"description":"The compiled interview definition JSON (structure varies by interview type)."},"candidate_expectations":{"description":"Free-text candidate expectations. Null for multi-stage positions.","type":["string","null"]},"candidate_expectations_json":{"description":"Structured candidate expectations JSON — the scoring rubric. Null for multi-stage positions."},"candidate_video_introduction":{"description":"Whether a candidate video introduction is hidden/optional/required. Null for multi-stage positions.","enum":["hidden","optional","required",null],"type":["string","null"]},"coach_plan":{"description":"Coaching-plan stage this session belongs to. Null for multi-stage positions and for sessions outside any plan.","enum":["demo","screening","2nd","3rd","closing","job-specific","other",null],"type":["string","null"]},"code":{"description":"Caller-supplied external code/reference.","type":["string","null"]},"cover_image_url":{"description":"Cover image URL.","type":["string","null"]},"created_at":{"example":"2026-01-15T09:30:00.000Z","type":["string","null"]},"creation_parameters":{"description":"The creation parameters recorded at build time (interview_type, interview_tone, interview_length, additional_context, include_rapport_question, include_closing_prompt, knowledge_base_store_id, seniority_level, hiring_for_company)."},"description":{"description":"Short description.","type":["string","null"]},"interview_available_till":{"description":"ISO date/time after which the interview is no longer available to candidates. Null means always available.","type":["string","null"]},"interview_conversation_speed":{"description":"Conversation pace of the AI avatar (slower/normal/faster). Null keeps the template default. Null for multi-stage positions.","type":["string","null"]},"interview_department":{"description":"Department the position belongs to.","example":"Engineering","type":["string","null"]},"interview_description_long":{"description":"Long description (create/update field `description_long`). Rendered as Markdown on the candidate-facing position page — formatting guide: https://developer.jobmojito.com/cookbooks/format-content-with-markdown","type":["string","null"]},"interview_location":{"description":"Location (create field `location`).","type":["string","null"]},"interview_salary":{"description":"Salary range shown for the position.","example":"$80k - $100k","type":["string","null"]},"interview_template_id":{"description":"Interview template id. For multi-stage positions this is the first interview step's template.","type":["string","null"]},"interview_template_type":{"description":"Type of the linked interview template. `interactive_elevenlabs` is voice-only; the others (`interactive_spatius`, `interactive_heygen`, `offline_heygen`, `offline_elai`, `offline_synthesia`) are avatar-based. Null when the template could not be resolved.","enum":["offline_elai","offline_synthesia","interactive_heygen","offline_heygen","interactive_elevenlabs","interactive_spatius",null],"type":["string","null"]},"is_multistage":{"description":"True when the id resolved to a multi-stage position rather than a single interview.","type":["boolean","null"]},"is_voice_only":{"description":"Convenience flag derived from interview_template_type: true when voice-only (`interactive_elevenlabs`), false when avatar-based, null when the template type could not be resolved.","type":["boolean","null"]},"knowledge_base_store_id":{"description":"Linked knowledge base store id. Null for multi-stage positions.","type":["string","null"]},"max_duration":{"description":"Live session limit in seconds. Null for multi-stage positions.","type":["number","null"]},"max_followups":{"description":"Maximum number of AI follow-up questions; null uses the template default. Null for multi-stage positions.","type":["number","null"]},"merchant_id":{"description":"Owning merchant id.","type":["string","null"]},"mojito_language_code":{"description":"Platform (mojito) language code.","example":"en","type":["string","null"]},"name":{"description":"Interview or position name.","type":["string","null"]},"pdf_export_auto_config":{"description":"Auto-PDF-report options applied when the interview completes; null when auto-export is off. Null for multi-stage positions."},"questions":{"description":"The interview questions, in the order they are asked, in the same format job-interview-create-from-array accepts — so this array can be edited and sent straight back to job-interview-update, or used to create a copy of this interview. Each `id` is the question's real identifier: send it back unchanged and the question keeps its existing record (and with it its answer rules and any rendered avatar video). The welcome, thank-you and instructional-video steps are NOT included — they are not questions in this format, and job-interview-update leaves them untouched. Null for multi-stage positions, whose questions live on the individual interview stages.","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","null"]},"strong":{"description":"High-bar requirements only standout candidates clear.","items":{"type":"string"},"type":["array","null"]},"weak":{"description":"Baseline requirements every viable candidate should meet (table stakes).","items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"conditional_question_main_id":{"description":"For a conditional question, the id (the \"id\" field above) of the parent question in this same array that triggers it. The parent must appear earlier in the array than the conditional question referencing 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","null"]},"is_candidate_asking_recruiter":{"description":"Candidate-asks-recruiter prompt (view 'candidate asking recruiter').","type":["boolean","null"]},"is_conditional":{"description":"Conditional follow-up question (view 'with listening conditional'). Use 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_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","null"]},"question_alternatives":{"description":"Alternative phrasings for the question.","items":{"type":"string"},"type":["array","null"]}},"required":["question"],"type":"object"},"type":["array","null"]},"questions_random_subset":{"description":"Fraction of the questions actually asked (0.01-0.9); null asks all of them. Null for multi-stage positions.","type":["number","null"]},"recording":{"description":"Per-answer recording mode. Null for multi-stage positions.","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"type":["string","null"]},"recording_full_session":{"description":"Full-session recording mode. Null for multi-stage positions.","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"type":["string","null"]},"recruiter_profile_id":{"description":"Profile id of the recruiter owning this interview/position.","type":["string","null"]},"required_pronunciation":{"description":"Whether a pronunciation assessment is required. Null for multi-stage positions.","type":["boolean","null"]},"result_enable_edit_transcript":{"description":"Whether the candidate may edit the transcript on the result view. Null for multi-stage positions.","type":["boolean","null"]},"result_scoring":{"description":"Resolved result-scoring config (update field `custom_scoring`; its `max_retries` is the update field `interview_attempts`). Null means the platform defaults apply. Null for multi-stage positions."},"result_view":{"description":"Result view level. Null for multi-stage positions.","enum":["minimal","advanced","full","full_expand_scores","minimal_with_score","none",null],"type":["string","null"]},"slug":{"description":"URL slug of the public listing, when one was generated.","type":["string","null"]},"speech_language_code":{"description":"Azure speech language code. Null for multi-stage positions.","type":["string","null"]},"speech_language_name":{"description":"Azure speech language display name. Null for multi-stage positions.","type":["string","null"]},"stage":{"description":"Hiring-pipeline stage. Null for multi-stage positions.","enum":["Interest","Application submitted","Interview 1st planned","Interview 1st completed","Interview 2nd planned","Interview 2nd completed","Interview 3rd planned","Interview 3rd completed","Offer negotiations","Hired","Rejected","Offer declined","Other",null],"type":["string","null"]},"status":{"description":"Lifecycle status of the interview/position.","enum":["draft","active","archived","deleted","preparing","completed",null],"type":["string","null"]},"tags":{"description":"Free-form tags. Also the coaching-catalogue mapping key: a catalogue directory lists this session when its `tags_interview_set_filter` is a subset of these tags. Null for multi-stage positions.","example":["interview-practice","sales"],"items":{"type":"string"},"type":["array","null"]},"type":{"description":"Interview type. Null for multi-stage positions.","enum":["coaching","interview","persona","persona_interview","public_avatar","assessment",null],"type":["string","null"]},"type_credit":{"description":"Credit bucket the interview draws from. Null for multi-stage positions.","enum":["resume_check","interview_coach_starter","interview_coach_contributor","interview_coach_manager","cover_letter",null],"type":["string","null"]},"updated_at":{"example":"2026-01-20T14:05:00.000Z","type":["string","null"]},"visibility":{"description":"Who can see and access the interview/position.","enum":["public","merchant_public","merchant_invite","merchant_unlisted","sub_item",null],"type":["string","null"]}},"required":["name","created_at","updated_at","questions","is_multistage","status","visibility","stage","type","code","interview_location","cover_image_url","merchant_id","interview_template_id","interview_template_type","is_voice_only","knowledge_base_store_id","mojito_language_code","speech_language_code","speech_language_name","recording","recording_full_session","type_credit","result_view","candidate_video_introduction","description","interview_description_long","candidate_expectations","interview_department","interview_salary","interview_available_till","recruiter_profile_id","slug","tags","coach_plan","interview_conversation_speed","max_followups","max_duration","questions_random_subset","required_pronunciation","result_enable_edit_transcript"],"type":"object","x-fastmcp-top-level-schema":"JobInterviewGetResponse"}after
{"properties":{"calc_definition_json":{"description":"The compiled interview definition JSON (structure varies by interview type)."},"candidate_expectations":{"description":"Free-text candidate expectations. Null for multi-stage positions.","type":["string","null"]},"candidate_expectations_json":{"description":"Structured candidate expectations JSON — the scoring rubric. Null for multi-stage positions."},"candidate_video_introduction":{"description":"Whether a candidate video introduction is hidden/optional/required. Null for multi-stage positions.","enum":["hidden","optional","required",null],"type":["string","null"]},"coach_plan":{"description":"Coaching-plan stage this session belongs to. Null for multi-stage positions and for sessions outside any plan.","enum":["demo","screening","2nd","3rd","closing","job-specific","other",null],"type":["string","null"]},"code":{"description":"Caller-supplied external code/reference.","type":["string","null"]},"cover_image_url":{"description":"Cover image URL.","type":["string","null"]},"created_at":{"example":"2026-01-15T09:30:00.000Z","type":["string","null"]},"creation_parameters":{"description":"The creation parameters recorded at build time (interview_type, interview_tone, interview_length, additional_context, include_rapport_question, include_closing_prompt, knowledge_base_store_id, seniority_level, hiring_for_company)."},"description":{"description":"Short description.","type":["string","null"]},"environment":{"description":"Which webhook environment this interview's results are delivered to. Null for multi-stage positions, whose stages each carry their own.","enum":["production","uat","development","demo",null],"example":"production","type":["string","null"]},"interview_available_till":{"description":"ISO date/time after which the interview is no longer available to candidates. Null means always available.","type":["string","null"]},"interview_conversation_speed":{"description":"Conversation pace of the AI avatar (slower/normal/faster). Null keeps the template default. Null for multi-stage positions.","type":["string","null"]},"interview_department":{"description":"Department the position belongs to.","example":"Engineering","type":["string","null"]},"interview_description_long":{"description":"Long description (create/update field `description_long`). Rendered as Markdown on the candidate-facing position page — formatting guide: https://developer.jobmojito.com/cookbooks/format-content-with-markdown","type":["string","null"]},"interview_location":{"description":"Location (create field `location`).","type":["string","null"]},"interview_salary":{"description":"Salary range shown for the position.","example":"$80k - $100k","type":["string","null"]},"interview_template_id":{"description":"Interview template id. For multi-stage positions this is the first interview step's template.","type":["string","null"]},"interview_template_type":{"description":"Type of the linked interview template. `interactive_elevenlabs` is voice-only; the others (`interactive_spatius`, `interactive_heygen`, `offline_heygen`, `offline_elai`, `offline_synthesia`) are avatar-based. Null when the template could not be resolved.","enum":["offline_elai","offline_synthesia","interactive_heygen","offline_heygen","interactive_elevenlabs","interactive_spatius",null],"type":["string","null"]},"is_multistage":{"description":"True when the id resolved to a multi-stage position rather than a single interview.","type":["boolean","null"]},"is_voice_only":{"description":"Convenience flag derived from interview_template_type: true when voice-only (`interactive_elevenlabs`), false when avatar-based, null when the template type could not be resolved.","type":["boolean","null"]},"knowledge_base_store_id":{"description":"Linked knowledge base store id. Null for multi-stage positions.","type":["string","null"]},"max_duration":{"description":"Live session limit in seconds. Null for multi-stage positions.","type":["number","null"]},"max_followups":{"description":"Maximum number of AI follow-up questions; null uses the template default. Null for multi-stage positions.","type":["number","null"]},"merchant_id":{"description":"Owning merchant id.","type":["string","null"]},"mojito_language_code":{"description":"Platform (mojito) language code.","example":"en","type":["string","null"]},"name":{"description":"Interview or position name.","type":["string","null"]},"pdf_export_auto_config":{"description":"Auto-PDF-report options applied when the interview completes; null when auto-export is off. Null for multi-stage positions."},"questions":{"description":"The interview questions, in the order they are asked, in the same format job-interview-create-from-array accepts — so this array can be edited and sent straight back to job-interview-update, or used to create a copy of this interview. Each `id` is the question's real identifier: send it back unchanged and the question keeps its existing record (and with it its answer rules and any rendered avatar video). The welcome, thank-you and instructional-video steps are NOT included — they are not questions in this format, and job-interview-update leaves them untouched. Null for multi-stage positions, whose questions live on the individual interview stages.","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","null"]},"strong":{"description":"High-bar requirements only standout candidates clear.","items":{"type":"string"},"type":["array","null"]},"weak":{"description":"Baseline requirements every viable candidate should meet (table stakes).","items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"conditional_question_main_id":{"description":"For a conditional question, the id (the \"id\" field above) of the parent question in this same array that triggers it. The parent must appear earlier in the array than the conditional question referencing 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","null"]},"is_candidate_asking_recruiter":{"description":"Candidate-asks-recruiter prompt (view 'candidate asking recruiter').","type":["boolean","null"]},"is_conditional":{"description":"Conditional follow-up question (view 'with listening conditional'). Use 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_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","null"]},"question_alternatives":{"description":"Alternative phrasings for the question.","items":{"type":"string"},"type":["array","null"]}},"required":["question"],"type":"object"},"type":["array","null"]},"questions_random_subset":{"description":"Fraction of the questions actually asked (0.01-0.9); null asks all of them. Null for multi-stage positions.","type":["number","null"]},"recording":{"description":"Per-answer recording mode. Null for multi-stage positions.","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"type":["string","null"]},"recording_full_session":{"description":"Full-session recording mode. Null for multi-stage positions.","enum":["audio_first_5_answers","audio_all","video_all","video_first_5_answers",null],"type":["string","null"]},"recruiter_profile_id":{"description":"Profile id of the recruiter owning this interview/position.","type":["string","null"]},"required_pronunciation":{"description":"Whether a pronunciation assessment is required. Null for multi-stage positions.","type":["boolean","null"]},"result_enable_edit_transcript":{"description":"Whether the candidate may edit the transcript on the result view. Null for multi-stage positions.","type":["boolean","null"]},"result_scoring":{"description":"Resolved result-scoring config (update field `custom_scoring`; its `max_retries` is the update field `interview_attempts`). Null means the platform defaults apply. Null for multi-stage positions."},"result_view":{"description":"Result view level. Null for multi-stage positions.","enum":["minimal","advanced","full","full_expand_scores","minimal_with_score","none",null],"type":["string","null"]},"slug":{"description":"URL slug of the public listing, when one was generated.","type":["string","null"]},"speech_language_code":{"description":"Azure speech language code. Null for multi-stage positions.","type":["string","null"]},"speech_language_name":{"description":"Azure speech language display name. Null for multi-stage positions.","type":["string","null"]},"stage":{"description":"Hiring-pipeline stage. Null for multi-stage positions.","enum":["Interest","Application submitted","Interview 1st planned","Interview 1st completed","Interview 2nd planned","Interview 2nd completed","Interview 3rd planned","Interview 3rd completed","Offer negotiations","Hired","Rejected","Offer declined","Other",null],"type":["string","null"]},"status":{"description":"Lifecycle status of the interview/position.","enum":["draft","active","archived","deleted","preparing","completed",null],"type":["string","null"]},"tags":{"description":"Free-form tags. Also the coaching-catalogue mapping key: a catalogue directory lists this session when its `tags_interview_set_filter` is a subset of these tags. Null for multi-stage positions.","example":["interview-practice","sales"],"items":{"type":"string"},"type":["array","null"]},"type":{"description":"Interview type. Null for multi-stage positions.","enum":["coaching","interview","persona","persona_interview","public_avatar","assessment",null],"type":["string","null"]},"type_credit":{"description":"Credit bucket the interview draws from. Null for multi-stage positions.","enum":["resume_check","interview_coach_starter","interview_coach_contributor","interview_coach_manager","cover_letter",null],"type":["string","null"]},"updated_at":{"example":"2026-01-20T14:05:00.000Z","type":["string","null"]},"visibility":{"description":"Who can see and access the interview/position.","enum":["public","merchant_public","merchant_invite","merchant_unlisted","sub_item",null],"type":["string","null"]}},"required":["name","created_at","updated_at","questions","is_multistage","status","visibility","stage","type","environment","code","interview_location","cover_image_url","merchant_id","interview_template_id","interview_template_type","is_voice_only","knowledge_base_store_id","mojito_language_code","speech_language_code","speech_language_name","recording","recording_full_session","type_credit","result_view","candidate_video_introduction","description","interview_description_long","candidate_expectations","interview_department","interview_salary","interview_available_till","recruiter_profile_id","slug","tags","coach_plan","interview_conversation_speed","max_followups","max_duration","questions_random_subset","required_pronunciation","result_enable_edit_transcript"],"type":"object","x-fastmcp-top-level-schema":"JobInterviewGetResponse"}⟨266 unchanged words⟩ "type":["string","null"]},"environment":{"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"]},"hiring_for_company":{"description":"Who the position is ⟨2246 unchanged words⟩
⟨32 unchanged words⟩ ":"string"},"limit":{"default":5025,"description":"Maximum number of records to ⟨146 unchanged words⟩
[Results] List the merchant's interview results. Rows carry the candidate's scores and recruiter risk flags, so this returns 20 at a time; page with `offset` while `pagination.has_more` is true, or narrow with `tab`/`interview_id`/`filter_text`. Paginated list of a merchant's interview results ( ⟨20 unchanged words⟩
⟨34 unchanged words⟩ ":"string"},"limit":{"default":5020,"description":"Maximum number of records to ⟨175 unchanged words⟩
⟨128 unchanged words⟩ place a coaching session into a catalogue directory. MULTI-STAGE POSITIONS: some per-interview settings do not exist at position level and are rejected with a 422 naming the field — `candidate_expectations_json` is the one seen in practice. Read the position with get_interview_definition, then update the individual stage you mean instead of sending that field to the position. Updates the configuration of an existing interview ( ⟨229 unchanged words⟩
⟨410 unchanged words⟩ string"},{"description":"Report layout: `classic`(default), `modern` or `one_pager`. Omit for the merchant default (modern when unset)."}]}},"required":["export_type"],"type":"object"}
⟨269 unchanged words⟩ interview template. `interactive_elevenlabs` is voice-only; the others (`interactive_spatius`, `interactive_heygen`, `offline_heygen`, `offline_elai`, `offline_synthesia`) are avatar-based. ⟨10 unchanged words⟩ ","offline_synthesia","interactive_heygen","offline_heygen","interactive_elevenlabs","interactive_spatius",null],"type":["string","null ⟨1062 unchanged words⟩
⟨164 unchanged words⟩ ","enum":["interactive_heygen","interactive_elevenlabs","interactive_spatius","offline_heygen","offline_elai","offline_synthesia"],"example": ⟨6 unchanged words⟩
⟨1017 unchanged words⟩ "template":{"description":"Report layout: classic(default), modern, or one_pager. Omit for the merchant default (modern when unset).","enum":["classic","modern"," ⟨1484 unchanged words⟩
⟨251 unchanged words⟩ "type":["boolean","null"]},"template":{"description":"Report layout for this export. Same values as the top-level `template`; the top-level field wins when both are given. Kept here so a saved auto-export configuration carries its template.","enum":["classic","modern","one_pager"],"example":"modern","type":"string"},"transcript":{"default":true,"description":"Include ⟨69 unchanged words⟩ URL.","type":["boolean","null"]},"template":{"allOf":[{"description":"Report layout for this export. Same values as the top-level `template`; the top-level field wins when both are given. Kept here so a saved auto-export configuration carries its template.","enum":["classic","modern","one_pager"],"example":"modern","type":"string"},{"description":"Report layout: `classic` (default), `modern` or `one_pager`."}]}},"required":["export_type"],"type":"object"}
⟨30 unchanged words⟩ "type":["string","null"]},"ai_analysis_other":{"description":"Session-level AI analyses keyed by analysis name (jsonb). `hiring_reasons`: { reasons_to_hire: string[], reasons_not_to_hire: string[] } (0-4 items each, recruiter-facing). `takeaways`: { what_went_well: string[], next_steps: { text, priority: impact | quick | longterm, guidance: { kind: say | structure | length | exercise | perspective, text }, proof? }[], fixed?: string[] } (coaching / persona sessions, learner-facing; `proof` entries are { kind: quote | ai_summary | transcript_ref | document, text, ref?: { result_question_id } }; `fixed` lists the steps from the previous attempt that the learner did this time). `multi_department`: the multi-department-selection analysis. `score_rationale`: the rubric bracket of the session score and evidenced counts. `key_statement`: { quote, result_question_id }, the one verbatim quotation a recruiter would remember the candidate by (interview / persona_interview, absent when nothing distinctive was said). Further keys may be added."},"ai_analysis_recruiter":{"description":"Recruiter-facing AI analysis of ⟨6 unchanged words⟩ ai_analysis_recruiter_why_hire":{"description":"Reasons to hire (list/textlist). Deprecated: a copy of ai_analysis_other.hiring_reasons.reasons_to_hire, kept for existing integrations."},"ai_analysis_recruiter_why_not_hire":{"description":"Reasons not to hire (list/textlist). Deprecated: a copy of ai_analysis_other.hiring_reasons.reasons_not_to_hire, kept for existing integrations."},"ai_completion_reason":{"description":"Why the ⟨463 unchanged words⟩
⟨1014 unchanged words⟩ "type":["boolean","null"]},"template":{"description":"Report layout: classic (default), modern, or one_pager.","enum":["classic","modern","one_pager",null],"type":["string","null"]},"transcript":{"description":"Include the interview transcript. ⟨1473 unchanged words⟩