Skip to content
Back to skills

Keirouter Tts

ASecurity

Text-to-speech via KeiRouter /v1/audio/speech using OpenAI / ElevenLabs / Deepgram / Edge TTS / Google TTS / Inworld voices. Use when the user wants to convert text to speech, generate audio, voiceover, narrate, or read text aloud.

  • 145 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added August 30, 2026
ai-agentsgobashnodegit

Security analysis

A100/100

Scanned August 30, 2026

npx -y skills add mydisha/keirouter --skill keirouter-tts --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Keirouter Tts?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Keirouter Tts
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mydisha-keirouter-tts/badge)](https://www.skillsdirectory.com/skills/mydisha-keirouter-tts)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: keirouter-tts
description: Text-to-speech via KeiRouter /v1/audio/speech using OpenAI / ElevenLabs / Deepgram / Edge TTS / Google TTS / Inworld voices. Use when the user wants to convert text to speech, generate audio, voiceover, narrate, or read text aloud.
---

# KeiRouter — Text-to-Speech

Requires `KEIROUTER_URL` (and `KEIROUTER_KEY` if auth enabled). See https://raw.githubusercontent.com/mydisha/keirouter/main/skills/keirouter/SKILL.md for setup.

## Discover

```bash
# 1) List models
curl $KEIROUTER_URL/v1/models/tts | jq '.data[].id'
# 2) Per-model metadata (params, voicesUrl if voice-by-id)
curl "$KEIROUTER_URL/v1/models/info?id=el/eleven_multilingual_v2"
```

`model` field in `/v1/audio/speech` = voice ID directly (e.g. `edge-tts/vi-VN-HoaiMyNeural`, `el/<voice_id>`, or `openai/tts-1` model+default voice).

## Endpoint

`POST $KEIROUTER_URL/v1/audio/speech`

| Field | Required | Notes |
|---|---|---|
| `model` | yes | voice ID from `/v1/models/tts` |
| `input` | yes | text to speak |

Query `?response_format=mp3` (default, raw bytes) or `?response_format=json` (`{audio: base64, format}`).

## Examples

Save MP3:

```bash
curl -X POST "$KEIROUTER_URL/v1/audio/speech" \
  -H "Authorization: Bearer $KEIROUTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"openai/tts-1","input":"Hello world"}' \
  --output speech.mp3
```

JS (save file):

```js
import { writeFile } from "node:fs/promises";
const r = await fetch(`${process.env.KEIROUTER_URL}/v1/audio/speech`, {
  method: "POST",
  headers: { "Authorization": `Bearer ${process.env.KEIROUTER_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ model: "el/eleven_multilingual_v2", input: "Hello world" }),
});
await writeFile("speech.mp3", Buffer.from(await r.arrayBuffer()));
```

## Response shape

Default → raw audio bytes (Content-Type `audio/mp3`).

`?response_format=json`:
```json
{ "audio": "SUQzBAAAA...", "format": "mp3" }
```

## Provider quick reference

| Provider | `model` format | Notes |
|---|---|---|
| OpenAI | `tts-1/alloy` (model/voice) or just voice | Default model `gpt-4o-mini-tts` |
| ElevenLabs | `<model_id>/<voice_id>` or `<voice_id>` | Default model `eleven_flash_v2_5` |
| Edge TTS | voice id e.g. `vi-VN-HoaiMyNeural` | **noAuth**; free |
| Deepgram | `aura-asteria-en` etc | Token auth |
| Inworld | `model/voice` | Provider-specific auth |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.