> ## Speko page index
> The complete index of every page on this site is at: https://speko.ai/llms.txt
> Read it before exploring further. It lists the exact Markdown URL for every canonical HTML page.

# OpenRouter for Voice

<a id="main"></a>

[Backed by Y Combinator](https://www.ycombinator.com/companies/speko)

We measure the models language by language, then route on the result.

[Get API key](https://platform.speko.ai/sign-in) [Explore models](https://speko.ai/models/)

[Benchmarks](https://speko.ai/models/) (Additional languages have benchmark evidence but are not enabled routing inputs. The production router accepts English and Spanish, including regional tags such as en-US and es-MX; other primary languages are rejected.)

|  |  |  |  |
| --- | --- | --- | --- |
| STT | [Universal-3.5 Pro](https://benchmarks.speko.ai/stt/assemblyai-universal-3-5-pro) AssemblyAI | 2.0% | 66ms |
| LLM | [gpt-5.6-luna](https://benchmarks.speko.ai/llm/openai-gpt-5-6-luna) OpenAI | 100% | 449ms |
| TTS | [aura-2](https://benchmarks.speko.ai/tts/deepgram-aura-2) Deepgram | 3.47 | 125ms |

Notes:
- 2.0%: WER / stream
- 66ms: Finalize p50
- 100%: Task done
- 449ms: TTFT p50
- 3.47: Naturalness / internal MOS
- 125ms: Synth p50

- 50+ Providers (At least 50. The three cascade stages carry 53 provider integrations between them, so a vendor integrated at two stages counts twice, and the speech-to-speech providers are not in this figure. 35 distinct companies.)
- 150+ Models (152 integrated across speech-to-text, LLM and text-to-speech. GET /v1/models publishes the 48 the router itself carries, 44 of them routable today.)
- 10+ Languages (At least 10, supported across the catalog's models - Deepgram nova-3 alone streams 10. The public boards publish results in 11 languages. The production router accepts English and Spanish, including regional tags such as en-US and es-MX; other primary languages are rejected.)
- 0ms latency overhead (The route is decided when your session opens, not while you speak. Auth runs once at the socket upgrade, upstream HTTP connections come pre-warmed from a pool, and usage is recorded after the response - no routing, auth, or metering work rides the stream.)

Speech-to-text

| Rank | Model | WER | Latency |
| --- | --- | --- | --- |
| 1 | [Universal-3.5 Pro](https://benchmarks.speko.ai/stt/assemblyai-universal-3-5-pro) AssemblyAI | 2.0% | 66ms |
| 2 | [Realtime STT-1](https://benchmarks.speko.ai/stt/inworld-realtime-stt-1) Inworld | 3.3% | 139ms |
| 3 | [Scribe v2](https://benchmarks.speko.ai/stt/elevenlabs-scribe-v2) ElevenLabs | 3.1% | 233ms |

Notes:
- WER: Word Error Rate on FLEURS read English (n=50), batch API. Read speech, not studio-clean audio. Lower is better. Measured and published at https://benchmarks.speko.ai/stt.
- Latency: End-of-speech to final transcript, p50 (us-east4, n=30). Whisker spans p50->p90. Measured and published at https://benchmarks.speko.ai/stt.

LLM

| Rank | Model | Intelligence | Latency |
| --- | --- | --- | --- |
| 1 | [gemma-4-31b](https://benchmarks.speko.ai/llm/cerebras-gemma-4-31b) Cerebras | 92 | 192ms |
| 2 | [Claude Haiku 4.5](https://benchmarks.speko.ai/llm/anthropic-claude-haiku-4-5) Anthropic | 91 | 532ms |
| 3 | [gpt-5.6-luna](https://benchmarks.speko.ai/llm/openai-gpt-5-6-luna) OpenAI | 88 | 449ms |

Notes:
- Intelligence: Weighted, speed-first: TTFT 50%, task 25%, dead-air 15%, fabrication 10%. Higher is better. Measured and published at https://benchmarks.speko.ai/llm.
- Latency: Time-to-first-token, p50 (us-east4). Whisker spans p50->p90. Measured and published at https://benchmarks.speko.ai/llm.

Text-to-speech

| Rank | Model | Naturalness | Latency |
| --- | --- | --- | --- |
| 1 | [eleven_v3](https://benchmarks.speko.ai/tts/elevenlabs-eleven-v3) ElevenLabs | 3.51 | 481ms |
| 2 | [gemini-3.1-flash-tts-preview](https://benchmarks.speko.ai/tts/gemini-gemini-3-1-flash-tts-preview) Google | 3.51 | 978ms |
| 3 | [aura-2](https://benchmarks.speko.ai/tts/deepgram-aura-2) Deepgram | 3.47 | 125ms |

Notes:
- Naturalness: Blind human A/B preference as an Internal MOS (1-5); higher = preferred. Measured and published at https://benchmarks.speko.ai/tts.
- Latency: Time to first audio, p50 (n=30, us-east4, sequential). Lower is better. Row caption spans p50-p90. Measured and published at https://benchmarks.speko.ai/tts.

Speech-to-speech

| Rank | Model | Overall | Latency |
| --- | --- | --- | --- |
| 1 | [grok-voice-think-fast-2.0](https://benchmarks.speko.ai/s2s/xai-grok-voice-think-fast-2-0) xAI | 0.80 | 820ms |
| 2 | [gemini-3.1-flash-live](https://benchmarks.speko.ai/s2s/google-gemini-3-1-flash-live) Google | 0.77 | 1108ms |
| 3 | [gpt-realtime](https://benchmarks.speko.ai/s2s/openai-gpt-realtime) OpenAI | 0.76 | 494ms |

Notes:
- Overall: Completion x capability (action weighted), mean over 6 concierge scenarios, n=3. Measured and published at https://benchmarks.speko.ai/s2s.
- Latency: End-of-speech to first audio, p50, us-east4 (reused from 2026-07-08). Measured and published at https://benchmarks.speko.ai/s2s.

[More](https://speko.ai/models/)

**LiveKit**

```typescript
$ bun add @livekit/agents @livekit/agents-plugin-openai

import { defineAgent, voice } from '@livekit/agents';
import * as openai from '@livekit/agents-plugin-openai';

const key = process.env.SPEKO_API_KEY!;
const baseURL = 'https://api.speko.ai/v1';

export default defineAgent({
  entry: async (ctx) => {
    const session = new voice.AgentSession({
      stt: new openai.STT({ apiKey: key, baseURL,
        model: 'auto', useRealtime: false }),
      llm: new openai.LLM({ apiKey: key, baseURL,
        model: 'auto' }),
      tts: new openai.TTS({ apiKey: key, baseURL,
        model: 'auto', voice: 'alloy' }),
    });
    await session.start({
      agent: new voice.Agent({ instructions: 'Be concise.' }),
      room: ctx.room,
    });
    await ctx.connect();
  },
});
```

1. Keep the standard LiveKit services.
2. Set the base URL once.
3. Use the same Speko key for all three stages.
4. [Read the LiveKit guide](https://speko.ai/docs/livekit/)

**Pipecat**

```python
$ pip install "pipecat-speko==0.1.1" "pipecat-ai[openai]==1.6.0"

import os
from pipecat_speko import SpekoPolicy, SpekoSTTService, SpekoTTSService
from pipecat.services.openai.llm import OpenAILLMService

key = os.environ["SPEKO_API_KEY"]
gateway = "https://api.speko.ai"
policy = SpekoPolicy(language="en")

stt = SpekoSTTService(api_key=key, base_url=gateway, policy=policy)
tts = SpekoTTSService(api_key=key, base_url=gateway, policy=policy)
llm = OpenAILLMService(api_key=key, base_url=f"{gateway}/v1",
  settings=OpenAILLMService.Settings(model="auto"))
```

1. Speech stages come from the Speko plugin.
2. One policy sets the routing language for both.
3. The same key serves your LLM on the compatible route.
4. [Read the Pipecat guide](https://speko.ai/docs/pipecat/)

**MCP: Claude Code**

```bash
$ claude mcp add --transport http speko https://mcp.speko.ai/mcp

# or send a key instead of signing in through the browser
$ claude mcp add --transport http speko https://mcp.speko.ai/mcp \
    --header "Authorization: Bearer $SPEKO_API_KEY"
```

**MCP: Cursor**

```json
// ~/.cursor/mcp.json
{
  "mcpServers": {
    "speko": {
      "url": "https://mcp.speko.ai/mcp",
      "headers": { "Authorization": "Bearer ${env:SPEKO_API_KEY}" }
    }
  }
}
```

1. Point your client at the hosted server. It speaks streamable HTTP.
2. Sign in through OAuth on first connect, or send an API key on the Authorization header.
3. Your agent can then search the docs, list voices and models, and place a test call.
4. [Read the docs](https://speko.ai/docs/)

## Point an agent at it

**One command.**

**Claude Code**

```bash
$ claude mcp add --transport http speko https://mcp.speko.ai/mcp
```

[Read the docs](https://speko.ai/docs/)

**No key to read it.**

**curl**

```bash
$ curl -s https://api.speko.ai/v1/models
```

[Browse the catalog](https://speko.ai/models/)

## Agents Platform

[How the router, runtime, and model providers fit together](https://speko.ai/voice-agent-infrastructure/)

[Build an agent](https://platform.speko.ai/agents/new)

### Describe it

Say what the agent should do in plain English, and pick a voice.

### Talk to it

Call it in the browser from the console, before it answers anyone else.

### Ship it

Give it a phone number, and every call comes back with its transcript.

Phone numbers Webhook tools Knowledge bases Evals

![AICPA SOC 2](https://speko.ai/badges/soc2.png) ![HIPAA](https://speko.ai/badges/hipaa.svg) ![GDPR](https://speko.ai/badges/gdpr.svg)

[Book a demo with the founder](https://app.iclosed.io/e/speko/demo)

Need the whole agent, not just the models? [Build one on the platform](https://platform.speko.ai)
