Files
Scriberr/api-docs/swagger.yaml
rishikanthc 3e5cb9bdb3 fixes CI/CD
2025-08-29 11:46:26 -07:00

2425 lines
57 KiB
YAML

basePath: /api/v1
definitions:
api.APIKeyListResponse:
properties:
created_at:
type: string
description:
type: string
id:
type: integer
is_active:
type: boolean
key_preview:
type: string
last_used:
type: string
name:
type: string
updated_at:
type: string
type: object
api.ChangePasswordRequest:
properties:
confirmPassword:
type: string
currentPassword:
type: string
newPassword:
minLength: 6
type: string
required:
- confirmPassword
- currentPassword
- newPassword
type: object
api.ChangeUsernameRequest:
properties:
newUsername:
maxLength: 50
minLength: 3
type: string
password:
type: string
required:
- newUsername
- password
type: object
api.ChatCreateRequest:
properties:
model:
type: string
title:
type: string
transcription_id:
type: string
required:
- model
- transcription_id
type: object
api.ChatMessageRequest:
properties:
content:
type: string
required:
- content
type: object
api.ChatMessageResponse:
properties:
content:
type: string
created_at:
type: string
id:
type: integer
role:
type: string
type: object
api.ChatModelsResponse:
properties:
models:
items:
type: string
type: array
type: object
api.ChatSessionResponse:
properties:
created_at:
type: string
id:
type: string
is_active:
type: boolean
last_activity_at:
type: string
last_message:
$ref: '#/definitions/api.ChatMessageResponse'
message_count:
type: integer
model:
type: string
provider:
type: string
title:
type: string
transcription_id:
type: string
updated_at:
type: string
type: object
api.ChatSessionWithMessages:
properties:
created_at:
type: string
id:
type: string
is_active:
type: boolean
last_activity_at:
type: string
last_message:
$ref: '#/definitions/api.ChatMessageResponse'
message_count:
type: integer
messages:
items:
$ref: '#/definitions/api.ChatMessageResponse'
type: array
model:
type: string
provider:
type: string
title:
type: string
transcription_id:
type: string
updated_at:
type: string
type: object
api.CreateAPIKeyRequest:
properties:
description:
type: string
name:
maxLength: 100
minLength: 1
type: string
required:
- name
type: object
api.CreateAPIKeyResponse:
properties:
description:
type: string
id:
type: integer
key:
type: string
name:
type: string
type: object
api.LLMConfigRequest:
properties:
api_key:
type: string
base_url:
type: string
is_active:
type: boolean
provider:
enum:
- ollama
- openai
type: string
required:
- provider
type: object
api.LLMConfigResponse:
properties:
base_url:
type: string
created_at:
type: string
has_api_key:
description: Don't return actual API key
type: boolean
id:
type: integer
is_active:
type: boolean
provider:
type: string
updated_at:
type: string
type: object
api.LoginRequest:
properties:
password:
type: string
username:
type: string
required:
- password
- username
type: object
api.LoginResponse:
properties:
token:
type: string
user:
properties:
id:
type: integer
username:
type: string
type: object
type: object
api.NoteCreateRequest:
properties:
content:
minLength: 1
type: string
end_time:
minimum: 0
type: number
end_word_index:
minimum: 0
type: integer
quote:
minLength: 1
type: string
start_time:
minimum: 0
type: number
start_word_index:
description: Use gte=0 so 0 is valid (first word/time); avoid 'required' which
fails for zero values
minimum: 0
type: integer
required:
- content
- quote
type: object
api.NoteUpdateRequest:
properties:
content:
minLength: 1
type: string
required:
- content
type: object
api.RegisterRequest:
properties:
confirmPassword:
type: string
password:
minLength: 6
type: string
username:
maxLength: 50
minLength: 3
type: string
required:
- confirmPassword
- password
- username
type: object
api.RegistrationStatusResponse:
properties:
requiresRegistration:
type: boolean
type: object
api.SummarizeRequest:
properties:
content:
type: string
model:
type: string
template_id:
type: string
transcription_id:
type: string
required:
- content
- model
- transcription_id
type: object
api.SummarySettingsRequest:
properties:
default_model:
minLength: 1
type: string
required:
- default_model
type: object
api.SummarySettingsResponse:
properties:
default_model:
type: string
type: object
api.SummaryTemplateRequest:
properties:
description:
type: string
model:
minLength: 1
type: string
name:
minLength: 1
type: string
prompt:
minLength: 1
type: string
required:
- model
- name
- prompt
type: object
models.JobStatus:
enum:
- uploaded
- pending
- processing
- completed
- failed
type: string
x-enum-varnames:
- StatusUploaded
- StatusPending
- StatusProcessing
- StatusCompleted
- StatusFailed
models.Note:
properties:
content:
description: The user's note content (markdown/plain)
type: string
created_at:
type: string
end_time:
type: number
end_word_index:
type: integer
id:
type: string
quote:
description: The exact quoted text chosen by the user
type: string
start_time:
description: Time bounds for the selection (in seconds)
type: number
start_word_index:
description: Indexed selection into transcript by word positions
type: integer
transcription_id:
type: string
updated_at:
type: string
type: object
models.Summary:
properties:
content:
type: string
created_at:
type: string
id:
type: string
model:
type: string
template_id:
type: string
transcription_id:
type: string
updated_at:
type: string
type: object
models.SummaryTemplate:
properties:
created_at:
type: string
description:
type: string
id:
type: string
model:
type: string
name:
type: string
prompt:
type: string
updated_at:
type: string
type: object
models.TranscriptionJob:
properties:
audio_path:
type: string
created_at:
type: string
diarization:
type: boolean
error_message:
type: string
id:
type: string
parameters:
allOf:
- $ref: '#/definitions/models.WhisperXParams'
description: WhisperX parameters
status:
$ref: '#/definitions/models.JobStatus'
summary:
type: string
title:
type: string
transcript:
type: string
updated_at:
type: string
type: object
models.TranscriptionProfile:
properties:
created_at:
type: string
description:
type: string
id:
type: string
is_default:
type: boolean
name:
type: string
parameters:
$ref: '#/definitions/models.WhisperXParams'
updated_at:
type: string
type: object
models.WhisperXParams:
properties:
align_model:
description: Alignment settings
type: string
batch_size:
type: integer
beam_size:
type: integer
best_of:
type: integer
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:
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
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
no_align:
type: boolean
no_speech_threshold:
type: number
output_format:
description: Output settings
type: string
patience:
type: number
print_progress:
type: boolean
return_char_alignments:
type: boolean
segment_resolution:
type: string
speaker_embeddings:
type: boolean
suppress_numerals:
type: boolean
suppress_tokens:
type: string
task:
description: Task and language
type: string
temperature:
description: Transcription quality settings
type: number
temperature_increment_on_fallback:
type: number
threads:
type: integer
vad_method:
description: VAD (Voice Activity Detection) settings
type: string
vad_offset:
type: number
vad_onset:
type: number
verbose:
type: boolean
type: object
transcription.QuickTranscriptionJob:
properties:
audio_path:
type: string
created_at:
type: string
error_message:
type: string
expires_at:
type: string
id:
type: string
parameters:
$ref: '#/definitions/models.WhisperXParams'
status:
$ref: '#/definitions/models.JobStatus'
transcript:
type: string
type: object
host: localhost:8080
info:
contact:
email: support@swagger.io
name: API Support
url: http://www.swagger.io/support
description: Audio transcription service using WhisperX
license:
name: MIT
url: https://opensource.org/licenses/MIT
termsOfService: http://swagger.io/terms/
title: Scriberr API
version: "1.0"
paths:
/api/v1/admin/queue/stats:
get:
description: Get current queue statistics
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get queue statistics
tags:
- admin
/api/v1/api-keys:
get:
description: Get all API keys for the current user (without exposing the actual
keys)
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/api.APIKeyListResponse'
type: array
security:
- BearerAuth: []
summary: List API keys
tags:
- api-keys
post:
consumes:
- application/json
description: Create a new API key for external API access
parameters:
- description: API key creation details
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.CreateAPIKeyRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/api.CreateAPIKeyResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Create API key
tags:
- api-keys
/api/v1/api-keys/{id}:
delete:
description: Delete an API key
parameters:
- description: API Key ID
in: path
name: id
required: true
type: integer
responses:
"200":
description: OK
schema:
additionalProperties:
type: string
type: object
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Delete API key
tags:
- api-keys
/api/v1/auth/change-password:
post:
consumes:
- application/json
description: Change the current user's password
parameters:
- description: Password change details
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.ChangePasswordRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties:
type: string
type: object
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"401":
description: Unauthorized
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Change user password
tags:
- auth
/api/v1/auth/change-username:
post:
consumes:
- application/json
description: Change the current user's username
parameters:
- description: Username change details
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.ChangeUsernameRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties:
type: string
type: object
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"401":
description: Unauthorized
schema:
additionalProperties:
type: string
type: object
"409":
description: Conflict
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Change username
tags:
- auth
/api/v1/auth/login:
post:
consumes:
- application/json
description: Authenticate user and return JWT token
parameters:
- description: User credentials
in: body
name: credentials
required: true
schema:
$ref: '#/definitions/api.LoginRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.LoginResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"401":
description: Unauthorized
schema:
additionalProperties:
type: string
type: object
summary: Login
tags:
- auth
/api/v1/auth/logout:
post:
description: Logout user and invalidate token (client-side action)
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Logout user
tags:
- auth
/api/v1/auth/register:
post:
consumes:
- application/json
description: Register the initial admin user (only allowed when no users exist)
parameters:
- description: Registration details
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.RegisterRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/api.LoginResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"409":
description: Conflict
schema:
additionalProperties:
type: string
type: object
summary: Register initial admin user
tags:
- auth
/api/v1/auth/registration-status:
get:
description: Check if the application requires initial user registration
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.RegistrationStatusResponse'
summary: Check registration status
tags:
- auth
/api/v1/chat/models:
get:
description: Get list of available OpenAI chat models
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.ChatModelsResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get available chat models
tags:
- chat
/api/v1/chat/sessions:
post:
consumes:
- application/json
description: Create a new chat session for a transcription
parameters:
- description: Chat session creation request
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.ChatCreateRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/api.ChatSessionResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Create a new chat session
tags:
- chat
/api/v1/chat/sessions/{session_id}:
delete:
description: Delete a chat session and all its messages
parameters:
- description: Chat Session ID
in: path
name: session_id
required: true
type: string
produces:
- application/json
responses:
"204":
description: No Content
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Delete a chat session
tags:
- chat
get:
description: Get a specific chat session with all its messages
parameters:
- description: Chat Session ID
in: path
name: session_id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.ChatSessionWithMessages'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get a chat session with messages
tags:
- chat
/api/v1/chat/sessions/{session_id}/messages:
post:
consumes:
- application/json
description: Send a message to a chat session and get streaming response
parameters:
- description: Chat Session ID
in: path
name: session_id
required: true
type: string
- description: Message content
in: body
name: message
required: true
schema:
$ref: '#/definitions/api.ChatMessageRequest'
produces:
- text/plain
responses:
"200":
description: Streaming response
schema:
type: string
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Send a message to a chat session
tags:
- chat
/api/v1/chat/sessions/{session_id}/title:
put:
consumes:
- application/json
description: Update the title of a chat session
parameters:
- description: Chat Session ID
in: path
name: session_id
required: true
type: string
- description: Title update request
in: body
name: request
required: true
schema:
additionalProperties:
type: string
type: object
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.ChatSessionResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Update chat session title
tags:
- chat
/api/v1/chat/sessions/{session_id}/title/auto:
post:
description: Uses the configured LLM to summarize the first exchange into a
concise title. Only updates if the current title appears default/user-unset.
parameters:
- description: Chat Session ID
in: path
name: session_id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.ChatSessionResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Auto-generate chat session title
tags:
- chat
/api/v1/chat/transcriptions/{transcription_id}/sessions:
get:
description: Get all chat sessions for a specific transcription
parameters:
- description: Transcription ID
in: path
name: transcription_id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/api.ChatSessionResponse'
type: array
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get chat sessions for a transcription
tags:
- chat
/api/v1/llm/config:
get:
description: Get the current active LLM configuration
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.LLMConfigResponse'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Get LLM configuration
tags:
- llm
post:
consumes:
- application/json
description: Create or update LLM configuration settings
parameters:
- description: LLM configuration details
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.LLMConfigRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.LLMConfigResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
security:
- BearerAuth: []
summary: Create or update LLM configuration
tags:
- llm
/api/v1/notes/{note_id}:
delete:
description: Delete a note by its ID
parameters:
- description: Note ID
in: path
name: note_id
required: true
type: string
produces:
- application/json
responses:
"204":
description: No Content
schema:
type: string
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
summary: Delete a note
tags:
- notes
get:
description: Get a note by its ID
parameters:
- description: Note ID
in: path
name: note_id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Note'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get a note
tags:
- notes
put:
consumes:
- application/json
description: Update the content of a note
parameters:
- description: Note ID
in: path
name: note_id
required: true
type: string
- description: Note update payload
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.NoteUpdateRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Note'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Update a note
tags:
- notes
/api/v1/profiles:
get:
description: Get list of all transcription profiles
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/models.TranscriptionProfile'
type: array
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: List transcription profiles
tags:
- profiles
post:
consumes:
- application/json
description: Create a new transcription profile
parameters:
- description: Profile data
in: body
name: profile
required: true
schema:
$ref: '#/definitions/models.TranscriptionProfile'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/models.TranscriptionProfile'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Create transcription profile
tags:
- profiles
/api/v1/profiles/{id}:
delete:
description: Delete a transcription profile
parameters:
- description: Profile ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Delete transcription profile
tags:
- profiles
get:
description: Get a transcription profile by ID
parameters:
- description: Profile ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.TranscriptionProfile'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get transcription profile
tags:
- profiles
put:
consumes:
- application/json
description: Update a transcription profile
parameters:
- description: Profile ID
in: path
name: id
required: true
type: string
- description: Updated profile data
in: body
name: profile
required: true
schema:
$ref: '#/definitions/models.TranscriptionProfile'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.TranscriptionProfile'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Update transcription profile
tags:
- profiles
/api/v1/profiles/{id}/set-default:
post:
description: Mark the specified profile as the default profile
parameters:
- description: Profile ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Set default transcription profile
tags:
- profiles
/api/v1/summaries:
get:
description: Get all summarization templates
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/models.SummaryTemplate'
type: array
security:
- ApiKeyAuth: []
- BearerAuth: []
- BearerAuth: []
summary: List summarization templates
tags:
- summaries
post:
consumes:
- application/json
description: Create a new summarization template
parameters:
- description: Template payload
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.SummaryTemplateRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/models.SummaryTemplate'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
- BearerAuth: []
summary: Create summarization template
tags:
- summaries
/api/v1/summaries/{id}:
delete:
description: Delete a summarization template by ID
parameters:
- description: Template ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"204":
description: No Content
schema:
type: string
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
summary: Delete summarization template
tags:
- summaries
get:
description: Get a summarization template by ID
parameters:
- description: Template ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.SummaryTemplate'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
- BearerAuth: []
summary: Get summarization template
tags:
- summaries
put:
consumes:
- application/json
description: Update a summarization template by ID
parameters:
- description: Template ID
in: path
name: id
required: true
type: string
- description: Template payload
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.SummaryTemplateRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.SummaryTemplate'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
- BearerAuth: []
summary: Update summarization template
tags:
- summaries
/api/v1/summaries/settings:
get:
description: Get global summarization settings
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.SummarySettingsResponse'
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
summary: Get summary settings
tags:
- summaries
post:
consumes:
- application/json
description: Create or update global summarization settings
parameters:
- description: Settings payload
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.SummarySettingsRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.SummarySettingsResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
summary: Save summary settings
tags:
- summaries
/api/v1/summarize:
post:
consumes:
- application/json
description: Stream an LLM-generated summary for provided content; persists
latest summary for the transcription
parameters:
- description: Summarize request
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.SummarizeRequest'
produces:
- text/event-stream
responses:
"200":
description: Event stream
schema:
type: string
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Summarize content
tags:
- summarize
/api/v1/transcription/{id}:
delete:
description: Delete a transcription job and its associated files
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties:
type: string
type: object
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Delete transcription job
tags:
- transcription
get:
description: Get a specific transcription record by its ID
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.TranscriptionJob'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
- BearerAuth: []
summary: Get transcription record by ID
tags:
- transcription
/api/v1/transcription/{id}/audio:
get:
description: Serve the audio file for a transcription job
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
produces:
- audio/mpeg
- audio/wav
- audio/mp4
responses:
"200":
description: OK
schema:
type: file
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
summary: Get audio file
tags:
- transcription
/api/v1/transcription/{id}/kill:
post:
description: Cancel a currently running transcription job
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties:
type: string
type: object
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Kill running transcription job
tags:
- transcription
/api/v1/transcription/{id}/notes:
get:
description: Get all notes attached to a transcription, ordered by time and
creation
parameters:
- description: Transcription ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/models.Note'
type: array
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: List notes for a transcription
tags:
- notes
post:
consumes:
- application/json
description: Create a new note attached to the specified transcription
parameters:
- description: Transcription ID
in: path
name: id
required: true
type: string
- description: Note create payload
in: body
name: request
required: true
schema:
$ref: '#/definitions/api.NoteCreateRequest'
produces:
- application/json
responses:
"201":
description: Created
schema:
$ref: '#/definitions/models.Note'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Create a note for a transcription
tags:
- notes
/api/v1/transcription/{id}/start:
post:
consumes:
- application/json
description: Start transcription for an already uploaded audio file
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
- description: Transcription parameters
in: body
name: parameters
required: true
schema:
$ref: '#/definitions/models.WhisperXParams'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.TranscriptionJob'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Start transcription for uploaded file
tags:
- transcription
/api/v1/transcription/{id}/status:
get:
description: Get the current status of a transcription job
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.TranscriptionJob'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get job status
tags:
- transcription
/api/v1/transcription/{id}/summary:
get:
description: Get the most recent saved summary for the given transcription
parameters:
- description: Transcription ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Summary'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get latest summary for transcription
tags:
- summarize
/api/v1/transcription/{id}/title:
put:
consumes:
- application/json
description: Update the title of an audio file / transcription
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
- description: Title update request
in: body
name: request
required: true
schema:
additionalProperties:
type: string
type: object
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Update transcription title
tags:
- transcription
/api/v1/transcription/{id}/transcript:
get:
description: Get the transcript for a completed transcription job
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get transcript
tags:
- transcription
/api/v1/transcription/list:
get:
description: Get a list of all transcription jobs with optional search and filtering
parameters:
- default: 1
description: Page number
in: query
name: page
type: integer
- default: 10
description: Items per page
in: query
name: limit
type: integer
- description: Filter by status
in: query
name: status
type: string
- description: Search in title and audio filename
in: query
name: q
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: List all transcription records
tags:
- transcription
/api/v1/transcription/models:
get:
description: Get list of supported WhisperX models
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get supported models
tags:
- transcription
/api/v1/transcription/quick:
post:
consumes:
- multipart/form-data
description: Submit an audio file for temporary transcription (data discarded
after 6 hours)
parameters:
- description: Audio file
in: formData
name: audio
required: true
type: file
- description: JSON string of transcription parameters
in: formData
name: parameters
type: string
- description: Profile name to use for transcription
in: formData
name: profile_name
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/transcription.QuickTranscriptionJob'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Submit quick transcription job
tags:
- transcription
/api/v1/transcription/quick/{id}:
get:
description: Get the current status of a quick transcription job
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/transcription.QuickTranscriptionJob'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get quick transcription status
tags:
- transcription
/api/v1/transcription/submit:
post:
consumes:
- multipart/form-data
description: Submit an audio file for transcription with WhisperX
parameters:
- description: Audio file
in: formData
name: audio
required: true
type: file
- description: Job title
in: formData
name: title
type: string
- description: Enable speaker diarization
in: formData
name: diarization
type: boolean
- default: base
description: Whisper model
in: formData
name: model
type: string
- description: Language code
in: formData
name: language
type: string
- default: 16
description: Batch size
in: formData
name: batch_size
type: integer
- default: float16
description: Compute type
in: formData
name: compute_type
type: string
- default: auto
description: Device
in: formData
name: device
type: string
- description: Enable VAD filter
in: formData
name: vad_filter
type: boolean
- default: 0.5
description: VAD onset
in: formData
name: vad_onset
type: number
- default: 0.363
description: VAD offset
in: formData
name: vad_offset
type: number
- description: Minimum speakers for diarization
in: formData
name: min_speakers
type: integer
- description: Maximum speakers for diarization
in: formData
name: max_speakers
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.TranscriptionJob'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Submit a transcription job
tags:
- transcription
/api/v1/transcription/upload:
post:
consumes:
- multipart/form-data
description: Upload an audio file without starting transcription
parameters:
- description: Audio file
in: formData
name: audio
required: true
type: file
- description: Job title
in: formData
name: title
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.TranscriptionJob'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Upload audio file
tags:
- transcription
/health:
get:
description: Check if the API is healthy
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties:
type: string
type: object
summary: Health check
tags:
- health
securityDefinitions:
ApiKeyAuth:
in: header
name: X-API-Key
type: apiKey
BearerAuth:
description: JWT token with Bearer prefix
in: header
name: Authorization
type: apiKey
swagger: "2.0"