PUT /api/v1/agents/{agent_id} (after POST /api/v1/agents/simple if you start from defaults): pass catalog codes (what you see below or from the live provider APIs), not database row UUIDs, unless you already have the UUID from your environment.
Live catalogs (authoritative)
With yourx-api-key:
| Catalog | Endpoint |
|---|---|
| LLM | GET https://api.kupe.in/api/v1/providers/model |
| TTS | GET https://api.kupe.in/api/v1/providers/tts |
| STT | GET https://api.kupe.in/api/v1/providers/stt |
model_name, provider_name, supported_languages, and id. Agent create/update accepts preferred keys agent_model_config.model_name, tts_config.tts_model_name, transcriber_config.transcriber_model_name (legacy *_provider_id fields are equivalent) and resolves them to internal UUIDs before saving. Per-agent behavior (timeouts, auto hangup, inbound transfer routes) goes in agent_specific_config on POST /api/v1/agents or PUT /api/v1/agents/{agent_id} — see Voice Agent HTTP API.
See also: Supported models & providers (static tables and model names) and the Voice Agent API in the API reference.
Language codes by provider
Use the convention that matches the STT / TTS row you selected. Wrong codes usually surface as provider errors at call time, not as Kupe validation errors.- Sarvam (BCP-47)
- Other providers (short codes)
Sarvam expects region-qualified tags where the provider documents them, e.g.
hi-IN, gu-IN, en-IN. Use the same pattern as in Sarvam’s docs for other locales.Put the value in transcriber_config.language. For TTS you can send tts_config.language (Kupe merges it into voice_parameters.language) or set voice_parameters.language yourself.Logos and quick reference
Logos below match the in-app catalog (app.kupe.in). Model names are examples — always confirm against GET …/providers/model for your tenant.
LLM
OpenAI / Azure router
Examples: gpt-4.1-mini, gpt-4.1, openai-gpt-4.1-nano
Groq
Examples: groq-llama-3.3-70b, groq-gpt-oss-20b
DeepInfra
Examples: deepinfra-qwen, deepinfra-llamaTTS
Usetts_config.tts_model_name = model_name, provider_name, provider:model_name, or row id. Examples: tts-1, bulbul:v2. Legacy tts_provider_id in JSON means the same thing.
STT
Usetranscriber_config.transcriber_model_name = STT model_name, transcriber name, or row id (legacy provider_id is equivalent), and transcriber_config.language. The pipeline STT model id is taken from the transcriber_providers row — do not send a duplicate transcriber_config.model_name on create.
Refreshing this page: run the three
GET catalog calls and compare model_name / supported_languages to the tables on Supported models & providers; update product copy when vendors add models.