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/gatewayLink to headingAvailable models
Link to headingRealtime
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:
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.Link to headingText 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);Link to headingSpeech to text
Transcribe recordings into text with transcribe. This example uses xai/grok-stt:
import { transcribe } from 'ai';import { readFile } from 'node:fs/promises';
const result = await transcribe({ model: 'xai/grok-stt', audio: await readFile('audio.mp3'),});console.log(result.text);Link to headingPlayground
You can also try the xAI audio models directly in the AI Gateway playground. Open the models list and click into any of the models to use them directly in the browser. The xai/grok-voice-think-fast-1.0 playground here allows you to talk to the agent and see responses instantly:

