> ## Documentation Index
> Fetch the complete documentation index at: https://developer.jobmojito.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get interview definition

> 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.



## OpenAPI

````yaml https://cool.jobmojito.com/functions/v1/openapi get /job-interview-get
openapi: 3.1.0
info:
  title: JobMojito API
  version: 1.0.0
  description: >-
    Public API for JobMojito, served by Supabase Edge Functions. Authenticate
    with a Supabase JWT access token via the Authorization header.
servers:
  - url: https://cool.jobmojito.com/functions/v1
    description: Production
security: []
tags:
  - name: Interviews
    description: >-
      Create, configure and manage interview / coaching / assessment
      definitions.
  - name: Coaching catalogue
    description: >-
      Directories (pages) of the coaching portal catalogue that group coaching
      sessions and carry custom content pages.
  - name: Results
    description: >-
      Interview results, transcripts, reports, re-attempt requests and
      analytics.
  - name: Candidates
    description: List and manage candidates.
  - name: Knowledge base
    description: Upload documents used to generate knowledge-base interviews.
  - name: Resume & Form verification
    description: Pre-screen candidates from resumes and forms.
  - name: Admin
    description: >-
      Account administration — invite team/coaching users, manage sub-merchants
      and avatar templates.
paths:
  /job-interview-get:
    get:
      tags:
        - Interviews
      summary: Get interview definition
      description: >-
        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.
      parameters:
        - schema:
            type: string
            minLength: 1
            format: uuid
            description: >-
              Identifier of either an interview definition (single-stage) or a
              position definition (multi-stage). The function resolves whichever
              matches.
            example: 00000000-0000-0000-0000-000000000000
          required: true
          name: position_id
          in: query
      responses:
        '200':
          description: The resolved interview definition.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobInterviewGetResponse'
        '401':
          description: Missing, expired or invalid access token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            No interview or position found for the given id (or hidden by
            row-level security).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Validation error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    JobInterviewGetResponse:
      type: object
      properties:
        name:
          type: string
          nullable: true
          description: Interview or position name.
        created_at:
          type: string
          nullable: true
          example: '2026-01-15T09:30:00.000Z'
        updated_at:
          type: string
          nullable: true
          example: '2026-01-20T14:05:00.000Z'
        calc_definition_json:
          nullable: true
          description: >-
            The compiled interview definition JSON (structure varies by
            interview type).
        questions:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/JobInterviewCreateFromArrayQuestion'
          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.
        is_multistage:
          type: boolean
          description: >-
            True when the id resolved to a multi-stage position rather than a
            single interview.
        status:
          type: string
          enum:
            - draft
            - active
            - archived
            - deleted
            - preparing
            - completed
          description: Lifecycle status of the interview/position.
        visibility:
          type: string
          enum:
            - public
            - merchant_public
            - merchant_invite
            - merchant_unlisted
            - sub_item
          description: Who can see and access the interview/position.
        stage:
          type: string
          nullable: true
          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
          description: Hiring-pipeline stage. Null for multi-stage positions.
        type:
          type: string
          nullable: true
          enum:
            - coaching
            - interview
            - persona
            - persona_interview
            - public_avatar
            - assessment
          description: Interview type. Null for multi-stage positions.
        environment:
          type: string
          nullable: true
          enum:
            - production
            - uat
            - development
            - demo
          description: >-
            Which webhook environment this interview's results are delivered to.
            Null for multi-stage positions, whose stages each carry their own.
          example: production
        code:
          type: string
          nullable: true
          description: Caller-supplied external code/reference.
        interview_location:
          type: string
          nullable: true
          description: Location (create field `location`).
        cover_image_url:
          type: string
          nullable: true
          description: Cover image URL.
        merchant_id:
          type: string
          nullable: true
          description: Owning merchant id.
        interview_template_id:
          type: string
          nullable: true
          description: >-
            Interview template id. For multi-stage positions this is the first
            interview step's template.
        interview_template_type:
          type: string
          nullable: true
          enum:
            - offline_elai
            - offline_synthesia
            - interactive_heygen
            - offline_heygen
            - interactive_elevenlabs
            - interactive_spatius
          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.
        is_voice_only:
          type: boolean
          nullable: true
          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.
        knowledge_base_store_id:
          type: string
          nullable: true
          description: Linked knowledge base store id. Null for multi-stage positions.
        mojito_language_code:
          type: string
          nullable: true
          description: Platform (mojito) language code.
          example: en
        speech_language_code:
          type: string
          nullable: true
          description: Azure speech language code. Null for multi-stage positions.
        speech_language_name:
          type: string
          nullable: true
          description: Azure speech language display name. Null for multi-stage positions.
        recording:
          type: string
          nullable: true
          enum:
            - audio_first_5_answers
            - audio_all
            - video_all
            - video_first_5_answers
          description: Per-answer recording mode. Null for multi-stage positions.
        recording_full_session:
          type: string
          nullable: true
          enum:
            - audio_first_5_answers
            - audio_all
            - video_all
            - video_first_5_answers
          description: Full-session recording mode. Null for multi-stage positions.
        type_credit:
          type: string
          nullable: true
          enum:
            - resume_check
            - interview_coach_starter
            - interview_coach_contributor
            - interview_coach_manager
            - cover_letter
          description: >-
            Credit bucket the interview draws from. Null for multi-stage
            positions.
        result_view:
          type: string
          nullable: true
          enum:
            - minimal
            - advanced
            - full
            - full_expand_scores
            - minimal_with_score
            - none
          description: Result view level. Null for multi-stage positions.
        candidate_video_introduction:
          type: string
          nullable: true
          enum:
            - hidden
            - optional
            - required
          description: >-
            Whether a candidate video introduction is hidden/optional/required.
            Null for multi-stage positions.
        description:
          type: string
          nullable: true
          description: Short description.
        interview_description_long:
          type: string
          nullable: true
          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
        candidate_expectations:
          type: string
          nullable: true
          description: Free-text candidate expectations. Null for multi-stage positions.
        candidate_expectations_json:
          nullable: true
          description: >-
            Structured candidate expectations JSON — the scoring rubric. Null
            for multi-stage positions.
        result_scoring:
          nullable: true
          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.
        creation_parameters:
          nullable: true
          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).
        interview_department:
          type: string
          nullable: true
          description: Department the position belongs to.
          example: Engineering
        interview_salary:
          type: string
          nullable: true
          description: Salary range shown for the position.
          example: $80k - $100k
        interview_available_till:
          type: string
          nullable: true
          description: >-
            ISO date/time after which the interview is no longer available to
            candidates. Null means always available.
        candidate_notification_channel:
          type: string
          nullable: true
          enum:
            - reminders
            - last_reminder
            - all
          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.
        country_availability:
          nullable: true
          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.
        recruiter_profile_id:
          type: string
          nullable: true
          description: Profile id of the recruiter owning this interview/position.
        slug:
          type: string
          nullable: true
          description: URL slug of the public listing, when one was generated.
        tags:
          type: array
          nullable: true
          items:
            type: string
          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
        coach_plan:
          type: string
          nullable: true
          enum:
            - demo
            - screening
            - 2nd
            - 3rd
            - closing
            - job-specific
            - other
          description: >-
            Coaching-plan stage this session belongs to. Null for multi-stage
            positions and for sessions outside any plan.
        interview_conversation_speed:
          type: string
          nullable: true
          description: >-
            Conversation pace of the AI avatar (slower/normal/faster). Null
            keeps the template default. Null for multi-stage positions.
        max_followups:
          type: number
          nullable: true
          description: >-
            Maximum number of AI follow-up questions; null uses the template
            default. Null for multi-stage positions.
        max_duration:
          type: number
          nullable: true
          description: Live session limit in seconds. Null for multi-stage positions.
        questions_random_subset:
          type: number
          nullable: true
          description: >-
            Fraction of the questions actually asked (0.01-0.9); null asks all
            of them. Null for multi-stage positions.
        required_pronunciation:
          type: boolean
          nullable: true
          description: >-
            Whether a pronunciation assessment is required. Null for multi-stage
            positions.
        result_enable_edit_transcript:
          type: boolean
          nullable: true
          description: >-
            Whether the candidate may edit the transcript on the result view.
            Null for multi-stage positions.
        pdf_export_auto_config:
          nullable: true
          description: >-
            Auto-PDF-report options applied when the interview completes; null
            when auto-export is off. Null for multi-stage positions.
      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
    Error:
      type: object
      properties:
        error:
          type: string
          example: Field is required.
        name:
          type: string
          example: interview_result_id
      required:
        - error
    JobInterviewCreateFromArrayQuestion:
      type: object
      properties:
        question:
          type: string
          description: The question text shown to the candidate.
        id:
          type: string
          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.
        duration:
          type: number
          nullable: true
          description: Answer duration in seconds for this question.
        mojito_language_code:
          type: string
          nullable: true
          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
          description: >-
            Per-question language override (one of the platform-languages.json
            codes). Inherits the interview language when omitted.
          example: en
        label:
          type: string
          nullable: true
          description: Optional label/tag stored on the question.
        is_conditional:
          type: boolean
          nullable: true
          description: >-
            Conditional follow-up question (view 'with listening conditional').
            Use with conditional_question_main_id.
        is_without_scoring:
          type: boolean
          nullable: true
          description: Question is asked but not scored (view 'without scoring').
        is_candidate_asking_recruiter:
          type: boolean
          nullable: true
          description: Candidate-asks-recruiter prompt (view 'candidate asking recruiter').
        is_expert:
          type: boolean
          nullable: true
          description: Expert listening question (view 'with listening expert').
        is_multiple_choice:
          type: boolean
          nullable: true
          description: Multiple-choice question (view 'multiple choice').
        question_alternatives:
          type: array
          nullable: true
          items:
            type: string
          description: Alternative phrasings for the question.
        conditional_question_main_id:
          type: string
          nullable: true
          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.
        knowledge_base_id:
          type: string
          nullable: true
          description: Knowledge-base store id (uuid) the question draws context from.
        external_id:
          type: string
          nullable: true
          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.
        external_data:
          type: object
          nullable: true
          additionalProperties:
            nullable: true
          description: Arbitrary JSON metadata stored on the question.
        candidate_expectations_json:
          type: object
          nullable: true
          properties:
            weak:
              type: array
              items:
                type: string
              description: >-
                Baseline requirements every viable candidate should meet (table
                stakes).
            moderate:
              type: array
              items:
                type: string
              description: Requirements expected of a solid, competent candidate.
            strong:
              type: array
              items:
                type: string
              description: High-bar requirements only standout candidates clear.
          description: >-
            Per-question candidate expectations, bucketed by requirement level
            (weak/moderate/strong). Extra keys are preserved.
      required:
        - question
      additionalProperties:
        nullable: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Supabase JWT — `Authorization: Bearer <token>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.