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.'