List available models
GET /api/v1/agents/models/available — every LLM, STT and TTS model an agent can use, with the exact provider and model values to send, display names, defaults and supported languages.
GET /api/v1/agents/models/availableReturns every model you can select for an agent. Each record carries the exact provider and id values to put in your agent config, so you can build model pickers, validate configs before saving, or keep your own systems in sync with the platform.
The list is built live from the platform's model catalog. When a model is added or removed, this endpoint reflects it immediately — poll it instead of hard-coding model ids.
Authentication
X-API-Key: zsk_...Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
type | "llm" | "stt" | "tts" | No | Only return models of this type. Omit to get all three. |
Response
200 OK
{
"object": "list",
"data": [
{
"id": "gpt-4.1",
"object": "model",
"type": "llm",
"provider": "openai",
"name": "GPT-4.1",
"is_default": false,
"languages": null
},
{
"id": "flux-general-multi",
"object": "model",
"type": "stt",
"provider": "flux",
"name": "Flux Multilingual",
"is_default": false,
"languages": ["en", "hi", "es", "fr", "ja", "de", "pt", "ru"]
},
{
"id": "eleven_v4_turbo",
"object": "model",
"type": "tts",
"provider": "elevenlabs",
"name": "Eleven v4 Turbo",
"is_default": true,
"languages": ["en", "hi", "gu", "ta", "te", "es", "fr", "ja", "de", "zh", "ar", "pt", "ru", "mr", "bn", "kn", "ml", "pa", "ur", "id", "or", "ne"]
}
]
}List object
| Field | Type | Description |
|---|---|---|
object | "list" | Always "list". |
data | Model[] | Every matching model, ordered by type (llm, stt, tts), then provider, then id. |
Model object
| Field | Type | Description |
|---|---|---|
id | string | The model id. Send it as the agent's llm.model, stt.model or tts.model. |
object | "model" | Always "model". |
type | "llm" | "stt" | "tts" | Which part of the agent config the model belongs to. |
provider | string | The provider id. Send it as the agent's llm.provider, stt.provider or tts.provider. |
name | string | Human-readable model name, for display. |
is_default | boolean | true for the model an agent uses when it sends model: null for that provider. Exactly one per STT and TTS provider. Always false for LLMs — an agent's llm.model is required. |
languages | string[] | null | Language codes the model supports, in the format of the agent's languages list. Every language in an agent's languages must be supported by both its STT and its TTS model. null for LLMs. |
Use a model in an agent
Copy provider and id from a record into the matching section of the agent config:
{
"llm": { "provider": "openai", "model": "gpt-4.1" },
"stt": { "provider": "flux", "model": "flux-general-multi" },
"tts": { "provider": "elevenlabs", "model": "eleven_v4_turbo" },
"languages": ["hi", "en"]
}Provider and model go together
A model id is always sent together with its provider. Picking a model from this list and sending only model is not enough — the agent API needs provider to know which service to call.
Errors
| Status | When |
|---|---|
401 | Missing or invalid API key. |
400 | The API key's user has no organization selected. |
422 | type is not one of llm, stt, tts. |
503 | The model catalog is temporarily unavailable. Retry — the response is never an empty list. |
Examples
curl "https://dashboard.zoxa.ai/api/v1/agents/models/available?type=tts" \
-H "X-API-Key: zsk_..."const { data } = await fetch(
"https://dashboard.zoxa.ai/api/v1/agents/models/available",
{ headers: { "X-API-Key": "zsk_..." } },
).then((r) => r.json());
// TTS models that can speak Hindi
const hindiTts = data.filter((m) => m.type === "tts" && m.languages.includes("hi"));import httpx
models = httpx.get(
"https://dashboard.zoxa.ai/api/v1/agents/models/available",
headers={"X-API-Key": "zsk_..."},
).json()["data"]
stt_defaults = {m["provider"]: m["id"] for m in models if m["type"] == "stt" and m["is_default"]}Check the catalog from your terminal
Quick checks with curl and jq. Store your key in an environment variable first so it stays out of your shell history:
export ZOXA_KEY="zsk_..."Count models per type
curl -sS https://dashboard.zoxa.ai/api/v1/agents/models/available \
-H "X-API-Key: $ZOXA_KEY" | jq -r '.data | group_by(.type)[] | "\(.[0].type) \(length)"'Prints one line per type, such as stt 6.
List every model as a table
curl -sS https://dashboard.zoxa.ai/api/v1/agents/models/available \
-H "X-API-Key: $ZOXA_KEY" \
| jq -r '.data[] | "\(.type)\t\(.provider)\t\(.id)\t\(.name)\tdefault=\(.is_default)"' \
| column -t -s $'\t'Find the default model for each STT and TTS provider
curl -sS https://dashboard.zoxa.ai/api/v1/agents/models/available \
-H "X-API-Key: $ZOXA_KEY" | jq -r '.data[] | select(.is_default) | "\(.type) \(.provider) → \(.id)"'Find models that support a language — here, Hindi TTS
curl -sS "https://dashboard.zoxa.ai/api/v1/agents/models/available?type=tts" \
-H "X-API-Key: $ZOXA_KEY" | jq -r '.data[] | select(.languages | index("hi")) | "\(.provider) \(.id)"'What a healthy response looks like
Every STT and TTS provider has exactly one model with is_default: true, every STT and TTS model has a non-empty languages list, and every LLM has languages: null.
Related
POST /agents— the config these models plug into- Agent config schema — every field of
llm,sttandtts - LLM providers · TTS providers · STT providers — latency, cost and quality per model