curl https://kymaapi.com/v1/models
curl "https://kymaapi.com/v1/models?type=language&tags=tool-use&use_cases=build-agents"
from openai import OpenAI
client = OpenAI(base_url="https://kymaapi.com/v1", api_key="kyma-your-api-key")
models = client.models.list()
for m in models.data:
print(m.id)
Endpoints
List Models
List all available models, and filter them by type, capability, or use case.
GET
/
v1
/
models
curl https://kymaapi.com/v1/models
curl "https://kymaapi.com/v1/models?type=language&tags=tool-use&use_cases=build-agents"
from openai import OpenAI
client = OpenAI(base_url="https://kymaapi.com/v1", api_key="kyma-your-api-key")
models = client.models.list()
for m in models.data:
print(m.id)
No authentication required.
The distinction that matters:
Combine
The
Every row carries
The row above is abridged: live rows also carry
The three axes
Every model is described on three independent axes. They answer different questions, and keeping them apart is what makes the catalog filterable.| Field | Question it answers | Values per model |
|---|---|---|
type | What is it? | exactly one |
tags | What can it do? | many |
use_cases | What would you use it for? | many |
image is a type; generate-images is a use case. One describes the model, the other describes your job.
type — 10 values
language · image · video · embedding · reranking · transcription · audio-understanding · realtime · speech · decisions
type is the product line you buy the model under — which endpoint serves it and which
unit it bills in — not simply what it emits. That is why whisper-v3-turbo, which
returns text, is transcription: you reach it at POST /v1/audio/transcriptions
and it bills per minute of audio, not per token.
realtime and audio-understanding list no models today: realtime sessions are paused,
and audio understanding was retired on 2026-10-08, so ?type=realtime and
?type=audio-understanding return an empty list.
The audio types split by what you are asking for: transcription writes the words down,
audio-understanding answers questions about the sound itself, speech generates audio,
and realtime is the bidirectional socket.
decisions is the same rule once more: a decisions model takes text and returns a choice
with a confidence, never prose, so it is not a language model — you reach it at
POST /v1/decisions and it bills per input token.
tags — 12 values
tool-use · reasoning · vision · implicit-caching · explicit-caching · file-input · web-search · image-generation · video-generation · websocket-realtime · websocket-transcription · fast
A tag is only set when it is objectively true of the model’s own spec. Three of them — fast, implicit-caching, explicit-caching — describe measured behaviour of a serving route rather than the model, so they are currently unset on every model rather than asserted without evidence.
use_cases — 14 values
write-code · build-agents · chat · write-content · translate · research-web · analyse-documents · solve-math · generate-images · edit-images · generate-video · transcribe-audio · generate-speech · search-documents
Filtering
All filters are query params. Comma-separated values combine as AND, excepttype — a model has exactly one type, so listing several means OR.
| Param | Combines | Example |
|---|---|---|
type | OR | ?type=image,video |
creator | OR | ?creator=anthropic,google |
tags | AND | ?tags=tool-use,vision |
use_cases | AND | ?use_cases=write-code |
input_modalities | AND | ?input_modalities=text,image |
output_modalities | AND | ?output_modalities=text |
supported_parameters | AND | ?supported_parameters=tools,structured_outputs |
latency_tier | — | ?latency_tier=fast |
cost_tier | — | ?cost_tier=cheap |
quality_tier | — | ?quality_tier=frontier-open |
release_stage | — | ?release_stage=stable |
tools vision reasoning structured_outputs | — | ?type=language&tools=true |
min_context_window | — | ?min_context_window=128000 |
max_input_price | — | ?type=language&max_input_price=1.00 |
tools and structured_outputs with type=language. On their own they also
return image, embedding, speech and transcription models whose row says
supports_tools: false. The same goes for max_input_price: models billed per image,
minute or character report an input price of 0, so they pass any ceiling.
creator is who made the model — the value each row carries as owned_by.
?owned_by= is accepted as the same filter, so you can filter by exactly what
you just read in the response.
Filters compose:
# Everything one lab makes
curl "https://kymaapi.com/v1/models?creator=anthropic"
# Text models that call tools and are good for agents
curl "https://kymaapi.com/v1/models?type=language&tags=tool-use&use_cases=build-agents"
# Every image model
curl "https://kymaapi.com/v1/models?type=image"
filters block in the response echoes back exactly what was applied, so you can confirm a param was understood rather than ignored.
recommended_for is deprecated. It is now an alias of use_cases and still
works, including the old vocabulary (coding, agent, general, image, …),
which is translated to its use_cases equivalent. Prefer use_cases for new
integrations. Nothing has been removed — recommended_for remains in every
response.free_tier — what a new key can call
Every row carries free_tier, a boolean.
true means the model is in the free tier: the $0.50 signup credit, added
once you verify your email, spends on it, so an account that has never added
credits can call it. false means it
needs a top-up first, and a request from a never-funded key is refused with
402 model_requires_paid before anything is charged.
# Everything a brand-new key can call
curl "https://kymaapi.com/v1/models" | jq '[.data[] | select(.free_tier)] | map(.id)'
cost_tier and tier are editorial labels — “cheap”, “balanced”, “premium” —
and nothing enforces them. free_tier is the rule the API applies. It is
derived from each model’s published price rather than kept as a list of names,
so it follows the catalog: a model whose price moves across the line changes
side the same day. The line itself, and what it is set to, is on the
pricing page.
GET /v1/models/recommend carries the field on every model it names, so a
recommendation can be filtered the same way.
Response
{
"object": "list",
"data": [
{
"id": "llama-3.3-70b",
"object": "model",
"owned_by": "meta",
"name": "Llama 3.3 70B",
"description": "Most popular open model. Great all-rounder.",
"context_window": 128000,
"max_output_tokens": 8192,
"best_for": "General, code, tool use",
"speed": "medium",
"recommended": false,
"hot": true,
"pricing": { "mode": "per-token", "input": 0.135, "output": 0.432, "cached": null },
"list_price": { "mode": "per-token", "input": 0.135, "output": 0.432, "cached": null },
"pricing_mode": "per-token",
"promotion": null,
"supports_caching": true,
"supports_tools": true,
"supports_structured_outputs": true,
"supports_reasoning": false,
"supports_vision": false,
"input_modalities": ["text"],
"output_modalities": ["text"],
"supported_parameters": ["temperature", "top_p", "max_tokens", "stream", "tools", "response_format", "structured_outputs", "prompt_caching"],
"latency_tier": "medium",
"cost_tier": "cheap",
"quality_tier": "strong",
"free_tier": true,
"weights": "open",
"reduced_precision": null,
"retires_on": null,
"release_stage": "stable",
"type": "language",
"tags": ["tool-use"],
"use_cases": ["chat", "write-code"],
"recommended_for": ["chat", "write-code"],
"gateway_output_limit": null,
"max_tokens_passthrough": true
}
],
"aliases": { "best": "qwen-3.6-plus" },
"filters": {
"type": [],
"tags": [],
"use_cases": [],
"creator": [],
"recommended_for": [],
"input_modalities": [],
"output_modalities": [],
"supported_parameters": [],
"latency_tier": null,
"cost_tier": null,
"quality_tier": null,
"tier": null,
"capability": null,
"release_stage": null,
"tools": null,
"structured_outputs": null,
"vision": null,
"reasoning": null,
"min_context_window": null,
"max_input_price": null
}
}
created, weights_source, tier,
capability, release_date and output_limit_source.
A model can be served by more than one piece of infrastructure.
context_window,
max_output_tokens and the supports_* flags describe what is achievable for that
model — the largest window reachable, and every capability at least one route can
serve. Requests are matched to a route that can handle them, so a call that needs a
capability never lands somewhere without it.curl https://kymaapi.com/v1/models
curl "https://kymaapi.com/v1/models?type=language&tags=tool-use&use_cases=build-agents"
from openai import OpenAI
client = OpenAI(base_url="https://kymaapi.com/v1", api_key="kyma-your-api-key")
models = client.models.list()
for m in models.data:
print(m.id)