# Deepgram-compatible API — ВТекст 38

Russian speech-to-text with a Deepgram-shaped request and response. A customer leaving Deepgram
changes `base_url` / `url` and the API key; the rest of their integration stays.

- **Endpoint:** `POST https://vtext38.ru/api/v1/listen`
- **Auth:** `Authorization: Token <key>` — **not Bearer**. Deepgram SDKs send Token.
- **Body:** raw audio as `application/octet-stream`. JSON `{"url":"..."}` is not supported yet (400).
- **Language:** Russian only. Any `model` name is accepted and ignored.
- **Human docs:** https://vtext38.ru/api
- **OpenAPI:** https://vtext38.ru/openapi.json

## Parameters

| Parameter | Description |
|---|---|
| `punctuate` | Знаки препинания и заглавные. Синоним smart_format; вместе допустимы. |
| `smart_format` | Форматирование текста для чтения. То же, что punctuate; числа остаются словами. |
| `diarize` | Разделение по говорящим для записи в моно. |
| `diarize_model` | Любое значение включает диаризацию (как у Deepgram). Версия модели игнорируется. |
| `multichannel` | Разделение по каналам стереозаписи. Для телефонии точнее, чем диаризация. |
| `utterances` | Разбивка на реплики по паузам и смене говорящего. |
| `paragraphs` | Дополнительная разбивка реплик на предложения. |

`model` may be any string (including `nova-3`). Rejecting foreign names would break migration.

## Differences from Deepgram

- **Поля speaker_confidence нет.** В ответе этого поля нет. Код, который его читает, нужно поправить.
- **Числа остаются прописью.** Даже при smart_format числа пишутся словами, не цифрами.
- **Синхронный запрос до десяти минут.** Соединение держится, пока идёт обработка, не дольше десяти минут.
- **Язык один.** Русский. Другой язык в запросе даёт понятную ошибку.

There is no `speaker_confidence` field — it is absent, not invented.

## Examples

### Python

```python
from deepgram import DeepgramClient, DeepgramClientOptions

client = DeepgramClient(
    "ВАШ_КЛЮЧ",
    DeepgramClientOptions(url="https://vtext38.ru/api"),
)

with open("recording.mp3", "rb") as audio:
    response = client.listen.rest.v("1").transcribe_file(
        {"buffer": audio},
        {"smart_format": True, "diarize": True, "utterances": True},
    )

print(response.results.channels[0].alternatives[0].transcript)
```

### JavaScript

```javascript
import { DeepgramClient } from '@deepgram/sdk'
import { readFileSync } from 'node:fs'

const client = new DeepgramClient({
  apiKey: 'ВАШ_КЛЮЧ',
  baseUrl: 'https://vtext38.ru/api',
})

const { result } = await client.listen.prerecorded.transcribeFile(
  readFileSync('recording.mp3'),
  { smart_format: true, diarize: true, utterances: true },
)

console.log(result.results.channels[0].alternatives[0].transcript)
```

### cURL

```bash
curl -X POST \
  -H "Authorization: Token ВАШ_КЛЮЧ" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @recording.mp3 \
  "https://vtext38.ru/api/v1/listen?smart_format=true&diarize=true&utterances=true"
```
