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

# Create an interview module

> Creates an interview module with its shadow and reverse-shadow requirements, graduation rules, and weekly interview limit. The create body supplies the complete training configuration; null weekly_interview_limit means unlimited. The response includes the new module and its initial member counts.

<Note>**Beta**: this endpoint may change or be removed without notice while in beta. There is no compatibility promise until it reaches general availability.</Note>


## OpenAPI

````yaml /openapi.json post /v1/interview-modules
openapi: 3.1.0
info:
  title: ModernLoop Platform API
  version: 0.1.0
  description: The ModernLoop Platform API for managing recruiting workflows.
  contact:
    email: support@modernloop.io
servers:
  - url: https://api.modernloop.io
security: []
tags:
  - name: Application
  - name: Candidate
  - name: Interview Event
  - name: Interview Module
  - name: Interviewer
  - name: Job
  - name: Job Stage
  - name: Organization
  - name: Schedule
  - name: Scheduling Task
  - name: Task Queue
  - name: Template
paths:
  /v1/interview-modules:
    post:
      tags:
        - Interview Module
      summary: Create an interview module
      description: >-
        Creates an interview module with its shadow and reverse-shadow
        requirements, graduation rules, and weekly interview limit. The create
        body supplies the complete training configuration; null
        weekly_interview_limit means unlimited. The response includes the new
        module and its initial member counts.
      operationId: createInterviewModule
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InterviewModuleCreate'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InterviewModule'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    InterviewModuleCreate:
      type: object
      properties:
        name:
          type: string
          minLength: 1
          description: Module name. Required on create; PATCH replaces it when supplied.
        shadows_required:
          type: integer
          minimum: 0
          maximum: 20
          description: >-
            Required shadow interviews. Required on create; PATCH replaces it
            when supplied.
        reverse_shadows_required:
          type: integer
          minimum: 0
          maximum: 20
          description: >-
            Required reverse-shadow interviews. Required on create; PATCH
            replaces it when supplied.
        graduate_from_shadow_approval_type:
          type: string
          enum:
            - AUTOMATIC
            - SCHEDULER
            - CUSTOM
          description: >-
            Approval mode for graduating from shadow training. Required on
            create; PATCH replaces it when supplied.
        graduate_from_shadow_custom_approvers:
          type: array
          items:
            type: string
            enum:
              - TRAINED
              - TRAINEE
              - SCHEDULER
          description: >-
            Complete approver-role list for shadow graduation. Required on
            create; PATCH replaces the list when supplied.
        graduate_from_reverse_shadow_approval_type:
          type: string
          enum:
            - AUTOMATIC
            - SCHEDULER
            - CUSTOM
          description: >-
            Approval mode for graduating from reverse-shadow training. Required
            on create; PATCH replaces it when supplied.
        graduate_from_reverse_shadow_custom_approvers:
          type: array
          items:
            type: string
            enum:
              - TRAINED
              - TRAINEE
              - SCHEDULER
          description: >-
            Complete approver-role list for reverse-shadow graduation. Required
            on create; PATCH replaces the list when supplied.
        weekly_interview_limit:
          type:
            - integer
            - 'null'
          minimum: 1
          maximum: 10
          description: Maximum interviews per week; null means unlimited.
        should_fast_track_training:
          type: boolean
          description: >-
            Enables fast-track training when true. On PATCH, omission preserves
            the current value.
      required:
        - name
        - shadows_required
        - reverse_shadows_required
        - graduate_from_shadow_approval_type
        - graduate_from_shadow_custom_approvers
        - graduate_from_reverse_shadow_approval_type
        - graduate_from_reverse_shadow_custom_approvers
        - weekly_interview_limit
      additionalProperties: false
    InterviewModule:
      type: object
      properties:
        id:
          type: string
          pattern: ^mod_[0-9a-f]{32}$
          description: >-
            Canonical interview module ID (mod_ followed by 32 lowercase
            hexadecimal UUID characters).
          example: mod_a1b2c3d4e5f64789a1b2c3d4e5f64789
        name:
          type: string
        shadows_required:
          type: integer
        reverse_shadows_required:
          type: integer
        graduation_approval:
          type: string
          enum:
            - AUTOMATIC
            - SCHEDULER
            - CUSTOM
        weekly_interview_limit:
          type:
            - integer
            - 'null'
          description: Maximum interviews per week; null means unlimited.
        member_counts:
          $ref: '#/components/schemas/InterviewModuleMemberCounts'
        created_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp.
        updated_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp.
      required:
        - id
        - name
        - shadows_required
        - reverse_shadows_required
        - graduation_approval
        - weekly_interview_limit
        - member_counts
        - created_at
        - updated_at
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - UNAUTHENTICATED
                - API_ACCESS_DISABLED
                - SCOPE_MISSING
                - INSUFFICIENT_SCOPE
                - VALIDATION_FAILED
                - INVALID_CURSOR
                - PAYLOAD_TOO_LARGE
                - NOT_FOUND
                - NOT_FOUND_MAY_BE_SYNCING
                - CANDIDATE_ANONYMIZED
                - TASK_STAGE_NOT_SCHEDULABLE
                - DUPLICATE_REQUEST_OPEN
                - IDEMPOTENCY_KEY_REQUIRED
                - IDEMPOTENCY_KEY_REUSED
                - PREVIEW_EXPIRED
                - PREVIEW_STALE
                - RATE_LIMITED
                - CONFLICT
                - NOT_IMPLEMENTED
                - INTERNAL
                - UPSTREAM_TIMEOUT
            message:
              type: string
            docs_url:
              type: string
              format: uri
          required:
            - code
            - message
      required:
        - error
    InterviewModuleMemberCounts:
      type: object
      properties:
        members_trained_count:
          type: integer
          minimum: 0
        members_in_shadow_count:
          type: integer
          minimum: 0
        members_in_reverse_shadow_count:
          type: integer
          minimum: 0
      required:
        - members_trained_count
        - members_in_shadow_count
        - members_in_reverse_shadow_count
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API tokens are passed as Bearer tokens.

````