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 `. Subscribers find their key at https://my.sonix.ai/api; trial accounts request one from Sonix support.'