Deploys one inference model for the caller's org, and answers 201 with the…
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>"
}'The door reaches ml through the ml tool, which names its 7 operations with its own verbs — this one among them, under a name only the door 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?