PyannoteAI API

The Api API from PyannoteAI — 6 operation(s) for api.

Operations 6

GET /v1/test Test API endpoint #
POST /v1/diarize Diarize audio #
POST /v1/voiceprint Extract voiceprint #
POST /v1/identify Identify speaker with diarization #
GET /v1/jobs/{jobId} Get job by ID #
GET /v2/jobs Get all jobs. #

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-api-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-api-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: pyannoteAI API
  description: ''
  version: local
  contact: {}
  termsOfService: https://pyannote.ai/terms-of-use
servers:
- url: https://api.pyannote.ai
tags:
- name: Api
paths:
  /v1/test:
    get:
      operationId: testKey
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TestResponse'
        '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: Test API endpoint
      tags:
      - Api
  /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:
      - Api
      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:
      - Api
      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:
      - Api
      x-api-key-permissions:
      - jobs:write
  /v1/jobs/{jobId}:
    get:
      operationId: getJobById
      parameters:
      - name: jobId
        required: true
        in: path
        description: Job ID to track the progress
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/DiarizationJob'
                  title: Diarization
                - $ref: '#/components/schemas/VoiceprintJob'
                  title: Voiceprint
                - $ref: '#/components/schemas/IdentifyJob'
                  title: Identification
        '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: Get job by ID
      tags:
      - Api
      x-api-key-permissions:
      - jobs:read
  /v2/jobs:
    get:
      operationId: getJobsByTeamV2
      parameters:
      - name: limit
        required: false
        in: query
        description: Number of jobs to return
        schema:
          minimum: 1
          maximum: 100
          default: 10
          example: 10
          type: number
      - name: cursor
        required: false
        in: query
        description: Cursor for pagination. Pass the `nextCursor` value from the previous response.
        schema:
          format: uuid
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
          type: string
      - name: status
        required: false
        in: query
        description: Status of the jobs to return
        schema:
          example: succeeded
          type: string
          enum:
          - pending
          - created
          - succeeded
          - canceled
          - failed
          - running
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetJobsResponseV2'
        '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: Get all jobs.
      tags:
      - Api
      x-api-key-permissions:
      - jobs:read
