List models — GET /v1/ai/mcp/models
Searches the model catalog — the one GET /v1/models lists — by text, class, family or capability, and answers each match with its class, family, list price (per token and per million; variable for a router billed at the answering model's price), context window and capabilities.
GET /v1/ai/mcp/models
| Address | https://api.hanzo.ai/v1/ai/mcp/models |
| Method | GET |
| Operation | aiModels |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Searches the model catalog — the one GET /v1/models lists — by text, class, family or capability, and answers each match with its class, family, list price (per token and per million; variable for a router billed at the answering model's price), context window and capabilities.
Request
5 fields.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
q | query | string | — | Q matches the model's id, name, description or owner, ignoring case. |
class | query | string | — | Class keeps one class: premium (third-party frontier models), ours (Hanzo's priced models) or free. |
family | query | string | — | Family keeps one Hanzo family: enso, zen, kai or zoo. |
capability | query | string | — | Capability keeps the models that have it: tools, vision or reasoning, or a modality they take or give (text, image, audio, file, video, decision). |
limit | query | integer | — | Limit is the most models to answer, 1 to 500; 0 answers 50. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | aiModels | ok |
default | problem-details | refused |
200 body — 16 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
models | body | aiModel[] | — | Models are the matches, in the catalog's order. |
models[].capabilities | body | string[] | — | Capabilities are tools, vision and reasoning, those the model supports. |
models[].class | body | string | — | Class is premium, ours or free. |
models[].context_window | body | integer (int64) | — | ContextWindow is the most tokens the model reads at once, absent when the catalog does not say. |
models[].family | body | string | — | Family is the Hanzo family (enso, zen, kai, zoo), absent for a third-party model. |
models[].id | body | string | — | ID is the model's id, the one a completion or a decision names. |
models[].inputs | body | string[] | — | Inputs are the modalities the model reads. |
models[].name | body | string | — | Name is the model's display name. |
models[].outputs | body | string[] | — | Outputs are the modalities the model writes. |
models[].pricing | body | aiPrice | — | |
models[].pricing.completion | body | string | — | Completion is the price of one output token, a decimal string. |
models[].pricing.input_per_million | body | number (double) | — | InputPerMillion is the price of a million input tokens. |
models[].pricing.output_per_million | body | number (double) | — | OutputPerMillion is the price of a million output tokens. |
models[].pricing.prompt | body | string | — | Prompt is the price of one input token, a decimal string. |
models[].pricing.variable | body | boolean | — | Variable is true for a router that bills each answer at the price of the model that gave it; the figures above are then that router's ceiling. |
total | body | integer (int64) | — | Total is how many models matched, before Limit. |
Failure carries the platform error shape — see Errors.
Examples
hanzo has no subcommand for this operation — the CLI serves only what cloud's live route table confirms. Use HTTP or an SDK.
import { Configuration, AiApi } from 'hanzoai';
const api = new AiApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.aiModels();from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import AiApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = AiApi(client).ai_models()cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)
resp, _, err := client.AiAPI.AiModels(context.Background()).Execute()
if err != nil {
return err
}use hanzo_client::apis::{configuration::Configuration, ai_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = ai_api::ai_models(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.AiApi;
ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));
var result = new AiApi(client).aiModels();curl https://api.hanzo.ai/v1/ai/mcp/models \
-H "Authorization: Bearer $HANZO_API_KEY"MCP declares no tool for ai — tools/list on https://api.hanzo.ai/v1/mcp names the products it does reach. Use HTTP or an SDK.