Skip to main content
Glama

Get interview definition

get_interview_definition
Read-onlyIdempotent

[Interviews] Get the definition/configuration of an interview (position), including its ordered questions array. The questions come back in the same format create_interview_from_questions accepts, so you can read an interview here, change the array, and send it to update_interview. Each question's id identifies it — keep the ids you did not mean to change.

Retrieves the interview definition for a given interview-definition id or position id. Returns the compiled calc_definition_json, the ordered questions array (in the same format job-interview-create-from-array accepts, so it round-trips into job-interview-update) plus basic metadata. Access is subject to the caller's row-level security.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
position_idYesIdentifier of either an interview definition (single-stage) or a position definition (multi-stage). The function resolves whichever matches.
conversation_idNoPass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
codeYesCaller-supplied external code/reference.
nameYesInterview or position name.
slugYesURL slug of the public listing, when one was generated.
tagsYesFree-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.
typeYesInterview type. Null for multi-stage positions.
stageYesHiring-pipeline stage. Null for multi-stage positions.
statusYesLifecycle status of the interview/position.
questionsYesThe 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.
recordingYesPer-answer recording mode. Null for multi-stage positions.
coach_planYesCoaching-plan stage this session belongs to. Null for multi-stage positions and for sessions outside any plan.
created_atYes
updated_atYes
visibilityYesWho can see and access the interview/position.
descriptionYesShort description.
environmentYesWhich webhook environment this interview's results are delivered to. Null for multi-stage positions, whose stages each carry their own.
merchant_idYesOwning merchant id.
result_viewYesResult view level. Null for multi-stage positions.
type_creditYesCredit bucket the interview draws from. Null for multi-stage positions.
max_durationYesLive session limit in seconds. Null for multi-stage positions.
is_multistageYesTrue when the id resolved to a multi-stage position rather than a single interview.
is_voice_onlyYesConvenience 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.
max_followupsYesMaximum number of AI follow-up questions; null uses the template default. Null for multi-stage positions.
result_scoringNoResolved 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.
cover_image_urlYesCover image URL.
interview_salaryYesSalary range shown for the position.
_mcp_instructionsNoServer-issued metadata for this conversation.
interview_locationYesLocation (create field `location`).
creation_parametersNoThe 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).
calc_definition_jsonNoThe compiled interview definition JSON (structure varies by interview type).
country_availabilityNoPortal 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.
interview_departmentYesDepartment the position belongs to.
mojito_language_codeYesPlatform (mojito) language code.
recruiter_profile_idYesProfile id of the recruiter owning this interview/position.
speech_language_codeYesAzure speech language code. Null for multi-stage positions.
speech_language_nameYesAzure speech language display name. Null for multi-stage positions.
interview_template_idYesInterview template id. For multi-stage positions this is the first interview step's template.
candidate_expectationsYesFree-text candidate expectations. Null for multi-stage positions.
pdf_export_auto_configNoAuto-PDF-report options applied when the interview completes; null when auto-export is off. Null for multi-stage positions.
recording_full_sessionYesFull-session recording mode. Null for multi-stage positions.
required_pronunciationYesWhether a pronunciation assessment is required. Null for multi-stage positions.
interview_template_typeYesType 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.
knowledge_base_store_idYesLinked knowledge base store id. Null for multi-stage positions.
questions_random_subsetYesFraction of the questions actually asked (0.01-0.9); null asks all of them. Null for multi-stage positions.
interview_available_tillYesISO date/time after which the interview is no longer available to candidates. Null means always available.
interview_description_longYesLong 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
candidate_expectations_jsonNoStructured candidate expectations JSON — the scoring rubric. Null for multi-stage positions.
candidate_video_introductionYesWhether a candidate video introduction is hidden/optional/required. Null for multi-stage positions.
interview_conversation_speedYesConversation pace of the AI avatar (slower/normal/faster). Null keeps the template default. Null for multi-stage positions.
result_enable_edit_transcriptYesWhether the candidate may edit the transcript on the result view. Null for multi-stage positions.
candidate_notification_channelYesSMS / WhatsApp candidate notifications: null = off, reminders = with both e-mail reminders, last_reminder = only with the final reminder, all = invitation + reminders + pre-screening accepted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / country_availability
      Added value: +{
      +  "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."
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / conversation_id / description
      Previous value: -"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."New value: +"Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
  3. Changed2 schema fields changed
    • addedOutput schema / properties / candidate_notification_channel
      Added value: +{
      +  "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"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "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"
      -]New value: +[
      +  "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"
      +]
  4. Changed2 schema fields changed
    • addedInput schema / properties / conversation_id
      Added value: +{
      +  "description": "Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _mcp_instructions
      Added value: +{
      +  "description": "Server-issued metadata for this conversation.",
      +  "properties": {
      +    "conversation_id": {
      +      "description": "The server-issued conversation identifier.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  5. Changed2 schema fields changed
    • addedOutput schema / properties / environment
      Added value: +{
      +  "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"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "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"
      -]New value: +[
      +  "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"
      +]
  6. Changed2 schema fields changed
    • changedOutput schema / properties / interview_template_type / description
      Previous value: -"Type of the linked interview template. `interactive_elevenlabs` is voice-only; the others (`interactive_heygen`, `offline_heygen`, `offline_elai`, `offline_synthesia`) are avatar-based. Null when the template could not be resolved."New value: +"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."
    • changedOutput schema / properties / interview_template_type / enum
      Previous value: -[
      -  "offline_elai",
      -  "offline_synthesia",
      -  "interactive_heygen",
      -  "offline_heygen",
      -  "interactive_elevenlabs",
      -  null
      -]New value: +[
      +  "offline_elai",
      +  "offline_synthesia",
      +  "interactive_heygen",
      +  "offline_heygen",
      +  "interactive_elevenlabs",
      +  "interactive_spatius",
      +  null
      +]
  7. Changed1 schema field changed
    • changedOutput schema / properties / interview_description_long / description
      Previous value: -"Long description (create/update field `description_long`)."New value: +"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"
  8. Changed2 schema fields changed
    • addedOutput schema / properties / questions
      Added value: +{
      +  "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"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "name",
      -  "created_at",
      -  "updated_at",
      -  "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"
      -]New value: +[
      +  "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"
      +]
  9. Changed19 schema fields changed
    • changedOutput schema / properties / candidate_expectations_json / description
      Previous value: -"Structured candidate expectations JSON. Null for multi-stage positions."New value: +"Structured candidate expectations JSON — the scoring rubric. Null for multi-stage positions."
    • addedOutput schema / properties / coach_plan
      Added value: +{
      +  "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"
      +  ]
      +}
    • changedOutput schema / properties / creation_parameters / description
      Previous value: -"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)."New value: +"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)."
    • addedOutput schema / properties / interview_available_till
      Added value: +{
      +  "description": "ISO date/time after which the interview is no longer available to candidates. Null means always available.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / interview_conversation_speed
      Added value: +{
      +  "description": "Conversation pace of the AI avatar (slower/normal/faster). Null keeps the template default. Null for multi-stage positions.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / interview_department
      Added value: +{
      +  "description": "Department the position belongs to.",
      +  "example": "Engineering",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / interview_description_long / description
      Previous value: -"Long description (create field `description_long`)."New value: +"Long description (create/update field `description_long`)."
    • addedOutput schema / properties / interview_salary
      Added value: +{
      +  "description": "Salary range shown for the position.",
      +  "example": "$80k - $100k",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / max_duration
      Added value: +{
      +  "description": "Live session limit in seconds. Null for multi-stage positions.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / max_followups
      Added value: +{
      +  "description": "Maximum number of AI follow-up questions; null uses the template default. Null for multi-stage positions.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / pdf_export_auto_config
      Added value: +{
      +  "description": "Auto-PDF-report options applied when the interview completes; null when auto-export is off. Null for multi-stage positions."
      +}
    • addedOutput schema / properties / questions_random_subset
      Added value: +{
      +  "description": "Fraction of the questions actually asked (0.01-0.9); null asks all of them. Null for multi-stage positions.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / recruiter_profile_id
      Added value: +{
      +  "description": "Profile id of the recruiter owning this interview/position.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / required_pronunciation
      Added value: +{
      +  "description": "Whether a pronunciation assessment is required. Null for multi-stage positions.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / result_enable_edit_transcript
      Added value: +{
      +  "description": "Whether the candidate may edit the transcript on the result view. Null for multi-stage positions.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / result_scoring / description
      Previous value: -"Resolved result-scoring config. Null for multi-stage positions."New value: +"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."
    • addedOutput schema / properties / slug
      Added value: +{
      +  "description": "URL slug of the public listing, when one was generated.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / tags
      Added value: +{
      +  "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"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "name",
      -  "created_at",
      -  "updated_at",
      -  "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"
      -]New value: +[
      +  "name",
      +  "created_at",
      +  "updated_at",
      +  "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"
      +]
  10. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond annotations: access is subject to row-level security, the returned `calc_definition_json` and `questions` array are disclosed, and it warns to preserve unchanged question `id`s.

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

Conciseness3/5

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

The description restates the same round-trip point twice: the first sentence says questions come back in the format create_interview_from_questions accepts, and the second paragraph repeats that they are in the format accepted so they round-trip into update_interview. Redundancy costs it, though the round-trip concept is front-loaded.

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

Completeness4/5

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

An output schema exists, so return values need not be enumerated, yet the description helpfully sketches the response shape (calc_definition_json, ordered questions, basic metadata) and adds the row-level-security caveat. It is nearly complete for a read tool, with only minor redundancy and no explicit selection guidance between sibling reads.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (position_id and conversation_id) are already documented in the schema itself. The description echoes that position_id can be an interview-definition id or a position id but adds no syntactic or format detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb (Get) and resource (interview definition/configuration) and clarifies it includes the ordered `questions` array. It implicitly distinguishes itself from siblings like get_interview_result_details and list_interviews by naming the definition/configuration concept and the round-trip consumers create_interview_from_questions and update_interview.

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

Usage Guidelines4/5

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

Explicitly frames the intended workflow: read the definition here, modify the array, send it to update_interview, and names the format-compatible siblings create_interview_from_questions and update_interview. It gives clear context but no explicit when-not-to-use or conditions for choosing between related read tools.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.