Sonix Exports API

Export transcripts as subtitles, captions, documents, and media burn-ins.

OpenAPI Specification

sonix-exports-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Sonix AI Analysis Exports API
  description: The Sonix API lets you programmatically upload audio and video media for automated transcription, retrieve the resulting transcripts, export subtitles and captions (SRT, VTT, TXT, JSON, DOCX, PDF), translate transcripts into other languages, and run AI analysis (summaries, chapters, sentiment, entities). Sonix transcribes in 54+ languages and translates into 55+ languages. The API is available to Sonix subscribers; trial accounts can request an API key from Sonix support. All requests are authorized with a Bearer API key. This description was modeled by API Evangelist from Sonix's public API documentation at https://sonix.ai/docs/api; request and response schemas are honestly modeled where the public docs do not enumerate every field.
  version: '1.0'
  contact:
    name: Sonix
    url: https://sonix.ai
  x-modeled-by: API Evangelist
  x-source: https://sonix.ai/docs/api
servers:
- url: https://api.sonix.ai/v1
  description: Sonix API v1
security:
- bearerAuth: []
tags:
- name: Exports
  description: Export transcripts as subtitles, captions, documents, and media burn-ins.
paths:
  /media/{id}/media_exports:
    parameters:
    - $ref: '#/components/parameters/MediaId'
    post:
      operationId: createMediaExport
      tags:
      - Exports
      summary: Export media (mp3/wav/mp4)
      description: Creates an exported media file (mp3, wav, or mp4) from the source media.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                format:
                  type: string
                  enum:
                  - mp3
                  - wav
                  - mp4
      responses:
        '200':
          description: The created media export job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /media_exports/{id}:
    parameters:
    - $ref: '#/components/parameters/JobId'
    get:
      operationId: getMediaExport
      tags:
      - Exports
      summary: Check media export status
      description: Retrieves the status and download URL of a media export job.
      responses:
        '200':
          description: The media export job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /media/{id}/transcript.srt:
    parameters:
    - $ref: '#/components/parameters/MediaId'
    get:
      operationId: getTranscriptSrt
      tags:
      - Exports
      summary: Export transcript as SRT
      description: Returns the transcript as an SRT subtitle file.
      responses:
        '200':
          description: SRT subtitle file.
          content:
            application/x-subrip:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
  /media/{id}/transcript.vtt:
    parameters:
    - $ref: '#/components/parameters/MediaId'
    get:
      operationId: getTranscriptVtt
      tags:
      - Exports
      summary: Export transcript as VTT
      description: Returns the transcript as a WebVTT caption file.
      responses:
        '200':
          description: WebVTT caption file.
          content:
            text/vtt:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
  /media/{id}/transcript.json:
    parameters:
    - $ref: '#/components/parameters/MediaId'
    get:
      operationId: getTranscriptJson
      tags:
      - Exports
      summary: Export transcript as JSON
      description: Returns the transcript as JSON with word-level timings, speaker labels, and confidence scores.
      responses:
        '200':
          description: JSON transcript with word-level timing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranscriptJson'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /media/{id}/transcript/split:
    parameters:
    - $ref: '#/components/parameters/MediaId'
    put:
      operationId: splitTranscript
      tags:
      - Exports
      summary: Split transcript into subtitles
      description: Splits the transcript into subtitle segments using parameters such as maximum characters per line and maximum lines per subtitle.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                max_characters_per_line:
                  type: integer
                max_lines_per_subtitle:
                  type: integer
      responses:
        '200':
          description: The transcript was split into subtitles.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /media/{id}/video_burn_ins:
    parameters:
    - $ref: '#/components/parameters/MediaId'
    post:
      operationId: createVideoBurnIn
      tags:
      - Exports
      summary: Burn subtitles into video
      description: Creates a video with subtitles burned in from the transcript.
      responses:
        '200':
          description: The created video burn-in job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /video_burn_ins/{id}:
    parameters:
    - $ref: '#/components/parameters/JobId'
    get:
      operationId: getVideoBurnIn
      tags:
      - Exports
      summary: Check video burn-in status
      description: Retrieves the status and download URL of a video burn-in job.
      responses:
        '200':
          description: The video burn-in job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    Job:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
        url:
          type: string
          description: Download URL for the job output when available.
    TranscriptJson:
      type: object
      properties:
        name:
          type: string
        transcript:
          type: array
          items:
            type: object
            properties:
              text:
                type: string
              start_time:
                type: number
              end_time:
                type: number
              speaker:
                type: string
              confidence:
                type: number
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
  responses:
    Unauthorized:
      description: The API key is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    JobId:
      name: id
      in: path
      required: true
      schema:
        type: string
      description: The unique identifier of the job.
    MediaId:
      name: id
      in: path
      required: true
      schema:
        type: string
      description: The unique identifier of the media file.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Sonix API key passed as `Authorization: Bearer <API Key>`. Subscribers find their key at https://my.sonix.ai/api; trial accounts request one from Sonix support.'