Create models
Deploys one inference model for the caller's org, and answers 201 with the model as Kubernetes admitted it.
POST /v1/ml/models
| Address | https://api.hanzo.ai/v1/ml/models |
| Method | POST |
| Operation | post_ml_models |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Deploys one inference model for the caller's org, and answers 201 with the model as Kubernetes admitted it.
The spec is a kserve InferenceService spec, passed through unchanged — this
plane owns the tenancy, the billing and the namespace, and kserve owns what a
model IS. An unfunded org is refused BEFORE anything is created, so nobody runs
free GPU compute and nobody is charged for a resource that was never made.
Request
4 fields, body application/json (required).
| Field | In | Type | Required | Description |
|---|---|---|---|---|
labels | body | object | — | Labels are extra labels to set on the object, merged UNDER the tenancy labels this plane derives from the validated principal — so a label naming another org's… |
labels.* | body | string | — | |
name | body | string | — | Name is the resource's name: a DNS-1123 label (^a-z0-9?$), lowercased and trimmed. |
spec | body | any | — | Spec is the resource's own spec, passed to Kubernetes unchanged. |
Response
| Status | Body | Meaning |
|---|---|---|
201 | mlResource | created |
201 body — 6 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
createdAt | body | string | — | CreatedAt is when Kubernetes admitted the object, RFC 3339 in UTC. |
name | body | string | — | Name is the object's metadata.name, unique within the caller's namespace. |
spec | body | object | — | Spec is the resource spec, verbatim as Kubernetes stores it. |
spec.* | body | object | — | |
status | body | object | — | Status is the live status kserve owns, verbatim. |
status.* | body | object | — |
Failure carries the platform error shape — see Errors.
Examples
hanzo ml models createimport { Configuration, MlApi } from 'hanzoai';
const api = new MlApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postMlModels({ labels: {}, name: "<name>" });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import MlApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = MlApi(client).post_ml_models(labels={}, name="<name>")cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.MlAPI.PostMlModels(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, ml_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = ml_api::post_ml_models(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.MlApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new MlApi(client).postMlModels();curl -X POST https://api.hanzo.ai/v1/ml/models \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"labels": {},
"name": "<name>"
}'MCP reaches ml through the ml tool, which names its 7 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "get_ml_health"
}
}
}'How is this guide?