{provider, model} pair, and the only valid pairs are the ones GET /v1/catalog returns. A config naming anything else is refused on save, with the valid pairs listed. The catalog is the source of truth for every model, its flags and its price; this page gives the rules for reading it.
get_catalog; OpenRouter models are search_models and list_model_hosts.
What the catalog returns
One array per kind —llm, stt, tts, realtime, avatar, noise_cancellation — plus providers, languages, turn_detector_languages, system_vars and the platform fees. Each entry carries provider, model, label, channel (where it may run), pricing (USD, billed by the provider on your key) and an optional note. The flags that change what you may configure:
A
providers entry with browse: "search" (OpenRouter) is not in the arrays; its searched_kinds say which kinds you search for.
The model slots
voice_name is a dashboard label and is never sent to the provider. A voice or video agent runs either the stt → llm → tts cascade or one realtime model; setting realtime clears the other three. See realtime models. For fallback, see model fallbacks.
Choosing
- Language first. A model that publishes languages must cover the agent’s
language, and alanguage_requiredmodel refuses Auto. See language. - Speech-to-text decides turn-taking. Streaming models end turns on their own detector; batch models are cheaper, add a round-trip, and are the only ones that can use the end-of-turn model. See speech-to-text and turn detection.
- On a call, thinking is silence. Keep
reasoning_effortat the model’s fastest value unless the answer needs more. - Mix providers freely. The three cascade slots are independent.
channel does not include the agent’s channel is refused. Some language models are text only.
llm.reasoning_effort
One of none, minimal, low, medium, high, and it must be in the model’s reasoning_efforts. Unset means the first (fastest) value. A model with an empty list refuses any value. The names do not order the same way at every vendor, so read the catalog’s order rather than the words.
Changing llm.model without sending reasoning_effort drops the old value and the new model starts at its fastest. llm.fallback and analysis.model carry their own, checked against their own model.
On a voice or video agent every second of reasoning is silence. On a text agent or an agent task, nobody hears the wait.
llm.priority
true asks the provider to run this model in its priority lane, which shortens queueing when the provider is busy. It does not make the model think faster and does nothing for speech or avatar models. The lane is best-effort; you pay the premium even when a turn is served at standard speed.
- Cost: the entry’s
priority.pricingreplaces its standard token rates for every turn, between 1.75x and 2.5x. Only the language model’s token spend moves; the platform fee does not. - Billing follows the request. Turns are metered at the priority rate because the agent asked for the lane. Where the entry’s
priority.confirmsisfalse(Gemini), the provider never reports which tier served the turn, so a silent downgrade is still metered at the priority rate. - Reporting: priority lines are tagged
priorityin a call’s cost breakdown and totalled aspriority_costin observability. See costs.
There is no
priority on a realtime model or on OpenRouter models. Try it on one call with agent_override (per-call configuration), and compare the LLM first-token latency tail on real calls before leaving it on.
llm.builtin_tools
Tools the model provider runs on its own servers mid-turn — web search, X search, a code sandbox, a provider-hosted file store. The provider folds the result into its reply; Talqing never sees the call. They are not Talqing tools: nothing to create, publish or attach.
{type, config}. Valid types and config keys are the model’s builtin_tools[].type and options[].key; an empty config means the provider’s defaults. builtin_tools is a list, so a PATCH replaces it whole.
Refused on save:
- a
typethe model does not offer, or the sametypetwice - a
configkey the tool does not declare, or a value of the wrong shape or length - a missing required option (
file_searchneedsvector_store_ids) - both halves of a
conflicts_withpair, such asallowed_domainswithexcluded_domains - one of your own tools or a handoff named the same as a provider tool
file_search searches a store in your own provider account; Talqing only passes its id.
OpenRouter
One OpenRouter key reaches hundreds of tool-capable language models and a set of speech-to-text models from many labs. They are not inGET /v1/catalog; search them, then set model to the exact slug returned.
kind is llm (default) or stt. With no q, results are ordered by real-world usage. Page with cursor from next_cursor.
- Not listed:
:freeand:batchvariants, moving-latestaliases, and router slugs such asopenrouter/auto. Usellm.fallbackinstead of a router. - Thinking:
reasoning_effortsis what the model accepts, withnoneadded wherever thinking can be switched off; it is the default. - Not available:
builtin_toolsandpriority. - Routing: requests are sorted by latency and hosts that train on prompts are refused. Neither is configurable.
- Price: search results show the cheapest host’s rate; your usage is priced from what OpenRouter reported charging.
llm.hostsrestricts the model to the hosts you name; the fastest of them answers. Valid values come fromGET /v1/catalog/models/hosts?model=<slug>(list_model_hostsover MCP). A bare host name covers all its endpoints (azurematchesazure/us). Publishing warns about a host that no longer serves the model and refuses when none does.llm.fallbackandanalysis.modeltake their ownhosts.- Speech-to-text: every OpenRouter STT model is batch, so its fallback must be batch too. No language is sent to it — it always detects — and host selection and the no-training preference do not apply.
openai/gpt-transcribe exists both as openai + gpt-transcribe (your OpenAI key) and openrouter + openai/gpt-transcribe (your OpenRouter key); they are separate selections.
tts-cache-router
tts-cache-router replays sentences your agents have spoken before, with the same voice and settings, from your router account’s cache. Settts.provider to tts_cache_router and model to <provider>/<model> for any text-to-speech entry; voices, languages, speed and voice settings are the underlying model’s.
- The router account is yours: your provider keys are stored there, and Talqing holds only the router’s
tcr_key. Publishing checks the router account has a key for the voice’s provider. - A synthesized sentence is billed by the provider at its rate; a cached one by the router at
providers.tts_cache_router.routes.tts.cached_per_character. The editor’s estimate prices every sentence as new. - Out of router credit, the agent cannot speak. Give
ttsa fallback on another provider if that matters.
Avatar and noise cancellation
avatar entries are for video agents; see video avatars. noise_cancellation entries are ai-coustics models billed to your own ai-coustics account; see audio processing.
Next
Model fallbacks
A second provider per stage, and the rules it must satisfy.
Realtime models
One speech-to-speech model instead of the cascade.