PyannoteAI Operations API

The Operations API from PyannoteAI — 3 operation(s) for operations.

Operations 3

POST /v1/diarize Diarize audio #
POST /v1/voiceprint Extract voiceprint #
POST /v1/identify Identify speaker with diarization #

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/pyannoteai:pyannoteai-operations-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

pyannoteai-operations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: pyannoteAI Operations API
  description: ''
  version: local
  contact: {}
  termsOfService: https://pyannote.ai/terms-of-use
servers:
- url: https://api.pyannote.ai
tags:
- name: Operations
paths:
  /v1/diarize:
    post:
      operationId: diarize
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiarizeRequest'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobCreated'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '402':
          description: Subscription is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
      - api-key: []
      summary: Diarize audio
      tags:
      - Operations
      x-api-key-permissions:
      - jobs:write
  /v1/voiceprint:
    post:
      operationId: voiceprint
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VoiceprintRequest'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobCreated'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '402':
          description: Subscription is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
      - api-key: []
      summary: Extract voiceprint
      tags:
      - Operations
      x-api-key-permissions:
      - jobs:write
  /v1/identify:
    post:
      operationId: identify
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentifyRequest'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobCreated'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '402':
          description: Subscription is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
      - api-key: []
      summary: Identify speaker with diarization
      tags:
      - Operations
      x-api-key-permissions:
      - jobs:write
