Speechmatics Jobs API

The Jobs API from Speechmatics — 4 operation(s) for jobs.

OpenAPI Specification

speechmatics-jobs-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Speechmatics Batch Transcription API Keys Jobs API
  version: 2.0.0
  description: The Speechmatics Automatic Speech Recognition REST API is used to submit ASR jobs and receive the results. The supported job type is transcription of audio files. Supports 55+ languages, speaker diarization, translation, summarization, sentiment analysis, topic detection, and custom vocabulary.
  contact:
    email: support@speechmatics.com
  x-providerName: speechmatics
  x-serviceName: batch-transcription-api
servers:
- url: https://asr.api.speechmatics.com/v2
  description: Speechmatics Batch ASR API (EU)
- url: https://eu1.asr.api.speechmatics.com/v2
  description: Speechmatics Batch ASR API (EU1)
- url: https://usa.asr.api.speechmatics.com/v2
  description: Speechmatics Batch ASR API (USA)
security:
- bearerAuth: []
tags:
- name: Jobs
paths:
  /jobs:
    post:
      summary: Create a new job
      operationId: createJob
      tags:
      - Jobs
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - config
              properties:
                config:
                  type: string
                  description: JSON containing a JobConfig model.
                data_file:
                  type: string
                  format: binary
                  description: The audio data file to be processed.
      parameters:
      - name: X-SM-Processing-Data
        in: header
        required: false
        schema:
          type: string
        description: On-prem processing settings JSON (parallel_engines, user_id).
      responses:
        '201':
          description: Job created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateJobResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate Limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    get:
      summary: List all jobs
      operationId: listJobs
      tags:
      - Jobs
      parameters:
      - name: created_before
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Cursor for paginating by creation time.
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
        description: Limit on number of items returned.
      - name: include_deleted
        in: query
        required: false
        schema:
          type: boolean
        description: Include deleted jobs in response.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetrieveJobsResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate Limited
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /jobs/{jobid}:
    get:
      summary: Get job details
      operationId: getJob
      tags:
      - Jobs
      parameters:
      - name: jobid
        in: path
        required: true
        schema:
          type: string
        description: ID of the job.
        example: a1b2c3d4e5
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetrieveJobResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '410':
          description: Gone (expired)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate Limited
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      summary: Delete a job
      operationId: deleteJob
      tags:
      - Jobs
      parameters:
      - name: jobid
        in: path
        required: true
        schema:
          type: string
        description: ID of the job to delete.
        example: a1b2c3d4e5
      - name: force
        in: query
        required: false
        schema:
          type: boolean
        description: Force terminate a running job.
      responses:
        '200':
          description: Job deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteJobResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '423':
          description: Locked (running job, use force=true)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate Limited
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /jobs/{jobid}/transcript:
    get:
      summary: Get transcript for a job
      operationId: getTranscript
      tags:
      - Jobs
      parameters:
      - name: jobid
        in: path
        required: true
        schema:
          type: string
        example: a1b2c3d4e5
      - name: format
        in: query
        required: false
        schema:
          type: string
          enum:
          - json-v2
          - txt
          - srt
        description: Transcription output format (default json-v2).
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetrieveTranscriptResponse'
            text/plain:
              schema:
                type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate Limited
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /jobs/{jobid}/log:
    get:
      summary: Get log file for a job
      operationId: getJobLog
      tags:
      - Jobs
      parameters:
      - name: jobid
        in: path
        required: true
        schema:
          type: string
        example: a1b2c3d4e5
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate Limited
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    JobDetails:
      type: object
      required:
      - created_at
      - data_name
      - id
      - status
      properties:
        created_at:
          type: string
          format: date-time
        data_name:
          type: string
        text_name:
          type: string
        duration:
          type: integer
          minimum: 0
        id:
          type: string
          example: a1b2c3d4e5
        status:
          type: string
          enum:
          - running
          - done
          - rejected
          - deleted
          - expired
        config:
          $ref: '#/components/schemas/JobConfig'
        lang:
          type: string
        errors:
          type: array
          items:
            $ref: '#/components/schemas/JobDetailError'
    AutoChaptersConfig:
      type: object
    RecognitionDisplay:
      type: object
      required:
      - direction
      properties:
        direction:
          type: string
          enum:
          - ltr
          - rtl
    NotificationConfig:
      type: object
      required:
      - url
      properties:
        url:
          type: string
          description: URL for job completion callback.
        contents:
          type: array
          items:
            type: string
            enum:
            - jobinfo
            - transcript
            - transcript.json-v2
            - transcript.txt
            - transcript.srt
            - data
            - text
        method:
          type: string
          enum:
          - post
          - put
        auth_headers:
          type: array
          items:
            type: string
    TrackingData:
      type: object
      properties:
        title:
          type: string
          description: The title of the job.
        reference:
          type: string
          description: External system reference.
        tags:
          type: array
          items:
            type: string
        details:
          type: object
          description: Customer-defined JSON structure.
          additionalProperties: true
    ErrorResponse:
      type: object
      required:
      - code
      - error
      properties:
        code:
          type: integer
          description: The HTTP status code.
          minimum: 100
        error:
          type: string
          description: The error message.
          enum:
          - Bad Request
          - File Expired
          - Forbidden
          - Resource Locked
          - Format Not Supported
          - Internal Server Error
          - Job error
          - Job Expired
          - Job In Progress
          - Job is not of type transcription
          - Job not found
          - Job rejected
          - Job rejected due to invalid audio
          - Job rejected due to invalid text
          - Malformed request
          - Missing callback
          - Missing data_file
          - No language selected
          - Not Implemented
          - Permission Denied
          - Requested product not available
          - Transcription not ready
          - Log file not available
          - Unprocessable Entity
          - Max concurrent running jobs exceeded
        detail:
          type: string
          description: The details of the error.
    DataFetchConfig:
      type: object
      required:
      - url
      properties:
        url:
          type: string
        auth_headers:
          type: array
          items:
            type: string
          description: A list of additional headers to be added to the input fetch request.
    TopicDetectionConfig:
      type: object
      properties:
        topics:
          type: array
          items:
            type: string
    SpeakersInputItem:
      type: object
      required:
      - label
      - speaker_identifiers
      properties:
        label:
          type: string
          minLength: 1
        speaker_identifiers:
          type: array
          minItems: 1
          uniqueItems: true
          items:
            type: string
    JobConfig:
      type: object
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - transcription
        fetch_data:
          $ref: '#/components/schemas/DataFetchConfig'
        fetch_text:
          $ref: '#/components/schemas/DataFetchConfig'
        transcription_config:
          $ref: '#/components/schemas/TranscriptionConfig'
        notification_config:
          type: array
          items:
            $ref: '#/components/schemas/NotificationConfig'
        tracking:
          $ref: '#/components/schemas/TrackingData'
        output_config:
          $ref: '#/components/schemas/OutputConfig'
        translation_config:
          $ref: '#/components/schemas/TranslationConfig'
        language_identification_config:
          $ref: '#/components/schemas/LanguageIdentificationConfig'
        summarization_config:
          $ref: '#/components/schemas/SummarizationConfig'
        sentiment_analysis_config:
          $ref: '#/components/schemas/SentimentAnalysisConfig'
        topic_detection_config:
          $ref: '#/components/schemas/TopicDetectionConfig'
        auto_chapters_config:
          $ref: '#/components/schemas/AutoChaptersConfig'
        audio_events_config:
          $ref: '#/components/schemas/AudioEventsConfig'
    TranscriptionConfig:
      type: object
      required:
      - language
      properties:
        language:
          type: string
          description: Language model to process the audio input (ISO language code).
        domain:
          type: string
          description: Specialized model domain (e.g. finance, medical).
        output_locale:
          type: string
          description: Language locale for transcription output.
        model:
          $ref: '#/components/schemas/Model'
        operating_point:
          $ref: '#/components/schemas/OperatingPoint'
          deprecated: true
        additional_vocab:
          type: array
          items:
            type: object
            required:
            - content
            properties:
              content:
                type: string
              sounds_like:
                type: array
                items:
                  type: string
          description: List of custom words or phrases with optional pronunciations.
        punctuation_overrides:
          type: object
          properties:
            sensitivity:
              type: number
              format: float
              minimum: 0
              maximum: 1
              description: Controls punctuation density (0-1, default 0.5).
            permitted_marks:
              type: array
              items:
                type: string
              description: Accepted punctuation marks.
        diarization:
          type: string
          enum:
          - none
          - speaker
          - channel
          description: Speaker or channel label attribution mode.
        channel_diarization_labels:
          type: array
          items:
            type: string
            pattern: ^[A-Za-z0-9._]+$
          description: Labels for channel diarization.
        enable_entities:
          type: boolean
          description: Include entity objects (dates, numbers) in transcription results.
        max_delay_mode:
          type: string
          enum:
          - fixed
          - flexible
        audio_filtering_config:
          type: object
          properties:
            volume_threshold:
              type: number
              format: float
              minimum: 0
              maximum: 100
        transcript_filtering_config:
          type: object
          properties:
            remove_disfluencies:
              type: boolean
            replacements:
              type: array
              items:
                type: object
                required:
                - from
                - to
                additionalProperties: false
                properties:
                  from:
                    type: string
                  to:
                    type: string
        speaker_diarization_config:
          type: object
          properties:
            prefer_current_speaker:
              type: boolean
            speaker_sensitivity:
              type: number
              format: float
              minimum: 0
              maximum: 1
            get_speakers:
              type: boolean
            speakers:
              type: array
              items:
                $ref: '#/components/schemas/SpeakersInputItem'
    JobDetailError:
      type: object
      required:
      - timestamp
      - message
      properties:
        timestamp:
          type: string
          example: 2021-07-14 11:53:49.242000+00:00
        message:
          type: string
          example: Audio fetch error, http status 418
    RecognitionAlternative:
      type: object
      required:
      - content
      - confidence
      - language
      properties:
        content:
          type: string
        confidence:
          type: number
          format: float
        language:
          type: string
        display:
          $ref: '#/components/schemas/RecognitionDisplay'
        speaker:
          type: string
        tags:
          type: array
          items:
            type: string
    TranslationConfig:
      type: object
      required:
      - target_languages
      properties:
        target_languages:
          type: array
          maxItems: 5
          items:
            type: string
    RetrieveTranscriptResponse:
      type: object
      required:
      - format
      - job
      - metadata
      - results
      properties:
        format:
          type: string
          example: '2.7'
        job:
          type: object
        metadata:
          type: object
        results:
          type: array
          items:
            $ref: '#/components/schemas/RecognitionResult'
        speakers:
          type: array
          items:
            $ref: '#/components/schemas/SpeakersResultItem'
        translations:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/TranslationSentence'
        summary:
          $ref: '#/components/schemas/SummarizationResult'
    RecognitionResult:
      type: object
      required:
      - start_time
      - end_time
      - type
      properties:
        channel:
          type: string
        start_time:
          type: number
          format: float
        end_time:
          type: number
          format: float
        volume:
          type: number
          format: float
          minimum: 0
          maximum: 100
        is_eos:
          type: boolean
        type:
          type: string
          enum:
          - word
          - punctuation
          - entity
        alternatives:
          type: array
          items:
            $ref: '#/components/schemas/RecognitionAlternative'
        attaches_to:
          type: string
          enum:
          - previous
          - next
          - both
          - none
    SummarizationConfig:
      type: object
      properties:
        content_type:
          type: string
          enum:
          - auto
          - informative
          - conversational
        summary_length:
          type: string
          enum:
          - brief
          - detailed
          default: brief
        summary_type:
          type: string
          enum:
          - paragraphs
          - bullets
    SpeakersResultItem:
      type: object
      required:
      - label
      - speaker_identifiers
      properties:
        label:
          type: string
          minLength: 1
        speaker_identifiers:
          type: array
          minItems: 1
          uniqueItems: true
          items:
            type: string
    OutputConfig:
      type: object
      properties:
        srt_overrides:
          type: object
          properties:
            max_line_length:
              type: integer
            max_lines:
              type: integer
    CreateJobResponse:
      type: object
      required:
      - id
      properties:
        id:
          type: string
          description: The unique ID assigned to the job.
          example: a1b2c3d4e5
    Model:
      type: string
      description: Specific model to use in transcription.
      enum:
      - standard
      - enhanced
    AudioEventsConfig:
      type: object
      properties:
        types:
          type: array
          items:
            type: string
    LanguageIdentificationConfig:
      type: object
      properties:
        expected_languages:
          type: array
          items:
            type: string
        low_confidence_action:
          type: string
          enum:
          - allow
          - reject
          - use_default_language
        default_language:
          type: string
    SummarizationResult:
      type: object
      properties:
        content:
          type: string
    RetrieveJobResponse:
      type: object
      required:
      - job
      properties:
        job:
          $ref: '#/components/schemas/JobDetails'
    DeleteJobResponse:
      type: object
      required:
      - job
      properties:
        job:
          $ref: '#/components/schemas/JobDetails'
    SentimentAnalysisConfig:
      type: object
    TranslationSentence:
      type: object
      properties:
        start_time:
          type: number
          format: float
        end_time:
          type: number
          format: float
        content:
          type: string
        speaker:
          type: string
        channel:
          type: string
    RetrieveJobsResponse:
      type: object
      required:
      - jobs
      properties:
        jobs:
          type: array
          items:
            $ref: '#/components/schemas/JobDetails'
    OperatingPoint:
      type: string
      description: Deprecated. Use model instead.
      enum:
      - standard
      - enhanced
      deprecated: true
  securitySchemes:
    bearerAuth:
      type: apiKey
      in: header
      name: Authorization
      description: 'Bearer token authentication. Use the format: Bearer $API_KEY_OR_JWT'