Skip to main content
kRouter

Multimodal & Agent Skills

kRouter's endpoints beyond chat: speech, transcription, embeddings, images, video, web search and fetch, plus Agent Skills that teach agents to use them.


Besides chat, kRouter serves speech, transcription, embeddings, images, video, web search and URL fetch, all in OpenAI-style shapes on the same port. Models are named the same way as for chat, <provider>/<model>, and each provider is connected once on the dashboard's Providers page.

The examples below send $KROUTER_KEY. From the machine kRouter runs on you can leave that header out; see the API reference.

Find the models

Each kind has its own model list, built from the providers you have connected:

curl http://localhost:20128/v1/models/tts        # also: stt, embedding, image, video, web

Text to speech

Endpoint: POST /v1/audio/speech

Providers: OpenAI, Gemini, ElevenLabs, Deepgram, MiniMax (global and China), NVIDIA, OpenRouter, Hyperbolic, Fish Audio, Inworld, AWS Polly, Edge TTS, Google TTS, and the voices built into your operating system (Local Device). Edge TTS, Google TTS and Local Device need no account.

curl http://localhost:20128/v1/audio/speech \
  -H "Authorization: Bearer $KROUTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "openai/tts-1/alloy", "input": "Hello from kRouter"}' \
  --output speech.mp3

For OpenAI the model is openai/<speech model>/<voice>, so openai/tts-1/alloy is the tts-1 model with the alloy voice. Other providers name models and voices their own way: GET /v1/audio/voices?provider=edge-tts lists voices for the providers that pick a voice by ID.

The reply is the audio file itself; add ?response_format=json to get it base64-encoded in JSON instead.

Speech to text

Endpoint: POST /v1/audio/transcriptions (multipart form, like OpenAI's)

Providers: OpenAI, Groq, Gemini, Deepgram, AssemblyAI and Hugging Face.

curl http://localhost:20128/v1/audio/transcriptions \
  -H "Authorization: Bearer $KROUTER_KEY" \
  -F "model=openai/whisper-1" \
  -F "file=@meeting.mp3"

Embeddings

Endpoint: POST /v1/embeddings

Providers: OpenAI, Gemini, Mistral, Voyage AI, Jina AI, NVIDIA, GitHub, OpenRouter, Together AI, Fireworks, Nebius and Vercel AI Gateway. You can also add your own OpenAI-compatible embedding endpoint as a provider.

curl http://localhost:20128/v1/embeddings \
  -H "Authorization: Bearer $KROUTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "openai/text-embedding-3-small", "input": ["hello", "world"]}'

Images

Endpoint: POST /v1/images/generations

Providers: OpenAI, Gemini, xAI, MiniMax, Codex (image models need ChatGPT Plus or higher), Antigravity, Cloudflare Workers AI, Vercel AI Gateway, SiliconFlow, NanoBanana API, Hugging Face, fal.ai, Stability AI, Black Forest Labs, Recraft, Topaz, Runway, and Stable Diffusion WebUI or ComfyUI running on your own machine.

Add ?response_format=binary to get the image bytes instead of JSON. GET /v1/models/info?id=<model> shows which sizes and options a model accepts.

Video

Endpoints: POST /v1/videos/generations, /v1/videos/edits and /v1/videos/extensions, then GET /v1/videos/{id} to collect the result.

Video works through xAI only (Grok Imagine). Combos cannot be used for video.

Web search and URL fetch

Endpoints: POST /v1/search and POST /v1/web/fetch

  • Search: Tavily, Exa, Brave, Serper, SearXNG, Google Programmable Search, Linkup, SearchAPI, You.com and Perplexity, plus search through Gemini, xAI, Kimi, MiniMax, OpenAI and Vercel AI Gateway.
  • Fetch (a URL as Markdown or text): Firecrawl, Jina Reader, Tavily and Exa.
curl http://localhost:20128/v1/search \
  -H "Authorization: Bearer $KROUTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "tavily", "query": "kRouter open source", "max_results": 5}'
 
curl http://localhost:20128/v1/web/fetch \
  -H "Authorization: Bearer $KROUTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "firecrawl", "url": "https://example.com", "format": "markdown"}'

kRouter refuses a fetch URL that points at, or resolves to, a loopback, private, link-local or cloud-metadata address.

What these endpoints do not do

  • PII redaction, when you turn it on, covers the chat endpoints only. Requests to the endpoints on this page are sent as they are.
  • There is no music-generation endpoint and no image-understanding endpoint. To have a model read an image, send it in a chat request to a vision-capable model.

Agent Skills

Agent Skills are Markdown files that teach an AI agent how to call kRouter: the base URL, authentication, how to find models, and the request and response shapes for one capability. Give your agent the link and it can, for example, generate speech or search the web through your own kRouter.

SkillCovers
krouterStart here: setup, authentication, model discovery, links to the others
krouter-chatChat and code generation, OpenAI or Anthropic format
krouter-imageImage generation
krouter-ttsText to speech
krouter-sttSpeech to text
krouter-embeddingsEmbeddings
krouter-web-searchWeb search
krouter-web-fetchA URL as Markdown

The dashboard's Skills page has a copy button for each link. Paste it to your agent with a line such as:

Read this skill and use it: https://raw.githubusercontent.com/sifxprime/krouter/refs/heads/main/skills/krouter/SKILL.md

The skills read the base URL from KROUTER_URL (for example http://localhost:20128, or your tunnel URL) and the key from KROUTER_KEY.

Where to go next