zoxaAI
Homepage
API ReferenceAgents

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/available

Returns 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

ParameterTypeRequiredDescription
type"llm" | "stt" | "tts"NoOnly 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

FieldTypeDescription
object"list"Always "list".
dataModel[]Every matching model, ordered by type (llm, stt, tts), then provider, then id.

Model object

FieldTypeDescription
idstringThe 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.
providerstringThe provider id. Send it as the agent's llm.provider, stt.provider or tts.provider.
namestringHuman-readable model name, for display.
is_defaultbooleantrue 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.
languagesstring[] | nullLanguage 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

StatusWhen
401Missing or invalid API key.
400The API key's user has no organization selected.
422type is not one of llm, stt, tts.
503The 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.

On this page