base_url = https://stt.eu.mihu.ai/v1 and the Umay key
as API key. OpenAI model names are recognised by Umay v1 (umay, files) and, live, by Umay Stream v1.
File: POST /v1/audio/transcriptions with an OpenAI model name
Answer formats (
text always has Damga Pro ITN unless normalize=false; usage is the audio duration):
Streaming (
stream=true, text/event-stream): transcript.text.delta events ({"type", "delta"}) as parts of the
file are decoded — a file is decoded in parts of up to 28 s, so a short file gives one delta — then
transcript.text.done ({"type", "text", "usage"}, same text as json). With voice options the file is analysed first,
then sent segment by segment; with diarization each delta has segment_id and is followed by a transcript.text.segment
event (id, start, end, text, speaker). Errors after the stream started come as an event {"type": "error", "error": {...}}.
Errors for OpenAI model names use OpenAI’s shape (400 also for invalid field values, where the native API answers 422):
503 (busy) has "type": "server_error"; GET /v1/models lists umay, umay-stream and the accepted OpenAI names.
Live: WS /v1/realtime (OpenAI Realtime transcription session)
session.update with "type": "transcription") and the beta one
(transcription_session.update) are accepted; the answer uses the same family. /v1/stream is unchanged.
Client → server
Turn detection is always the server’s: a turn ends after ~0.8 s of silence (as
/v1/stream); turn_detection and
noise_reduction settings are accepted and echoed but do not change it (voice_isolation removes other voices).
Server → client (per turn, in this order)