basePath: /api/v1 definitions: api.APIKeyListResponse: properties: created_at: type: string description: type: string id: type: integer is_active: type: boolean key_preview: type: string last_used: type: string name: type: string updated_at: type: string type: object api.APIKeysWrapper: properties: api_keys: items: $ref: '#/definitions/api.APIKeyListResponse' type: array type: object api.ChangePasswordRequest: properties: confirmPassword: type: string currentPassword: type: string newPassword: minLength: 6 type: string required: - confirmPassword - currentPassword - newPassword type: object api.ChangeUsernameRequest: properties: newUsername: maxLength: 50 minLength: 3 type: string password: type: string required: - newUsername - password type: object api.ChatCreateRequest: properties: model: type: string title: type: string transcription_id: type: string required: - model - transcription_id type: object api.ChatMessageRequest: properties: content: type: string required: - content type: object api.ChatMessageResponse: properties: content: type: string created_at: type: string id: type: integer role: type: string type: object api.ChatModelsResponse: properties: models: items: type: string type: array type: object api.ChatSessionResponse: properties: created_at: type: string id: type: string is_active: type: boolean last_activity_at: type: string last_message: $ref: '#/definitions/api.ChatMessageResponse' message_count: type: integer model: type: string provider: type: string title: type: string transcription_id: type: string updated_at: type: string type: object api.ChatSessionWithMessages: properties: created_at: type: string id: type: string is_active: type: boolean last_activity_at: type: string last_message: $ref: '#/definitions/api.ChatMessageResponse' message_count: type: integer messages: items: $ref: '#/definitions/api.ChatMessageResponse' type: array model: type: string provider: type: string title: type: string transcription_id: type: string updated_at: type: string type: object api.CreateAPIKeyRequest: properties: description: type: string name: maxLength: 100 minLength: 1 type: string required: - name type: object api.CreateAPIKeyResponse: properties: description: type: string id: type: integer key: type: string name: type: string type: object api.ErrorResponse: properties: error: type: string type: object api.LLMConfigRequest: properties: api_key: type: string base_url: type: string is_active: type: boolean openai_base_url: type: string provider: enum: - ollama - openai type: string required: - provider type: object api.LLMConfigResponse: properties: base_url: type: string created_at: type: string has_api_key: description: Don't return actual API key type: boolean id: type: integer is_active: type: boolean openai_base_url: type: string provider: type: string updated_at: type: string type: object api.LoginRequest: properties: password: type: string username: type: string required: - password - username type: object api.LoginResponse: properties: token: type: string user: properties: id: type: integer username: type: string type: object type: object api.NoteCreateRequest: properties: content: minLength: 1 type: string end_time: minimum: 0 type: number end_word_index: minimum: 0 type: integer quote: minLength: 1 type: string start_time: minimum: 0 type: number start_word_index: description: Use gte=0 so 0 is valid (first word/time); avoid 'required' which fails for zero values minimum: 0 type: integer required: - content - quote type: object api.NoteUpdateRequest: properties: content: minLength: 1 type: string required: - content type: object api.RefreshTokenResponse: properties: token: type: string type: object api.RegisterRequest: properties: confirmPassword: type: string password: minLength: 6 type: string username: maxLength: 50 minLength: 3 type: string required: - confirmPassword - password - username type: object api.RegistrationStatusResponse: properties: registration_enabled: description: Match tests expecting snake_case key type: boolean type: object api.SetUserDefaultProfileRequest: properties: profile_id: type: string required: - profile_id type: object api.SpeakerMappingRequest: properties: custom_name: type: string original_speaker: type: string required: - custom_name - original_speaker type: object api.SpeakerMappingResponse: properties: custom_name: type: string id: type: integer original_speaker: type: string type: object api.SpeakerMappingsUpdateRequest: properties: mappings: items: $ref: '#/definitions/api.SpeakerMappingRequest' type: array required: - mappings type: object api.SummarizeRequest: properties: content: type: string model: type: string template_id: type: string transcription_id: type: string required: - content - model - transcription_id type: object api.SummarySettingsRequest: properties: default_model: minLength: 1 type: string required: - default_model type: object api.SummarySettingsResponse: properties: default_model: type: string type: object api.SummaryTemplateRequest: properties: description: type: string model: minLength: 1 type: string name: minLength: 1 type: string prompt: minLength: 1 type: string required: - model - name - prompt type: object api.UpdateUserSettingsRequest: properties: auto_transcription_enabled: type: boolean type: object api.UserSettingsResponse: properties: auto_transcription_enabled: type: boolean default_profile_id: type: string type: object api.ValidateOpenAIKeyRequest: properties: api_key: type: string type: object api.YouTubeDownloadRequest: properties: title: type: string url: type: string required: - url type: object models.JobStatus: enum: - uploaded - pending - processing - completed - failed type: string x-enum-varnames: - StatusUploaded - StatusPending - StatusProcessing - StatusCompleted - StatusFailed models.MultiTrackFile: properties: created_at: type: string file_name: description: Original filename (used as speaker name) type: string file_path: description: Full path to audio file type: string gain: description: Gain value from .aup file type: number id: type: integer mute: description: Whether track is muted type: boolean offset: description: Offset in seconds from .aup file type: number pan: description: Pan value from .aup file (-1.0 to 1.0) type: number track_index: description: Order of the track type: integer transcription_job: allOf: - $ref: '#/definitions/models.TranscriptionJob' description: Relationships transcription_job_id: type: string updated_at: type: string type: object models.Note: properties: content: description: The user's note content (markdown/plain) type: string created_at: type: string end_time: type: number end_word_index: type: integer id: type: string quote: description: The exact quoted text chosen by the user type: string start_time: description: Time bounds for the selection (in seconds) type: number start_word_index: description: Indexed selection into transcript by word positions type: integer transcription: allOf: - $ref: '#/definitions/models.TranscriptionJob' description: Relationships transcription_id: type: string updated_at: type: string type: object models.Summary: properties: content: type: string created_at: type: string id: type: string model: type: string template_id: type: string transcription: allOf: - $ref: '#/definitions/models.TranscriptionJob' description: Relationships transcription_id: type: string updated_at: type: string type: object models.SummaryTemplate: properties: created_at: type: string description: type: string id: type: string model: type: string name: type: string prompt: type: string updated_at: type: string type: object models.TranscriptionJob: properties: audio_path: type: string aup_file_path: type: string created_at: type: string deleted_at: type: string diarization: type: boolean error_message: type: string id: type: string individual_transcripts: description: JSON-serialized map[string]*string type: string is_multi_track: type: boolean merge_error: type: string merge_status: description: none, pending, processing, completed, failed type: string merged_audio_path: type: string multi_track_files: description: Relationships items: $ref: '#/definitions/models.MultiTrackFile' type: array multi_track_folder: type: string parameters: allOf: - $ref: '#/definitions/models.WhisperXParams' description: WhisperX parameters status: $ref: '#/definitions/models.JobStatus' summary: type: string title: type: string transcript: type: string updated_at: type: string type: object models.TranscriptionJobExecution: properties: actual_parameters: allOf: - $ref: '#/definitions/models.WhisperXParams' description: Parameters used for this execution (may differ from job parameters due to profiles) completed_at: type: string created_at: description: Metadata type: string error_message: type: string id: type: string merge_duration: description: Merge phase duration in milliseconds type: integer merge_end_time: type: string merge_start_time: type: string multi_track_timings: description: Multi-track specific timing data type: string processing_duration: description: Duration in milliseconds type: integer started_at: description: Execution timing type: string status: allOf: - $ref: '#/definitions/models.JobStatus' description: Execution results transcription_job: allOf: - $ref: '#/definitions/models.TranscriptionJob' description: Relationship transcription_job_id: type: string updated_at: type: string type: object models.TranscriptionProfile: properties: created_at: type: string description: type: string id: type: string is_default: type: boolean name: type: string parameters: $ref: '#/definitions/models.WhisperXParams' updated_at: type: string type: object models.WhisperXParams: properties: align_model: description: Alignment settings type: string api_key: description: OpenAI settings type: string attention_context_left: description: NVIDIA Parakeet-specific parameters for long-form audio type: integer attention_context_right: type: integer batch_size: type: integer beam_size: type: integer best_of: type: integer callback_url: description: Webhook settings type: string chunk_size: type: integer compression_ratio_threshold: type: number compute_type: type: string condition_on_previous_text: type: boolean device: description: Device and computation type: string device_index: type: integer diarize: description: Diarization settings type: boolean diarize_model: description: 'Options: ''pyannote'', ''nvidia_sortformer''' type: string fp16: type: boolean hf_token: description: Token and progress type: string highlight_words: type: boolean initial_prompt: type: string interpolate_method: type: string is_multi_track_enabled: description: Multi-track transcription settings type: boolean language: type: string length_penalty: type: number logprob_threshold: type: number max_line_count: type: integer max_line_width: description: Output formatting type: integer max_speakers: type: integer min_speakers: type: integer model: description: Model parameters type: string model_cache_only: type: boolean model_dir: type: string model_family: description: Model family (whisper or nvidia) type: string no_align: type: boolean no_speech_threshold: type: number output_format: description: Output settings type: string patience: type: number print_progress: type: boolean return_char_alignments: type: boolean segment_resolution: type: string speaker_embeddings: type: boolean suppress_numerals: type: boolean suppress_tokens: type: string task: description: Task and language type: string temperature: description: Transcription quality settings type: number temperature_increment_on_fallback: type: number threads: type: integer vad_method: description: VAD (Voice Activity Detection) settings type: string vad_offset: type: number vad_onset: type: number verbose: type: boolean type: object transcription.QuickTranscriptionJob: properties: audio_path: type: string created_at: type: string error_message: type: string expires_at: type: string id: type: string parameters: $ref: '#/definitions/models.WhisperXParams' status: $ref: '#/definitions/models.JobStatus' transcript: type: string type: object host: localhost:8080 info: contact: email: support@swagger.io name: API Support url: http://www.swagger.io/support description: Audio transcription service using WhisperX license: name: MIT url: https://opensource.org/licenses/MIT termsOfService: http://swagger.io/terms/ title: Scriberr API version: "1.0" paths: /api/v1/admin/queue/stats: get: description: Get current queue statistics produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get queue statistics tags: - admin /api/v1/api-keys: get: description: Get all API keys for the current user (without exposing the actual keys) produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.APIKeysWrapper' security: - BearerAuth: [] summary: List API keys tags: - api-keys post: consumes: - application/json description: Create a new API key for external API access parameters: - description: API key creation details in: body name: request required: true schema: $ref: '#/definitions/api.CreateAPIKeyRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/api.CreateAPIKeyResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Create API key tags: - api-keys /api/v1/api-keys/{id}: delete: description: Delete an API key parameters: - description: API Key ID in: path name: id required: true type: integer responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Delete API key tags: - api-keys /api/v1/auth/change-password: post: consumes: - application/json description: Change the current user's password parameters: - description: Password change details in: body name: request required: true schema: $ref: '#/definitions/api.ChangePasswordRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Change user password tags: - auth /api/v1/auth/change-username: post: consumes: - application/json description: Change the current user's username parameters: - description: Username change details in: body name: request required: true schema: $ref: '#/definitions/api.ChangeUsernameRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "409": description: Conflict schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Change username tags: - auth /api/v1/auth/login: post: consumes: - application/json description: Authenticate user and return JWT token parameters: - description: User credentials in: body name: credentials required: true schema: $ref: '#/definitions/api.LoginRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.LoginResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Login tags: - auth /api/v1/auth/logout: post: description: Logout user and invalidate token (client-side action) produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Logout user tags: - auth /api/v1/auth/refresh: post: description: Rotate refresh token and return new access token produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.RefreshTokenResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Refresh access token tags: - auth /api/v1/auth/register: post: consumes: - application/json description: Register the initial admin user (only allowed when no users exist) parameters: - description: Registration details in: body name: request required: true schema: $ref: '#/definitions/api.RegisterRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/api.LoginResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object "409": description: Conflict schema: additionalProperties: type: string type: object summary: Register initial admin user tags: - auth /api/v1/auth/registration-status: get: description: Check if the application requires initial user registration produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.RegistrationStatusResponse' summary: Check registration status tags: - auth /api/v1/chat/models: get: description: Get list of available OpenAI chat models produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.ChatModelsResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get available chat models tags: - chat /api/v1/chat/sessions: post: consumes: - application/json description: Create a new chat session for a transcription parameters: - description: Chat session creation request in: body name: request required: true schema: $ref: '#/definitions/api.ChatCreateRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/api.ChatSessionResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Create a new chat session tags: - chat /api/v1/chat/sessions/{session_id}: delete: description: Delete a chat session and all its messages parameters: - description: Chat Session ID in: path name: session_id required: true type: string produces: - application/json responses: "204": description: No Content "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Delete a chat session tags: - chat get: description: Get a specific chat session with all its messages parameters: - description: Chat Session ID in: path name: session_id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.ChatSessionWithMessages' "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get a chat session with messages tags: - chat /api/v1/chat/sessions/{session_id}/messages: post: consumes: - application/json description: Send a message to a chat session and get streaming response parameters: - description: Chat Session ID in: path name: session_id required: true type: string - description: Message content in: body name: message required: true schema: $ref: '#/definitions/api.ChatMessageRequest' produces: - text/plain responses: "200": description: Streaming response schema: type: string "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Send a message to a chat session tags: - chat /api/v1/chat/sessions/{session_id}/title: put: consumes: - application/json description: Update the title of a chat session parameters: - description: Chat Session ID in: path name: session_id required: true type: string - description: Title update request in: body name: request required: true schema: additionalProperties: type: string type: object produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.ChatSessionResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Update chat session title tags: - chat /api/v1/chat/sessions/{session_id}/title/auto: post: description: Uses the configured LLM to summarize the first exchange into a concise title. Only updates if the current title appears default/user-unset. parameters: - description: Chat Session ID in: path name: session_id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.ChatSessionResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Auto-generate chat session title tags: - chat /api/v1/chat/transcriptions/{transcription_id}/sessions: get: description: Get all chat sessions for a specific transcription parameters: - description: Transcription ID in: path name: transcription_id required: true type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/api.ChatSessionResponse' type: array "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get chat sessions for a transcription tags: - chat /api/v1/config/openai/validate: post: consumes: - application/json description: Validate the provided OpenAI API key and return available Whisper models parameters: - description: API Key in: body name: request required: true schema: $ref: '#/definitions/api.ValidateOpenAIKeyRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Validate OpenAI API Key tags: - config /api/v1/events: get: description: Subscribe to server-sent events produces: - text/event-stream responses: "200": description: stream schema: type: string summary: SSE Events tags: - events /api/v1/llm/config: get: description: Get the current active LLM configuration produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.LLMConfigResponse' "404": description: Not Found schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get LLM configuration tags: - llm post: consumes: - application/json description: Create or update LLM configuration settings parameters: - description: LLM configuration details in: body name: request required: true schema: $ref: '#/definitions/api.LLMConfigRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.LLMConfigResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Create or update LLM configuration tags: - llm /api/v1/notes/{note_id}: delete: description: Delete a note by its ID parameters: - description: Note ID in: path name: note_id required: true type: string produces: - application/json responses: "204": description: No Content schema: type: string "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] summary: Delete a note tags: - notes get: description: Get a note by its ID parameters: - description: Note ID in: path name: note_id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Note' "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get a note tags: - notes put: consumes: - application/json description: Update the content of a note parameters: - description: Note ID in: path name: note_id required: true type: string - description: Note update payload in: body name: request required: true schema: $ref: '#/definitions/api.NoteUpdateRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Note' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Update a note tags: - notes /api/v1/profiles: get: description: Get list of all transcription profiles produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/models.TranscriptionProfile' type: array security: - ApiKeyAuth: [] - BearerAuth: [] summary: List transcription profiles tags: - profiles post: consumes: - application/json description: Create a new transcription profile parameters: - description: Profile data in: body name: profile required: true schema: $ref: '#/definitions/models.TranscriptionProfile' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/models.TranscriptionProfile' "400": description: Bad Request schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Create transcription profile tags: - profiles /api/v1/profiles/{id}: delete: description: Delete a transcription profile parameters: - description: Profile ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Delete transcription profile tags: - profiles get: description: Get a transcription profile by ID parameters: - description: Profile ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionProfile' "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get transcription profile tags: - profiles put: consumes: - application/json description: Update a transcription profile parameters: - description: Profile ID in: path name: id required: true type: string - description: Updated profile data in: body name: profile required: true schema: $ref: '#/definitions/models.TranscriptionProfile' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionProfile' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Update transcription profile tags: - profiles /api/v1/profiles/{id}/set-default: post: description: Mark the specified profile as the default profile parameters: - description: Profile ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Set default transcription profile tags: - profiles /api/v1/summaries: get: description: Get all summarization templates produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/models.SummaryTemplate' type: array security: - ApiKeyAuth: [] - BearerAuth: [] - BearerAuth: [] summary: List summarization templates tags: - summaries post: consumes: - application/json description: Create a new summarization template parameters: - description: Template payload in: body name: request required: true schema: $ref: '#/definitions/api.SummaryTemplateRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/models.SummaryTemplate' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] - BearerAuth: [] summary: Create summarization template tags: - summaries /api/v1/summaries/{id}: delete: description: Delete a summarization template by ID parameters: - description: Template ID in: path name: id required: true type: string produces: - application/json responses: "204": description: No Content schema: type: string "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] summary: Delete summarization template tags: - summaries get: description: Get a summarization template by ID parameters: - description: Template ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.SummaryTemplate' "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] - BearerAuth: [] summary: Get summarization template tags: - summaries put: consumes: - application/json description: Update a summarization template by ID parameters: - description: Template ID in: path name: id required: true type: string - description: Template payload in: body name: request required: true schema: $ref: '#/definitions/api.SummaryTemplateRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.SummaryTemplate' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] - BearerAuth: [] summary: Update summarization template tags: - summaries /api/v1/summaries/settings: get: description: Get global summarization settings produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.SummarySettingsResponse' "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] summary: Get summary settings tags: - summaries post: consumes: - application/json description: Create or update global summarization settings parameters: - description: Settings payload in: body name: request required: true schema: $ref: '#/definitions/api.SummarySettingsRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.SummarySettingsResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] summary: Save summary settings tags: - summaries /api/v1/summarize: post: consumes: - application/json description: Stream an LLM-generated summary for provided content; persists latest summary for the transcription parameters: - description: Summarize request in: body name: request required: true schema: $ref: '#/definitions/api.SummarizeRequest' produces: - text/event-stream responses: "200": description: Event stream schema: type: string "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Summarize content tags: - summarize /api/v1/transcription/{id}: delete: description: |- Delete a transcription job and its associated files Delete a transcription job and its associated files parameters: - description: Job ID in: path name: id required: true type: string - description: Job ID in: path name: id required: true type: string produces: - application/json - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] - ApiKeyAuth: [] - BearerAuth: [] summary: Delete transcription job tags: - transcription - transcription get: description: Get details of a specific transcription job parameters: - description: Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJob' "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get transcription job details tags: - transcription /api/v1/transcription/{id}/audio: get: description: Serve the audio file for a transcription job parameters: - description: Job ID in: path name: id required: true type: string produces: - audio/mpeg - audio/wav - audio/mp4 responses: "200": description: OK schema: type: file "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] summary: Get audio file tags: - transcription /api/v1/transcription/{id}/execution: get: description: Get execution parameters and timing for a transcription job parameters: - description: Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJobExecution' "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get transcription job execution data tags: - transcription /api/v1/transcription/{id}/kill: post: description: Cancel a currently running transcription job parameters: - description: Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Kill running transcription job tags: - transcription /api/v1/transcription/{id}/merge-status: get: description: Get the current merge status for a multi-track job parameters: - description: Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get multi-track merge status tags: - transcription /api/v1/transcription/{id}/notes: get: description: Get all notes attached to a transcription, ordered by time and creation parameters: - description: Transcription ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/models.Note' type: array "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: List notes for a transcription tags: - notes post: consumes: - application/json description: Create a new note attached to the specified transcription parameters: - description: Transcription ID in: path name: id required: true type: string - description: Note create payload in: body name: request required: true schema: $ref: '#/definitions/api.NoteCreateRequest' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/models.Note' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Create a note for a transcription tags: - notes /api/v1/transcription/{id}/speakers: get: description: Retrieves all custom speaker names for a transcription job parameters: - description: Transcription Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/api.SpeakerMappingResponse' type: array "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - BearerAuth: [] - ApiKeyAuth: [] summary: Get speaker mappings for a transcription tags: - transcription post: consumes: - application/json description: Updates or creates custom speaker names for a transcription job parameters: - description: Transcription Job ID in: path name: id required: true type: string - description: Speaker mappings to update in: body name: request required: true schema: $ref: '#/definitions/api.SpeakerMappingsUpdateRequest' produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/api.SpeakerMappingResponse' type: array "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - BearerAuth: [] - ApiKeyAuth: [] summary: Update speaker mappings for a transcription tags: - transcription /api/v1/transcription/{id}/start: post: consumes: - application/json description: Start transcription for an already uploaded audio file parameters: - description: Job ID in: path name: id required: true type: string - description: Transcription parameters in: body name: parameters required: true schema: $ref: '#/definitions/models.WhisperXParams' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJob' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Start transcription for uploaded file tags: - transcription /api/v1/transcription/{id}/status: get: description: Get the current status of a transcription job parameters: - description: Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJob' "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get job status tags: - transcription /api/v1/transcription/{id}/summary: get: description: Get the most recent saved summary for the given transcription parameters: - description: Transcription ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Summary' "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get latest summary for transcription tags: - summarize /api/v1/transcription/{id}/title: put: consumes: - application/json description: Update the title of an audio file / transcription parameters: - description: Job ID in: path name: id required: true type: string - description: Title update request in: body name: request required: true schema: additionalProperties: type: string type: object produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] - BearerAuth: [] summary: Update transcription title tags: - transcription /api/v1/transcription/{id}/track-progress: get: description: Get real-time progress information for individual tracks in a multi-track job parameters: - description: Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get multi-track job progress tags: - transcription /api/v1/transcription/{id}/transcript: get: description: Get the transcript for a completed transcription job parameters: - description: Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get transcript tags: - transcription /api/v1/transcription/list: get: description: |- Get a list of all transcription jobs with optional search and filtering Get a list of all transcription jobs with optional search and filtering parameters: - default: 1 description: Page number in: query name: page type: integer - default: 10 description: Items per page in: query name: limit type: integer - default: 1 description: Page number in: query name: page type: integer - default: 10 description: Items per page in: query name: limit type: integer - description: Sort By in: query name: sort_by type: string - description: Sort Order (asc/desc) in: query name: sort_order type: string - description: Filter by status in: query name: status type: string - description: Search in title and audio filename in: query name: q type: string - description: Filter by updated_at > timestamp (RFC3339) in: query name: updated_after type: string produces: - application/json - application/json responses: "200": description: OK schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: List all transcription records tags: - transcription - transcription /api/v1/transcription/models: get: description: Get list of supported WhisperX models produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get supported models tags: - transcription /api/v1/transcription/quick: post: consumes: - multipart/form-data description: Submit an audio file for temporary transcription (data discarded after 6 hours) parameters: - description: Audio file in: formData name: audio required: true type: file - description: JSON string of transcription parameters in: formData name: parameters type: string - description: Profile name to use for transcription in: formData name: profile_name type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/transcription.QuickTranscriptionJob' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Submit quick transcription job tags: - transcription /api/v1/transcription/quick/{id}: get: description: Get the current status of a quick transcription job parameters: - description: Job ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/transcription.QuickTranscriptionJob' "404": description: Not Found schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Get quick transcription status tags: - transcription /api/v1/transcription/submit: post: consumes: - multipart/form-data description: Submit an audio file for transcription with WhisperX parameters: - description: Audio file in: formData name: audio required: true type: file - description: Job title in: formData name: title type: string - description: Enable speaker diarization in: formData name: diarization type: boolean - default: base description: Whisper model in: formData name: model type: string - description: Language code in: formData name: language type: string - default: 16 description: Batch size in: formData name: batch_size type: integer - default: float16 description: Compute type in: formData name: compute_type type: string - default: auto description: Device in: formData name: device type: string - description: Enable VAD filter in: formData name: vad_filter type: boolean - default: 0.5 description: VAD onset in: formData name: vad_onset type: number - default: 0.363 description: VAD offset in: formData name: vad_offset type: number - description: Minimum speakers for diarization in: formData name: min_speakers type: integer - description: Maximum speakers for diarization in: formData name: max_speakers type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJob' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Submit a transcription job tags: - transcription /api/v1/transcription/upload: post: consumes: - multipart/form-data description: Upload an audio file without starting transcription parameters: - description: Audio file in: formData name: audio required: true type: file - description: Job title in: formData name: title type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJob' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Upload audio file tags: - transcription /api/v1/transcription/upload-multitrack: post: consumes: - multipart/form-data description: Upload multiple audio files for multi-track transcription parameters: - description: Job title in: formData name: title type: string - description: Audio track files in: formData name: files required: true type: file produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJob' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Upload multi-track audio files tags: - transcription /api/v1/transcription/upload-video: post: consumes: - multipart/form-data description: Upload a video file, extract audio from it using ffmpeg, and create a transcription job parameters: - description: Video file in: formData name: video required: true type: file - description: Job title in: formData name: title type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJob' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Upload video file for transcription tags: - transcription /api/v1/transcription/youtube: post: consumes: - application/json description: Download audio from a YouTube video URL and prepare it for transcription parameters: - description: YouTube download request in: body name: request required: true schema: $ref: '#/definitions/api.YouTubeDownloadRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionJob' "400": description: Bad Request schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - ApiKeyAuth: [] - BearerAuth: [] summary: Download audio from YouTube URL tags: - transcription /api/v1/user/default-profile: get: description: Get the default transcription profile for the current user produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TranscriptionProfile' "404": description: Not Found schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get user's default profile tags: - profiles post: consumes: - application/json description: Set the default transcription profile for the current user parameters: - description: Default profile request in: body name: request required: true schema: $ref: '#/definitions/api.SetUserDefaultProfileRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Set user's default profile tags: - profiles /api/v1/user/settings: get: description: Get the current user's settings including auto-transcription preference produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.UserSettingsResponse' "401": description: Unauthorized schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Get user settings tags: - user put: consumes: - application/json description: Update the current user's settings parameters: - description: Settings update request in: body name: request required: true schema: $ref: '#/definitions/api.UpdateUserSettingsRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api.UserSettingsResponse' "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - BearerAuth: [] summary: Update user settings tags: - user /health: get: description: Check if the API is healthy produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object summary: Health check tags: - health /transcription/{id}/logs: get: description: Get the raw transcription logs for a job parameters: - description: Job ID in: path name: id required: true type: string produces: - text/plain responses: "200": description: Log content schema: type: string "404": description: Not Found schema: $ref: '#/definitions/api.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/api.ErrorResponse' summary: Get transcription logs tags: - transcription securityDefinitions: ApiKeyAuth: in: header name: X-API-Key type: apiKey BearerAuth: description: JWT token with Bearer prefix in: header name: Authorization type: apiKey swagger: "2.0"