{"openapi":"3.1.0","info":{"title":"OwlEars-Service for ThinkOwl","description":"<CENTER><img src=\"/static/owlears.png\"></CENTER><BR>This is a service for <B>audio transcription</B>. <a href=\"/static/demo.html\">DEMO-Page</a>. Service is running on cuda. Commit: <UNKNOWN>","contact":{"url":"http://www.thinkowl.com/"},"license":{"name":"ThinkOwl Usage License","url":"http://www.thinkowl.com/"},"version":"v1"},"paths":{"/metrics":{"get":{"summary":"Combined Metrics","description":"Expose combined metrics from the local instrumentator and the external server.","operationId":"combined_metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/owlears/v1/transcribe":{"post":{"summary":"Transcribe Http","description":"Transcribe a complete uploaded audio file and stream the formatted result.\n\nQuery parameters:\n    auth_token:\n        OAuth token in query string (legacy path; `Authorization` header is also accepted).\n    tenant:\n        Tenant identifier used for auth validation.\n    desk:\n        Desk identifier used for auth validation and required by some transcribers (for example owlnest).\n    output:\n        Output formatter. `txt`/`srt` include only segment text data; `ojpl`/`json` contain structured events.\n    language (deprecated):\n        Legacy language selector. `auto` means language detection enabled; any other value fixes the language and disables language detection.\n        Must not be combined with `initial_language` or `do_language_detection`.\n    initial_language:\n        Initial language code used at session start. If `language` is not used and this is omitted, service default is used.\n        `\"auto\"` is not allowed here.\n    do_language_detection:\n        Enables/disables language detection while transcribing.\n        If omitted and `language` is not used, defaults to `True`.\n    audio_format:\n        Input audio encoding identifier. Non-native formats are transcoded to internal 16k PCM.\n    session_id:\n        Client-defined session label for logs/recordings. No uniqueness is enforced by this endpoint.\n    transcriber:\n        Transcriber backend name.\n    emit_nonfinal:\n        If `True`, non-final segment updates can be emitted (visible in structured formats).\n    min_silence:\n        Silence duration (seconds) used by VAD segmentation to close a segment.\n    emit_debug:\n        If `True`, debug events may be generated and included in structured output.\n    initial_prompt:\n        Initial text prompt/context passed to the transcriber.\n    initial_prompt_language:\n        Language code associated with `initial_prompt`.\n    emit_speech_events:\n        If `True`, VAD speech boundary events are emitted.\n    emit_countdown_events:\n        If `True`, VAD countdown events around silence are emitted.\n    start_countdown_after:\n        Silence duration (seconds) after which countdown begins.\n    use_context:\n        If `True`, finalized transcripts are fed back as context for later transcription.\n    align_to_sentences:\n        If `True`, post-process segment text into sentence-aligned segments.\n    show_hallu_msgs:\n        If `True`, hallucination placeholder segments can be emitted instead of dropping hallucinated output.\n    show_initial_hallu_msgs:\n        Extends `show_hallu_msgs` behavior to initial segments as well.\n    hallu_placeholder:\n        Placeholder text used when hallucinated output is emitted.\n    do_text_language_detection:\n        If `True`, run text-based language detection on transcript text and use it to update language.","operationId":"transcribe_http_owlears_v1_transcribe_post","parameters":[{"name":"auth_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Token"}},{"name":"tenant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant"}},{"name":"desk","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Desk"}},{"name":"output","in":"query","required":false,"schema":{"type":"string","enum":["txt","srt","ojpl","json"],"default":"txt","title":"Output"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"deprecated":true,"title":"Language"},"deprecated":true},{"name":"initial_language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Language"}},{"name":"do_language_detection","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Do Language Detection"}},{"name":"audio_format","in":"query","required":false,"schema":{"type":"string","enum":["pcm_s16le_16k","auto","pcm_alaw_16k","pcm_alaw_8k","pcm_mulaw_16k","pcm_mulaw_8k","pcm_s16le_8k"],"default":"auto","title":"Audio Format"}},{"name":"session_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Session Id"}},{"name":"transcriber","in":"query","required":false,"schema":{"type":"string","enum":["whisper","dummy"],"default":"whisper","title":"Transcriber"}},{"name":"emit_nonfinal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Emit Nonfinal"}},{"name":"min_silence","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Min Silence"}},{"name":"emit_debug","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Emit Debug"}},{"name":"initial_prompt","in":"query","required":false,"schema":{"type":"string","default":"","title":"Initial Prompt"}},{"name":"initial_prompt_language","in":"query","required":false,"schema":{"type":"string","default":"de","title":"Initial Prompt Language"}},{"name":"emit_speech_events","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Emit Speech Events"}},{"name":"emit_countdown_events","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Emit Countdown Events"}},{"name":"start_countdown_after","in":"query","required":false,"schema":{"type":"number","default":0.1,"title":"Start Countdown After"}},{"name":"use_context","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Use Context"}},{"name":"align_to_sentences","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Align To Sentences"}},{"name":"show_hallu_msgs","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Show Hallu Msgs"}},{"name":"show_initial_hallu_msgs","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Show Initial Hallu Msgs"}},{"name":"hallu_placeholder","in":"query","required":false,"schema":{"type":"string","default":"<UNPROCESSIBLECONTENT>","title":"Hallu Placeholder"}},{"name":"do_text_language_detection","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Do Text Language Detection"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_transcribe_http_owlears_v1_transcribe_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/owlears/v1/transcribe_ws":{"get":{"summary":"Transcribe Ws (WEBSOCKET)","description":"Transcribe a live audio stream over WebSocket.\n\nQuery parameters:\n    auth_token:\n        OAuth token in query string (legacy path; `Authorization` header is also accepted).\n    tenant:\n        Tenant identifier used for auth validation.\n    desk:\n        Desk identifier used for auth validation and required by some transcribers (for example owlnest).\n    language (deprecated):\n        Legacy language selector. `auto` means language detection enabled; any other value fixes the language and disables language detection.\n        Must not be combined with `initial_language` or `do_language_detection`.\n    initial_language:\n        Initial language code used at session start. If `language` is not used and this is omitted, service default is used.\n        `\"auto\"` is not allowed here.\n    do_language_detection:\n        Enables/disables language detection while transcribing.\n        If omitted and `language` is not used, defaults to `True`.\n    audio_format:\n        Input audio encoding identifier. Non-native formats are transcoded to internal 16k PCM.\n    session_id:\n        Client-defined session label for logs/recordings.\n    transcriber:\n        Transcriber backend name.\n    emit_nonfinal:\n        If `True`, non-final segment updates can be emitted.\n    min_silence:\n        Silence duration (seconds) used by VAD segmentation to close a segment. Must be > 0.\n    emit_debug:\n        If `True`, debug events are emitted and per-event debug timing metadata is added.\n    emit_hello:\n        Reserved legacy flag; currently not used by the implementation.\n    vad_threshold_speech:\n        VAD probability threshold to switch from non-speech to speech.\n    vad_threshold_nospeech:\n        VAD probability threshold to switch from speech to non-speech.\n    vad_shift_length:\n        Amount of preceding audio (seconds) retained while waiting for speech start.\n    initial_prompt:\n        Initial text prompt/context passed to the transcriber.\n    initial_prompt_language:\n        Language code associated with `initial_prompt`.\n    emit_speech_events:\n        If `True`, VAD speech boundary events are emitted.\n    emit_countdown_events:\n        If `True`, VAD countdown events around silence are emitted.\n    start_countdown_after:\n        Silence duration (seconds) after which countdown begins.\n        If `emit_countdown_events` is enabled, this must be smaller than `min_silence`.\n    use_context:\n        If `True`, finalized transcripts are fed back as context for later transcription.\n    align_to_sentences:\n        If `True`, post-process segment text into sentence-aligned segments.\n    show_hallu_msgs:\n        If `True`, hallucination placeholder segments can be emitted instead of dropping hallucinated output.\n    show_initial_hallu_msgs:\n        Extends `show_hallu_msgs` behavior to initial segments as well.\n    hallu_placeholder:\n        Placeholder text used when hallucinated output is emitted.\n    do_text_language_detection:\n        If `True`, run text-based language detection on transcript text and use it to update language.","operationId":"transcribe_ws_owlears_v1_transcribe_ws_get","parameters":[{"name":"auth_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Token"}},{"name":"tenant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant"}},{"name":"desk","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Desk"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"deprecated":true,"title":"Language"},"deprecated":true},{"name":"initial_language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Language"}},{"name":"do_language_detection","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Do Language Detection"}},{"name":"audio_format","in":"query","required":false,"schema":{"type":"string","enum":["pcm_s16le_16k","auto","pcm_alaw_16k","pcm_alaw_8k","pcm_mulaw_16k","pcm_mulaw_8k","pcm_s16le_8k"],"default":"auto","title":"Audio Format"}},{"name":"session_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Session Id"}},{"name":"transcriber","in":"query","required":false,"schema":{"type":"string","enum":["whisper","dummy"],"default":"whisper","title":"Transcriber"}},{"name":"emit_nonfinal","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Emit Nonfinal"}},{"name":"min_silence","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Min Silence"}},{"name":"emit_debug","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Emit Debug"}},{"name":"emit_hello","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Emit Hello"}},{"name":"vad_threshold_speech","in":"query","required":false,"schema":{"type":"number","default":0.8,"title":"Vad Threshold Speech"}},{"name":"vad_threshold_nospeech","in":"query","required":false,"schema":{"type":"number","default":0.35,"title":"Vad Threshold Nospeech"}},{"name":"vad_shift_length","in":"query","required":false,"schema":{"type":"number","default":2.0,"title":"Vad Shift Length"}},{"name":"initial_prompt","in":"query","required":false,"schema":{"type":"string","default":"","title":"Initial Prompt"}},{"name":"initial_prompt_language","in":"query","required":false,"schema":{"type":"string","default":"de","title":"Initial Prompt Language"}},{"name":"emit_speech_events","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Emit Speech Events"}},{"name":"emit_countdown_events","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Emit Countdown Events"}},{"name":"start_countdown_after","in":"query","required":false,"schema":{"type":"number","default":0.1,"title":"Start Countdown After"}},{"name":"use_context","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Use Context"}},{"name":"align_to_sentences","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Align To Sentences"}},{"name":"show_hallu_msgs","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Show Hallu Msgs"}},{"name":"show_initial_hallu_msgs","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Show Initial Hallu Msgs"}},{"name":"hallu_placeholder","in":"query","required":false,"schema":{"type":"string","default":"<UNPROCESSIBLECONTENT>","title":"Hallu Placeholder"}},{"name":"do_text_language_detection","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Do Text Language Detection"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"101":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/owlears/v1/test":{"post":{"summary":"Classify Text","description":"This is a test endpoint that returns the body of the request as a response.\nThe prometheus.autoscaling decorator is used to monitor the endpoint and\nprovide metrics for the autoscaling of the service. It should be used on\nheavy load endpoints only.\nArgs:\n    body (str, optional): Defaults to Body(media_type=\"text/plain\").\n\nReturns:\n    TestResponse: A pydantic model that is returned as a JSON response.","operationId":"classify_text_owlears_v1_test_post","requestBody":{"content":{"text/plain":{"schema":{"type":"string","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestResponse"}}}},"404":{"description":"Not Found","detail":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/owlears/v1/valid":{"get":{"summary":"Is Valid","description":"This is an authorization test endpoint that returns the body of the request as a response\nand depends on a valid authorization token that is checked by the authorization module.","operationId":"is_valid_owlears_v1_valid_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedMessage"}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"Body_transcribe_http_owlears_v1_transcribe_post":{"properties":{"audio_file":{"type":"string","format":"binary","title":"Audio File"}},"type":"object","required":["audio_file"],"title":"Body_transcribe_http_owlears_v1_transcribe_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"TestResponse":{"properties":{"value":{"type":"string","title":"Value"}},"type":"object","required":["value"],"title":"TestResponse"},"UnauthorizedMessage":{"properties":{"detail":{"type":"string","title":"Detail","default":"Bearer token missing or unknown"}},"type":"object","title":"UnauthorizedMessage","description":"A message to be returned when the user is unauthorized."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}