HeyMilo Voices API

Browse the workspace voice registry for AI interviewer voices.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/heymilo-voices-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

heymilo-voices-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: HeyMilo Public ATS Voices 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: Voices
  description: Browse the workspace voice registry for AI interviewer voices.
paths:
  /api/v2/voices:
    get:
      tags:
      - Voices
      summary: List voices
      description: Returns all voices in the workspace voice registry.
      operationId: listVoices
      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 applied to the voice name.
          title: Search
        description: Case-insensitive substring filter applied to the voice name.
      - 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_VoiceResponse_'
        '401':
          description: Invalid or missing API key.
          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/voices/{voice_id}/preview:
    get:
      tags:
      - Voices
      summary: Get voice audio preview
      description: Returns an audio preview of the voice. May redirect (302) to an external audio URL.
      operationId: getVoicePreview
      parameters:
      - name: voice_id
        in: path
        required: true
        schema:
          type: string
          title: Voice 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: Audio preview bytes.
          content:
            application/json:
              schema: {}
            audio/mpeg: {}
        '302':
          description: Redirect to external audio URL.
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Voice not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v2/voices/{voice_id}:
    get:
      tags:
      - Voices
      summary: Get a voice
      description: Returns a single voice from the workspace registry by ID.
      operationId: getVoice
      parameters:
      - name: voice_id
        in: path
        required: true
        schema:
          type: string
          title: Voice 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_VoiceResponse_'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '404':
          description: Voice not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    APIErrorDetail:
      properties:
        code:
          type: string
          title: Code
          description: Machine-readable error code
          examples:
          - invalid_param
        message:
          type: string
          title: Message
          description: Human-readable explanation
          examples:
          - title must be between 3 and 200 characters
        param:
          anyOf:
          - type: string
          - type: 'null'
          title: Param
          description: Parameter that caused the error
          examples:
          - title
      type: object
      required:
      - code
      - message
      title: APIErrorDetail
    ListResponse_VoiceResponse_:
      properties:
        data:
          items:
            $ref: '#/components/schemas/VoiceResponse'
          type: array
          title: Data
        pagination:
          $ref: '#/components/schemas/PaginationMeta'
      type: object
      required:
      - data
      - pagination
      title: ListResponse[VoiceResponse]
    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
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    VoiceResponse:
      properties:
        object:
          type: string
          const: voice
          title: Object
          description: Object type identifier.
          default: voice
        id:
          type: string
          title: Id
          description: Registry voice ID (wrv-prefixed).
          examples:
          - wrv-abc123
        provider:
          type: string
          title: Provider
          description: 'Voice provider: ''elevenlabs'', ''cartesia'', or ''lmnt''.'
          examples:
          - elevenlabs
        provider_voice_id:
          type: string
          title: Provider Voice Id
          description: Provider-specific voice identifier.
          examples:
          - EXAVITQu4vr4xnSDxMaL
        name:
          type: string
          title: Name
          description: Human-readable voice name.
          examples:
          - Sarah
        language:
          anyOf:
          - type: string
          - type: 'null'
          title: Language
          description: BCP-47 language code.
          examples:
          - en
        country_code:
          anyOf:
          - type: string
          - type: 'null'
          title: Country Code
          description: ISO country code.
          examples:
          - US
        gender:
          anyOf:
          - type: string
          - type: 'null'
          title: Gender
          description: 'Voice gender: ''male'', ''female'', or ''neutral''.'
          examples:
          - female
        preview_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Preview Url
          description: URL to an audio preview of the voice.
        labels:
          additionalProperties:
            type: string
          type: object
          title: Labels
          description: Provider-defined labels (e.g. accent, age, style).
        created_at:
          type: number
          title: Created At
          description: Unix timestamp when the voice was added to the registry.
          examples:
          - 1739612400.0
        updated_at:
          type: number
          title: Updated At
          description: Unix timestamp when the voice was last updated.
          examples:
          - 1739617200.0
      type: object
      required:
      - id
      - provider
      - provider_voice_id
      - name
      - created_at
      - updated_at
      title: VoiceResponse
      description: 'A voice from the workspace voice registry.


        Voices are added from external providers (ElevenLabs, Cartesia, LMNT)

        and stored in the workspace registry. The ``id`` (prefixed ``wrv-``)

        is used in posting configs as ``voice_id``.'
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    SingleResponse_VoiceResponse_:
      properties:
        data:
          $ref: '#/components/schemas/VoiceResponse'
        meta:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Meta
          description: Optional metadata. Shape varies by endpoint.
      type: object
      required:
      - data
      title: SingleResponse[VoiceResponse]
    APIErrorResponse:
      properties:
        error:
          $ref: '#/components/schemas/APIError'
      type: object
      required:
      - error
      title: APIErrorResponse
    PaginationMeta:
      properties:
        has_more:
          type: boolean
          title: Has More
          description: Whether more results exist beyond this page
        total_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Total Count
          description: Total number of results (if available)
        url:
          anyOf:
          - type: string
          - type: 'null'
          title: Url
          description: URL of this resource
      type: object
      required:
      - has_more
      title: PaginationMeta
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
      description: API key for authentication. Pass your key in the X-API-KEY header.