components:
  schemas:
    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
    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
    DiarizationSegment:
      type: object
      properties:
        speaker:
          type: string
          description: Speaker label
          example: SPEAKER_00
        start:
          type: number
          description: Start time of the segment in seconds
          example: 15
        end:
          type: number
          description: End time of the segment in seconds
          example: 30.5
        confidence:
          type: object
          description: Confidence scores that this speech turn matches each diarization speaker. Only available if `turnLevelConfidence` is set to true when job is created.
          example:
            SPEAKER_00: 16
            SPEAKER_01: 93
      required:
      - speaker
      - start
      - end
    JobListItem:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
        createdAt:
          format: date-time
          type: string
      required:
      - id
      - status
      - createdAt
    JobStatus:
      type: string
      enum:
      - pending
      - created
      - succeeded
      - canceled
      - failed
      - running
      description: Status of the job
    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
    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
    VoiceprintJob:
      type: object
      properties:
        jobId:
          type: string
          description: Job ID to track the progress or get the results
          example: fb16c565-f3f0-4402-a08c-9d44df0ccc7b
        status:
          description: Status of the job
          allOf:
          - $ref: '#/components/schemas/JobStatus'
        createdAt:
          format: date-time
          type: string
          description: Date and time the job was created
          example: '2024-02-20T12:00:00Z'
        updatedAt:
          format: date-time
          type: string
          description: Date and time the job was last updated
          example: '2024-02-20T12:00:00Z'
        output:
          description: Output of a voiceprint job, available for 24 hours after job completion
          allOf:
          - $ref: '#/components/schemas/VoiceprintJobResults'
    DiarizationJob:
      type: object
      properties:
        jobId:
          type: string
          description: Job ID to track the progress or get the results
          example: fb16c565-f3f0-4402-a08c-9d44df0ccc7b
        status:
          description: Status of the job
          allOf:
          - $ref: '#/components/schemas/JobStatus'
        createdAt:
          format: date-time
          type: string
          description: Date and time the job was created
          example: '2024-02-20T12:00:00Z'
        updatedAt:
          format: date-time
          type: string
          description: Date and time the job was last updated
          example: '2024-02-20T12:00:00Z'
        output:
          description: Output segments of a diarization, available for 24 hours after job completion
          allOf:
          - $ref: '#/components/schemas/DiarizationJobOutput'
    Confidence:
      type: object
      properties:
        score:
          description: List of confidence scores for each sample. Values are between 0 and 100
          example:
          - 95
          - 89
          - 78
          - 67
          - 56
          - 45
          - 34
          - 23
          - 12
          - 1
          type: array
          items:
            type: number
        resolution:
          type: number
          description: Resolution of the confidence scores. Value is number of seconds per sample
          example: 0.02
      required:
      - score
      - resolution
    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
    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
    IdentificationVoiceprint:
      type: object
      properties:
        speaker:
          type: string
          description: Diarization speaker
          example: SPEAKER_00
        match:
          type: string
          description: Label of the voiceprint that was identified following the matching settings
          example: Sam
        confidence:
          type: object
          description: Confidence for each speaker label, as a dictionary of speaker label to confidence score
          example:
            Sam: 16
            Rick: 24
      required:
      - speaker
      - match
      - confidence
    IdentificationSegment:
      type: object
      properties:
        speaker:
          type: string
          description: Speaker label
          example: SPEAKER_00
        start:
          type: number
          description: Start time of the segment in seconds
          example: 15
        end:
          type: number
          description: End time of the segment in seconds
          example: 30.5
        confidence:
          type: object
          description: Confidence scores that this speech turn matches each diarization speaker. Only available if `turnLevelConfidence` is set to true when job is created.
          example:
            SPEAKER_00: 16
            SPEAKER_01: 93
        diarizationSpeaker:
          type: string
          description: Speaker label
          example: SPEAKER_00
        match:
          type:
          - string
          - 'null'
          description: Label of the voiceprint that was identified following the matching settings
          example: Sam
      required:
      - diarizationSpeaker
      - match
    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
    VoiceprintJobResults:
      type: object
      properties:
        voiceprint:
          type: string
          description: Voiceprint of the audio. To be used for identification
          example: aGVsbG8gd29ybGQ
        warning:
          type: string
          description: Warning message if any
        error:
          type: string
          description: Error message if any
      required:
      - voiceprint
    TestResponse:
      type: object
      properties:
        status:
          type: string
          description: Status of the test
          example: OK
        message:
          type: string
          description: Message of the test
          example: Test connection successful
      required:
      - status
      - 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
    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
    GetJobsResponseV2:
      type: object
      properties:
        items:
          description: List of jobs. Sorted by creation date, descending. Does not include output data.
          type: array
          items:
            $ref: '#/components/schemas/JobListItem'
        nextCursor:
          type:
          - string
          - 'null'
          description: Cursor to pass as `cursor` query param to get the next page. Null if there are no more results.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
      required:
      - items
      - nextCursor
    IdentifyJob:
      type: object
      properties:
        jobId:
          type: string
          description: Job ID to track the progress or get the results
          example: fb16c565-f3f0-4402-a08c-9d44df0ccc7b
        status:
          description: Status of the job
          allOf:
          - $ref: '#/components/schemas/JobStatus'
        createdAt:
          format: date-time
          type: string
          description: Date and time the job was created
          example: '2024-02-20T12:00:00Z'
        updatedAt:
          format: date-time
          type: string
          description: Date and time the job was last updated
          example: '2024-02-20T12:00:00Z'
        output:
          description: Output segments of an identification job, available for 24 hours after job completion
          allOf:
          - $ref: '#/components/schemas/IdentificationJobOutput'
    DiarizationJobOutput:
      type: object
      properties:
        diarization:
          description: List of diarization segments
          type: array
          items:
            $ref: '#/components/schemas/DiarizationSegment'
        confidence:
          description: Confidence scores details. Only returned if `confidence` is set to true when job is created
          allOf:
          - $ref: '#/components/schemas/Confidence'
        exclusiveDiarization:
          description: Exclusive diarization segments where only one speaker is active at a time. Only returned if `exclusive` is set to true when job is created.
          type: array
          items:
            $ref: '#/components/schemas/DiarizationSegment'
        wordLevelTranscription:
          description: Word-level transcription segments with text. Only returned if `transcription` is set to true when job is created.
          example:
          - start: 0.5
            end: 0.8
            text: Hello
            speaker: SPEAKER_00
          type: array
          items:
            $ref: '#/components/schemas/TranscriptionSegment'
        turnLevelTranscription:
          description: Turn-level (speaker turn) transcription segments with text. Only returned if `transcription` is set to true when job is created.
          example:
          - start: 0.5
            end: 2.3
            text: Hello, how are you?
            speaker: SPEAKER_00
          type: array
          items:
            $ref: '#/components/schemas/TranscriptionSegment'
        error:
          type: string
          description: Error message if any
        warning:
          type: string
          description: Warning message if any
      required:
      - diarization
    TranscriptionSegment:
      type: object
      properties:
        start:
          type: number
          description: Start time of the segment in seconds
        end:
          type: number
          description: End time of the segment in seconds
        text:
          type: string
          description: The transcribed speech content for this segment
        speaker:
          type: string
          description: Speaker label
      required:
      - start
      - end
      - text
      - speaker
    IdentificationJobOutput:
      type: object
      properties:
        diarization:
          description: List of diarization segments
          type: array
          items:
            $ref: '#/components/schemas/DiarizationSegment'
        confidence:
          description: Confidence scores details. Only returned if `confidence` is set to true when job is created
          allOf:
          - $ref: '#/components/schemas/Confidence'
        exclusiveDiarization:
          description: Exclusive diarization segments where only one speaker is active at a time. Only returned if `exclusive` is set to true when job is created.
          type: array
          items:
            $ref: '#/components/schemas/DiarizationSegment'
        error:
          type: string
          description: Error message if any
        warning:
          type: string
          description: Warning message if any
        identification:
          description: List of identification segments
          type: array
          items:
            $ref: '#/components/schemas/IdentificationSegment'
        voiceprints:
          type: array
          items:
            $ref: '#/components/schemas/IdentificationVoiceprint'
    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
  securitySchemes:
    api-key:
      scheme: bearer
      bearerFormat: JWT
      type: http
externalDocs:
  description: pyannoteAI Docs
  url: https://docs.pyannote.ai/