> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kugelaudio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Speech to Text

> Transcribe audio with the JavaScript SDK

`client.asr.transcribe()` uploads a complete audio file to `luchs-1` and
returns the transcript. See [Speech to Text](/api-reference/endpoints/speech-to-text)
for the full wire contract, supported language, audio limits, and the
WebSocket streaming protocol — the SDK does not yet wrap streaming.

## Transcribe a file

```typescript theme={null}
import { KugelAudio } from 'kugelaudio';

const client = new KugelAudio({ apiKey: 'your_api_key' });

const audio = new Blob([/* your audio bytes */], { type: 'audio/wav' });
const result = await client.asr.transcribe({ audio });

console.log(result.text);           // OpenAI-compatible alias
console.log(result.transcript);     // KugelAudio's own field
console.log(result.model);          // "luchs-1"
console.log(result.model_revision); // immutable checkpoint revision
```

`model` is typed as the literal `'luchs-1'` and defaults to it — omit the
field entirely for the common case. TypeScript rejects any other string at
compile time; there is no runtime override.

### Optional fields

```typescript theme={null}
const result = await client.asr.transcribe({
  audio,
  filename: 'call.wav',
  language: 'en', // accepted, but does not change what gets recognized
});
```

`language` is forwarded but currently has no effect on recognition — see
[Supported language](/api-reference/endpoints/speech-to-text#supported-language).

## Migrating from `qwen3-asr`

`{ model: 'qwen3-asr' }` no longer compiles — `TranscribeOptions.model` only
accepts the literal `'luchs-1'`. Drop the field, or set it explicitly.
Anything reading the response `model` field must also account for it now
always being `"luchs-1"`; use `model_revision` if you need the underlying
artifact identity. This changed in the next major release of the JavaScript
SDK.

## Streaming

The JavaScript SDK does not currently include a WebSocket streaming client
for speech-to-text. Use the raw WebSocket protocol in
[Speech to Text](/api-reference/endpoints/speech-to-text#stream-live-audio)
directly for live transcription.
