---
name: 9Router Speech-to-Text
slug: 9router-speech-to-text
category: AI Engineering
description: 9Router Speech-to-Text transcribes audio files to text via the 9Router API using Whisper, Groq, Gemini, Deepgram, AssemblyAI, NVIDIA, or HuggingFace models. Use it to convert speech to text or get subtitles from audio files.
github: "https://github.com/decolua/9router/tree/master/skills/9router-stt"
language: JavaScript
stars: 25392
forks: 4516
install: "npx degit https://github.com/decolua/9router/tree/master/skills/9router-stt ~/.claude/skills/9router-stt"
installs_to: ~/.claude/skills/9router-stt
source_path: skills/9router-stt/SKILL.md
collection_size: 9
category_size: 2451
collection_url: "https://dirskills.com/collections/decolua/9router"
added: 2026-08-14T07:12:12.067Z
last_synced: 2026-08-14T07:12:12.067Z
canonical_url: "https://dirskills.com/skills/9router-speech-to-text"
---

# 9Router Speech-to-Text

9Router Speech-to-Text transcribes audio files to text via the 9Router API using Whisper, Groq, Gemini, Deepgram, AssemblyAI, NVIDIA, or HuggingFace models. Use it to convert speech to text or get subtitles from audio files.

**Install:**

```bash
npx degit https://github.com/decolua/9router/tree/master/skills/9router-stt ~/.claude/skills/9router-stt
```

## README

# 9Router — Speech-to-Text

Requires `NINEROUTER_URL` (and `NINEROUTER_KEY` if auth enabled). See https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router/SKILL.md for setup.

## Discover

```bash
curl $NINEROUTER_URL/v1/models/stt | jq '.data[].id'
# Per-model params (language, response_format, prompt, temperature support)
curl "$NINEROUTER_URL/v1/models/info?id=openai/whisper-1"
```

`model` = STT model ID (e.g. `openai/whisper-1`, `groq/whisper-large-v3`, `deepgram/nova-3`, `gemini/gemini-2.5-flash`).

## Endpoint

`POST $NINEROUTER_URL/v1/audio/transcriptions` (OpenAI Whisper compatible, `multipart/form-data`)

| Field | Required | Notes |
|---|---|---|
| `model` | yes | from `/v1/models/stt` |
| `file` | yes | audio file (mp3, wav, m4a, webm, ogg, flac) |
| `language` | no | ISO-639-1 (e.g. `en`, `vi`) |
| `prompt` | no | hint text to guide transcription |
| `response_format` | no | `json` (default) / `text` / `verbose_json` / `srt` / `vtt` |
| `temperature` | no | 0–1 |

## Examples

```bash
curl -X POST "$NINEROUTER_URL/v1/audio/transcriptions" \
  -H "Authorization: Bearer $NINEROUTER_KEY" \
  -F "model=openai/whisper-1" \
  -F "file=@audio.mp3" \
  -F "language=vi"
```

JS (Node):

```js
import { createReadStream } from "node:fs";
const form = new FormData();
form.append("model", "groq/whisper-large-v3-turbo");
form.append("file", new Blob([await (await import("node:fs/promises")).readFile("audio.mp3")]), "audio.mp3");
const r = await fetch(`${process.env.NINEROUTER_URL}/v1/audio/transcriptions`, {
  method: "POST",
  headers: { "Authorization": `Bearer ${process.env.NINEROUTER_KEY}` },
  body: form,
});
const { text } = await r.json();
console.log(text);
```

## Response shape

Default (`response_format=json`):
```json
{ "text": "Xin chào, đây là bản ghi âm." }
```

`verbose_json` adds `language`, `duration`, `segments[]` with timestamps.
`srt` / `vtt` return subtitle text.

## Provider quirks

| Provider | `model` format | Notes |
|---|---|---|
| `openai` | `whisper-1`, `gpt-4o-transcribe`, `gpt-4o-mini-transcribe` | Native OpenAI shape |
| `groq` | `whisper-large-v3`, `whisper-large-v3-turbo`, `distil-whisper-large-v3-en` | Fastest; OpenAI shape |
| `gemini` | `gemini-2.5-flash`, `gemini-2.5-pro`, `gemini-2.5-flash-lite` | Server converts to `generateContent` with audio inline |
| `deepgram` | `nova-3`, `nova-2`, `whisper-large` | Token auth; server adapts response |
| `assemblyai` | `universal-3-pro`, `universal-2` | Async upload+poll handled server-side |
| `nvidia` | `nvidia/parakeet-ctc-1.1b-asr` | NIM endpoint |
| `huggingface` | `openai/whisper-large-v3`, `openai/whisper-small` | HF Inference API |