components:
  schemas:
    IdentifyRequest:
      type: object
      properties:
        url:
          type: string
          description: URL of the audio file to be processed
          example: https://example.com/audio.wav
        webhook:
          type: string
          description: Webhook URL to receive results when job is completed (optional)
          example: https://example.com/webhook
        webhookStatusOnly:
          type: boolean
          default: false
          description: When true, webhook payload only includes jobId and status (excludes output). Useful for large payloads.
          example: true
        model:
          type:
          - string
          - 'null'
          enum:
          - precision-2
          example: precision-2
          default: precision-2
        numSpeakers:
          type: number
          minimum: 1
          description: Number of speakers. Only use if the number of speakers is known in advance. Number of speakers is detected automatically if not provided. Setting this value results in better overall diarization performance. In rare cases where we cannot honor this request (e.g. short files and large number of speakers), a warning will be added to the output. Equivalent to sending minSpeakers==maxSpeakers
          example: 2
        minSpeakers:
          type: number
          minimum: 1
          description: Minimum number of speakers (must be <= maxSpeakers if both are set)
          example: 1
        maxSpeakers:
          type: number
          minimum: 1
          description: Maximum number of speakers (must be >= minSpeakers if both are set)
          example: 4
        turnLevelConfidence:
          type:
          - boolean
          - 'null'
          default: false
          description: Includes turn-level confidence values in the output.
          example: true
        exclusive:
          type: boolean
          default: false
          description: Includes exclusive diarization values in the output in `exclusiveDiarization` key (equivalent to diarization but without overlapping speech).
          example: true
        confidence:
          type: boolean
          default: false
          description: Include confidence values in the output. Output is considerably larger when this option is enabled. Output includes a list of confidence scores with a resolution.
          example: true
        matching:
          description: Customize how voiceprints are matched against speakers
          allOf:
          - $ref: '#/components/schemas/MatchingOptions'
        voiceprints:
          minItems: 1
          maxItems: 50
          description: List of voiceprints to identify against
          type: array
          items:
            $ref: '#/components/schemas/Voiceprint'
      required:
      - voiceprints
    JobCreated:
      type: object
      properties:
        jobId:
          type: string
          example: 3c8a89a5-dcc6-4edb-a75d-ffd64739674d
          description: ID of the job
        status:
          type: string
          description: Status of the job
          example: created
          enum:
          - pending
          - created
          - succeeded
          - canceled
          - failed
          - running
        warning:
          type: string
          description: Warning message if any
      required:
      - jobId
      - status
    MatchingOptions:
      type: object
      properties:
        exclusive:
          type:
          - boolean
          - 'null'
          default: true
          description: Prevent multiple speakers from being matched to the same voiceprint. Default to true
        threshold:
          type:
          - number
          - 'null'
          default: 0
          minimum: 0
          maximum: 100
          format: float
          description: Prevent matching if confidence score is below this threshold. Value is between 0 and 100. Default is 0, meaning all voiceprints are matched
    VoiceprintRequest:
      type: object
      properties:
        url:
          type: string
          description: URL of the voiceprint audio file
          example: https://example.com/voice.wav
        model:
          type:
          - string
          - 'null'
          enum:
          - precision-2
          example: precision-2
          default: precision-2
        webhook:
          type: string
          description: Webhook URL to receive voiceprint results (optional)
          example: https://example.com/webhook
        webhookStatusOnly:
          type: boolean
          default: false
          description: When true, webhook payload only includes jobId and status (excludes output). Useful for large payloads.
          example: true
      required:
      - url
    ValidationErrorResponse:
      type: object
      properties:
        message:
          type: string
          description: Error message
          example: Invalid request
        errors:
          description: List of errors
          type: array
          items:
            $ref: '#/components/schemas/ValidationError'
      required:
      - message
      - errors
    Voiceprint:
      type: object
      properties:
        label:
          type: string
          maxLength: 100
          pattern: ^(?!speaker_).*
          description: Label for the speaker. Labels can't start with "SPEAKER_"
          example: John Doe
        voiceprint:
          type: string
          maxLength: 20000
          format: string
          description: Voiceprint of a speaker
          example: U29tZUJhc2U2NERhdGE
      required:
      - label
      - voiceprint
    ApiError:
      type: object
      properties:
        requestId:
          type: string
          description: Request ID
          example: 37a4c3a0-b034-4e8c-9ed9-76da6645544a
        message:
          type: string
          description: Error message
          example: Error message
      required:
      - requestId
      - message
    ValidationError:
      type: object
      properties:
        field:
          type: string
          description: Field name
          example: url
        message:
          type: string
          description: Error message
          example: Invalid URL
      required:
      - field
      - message
    DiarizeRequest:
      type: object
      properties:
        url:
          type: string
          description: URL of the audio file to be processed
          example: https://example.com/audio.wav
        webhook:
          type: string
          description: Webhook URL to receive results when job is completed (optional)
          example: https://example.com/webhook
        webhookStatusOnly:
          type: boolean
          default: false
          description: When true, webhook payload only includes jobId and status (excludes output). Useful for large payloads.
          example: true
        model:
          type:
          - string
          - 'null'
          enum:
          - precision-2
          - community-1
          example: precision-2
          default: precision-2
        numSpeakers:
          type: number
          minimum: 1
          description: Number of speakers. Only use if the number of speakers is known in advance. Number of speakers is detected automatically if not provided. Setting this value results in better overall diarization performance. In rare cases where we cannot honor this request (e.g. short files and large number of speakers), a warning will be added to the output. Equivalent to sending minSpeakers==maxSpeakers
          example: 2
        minSpeakers:
          type: number
          minimum: 1
          description: Minimum number of speakers (must be <= maxSpeakers if both are set)
          example: 1
        maxSpeakers:
          type: number
          minimum: 1
          description: Maximum number of speakers (must be >= minSpeakers if both are set)
          example: 4
        turnLevelConfidence:
          type:
          - boolean
          - 'null'
          default: false
          description: Includes turn-level confidence values in the output.
          example: true
        exclusive:
          type: boolean
          default: false
          description: Includes exclusive diarization values in the output in `exclusiveDiarization` key (equivalent to diarization but without overlapping speech).
          example: true
        confidence:
          type: boolean
          default: false
          description: Include confidence values in the output. Output is considerably larger when this option is enabled. Output includes a list of confidence scores with a resolution.
          example: true
        transcription:
          type: boolean
          default: false
          description: Enable speaker attributed transcription. Only available for the `precision-2` diarization model.
        transcriptionConfig:
          description: 'Transcription configuration, if `transcription: true`'
          allOf:
          - $ref: '#/components/schemas/TranscriptionConfiguration'
      required:
      - url
    TranscriptionConfiguration:
      type: object
      properties:
        model:
          type: string
          default: parakeet-tdt-0.6b-v3
          enum:
          - parakeet-tdt-0.6b-v3
          - faster-whisper-large-v3-turbo
          description: "Transcription model to use. Supported languages depend on the chosen model:\n  - `parakeet-tdt-0.6b-v3`: Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Russian or Ukrainian.\n  - `faster-whisper-large-v3-turbo`: Afrikaans, Albanian, Amharic, Arabic, Armenian, Assamese, Azerbaijani, Bashkir, Basque, Belarusian, Bengali, Bosnian, Breton, Bulgarian, Cantonese, Catalan, Chinese, Croatian, Czech, Danish, Dutch, English, Estonian, Faroese, Finnish, French, Galician, Georgian, German, Greek, Gujarati, HaitianCreole, Hausa, Hawaiian, Hebrew, Hindi, Hungarian, Icelandic, Indonesian, Italian, Japanese, Javanese, Kannada, Kazakh, Khmer, Korean, Lao, Latin, Latvian, Lingala, Lithuanian, Luxembourgish, Macedonian, Malagasy, Malay, Malayalam, Maltese, Maori, Marathi, Mongolian, Myanmar, Nepali, Norwegian, Nynorsk, Occitan, Pashto, Persian, Polish, Portuguese, Punjabi, Romanian, Russian, Sanskrit, Serbian, Shona, Sindhi, Sinhala, Slovak, Slovenian, Somali, Spanish, Sundanese, Swahili, Swedish, Tagalog, Tajik, Tamil, Tatar, Telugu, Thai, Tibetan, Turkish, Turkmen, Ukrainian, Urdu, Uzbek, Vietnamese, Welsh, Yiddish or Yoruba."
          example: faster-whisper-large-v3-turbo
  securitySchemes:
    api-key:
      scheme: bearer
      bearerFormat: JWT
      type: http
externalDocs:
  description: pyannoteAI Docs
  url: https://docs.pyannote.ai/