Vercel AI Gateway adds xAI Grok audio models for voice, TTS, and STT
xAI's audio models are now live on AI Gateway. Realtime voice, text to speech, and speech to text are all available through the AI SDK with the same routing, observability, and spend controls as your other models.
These capabilities are available on the AI SDK 7 release.
npm install ai @ai-sdk/react @ai-sdk/gateway
Available models
| Capability | Models |
|---|---|
| Realtime voice | xai/grok-voice-think-fast-1.0 |
| Text to speech | xai/grok-tts |
| Speech to text | xai/grok-stt |
Realtime
A voice agent has two pieces: a server route that mints a short-lived token, so your API key never reaches the client, and a browser component that connects with it.
Add the token route: this example sets model to xai/grok-voice-think-fast-1.0:
app/api/realtime/token/route.ts
import { gateway } from '@ai-sdk/gateway';
export async function POST() {
const { token, url } = await gateway.experimental_realtime.getToken({
model: 'xai/grok-voice-think-fast-1.0',
});
return Response.json({ token, url, tools: [] });
}
Then connect from the browser. The useRealtimehook from @ai-sdk/react fetches that route and manages the WebSocket connection, microphone capture, and audio playback:
'use client';
import { experimental_useRealtime as useRealtime } from '@ai-sdk/react';
import { gateway } from '@ai-sdk/gateway';
// Inside a client component:
const { status, connect, startAudioCapture } = useRealtime({
model: gateway.experimental_realtime('xai/grok-voice-think-fast-1.0'),
api: { token: '/api/realtime/token' },
sessionConfig: { turnDetection: { type: 'server-vad' } },
});
// Call connect(), then startAudioCapture(stream) to start talking.
Text to speech
Generate spoken audio from text with generateSpeech. Pass a voice and an output format, then write the result to a file with xai/grok-tts:
import { generateSpeech } from 'ai';
import { writeFile } from 'node:fs/promises';
const result = await generateSpeech({
model: 'xai/grok-tts',
text: 'Thanks for trying out AI Gateway.',
voice: 'eve',
outputFormat: 'mp3',
});
await writeFile('speech.mp3', result.audio.uint8Array);Fetched June 30, 2026



