// Package api_docs Code generated by swaggo/swag. DO NOT EDIT package api_docs import "github.com/swaggo/swag" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { "description": "{{escape .Description}}", "title": "{{.Title}}", "termsOfService": "http://swagger.io/terms/", "contact": { "name": "API Support", "url": "http://www.swagger.io/support", "email": "support@swagger.io" }, "license": { "name": "MIT", "url": "https://opensource.org/licenses/MIT" }, "version": "{{.Version}}" }, "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { "/api/v1/admin/queue/stats": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get current queue statistics", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get queue statistics", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/api/v1/api-keys": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Get all API keys for the current user (without exposing the actual keys)", "produces": [ "application/json" ], "tags": [ "api-keys" ], "summary": "List API keys", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.APIKeysWrapper" } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Create a new API key for external API access", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "api-keys" ], "summary": "Create API key", "parameters": [ { "description": "API key creation details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.CreateAPIKeyRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/api.CreateAPIKeyResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/api-keys/{id}": { "delete": { "security": [ { "BearerAuth": [] } ], "description": "Delete an API key", "tags": [ "api-keys" ], "summary": "Delete API key", "parameters": [ { "type": "integer", "description": "API Key ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/change-password": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Change the current user's password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Change user password", "parameters": [ { "description": "Password change details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.ChangePasswordRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/change-username": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Change the current user's username", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Change username", "parameters": [ { "description": "Username change details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.ChangeUsernameRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "409": { "description": "Conflict", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/login": { "post": { "description": "Authenticate user and return JWT token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Login", "parameters": [ { "description": "User credentials", "name": "credentials", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.LoginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.LoginResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/logout": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Logout user and invalidate token (client-side action)", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Logout user", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/refresh": { "post": { "description": "Rotate refresh token and return new access token", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Refresh access token", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.RefreshTokenResponse" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/register": { "post": { "description": "Register the initial admin user (only allowed when no users exist)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Register initial admin user", "parameters": [ { "description": "Registration details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.RegisterRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/api.LoginResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "409": { "description": "Conflict", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/registration-status": { "get": { "description": "Check if the application requires initial user registration", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Check registration status", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.RegistrationStatusResponse" } } } } }, "/api/v1/chat/models": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get list of available OpenAI chat models", "produces": [ "application/json" ], "tags": [ "chat" ], "summary": "Get available chat models", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.ChatModelsResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/chat/sessions": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new chat session for a transcription", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "chat" ], "summary": "Create a new chat session", "parameters": [ { "description": "Chat session creation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.ChatCreateRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/api.ChatSessionResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/chat/sessions/{session_id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a specific chat session with all its messages", "produces": [ "application/json" ], "tags": [ "chat" ], "summary": "Get a chat session with messages", "parameters": [ { "type": "string", "description": "Chat Session ID", "name": "session_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.ChatSessionWithMessages" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a chat session and all its messages", "produces": [ "application/json" ], "tags": [ "chat" ], "summary": "Delete a chat session", "parameters": [ { "type": "string", "description": "Chat Session ID", "name": "session_id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/chat/sessions/{session_id}/messages": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Send a message to a chat session and get streaming response", "consumes": [ "application/json" ], "produces": [ "text/plain" ], "tags": [ "chat" ], "summary": "Send a message to a chat session", "parameters": [ { "type": "string", "description": "Chat Session ID", "name": "session_id", "in": "path", "required": true }, { "description": "Message content", "name": "message", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.ChatMessageRequest" } } ], "responses": { "200": { "description": "Streaming response", "schema": { "type": "string" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/chat/sessions/{session_id}/title": { "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update the title of a chat session", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "chat" ], "summary": "Update chat session title", "parameters": [ { "type": "string", "description": "Chat Session ID", "name": "session_id", "in": "path", "required": true }, { "description": "Title update request", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "string" } } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.ChatSessionResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/chat/sessions/{session_id}/title/auto": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Uses the configured LLM to summarize the first exchange into a concise title. Only updates if the current title appears default/user-unset.", "produces": [ "application/json" ], "tags": [ "chat" ], "summary": "Auto-generate chat session title", "parameters": [ { "type": "string", "description": "Chat Session ID", "name": "session_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.ChatSessionResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/chat/transcriptions/{transcription_id}/sessions": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get all chat sessions for a specific transcription", "produces": [ "application/json" ], "tags": [ "chat" ], "summary": "Get chat sessions for a transcription", "parameters": [ { "type": "string", "description": "Transcription ID", "name": "transcription_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/api.ChatSessionResponse" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/config/openai/validate": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Validate the provided OpenAI API key and return available Whisper models", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "config" ], "summary": "Validate OpenAI API Key", "parameters": [ { "description": "API Key", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.ValidateOpenAIKeyRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/events": { "get": { "description": "Subscribe to server-sent events", "produces": [ "text/event-stream" ], "tags": [ "events" ], "summary": "SSE Events", "responses": { "200": { "description": "stream", "schema": { "type": "string" } } } } }, "/api/v1/llm/config": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Get the current active LLM configuration", "produces": [ "application/json" ], "tags": [ "llm" ], "summary": "Get LLM configuration", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.LLMConfigResponse" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Create or update LLM configuration settings", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "llm" ], "summary": "Create or update LLM configuration", "parameters": [ { "description": "LLM configuration details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.LLMConfigRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.LLMConfigResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/notes/{note_id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a note by its ID", "produces": [ "application/json" ], "tags": [ "notes" ], "summary": "Get a note", "parameters": [ { "type": "string", "description": "Note ID", "name": "note_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Note" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update the content of a note", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "notes" ], "summary": "Update a note", "parameters": [ { "type": "string", "description": "Note ID", "name": "note_id", "in": "path", "required": true }, { "description": "Note update payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.NoteUpdateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Note" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a note by its ID", "produces": [ "application/json" ], "tags": [ "notes" ], "summary": "Delete a note", "parameters": [ { "type": "string", "description": "Note ID", "name": "note_id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/profiles": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get list of all transcription profiles", "produces": [ "application/json" ], "tags": [ "profiles" ], "summary": "List transcription profiles", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.TranscriptionProfile" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new transcription profile", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "profiles" ], "summary": "Create transcription profile", "parameters": [ { "description": "Profile data", "name": "profile", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.TranscriptionProfile" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.TranscriptionProfile" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/profiles/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a transcription profile by ID", "produces": [ "application/json" ], "tags": [ "profiles" ], "summary": "Get transcription profile", "parameters": [ { "type": "string", "description": "Profile ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionProfile" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update a transcription profile", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "profiles" ], "summary": "Update transcription profile", "parameters": [ { "type": "string", "description": "Profile ID", "name": "id", "in": "path", "required": true }, { "description": "Updated profile data", "name": "profile", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.TranscriptionProfile" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionProfile" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a transcription profile", "produces": [ "application/json" ], "tags": [ "profiles" ], "summary": "Delete transcription profile", "parameters": [ { "type": "string", "description": "Profile ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/profiles/{id}/set-default": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Mark the specified profile as the default profile", "produces": [ "application/json" ], "tags": [ "profiles" ], "summary": "Set default transcription profile", "parameters": [ { "type": "string", "description": "Profile ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/summaries": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] }, { "BearerAuth": [] } ], "description": "Get all summarization templates", "produces": [ "application/json" ], "tags": [ "summaries" ], "summary": "List summarization templates", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.SummaryTemplate" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new summarization template", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "summaries" ], "summary": "Create summarization template", "parameters": [ { "description": "Template payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.SummaryTemplateRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.SummaryTemplate" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/summaries/settings": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Get global summarization settings", "produces": [ "application/json" ], "tags": [ "summaries" ], "summary": "Get summary settings", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.SummarySettingsResponse" } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create or update global summarization settings", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "summaries" ], "summary": "Save summary settings", "parameters": [ { "description": "Settings payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.SummarySettingsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.SummarySettingsResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/summaries/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] }, { "BearerAuth": [] } ], "description": "Get a summarization template by ID", "produces": [ "application/json" ], "tags": [ "summaries" ], "summary": "Get summarization template", "parameters": [ { "type": "string", "description": "Template ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.SummaryTemplate" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] }, { "BearerAuth": [] } ], "description": "Update a summarization template by ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "summaries" ], "summary": "Update summarization template", "parameters": [ { "type": "string", "description": "Template ID", "name": "id", "in": "path", "required": true }, { "description": "Template payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.SummaryTemplateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.SummaryTemplate" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a summarization template by ID", "produces": [ "application/json" ], "tags": [ "summaries" ], "summary": "Delete summarization template", "parameters": [ { "type": "string", "description": "Template ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/summarize": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Stream an LLM-generated summary for provided content; persists latest summary for the transcription", "consumes": [ "application/json" ], "produces": [ "text/event-stream" ], "tags": [ "summarize" ], "summary": "Summarize content", "parameters": [ { "description": "Summarize request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.SummarizeRequest" } } ], "responses": { "200": { "description": "Event stream", "schema": { "type": "string" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/list": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a list of all transcription jobs with optional search and filtering\nGet a list of all transcription jobs with optional search and filtering", "produces": [ "application/json", "application/json" ], "tags": [ "transcription", "transcription" ], "summary": "List all transcription records", "parameters": [ { "type": "integer", "default": 1, "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "default": 10, "description": "Items per page", "name": "limit", "in": "query" }, { "type": "integer", "default": 1, "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "default": 10, "description": "Items per page", "name": "limit", "in": "query" }, { "type": "string", "description": "Sort By", "name": "sort_by", "in": "query" }, { "type": "string", "description": "Sort Order (asc/desc)", "name": "sort_order", "in": "query" }, { "type": "string", "description": "Filter by status", "name": "status", "in": "query" }, { "type": "string", "description": "Search in title and audio filename", "name": "q", "in": "query" }, { "type": "string", "description": "Filter by updated_at \u003e timestamp (RFC3339)", "name": "updated_after", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/models": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get list of supported WhisperX models", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get supported models", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/api/v1/transcription/quick": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Submit an audio file for temporary transcription (data discarded after 6 hours)", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Submit quick transcription job", "parameters": [ { "type": "file", "description": "Audio file", "name": "audio", "in": "formData", "required": true }, { "type": "string", "description": "JSON string of transcription parameters", "name": "parameters", "in": "formData" }, { "type": "string", "description": "Profile name to use for transcription", "name": "profile_name", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/transcription.QuickTranscriptionJob" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/quick/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the current status of a quick transcription job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get quick transcription status", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/transcription.QuickTranscriptionJob" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/submit": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Submit an audio file for transcription with WhisperX", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Submit a transcription job", "parameters": [ { "type": "file", "description": "Audio file", "name": "audio", "in": "formData", "required": true }, { "type": "string", "description": "Job title", "name": "title", "in": "formData" }, { "type": "boolean", "description": "Enable speaker diarization", "name": "diarization", "in": "formData" }, { "type": "string", "default": "base", "description": "Whisper model", "name": "model", "in": "formData" }, { "type": "string", "description": "Language code", "name": "language", "in": "formData" }, { "type": "integer", "default": 16, "description": "Batch size", "name": "batch_size", "in": "formData" }, { "type": "string", "default": "float16", "description": "Compute type", "name": "compute_type", "in": "formData" }, { "type": "string", "default": "auto", "description": "Device", "name": "device", "in": "formData" }, { "type": "boolean", "description": "Enable VAD filter", "name": "vad_filter", "in": "formData" }, { "type": "number", "default": 0.5, "description": "VAD onset", "name": "vad_onset", "in": "formData" }, { "type": "number", "default": 0.363, "description": "VAD offset", "name": "vad_offset", "in": "formData" }, { "type": "integer", "description": "Minimum speakers for diarization", "name": "min_speakers", "in": "formData" }, { "type": "integer", "description": "Maximum speakers for diarization", "name": "max_speakers", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJob" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/upload": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Upload an audio file without starting transcription", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Upload audio file", "parameters": [ { "type": "file", "description": "Audio file", "name": "audio", "in": "formData", "required": true }, { "type": "string", "description": "Job title", "name": "title", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJob" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/upload-multitrack": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Upload multiple audio files for multi-track transcription", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Upload multi-track audio files", "parameters": [ { "type": "string", "description": "Job title", "name": "title", "in": "formData" }, { "type": "file", "description": "Audio track files", "name": "files", "in": "formData", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJob" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/upload-video": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Upload a video file, extract audio from it using ffmpeg, and create a transcription job", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Upload video file for transcription", "parameters": [ { "type": "file", "description": "Video file", "name": "video", "in": "formData", "required": true }, { "type": "string", "description": "Job title", "name": "title", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJob" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/youtube": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Download audio from a YouTube video URL and prepare it for transcription", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Download audio from YouTube URL", "parameters": [ { "description": "YouTube download request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.YouTubeDownloadRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJob" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get details of a specific transcription job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get transcription job details", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJob" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] }, { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a transcription job and its associated files\nDelete a transcription job and its associated files", "produces": [ "application/json", "application/json" ], "tags": [ "transcription", "transcription" ], "summary": "Delete transcription job", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/audio": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Serve the audio file for a transcription job", "produces": [ "audio/mpeg", "audio/wav", "audio/mp4" ], "tags": [ "transcription" ], "summary": "Get audio file", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "file" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/execution": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get execution parameters and timing for a transcription job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get transcription job execution data", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJobExecution" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/kill": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Cancel a currently running transcription job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Kill running transcription job", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/merge-status": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the current merge status for a multi-track job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get multi-track merge status", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/notes": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get all notes attached to a transcription, ordered by time and creation", "produces": [ "application/json" ], "tags": [ "notes" ], "summary": "List notes for a transcription", "parameters": [ { "type": "string", "description": "Transcription ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Note" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new note attached to the specified transcription", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "notes" ], "summary": "Create a note for a transcription", "parameters": [ { "type": "string", "description": "Transcription ID", "name": "id", "in": "path", "required": true }, { "description": "Note create payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.NoteCreateRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Note" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/speakers": { "get": { "security": [ { "BearerAuth": [] }, { "ApiKeyAuth": [] } ], "description": "Retrieves all custom speaker names for a transcription job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get speaker mappings for a transcription", "parameters": [ { "type": "string", "description": "Transcription Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/api.SpeakerMappingResponse" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "BearerAuth": [] }, { "ApiKeyAuth": [] } ], "description": "Updates or creates custom speaker names for a transcription job", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Update speaker mappings for a transcription", "parameters": [ { "type": "string", "description": "Transcription Job ID", "name": "id", "in": "path", "required": true }, { "description": "Speaker mappings to update", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.SpeakerMappingsUpdateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/api.SpeakerMappingResponse" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/start": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Start transcription for an already uploaded audio file", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Start transcription for uploaded file", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true }, { "description": "Transcription parameters", "name": "parameters", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.WhisperXParams" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJob" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/status": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the current status of a transcription job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get job status", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionJob" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/summary": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the most recent saved summary for the given transcription", "produces": [ "application/json" ], "tags": [ "summarize" ], "summary": "Get latest summary for transcription", "parameters": [ { "type": "string", "description": "Transcription ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Summary" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/title": { "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] }, { "BearerAuth": [] } ], "description": "Update the title of an audio file / transcription", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Update transcription title", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true }, { "description": "Title update request", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "string" } } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/track-progress": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get real-time progress information for individual tracks in a multi-track job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get multi-track job progress", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/transcription/{id}/transcript": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the transcript for a completed transcription job", "produces": [ "application/json" ], "tags": [ "transcription" ], "summary": "Get transcript", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/user/default-profile": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Get the default transcription profile for the current user", "produces": [ "application/json" ], "tags": [ "profiles" ], "summary": "Get user's default profile", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TranscriptionProfile" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Set the default transcription profile for the current user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "profiles" ], "summary": "Set user's default profile", "parameters": [ { "description": "Default profile request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.SetUserDefaultProfileRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/user/settings": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Get the current user's settings including auto-transcription preference", "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Get user settings", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.UserSettingsResponse" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "BearerAuth": [] } ], "description": "Update the current user's settings", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Update user settings", "parameters": [ { "description": "Settings update request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.UpdateUserSettingsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.UserSettingsResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/health": { "get": { "description": "Check if the API is healthy", "produces": [ "application/json" ], "tags": [ "health" ], "summary": "Health check", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/transcription/{id}/logs": { "get": { "description": "Get the raw transcription logs for a job", "produces": [ "text/plain" ], "tags": [ "transcription" ], "summary": "Get transcription logs", "parameters": [ { "type": "string", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "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" } } } } } }, "definitions": { "api.APIKeyListResponse": { "type": "object", "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" } } }, "api.APIKeysWrapper": { "type": "object", "properties": { "api_keys": { "type": "array", "items": { "$ref": "#/definitions/api.APIKeyListResponse" } } } }, "api.ChangePasswordRequest": { "type": "object", "required": [ "confirmPassword", "currentPassword", "newPassword" ], "properties": { "confirmPassword": { "type": "string" }, "currentPassword": { "type": "string" }, "newPassword": { "type": "string", "minLength": 6 } } }, "api.ChangeUsernameRequest": { "type": "object", "required": [ "newUsername", "password" ], "properties": { "newUsername": { "type": "string", "maxLength": 50, "minLength": 3 }, "password": { "type": "string" } } }, "api.ChatCreateRequest": { "type": "object", "required": [ "model", "transcription_id" ], "properties": { "model": { "type": "string" }, "title": { "type": "string" }, "transcription_id": { "type": "string" } } }, "api.ChatMessageRequest": { "type": "object", "required": [ "content" ], "properties": { "content": { "type": "string" } } }, "api.ChatMessageResponse": { "type": "object", "properties": { "content": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "integer" }, "role": { "type": "string" } } }, "api.ChatModelsResponse": { "type": "object", "properties": { "models": { "type": "array", "items": { "type": "string" } } } }, "api.ChatSessionResponse": { "type": "object", "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" } } }, "api.ChatSessionWithMessages": { "type": "object", "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": { "type": "array", "items": { "$ref": "#/definitions/api.ChatMessageResponse" } }, "model": { "type": "string" }, "provider": { "type": "string" }, "title": { "type": "string" }, "transcription_id": { "type": "string" }, "updated_at": { "type": "string" } } }, "api.CreateAPIKeyRequest": { "type": "object", "required": [ "name" ], "properties": { "description": { "type": "string" }, "name": { "type": "string", "maxLength": 100, "minLength": 1 } } }, "api.CreateAPIKeyResponse": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "integer" }, "key": { "type": "string" }, "name": { "type": "string" } } }, "api.ErrorResponse": { "type": "object", "properties": { "error": { "type": "string" } } }, "api.LLMConfigRequest": { "type": "object", "required": [ "provider" ], "properties": { "api_key": { "type": "string" }, "base_url": { "type": "string" }, "is_active": { "type": "boolean" }, "openai_base_url": { "type": "string" }, "provider": { "type": "string", "enum": [ "ollama", "openai" ] } } }, "api.LLMConfigResponse": { "type": "object", "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" } } }, "api.LoginRequest": { "type": "object", "required": [ "password", "username" ], "properties": { "password": { "type": "string" }, "username": { "type": "string" } } }, "api.LoginResponse": { "type": "object", "properties": { "token": { "type": "string" }, "user": { "type": "object", "properties": { "id": { "type": "integer" }, "username": { "type": "string" } } } } }, "api.NoteCreateRequest": { "type": "object", "required": [ "content", "quote" ], "properties": { "content": { "type": "string", "minLength": 1 }, "end_time": { "type": "number", "minimum": 0 }, "end_word_index": { "type": "integer", "minimum": 0 }, "quote": { "type": "string", "minLength": 1 }, "start_time": { "type": "number", "minimum": 0 }, "start_word_index": { "description": "Use gte=0 so 0 is valid (first word/time); avoid 'required' which fails for zero values", "type": "integer", "minimum": 0 } } }, "api.NoteUpdateRequest": { "type": "object", "required": [ "content" ], "properties": { "content": { "type": "string", "minLength": 1 } } }, "api.RefreshTokenResponse": { "type": "object", "properties": { "token": { "type": "string" } } }, "api.RegisterRequest": { "type": "object", "required": [ "confirmPassword", "password", "username" ], "properties": { "confirmPassword": { "type": "string" }, "password": { "type": "string", "minLength": 6 }, "username": { "type": "string", "maxLength": 50, "minLength": 3 } } }, "api.RegistrationStatusResponse": { "type": "object", "properties": { "registration_enabled": { "description": "Match tests expecting snake_case key", "type": "boolean" } } }, "api.SetUserDefaultProfileRequest": { "type": "object", "required": [ "profile_id" ], "properties": { "profile_id": { "type": "string" } } }, "api.SpeakerMappingRequest": { "type": "object", "required": [ "custom_name", "original_speaker" ], "properties": { "custom_name": { "type": "string" }, "original_speaker": { "type": "string" } } }, "api.SpeakerMappingResponse": { "type": "object", "properties": { "custom_name": { "type": "string" }, "id": { "type": "integer" }, "original_speaker": { "type": "string" } } }, "api.SpeakerMappingsUpdateRequest": { "type": "object", "required": [ "mappings" ], "properties": { "mappings": { "type": "array", "items": { "$ref": "#/definitions/api.SpeakerMappingRequest" } } } }, "api.SummarizeRequest": { "type": "object", "required": [ "content", "model", "transcription_id" ], "properties": { "content": { "type": "string" }, "model": { "type": "string" }, "template_id": { "type": "string" }, "transcription_id": { "type": "string" } } }, "api.SummarySettingsRequest": { "type": "object", "required": [ "default_model" ], "properties": { "default_model": { "type": "string", "minLength": 1 } } }, "api.SummarySettingsResponse": { "type": "object", "properties": { "default_model": { "type": "string" } } }, "api.SummaryTemplateRequest": { "type": "object", "required": [ "model", "name", "prompt" ], "properties": { "description": { "type": "string" }, "model": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "prompt": { "type": "string", "minLength": 1 } } }, "api.UpdateUserSettingsRequest": { "type": "object", "properties": { "auto_transcription_enabled": { "type": "boolean" } } }, "api.UserSettingsResponse": { "type": "object", "properties": { "auto_transcription_enabled": { "type": "boolean" }, "default_profile_id": { "type": "string" } } }, "api.ValidateOpenAIKeyRequest": { "type": "object", "properties": { "api_key": { "type": "string" } } }, "api.YouTubeDownloadRequest": { "type": "object", "required": [ "url" ], "properties": { "title": { "type": "string" }, "url": { "type": "string" } } }, "models.JobStatus": { "type": "string", "enum": [ "uploaded", "pending", "processing", "completed", "failed" ], "x-enum-varnames": [ "StatusUploaded", "StatusPending", "StatusProcessing", "StatusCompleted", "StatusFailed" ] }, "models.MultiTrackFile": { "type": "object", "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": { "description": "Relationships", "allOf": [ { "$ref": "#/definitions/models.TranscriptionJob" } ] }, "transcription_job_id": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Note": { "type": "object", "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": { "description": "Relationships", "allOf": [ { "$ref": "#/definitions/models.TranscriptionJob" } ] }, "transcription_id": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Summary": { "type": "object", "properties": { "content": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "model": { "type": "string" }, "template_id": { "type": "string" }, "transcription": { "description": "Relationships", "allOf": [ { "$ref": "#/definitions/models.TranscriptionJob" } ] }, "transcription_id": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.SummaryTemplate": { "type": "object", "properties": { "created_at": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "model": { "type": "string" }, "name": { "type": "string" }, "prompt": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.TranscriptionJob": { "type": "object", "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", "type": "array", "items": { "$ref": "#/definitions/models.MultiTrackFile" } }, "multi_track_folder": { "type": "string" }, "parameters": { "description": "WhisperX parameters", "allOf": [ { "$ref": "#/definitions/models.WhisperXParams" } ] }, "status": { "$ref": "#/definitions/models.JobStatus" }, "summary": { "type": "string" }, "title": { "type": "string" }, "transcript": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.TranscriptionJobExecution": { "type": "object", "properties": { "actual_parameters": { "description": "Parameters used for this execution (may differ from job parameters due to profiles)", "allOf": [ { "$ref": "#/definitions/models.WhisperXParams" } ] }, "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": { "description": "Execution results", "allOf": [ { "$ref": "#/definitions/models.JobStatus" } ] }, "transcription_job": { "description": "Relationship", "allOf": [ { "$ref": "#/definitions/models.TranscriptionJob" } ] }, "transcription_job_id": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.TranscriptionProfile": { "type": "object", "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" } } }, "models.WhisperXParams": { "type": "object", "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" } } }, "transcription.QuickTranscriptionJob": { "type": "object", "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" } } } }, "securityDefinitions": { "ApiKeyAuth": { "type": "apiKey", "name": "X-API-Key", "in": "header" }, "BearerAuth": { "description": "JWT token with Bearer prefix", "type": "apiKey", "name": "Authorization", "in": "header" } } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ Version: "1.0", Host: "localhost:8080", BasePath: "/api/v1", Schemes: []string{}, Title: "Scriberr API", Description: "Audio transcription service using WhisperX", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, LeftDelim: "{{", RightDelim: "}}", } func init() { swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) }