mirror of
https://github.com/rishikanthc/Scriberr.git
synced 2026-06-28 14:55:46 +00:00
4991 lines
164 KiB
JSON
4991 lines
164 KiB
JSON
{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"description": "Audio transcription service using WhisperX",
|
|
"title": "Scriberr API",
|
|
"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": "1.0"
|
|
},
|
|
"host": "localhost:8080",
|
|
"basePath": "/api/v1",
|
|
"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",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"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",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"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": "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": []
|
|
}
|
|
],
|
|
"description": "Delete a transcription job and its associated files",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"transcription"
|
|
],
|
|
"summary": "Delete 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}/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"
|
|
},
|
|
"include_speaker_info": {
|
|
"type": "boolean"
|
|
},
|
|
"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"
|
|
},
|
|
"include_speaker_info": {
|
|
"type": "boolean"
|
|
},
|
|
"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_new_tokens": {
|
|
"description": "Voxtral settings",
|
|
"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"
|
|
}
|
|
}
|
|
} |