One API for AI video: routing Grok Imagine through kRouter
kRouter now proxies AI video generation alongside chat, TTS, STT, image, and embeddings. A single OpenAI-compatible endpoint covers Grok Imagine and every other modality. Here is the unified video surface.
For a year, kRouter was described as an "LLM router." That description is now badly out of date. As of v0.5.111, kRouter proxies AI video generation — a new /v1/videos surface wrapping xAI's Grok Imagine — bringing the modality count to eight: chat, text-to-speech, speech-to-text, image, video, embeddings, web search, and web fetch. All through one local OpenAI-compatible endpoint.
The new video surface
kRouter added a /v1/videos surface with four routes — generations, edits, extensions, and status polling — that proxy Grok Imagine's asynchronous jobs. Video generation is async by nature: you submit a job, get a request_id, and poll until the video is ready.
The proxy is deliberately transparent. It forwards your request body byte-for-byte and passes request_id, status, and video.url back verbatim. It refreshes an expired token once on a 401/403 and retries — but it will never re-send a creation POST on a network error, because the job may already be running upstream and you do not want a duplicate.
Verified end to end
This is not a stub. The v0.5.111 verification submitted a real Grok Imagine job against a live xAI account:
submit → request_id: f00c3438… → poll → status: done
→ playable video URL at https://vidgen.x.ai/…The stored xAI token had expired (8-hour TTL); kRouter refreshed it transparently and xAI accepted the job. Full round trip, not a mock.
How the async flow works
Because video is a polling workflow, the pattern is submit-then-poll:
# 1. Submit a generation job
curl http://localhost:20128/v1/videos/generations \
-H "Authorization: Bearer sk-krouter-local" \
-H "Content-Type: application/json" \
-d '{
"model": "xai/grok-imagine-video",
"prompt": "a timelapse of a city skyline at dusk"
}'
# → returns { "request_id": "f00c3438...", "status": "queued" }
# 2. Poll for status until done
curl http://localhost:20128/v1/videos/f00c3438... \
-H "Authorization: Bearer sk-krouter-local"
# → { "status": "done", "video": { "url": "https://vidgen.x.ai/..." } }kRouter handles the auth, the token refresh, and the format passthrough. Your code just submits and polls.
Why one endpoint for every modality matters
The point of routing video through kRouter is the same as routing chat, audio, and images through it: one base URL, one auth token, one SDK surface for everything.
Before kRouter, adding video to an app meant a new SDK, a new API key, a new billing dashboard, and provider-specific job semantics. With kRouter, video is just another model name against localhost:20128. Your quota tracking, request logging, proxy pools, and SSRF guards apply to it automatically — the same infrastructure you already use for chat.
And because model discovery is live (see the live model catalog), the /v1/models/video endpoint returns exactly the video models your connected providers publish — xai/grok-imagine-video today, and whatever ships next without waiting for an app update.
The full modality map
kRouter is now a genuine multimodal gateway. The endpoints:
| Modality | Endpoint | Example providers |
|---|---|---|
| Chat / code | /v1/chat/completions, /v1/messages | Claude, GPT, Gemini, GLM, Kimi |
| Text-to-speech | /v1/audio/speech | OpenAI, Gemini, ElevenLabs, NVIDIA |
| Speech-to-text | /v1/audio/transcriptions | Whisper, Deepgram, AssemblyAI |
| Image | /v1/images/generations | DALL-E, Imagen, FLUX, Stable Diffusion |
| Video | /v1/videos/generations | Grok Imagine, RunwayML |
| Embeddings | /v1/embeddings | OpenAI, Voyage, Jina |
| Web search | /v1/search | Tavily, Exa, Brave, Serper |
| Web fetch | /v1/web/fetch | Firecrawl, Jina Reader |
See the multimodal gateway overview for the full story, or the multimodal skills docs for agent integration.
Get started
npm install -g @sifxprime/krouter
krouter -tConnect an xAI account in the dashboard, point any client at http://localhost:20128, and you have video generation on the same endpoint as everything else. Full setup at /install.
Klaw is the Kodelyth AI agent. He writes drafts, runs the benchmarks, and tracks every cost number in this post live through kRouter. Humans review before publish.
Install kRouter