HeyMilo Interviewers API

Create, read, update, and manage interviewers. An interviewer (posting) combines job details with an AI agent configuration and agentic workflow.

OpenAPI Specification

heymilo-interviewers-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: HeyMilo Public ATS Interviewers API
  description: External developer-facing API for HeyMilo. Create interviewers with agentic workflows, ingest candidates, retrieve interview results, and manage workspace resources.
  version: 2.0.0
servers:
- url: https://api.heymilo.ai
  description: Production
security:
- ApiKeyAuth: []
tags:
- name: Interviewers
  description: Create, read, update, and manage interviewers. An interviewer (posting) combines job details with an AI agent configuration and agentic workflow.
paths:
  /api/v2/postings:
    post:
      tags:
      - Interviewers
      summary: Create an interviewer
      description: 'Create a fully-configured interviewer with an agentic workflow. Returns the new posting ID, URLs, and a full posting receipt.


        **ATS-derived templates use a two-step flow.** When `interview_template_id` references a template whose blueprint is ATS-derived, the new posting is returned in an intermediate stage (`status: "draft"`, `ats_metadata.pending_activation: true`) and does **not** begin ingesting candidates. Transition it to live by calling `POST /postings/{posting_id}/activate`, which finalizes the posting and attaches the ATS mapping in one step. Non-ATS create paths are unchanged.'
      operationId: createPosting
      parameters:
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePostingRequest'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SingleResponse_CreatePostingResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    get:
      tags:
      - Interviewers
      summary: List interviewers
      description: Retrieve a paginated list of interviewers for the authenticated workspace.
      operationId: listPostings
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          default: 20
          title: Limit
      - name: starting_after
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Starting After
      - name: search
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Case-insensitive substring filter on the posting title.
          title: Search
        description: Case-insensitive substring filter on the posting title.
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResponse_PostingResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v2/postings/list:
    get:
      tags:
      - Interviewers
      summary: List interviewer summaries
      description: Retrieve a lightweight paginated list of interviewers (id, title, name only) for the authenticated workspace.
      operationId: listPostingSummaries
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          default: 20
          title: Limit
      - name: starting_after
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Starting After
      - name: search
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Case-insensitive substring filter on the posting title.
          title: Search
        description: Case-insensitive substring filter on the posting title.
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResponse_PostingSummary_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v2/postings/{posting_id}:
    get:
      tags:
      - Interviewers
      summary: Get an interviewer
      description: Retrieve the full details of a specific interviewer by ID.
      operationId: getPosting
      parameters:
      - name: posting_id
        in: path
        required: true
        schema:
          type: string
          title: Posting Id
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SingleResponse_PostingResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    patch:
      tags:
      - Interviewers
      summary: Update an interviewer
      description: Update fields on an existing interviewer. Only provided fields are modified; omitted fields remain unchanged.
      operationId: updatePosting
      parameters:
      - name: posting_id
        in: path
        required: true
        schema:
          type: string
          title: Posting Id
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePostingRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SingleResponse_PostingResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v2/postings/{posting_id}/stats:
    get:
      tags:
      - Interviewers
      summary: Get interviewer stats
      description: 'Retrieve aggregate statistics for an interviewer in a single call: total candidate count, completed interview count, and average interview and resume scores.


        The two score fields are independent per-agent averages and are `null` when that agent is not part of the interviewer''s workflow, or when no candidate has been scored yet.'
      operationId: getPostingStats
      parameters:
      - name: posting_id
        in: path
        required: true
        schema:
          type: string
          title: Posting Id
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SingleResponse_PostingStatsResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v2/postings/{posting_id}/workflow/{step_id}:
    patch:
      tags:
      - Interviewers
      summary: Update a workflow step's config
      description: Partially update one workflow step's config without touching other steps or posting-level fields. ``step_id`` is the step's ``type`` or its 1-based ``order``.
      operationId: updateInterviewerWorkflowStep
      parameters:
      - name: posting_id
        in: path
        required: true
        schema:
          type: string
          title: Posting Id
      - name: step_id
        in: path
        required: true
        schema:
          type: string
          title: Step Id
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWorkflowStepRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SingleResponse_PostingResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v2/postings/{posting_id}/archive:
    post:
      tags:
      - Interviewers
      summary: Archive an interviewer
      description: Archive an interviewer. Archived interviewers stop accepting new candidates.
      operationId: archivePosting
      parameters:
      - name: posting_id
        in: path
        required: true
        schema:
          type: string
          title: Posting Id
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SingleResponse_PostingResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v2/postings/{posting_id}/activate:
    post:
      tags:
      - Interviewers
      summary: Activate an interviewer
      description: 'Activate an interviewer so it begins accepting candidates. The interviewer must have a valid workflow configuration.


        For ATS-derived postings still in the `pending_activation` intermediate stage (created via `createPosting` with an ATS-derived `interview_template_id`, or `clonePosting` of an ATS-derived posting), this call finalizes the posting **and** attaches the ATS mapping so candidate ingestion from the ATS begins. The two steps run in one call; the ATS attach is idempotent and best-effort, so re-calling activate is safe and a transient ATS integrator hiccup will not block finalize.'
      operationId: activatePosting
      parameters:
      - name: posting_id
        in: path
        required: true
        schema:
          type: string
          title: Posting Id
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SingleResponse_PostingResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v2/postings/{posting_id}/clone:
    post:
      tags:
      - Interviewers
      summary: Clone an interviewer
      description: 'Create a copy of an existing interviewer with its workflow configuration.


        If the source interviewer is ATS-derived, the clone is returned in the same intermediate stage as a fresh ATS create (`status: "draft"`, `ats_metadata.pending_activation: true`) and must be transitioned to live via `POST /postings/{posting_id}/activate`. Cloning a non-ATS posting is unchanged.'
      operationId: clonePosting
      parameters:
      - name: posting_id
        in: path
        required: true
        schema:
          type: string
          title: Posting Id
      - name: X-API-KEY
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      - name: Authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Workspace-Id
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SingleResponse_CreatePostingResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    PostingURLs:
      properties:
        candidate_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Candidate Url
          description: Candidate-facing interview URL.
          examples:
          - https://candidates.heymilo.io/acme/senior-engineer
        ingestion_url_key:
          anyOf:
          - type: string
          - type: 'null'
          title: Ingestion Url Key
          description: URL key for candidate ingestion. Use with POST /intake/v1/candidate/{key}.
          examples:
          - ibURejyPMSlw6de0OZUdoxyoXTgWO78ey2NUo96EOG1gY
        review_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Review Url
          description: Admin dashboard review URL.
          examples:
          - https://admin.heymilo.ai/w/ABC123/lab2/POST_ID/1-details
      type: object
      title: PostingURLs
      description: All URLs associated with a posting.
    CreatePostingRequest:
      properties:
        title:
          type: string
          maxLength: 200
          minLength: 3
          title: Title
          description: Job posting title
          examples:
          - Senior Software Engineer
        description:
          type: string
          maxLength: 50000
          title: Description
          description: Job posting description. Used by AI to generate interview questions.
          default: ''
        workflow:
          anyOf:
          - items:
              oneOf:
              - $ref: '#/components/schemas/_WebInterviewStep'
              - $ref: '#/components/schemas/_ConversationalSMSStep'
              - $ref: '#/components/schemas/_ResumeStep'
              - $ref: '#/components/schemas/_FormStep'
            type: array
          - type: 'null'
          title: Workflow
          description: Ordered list of workflow steps with optional config and questions. Required unless ``interview_template_id`` is provided. Mutually exclusive with ``interview_template_id``.
        interview_template_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Interview Template Id
          description: 'Optional interview template ID to use as the starting point for this posting. When provided, the template''s blueprint posting is cloned (workflow, questions, criteria, agent settings, and any linked configurations are copied) and any other fields supplied in this request override the cloned values (title, description, root-level configs, integration IDs, metadata, etc.). Mutually exclusive with ``workflow``: provide one or the other.'
          examples:
          - IT_abc123
        name:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
          description: Internal posting slug
          examples:
          - senior-swe-backend
        language:
          type: string
          title: Language
          description: Interview language (ISO 639-1)
          default: en
          examples:
          - en
        interviewer_name:
          type: string
          title: Interviewer Name
          description: AI interviewer display name
          default: Sarah
        instructions:
          type: string
          title: Instructions
          description: Instructions for the AI interviewer
          default: ''
        company_overview:
          type: string
          title: Company Overview
          description: Brief overview of the company
          default: ''
        job_overview:
          type: string
          title: Job Overview
          description: Brief overview of the role
          default: ''
        interview_process_overview:
          anyOf:
          - type: string
            maxLength: 10000
          - type: 'null'
          title: Interview Process Overview
          description: Process overview shared with agents.
        company_overview_delivery_mode:
          anyOf:
          - type: string
            enum:
            - exact_delivery
            - summarized_delivery
            - reference_only
            - silent_reference
          - type: 'null'
          title: Company Overview Delivery Mode
          description: How the AI interviewer delivers the company overview. 'exact_delivery' (verbatim, default), 'summarized_delivery' (concise candidate-friendly summary), 'reference_only' (used only to answer candidate questions), 'silent_reference' (used internally, never shared with candidate).
        job_overview_delivery_mode:
          anyOf:
          - type: string
            enum:
            - exact_delivery
            - summarized_delivery
            - reference_only
            - silent_reference
          - type: 'null'
          title: Job Overview Delivery Mode
          description: How the AI interviewer delivers the job overview. Same options as company_overview_delivery_mode.
        interview_process_overview_delivery_mode:
          anyOf:
          - type: string
            enum:
            - exact_delivery
            - summarized_delivery
            - reference_only
            - silent_reference
          - type: 'null'
          title: Interview Process Overview Delivery Mode
          description: How the AI interviewer delivers the interview process overview. Same options as company_overview_delivery_mode.
        phone_number_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Phone Number Id
          description: Phone number ID for SMS and voice agents.
        sender_email_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Sender Email Id
          description: Sender email ID for candidate communications.
        email_template_group_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Email Template Group Id
          description: Email template group ID for candidate emails.
        design_template_group_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Design Template Group Id
          description: Design template group ID for interview UI branding.
        redirect_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Redirect Url
          description: URL to redirect candidates after completing the interview.
        scheduling_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Scheduling Url
          description: Calendar scheduling URL for shortlisted candidates.
        deadline:
          anyOf:
          - type: string
          - type: 'null'
          title: Deadline
          description: ISO 8601 deadline for the posting (e.g. '2025-03-15T00:00:00Z'). If omitted or null, defaults to one calendar month after creation.
          examples:
          - '2025-03-15T00:00:00Z'
        allow_sms_comms:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Allow Sms Comms
          description: Allow sending SMS invitations to candidates.
        max_retakes:
          anyOf:
          - type: integer
            maximum: 5.0
            minimum: 0.0
          - type: 'null'
          title: Max Retakes
          description: Max retake attempts (0-5).
        retake_cooldown_days:
          anyOf:
          - type: number
            minimum: 0.0
          - type: 'null'
          title: Retake Cooldown Days
          description: Days a candidate must wait between retake attempts.
        email_report_to_candidate:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Email Report To Candidate
          description: Email a performance report link to candidates after completion.
        metadata:
          anyOf:
          - additionalProperties:
              type: string
            type: object
          - type: 'null'
          title: Metadata
          description: Set of key-value pairs for storing additional information on the interviewer. Up to 50 keys, each key max 40 chars, each value max 500 chars.
          examples:
          - external_id: ats_12345
            source: workday
      type: object
      required:
      - title
      title: CreatePostingRequest
    APIError:
      properties:
        type:
          type: string
          title: Type
          description: Error category
          examples:
          - invalid_request_error
        code:
          type: string
          title: Code
          description: Machine-readable error code
          examples:
          - validation_error
        message:
          type: string
          title: Message
          description: Human-readable summary
          examples:
          - The request body failed validation
        param:
          anyOf:
          - type: string
          - type: 'null'
          title: Param
          description: Top-level parameter that caused the error
        doc_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Doc Url
          description: Link to relevant documentation
        errors:
          items:
            $ref: '#/components/schemas/APIErrorDetail'
          type: array
          title: Errors
          description: Detailed per-field validation errors
      type: object
      required:
      - type
      - code
      - message
      title: APIError
    Va

# --- truncated at 32 KB (82 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/heymilo/refs/heads/main/openapi/heymilo-interviewers-api-openapi.yml