AI
Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks…
Also for this capability: API · CLI · MCP · SDKs
Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.
| Base URL | https://api.hanzo.ai |
| Operations | 294 |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Specification
HIP-1211 · AI — The Model API — Draft · read the specification →
ai is the model API: the OpenAI- and Anthropic-compatible wire and the routing,
memory, retrieval and fine-tuning surfaces behind it. The implementation is the
hanzoai/ai module, mounted into a cloud binary by hanzoai/cloud apps/ai
with the money, ingest and telemetry callbacks cloud builds but cannot install
(apps/ai/ai.go:1-17). This HIP states the target address surface: the wire
family at the root, everything else under /v1/ai.
Motivation
The module registers one greedy /v1/* door and the manifest hands it the /v1
remainder (manifest/apps.go:444), which is how a dozen satellite roots —
router, memory, rag and their compatibility twins — came to answer beside the
wire under names nobody would call a product. The document now comes from the
module's own router (apps/ai/ai.go:75-90), so the surface is honest about what
it is; this HIP settles which of those roots are the capability's and which are
gone.
Specification
The key words MUST, MUST NOT, SHOULD, SHOULD NOT and MAY are to be interpreted as in RFC 2119.
The wire family stays at the root
The vendor-compatible wire — /v1/chat/completions, /v1/completions,
/v1/embeddings, /v1/messages, /v1/models, /v1/images/*, /v1/audio/*,
/v1/videos/*, /v1/responses, /v1/rerank — is fixed by the protocol every
vendor SDK hard-codes, is exempt by HIP-0139 §3.2, and belongs to ai and to no
other capability. It MUST NOT move.
Everything else answers under /v1/ai
Six satellite roots fold under the capability's own name, each an HTTP binding
of the module's handlers with no store of its own in cloud: the routing
policy/stats/rewards surface (/v1/ai/router), the org's routing settings
(/v1/ai/org/settings), fine-tuning jobs — the module's TrainJob broker —
(/v1/ai/finetune), per-user memories (/v1/ai/memory), the RAG surface
(/v1/ai/rag: embed, query, delete, context, and ingest — /v1/docs/ingest
writes the same index the query reads, so it folds to /v1/ai/rag/ingest
rather than minting a second root), the per-request routing reward
(/v1/ai/feedback), and the public geo aggregate of request traffic
(/v1/ai/traffic).
Six roots are deleted, not moved: /v1/documents and /v1/query and
/v1/query_multiple are compatibility spellings of routes that already exist
under rag; /v1/dev-bridge is desktop tooling that spawns a local child
process; /v1/install-patch is a device-management remnant; /v1/wecom-bot is
a bot channel that belongs to bots if it is ever productized. There is no
alias for any of them. Today's router still serves each satellite at its old
root out of the /v1 remainder; every such pair is a line in hanzoai/cloud
openapi/misfiled.txt until the fold lands. The route moves land in the
hanzoai/ai module, where the router lives (routers/wired_gen.go).
The document is the module's own, read out of the pinned module at describe
time (apps/ai/ai.go:39-71); operations answer the module's envelope, whose
data stays untyped here because per-operation bodies are typing work in the
module that owns the handlers.
Tenancy, money and the count
The capability owns no store in cloud; all state lives behind the hanzoai/ai
module. A request's tenant is the validated principal's org, and every debit and
count is keyed by that namespace and never by a body field. Metering is per
served call, self-reported by the module's one usage hook: a priced call debits
its dollar cost over the internal plane to the commerce ledger, with the
idempotency ref minted server-side per debit so a caller-supplied id can never
dedupe a second answer into a first (apps/ai/ai.go:195-215); a free call
counts once against its subject's plan allowance, and both halves always run
(apps/ai/ai.go:229-256). The plugin declares Price: cloud.Metered
(plugin/ai/main.go:43).
Events and observability
It publishes no events on the tenant bus, so a customer's webhooks receive
nothing from this capability. It emits the gen_ai span family for every
completion, through the host's one tracer provider — adopted at mount so the
module cannot fork a second, dark provider (apps/ai/ai.go:271-287).
Stage
ga, and the row is marked Vital (manifest/apps.go:444).
Upstreams
The capability embeds github.com/hanzoai/ai v1.833.106 (Apache-2.0), which is
the whole implementation — router, wire, memory, rag, finetune. The OpenAI and
Anthropic wire shapes are implemented formats, not embedded code. Nothing else
here derives from an OSS upstream.
Rationale
The alternative for the satellites was to keep them where SDK compatibility put them and describe the exceptions. But the exemption in HIP-0139 §3.2 is exactly as wide as the protocol: the wire paths are hard-coded in vendor SDKs and the satellites are not — LangChain-era twins and device-management remnants have no SDK pinning them, so they take the ordinary rule. Folding rather than splitting follows from the store: there is none in cloud, so §7.1's default applies to every pair.
Security Considerations
The wrong implementation here is free inference and mis-billed inference. The
debit path is the guard on both: the charge is keyed to the validated
namespace, the ref is server-minted (a client-controlled ref let one pinned
owner/name pair dedupe every later completion into the first one's entry —
apps/ai/ai.go:184-193), and the free-call count runs even when the debit
fails, so neither leg's failure opens the other. Deleting the compatibility
roots is also a security act: each was an unowned door into the same index the
canonical routes guard.
Four surfaces
| Surface | Reaches this capability as | Coverage |
|---|---|---|
| REST | ai at its own prefix | 294 operations |
| CLI | hanzo ai … | 294 of 294 |
| SDK | AiApi in every published client | 258 of 294 — the clients are generated at their own release |
| MCP | tool ai on https://api.hanzo.ai/v1/mcp | 294 operations, 8 under the document's own id — ask describe for the rest |
Quickstart
export HANZO_API_KEY=sk-... # console.hanzo.ai → API keysThen the first call — a read that needs nothing but the key. GET /v1/models, operation get_models:
hanzo models listimport { Configuration, AiApi } from 'hanzoai';
const api = new AiApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getModels();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).get_models()cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.AiAPI.GetModels(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::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::get_models(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.AiApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new AiApi(client).getModels();curl https://api.hanzo.ai/v1/models \
-H "Authorization: Bearer $HANZO_API_KEY"MCP reaches ai through the ai tool, which names its 294 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": "list_models"
}
}
}'Endpoints
| Endpoint | What it does |
|---|---|
GET /v1/ai/account | Account |
GET /v1/ai/activities | List activities |
GET /v1/ai/answer | Answer |
GET /v1/ai/articles/{owner}/{name} | Retrieve a article |
PUT /v1/ai/articles/{owner}/{name} | Replace a article |
PATCH /v1/ai/articles/{owner}/{name} | Update a article |
DELETE /v1/ai/articles/{owner}/{name} | Delete a article |
GET /v1/ai/articles/global | List articles across tenants |
GET /v1/ai/articles | List articles |
POST /v1/ai/articles | Create a article |
POST /v1/ai/assets/{owner}/{name}/scan | Scan (asset) |
GET /v1/ai/assets/{owner}/{name} | Retrieve a asset |
PUT /v1/ai/assets/{owner}/{name} | Replace a asset |
PATCH /v1/ai/assets/{owner}/{name} | Update a asset |
DELETE /v1/ai/assets/{owner}/{name} | Delete a asset |
POST /v1/ai/assets/scan | Scan (asset) |
GET /v1/ai/assets | List assets |
POST /v1/ai/assets | Create a asset |
GET /v1/ai/chats/{owner}/{name} | Retrieve a chat |
PUT /v1/ai/chats/{owner}/{name} | Replace a chat |
PATCH /v1/ai/chats/{owner}/{name} | Update a chat |
DELETE /v1/ai/chats/{owner}/{name} | Delete a chat |
GET /v1/ai/chats/global | List chats across tenants |
GET /v1/ai/chats | List chats |
POST /v1/ai/chats | Create a chat |
GET /v1/ai/connections/{provider}/authorize | Begins an OAuth connection for the caller's org: it binds the org into a signed state and sends the caller to the provider's authorize URL. |
GET /v1/ai/connections/{provider}/callback | Completes OAuth: the org is recovered from the SIGNED state (not a header), the code is exchanged for a token, the token is SEALED into KMS (never… |
GET /v1/ai/connections/{provider}/usage | Imports the caller org's usage for a connected third-party account. |
POST /v1/ai/connections/{provider} | Disconnects a third-party AI account: it deactivates the org's row so completion resolution falls back to the global Hanzo account (no BYO), and… |
DELETE /v1/ai/connections/{provider} | Disconnects a third-party AI account: it deactivates the org's row so completion resolution falls back to the global Hanzo account (no BYO), and… |
GET /v1/ai/connections | Lists the org's connectable AI accounts and whether each is currently connected. |
POST /v1/ai/connections | Connects (or reconnects) a third-party AI account for the org by sealing the supplied key into KMS and upserting the org's provider row. |
GET /v1/ai/dashboards/agents | Dashboards Agents |
GET /v1/ai/dashboards/vm | Dashboards Vm |
POST /v1/ai/deployments/{owner}/{name}/deploy | Deploy (application) |
POST /v1/ai/deployments/{owner}/{name}/undeploy | Undeploy (application) |
GET /v1/ai/deployments/{owner}/{name} | Retrieve a application |
PUT /v1/ai/deployments/{owner}/{name} | Replace a application |
PATCH /v1/ai/deployments/{owner}/{name} | Update a application |
DELETE /v1/ai/deployments/{owner}/{name} | Delete a application |
GET /v1/ai/deployments | List deployments |
POST /v1/ai/deployments | Create a application |
POST /v1/ai/feedback | Attaches a per-request outcome reward to the routing decision that served request_id — the enso training loop's quality signal. |
POST /v1/ai/files/{owner}/{name}/vectors | Vectors (file) |
GET /v1/ai/files/{owner}/{name} | Retrieve a file |
PUT /v1/ai/files/{owner}/{name} | Replace a file |
PATCH /v1/ai/files/{owner}/{name} | Update a file |
DELETE /v1/ai/files/{owner}/{name} | Delete a file |
POST /v1/ai/files/activate | Activate (file) |
GET /v1/ai/files/active | Active (file) |
GET /v1/ai/files/global | List files across tenants |
POST /v1/ai/files/upload | Upload (file) |
GET /v1/ai/files | List files |
POST /v1/ai/files | Create a file |
POST /v1/ai/finetune/cancel | Deletes the TrainJob CR, meters the GPU-hours used so far, and marks the job cancelled. |
POST /v1/ai/finetune/deploy | Serves a completed job's checkpoints and registers the result as a routable model on api.hanzo.ai. |
GET /v1/ai/finetune/hf/datasets | Proxies a HuggingFace dataset search (dataset picker). |
GET /v1/ai/finetune/hf/models | Proxies a HuggingFace model search (base-model picker). |
GET /v1/ai/finetune/hf/repo | Returns a repo's detail (files, gated/private state). |
GET /v1/ai/finetune/job | Returns one job with refreshed live status. |
GET /v1/ai/finetune/jobs | Returns the org's jobs, refreshing live status for active ones. |
POST /v1/ai/finetune/jobs | Validates the request, resolves efficient defaults, persists the job, and submits a real TrainJob CR. |
GET /v1/ai/finetune/presets | Returns the new-job catalog plus, when a selection is passed (?baseModel&method&task&preset[&datasetExamples]), the recommended config so the console… |
GET /v1/ai/forms/{owner}/{name} | Retrieve a form |
PUT /v1/ai/forms/{owner}/{name} | Replace a form |
PATCH /v1/ai/forms/{owner}/{name} | Update a form |
DELETE /v1/ai/forms/{owner}/{name} | Delete a form |
GET /v1/ai/forms/data | Data (form) |
GET /v1/ai/forms/global | List forms across tenants |
GET /v1/ai/forms | List forms |
POST /v1/ai/forms | Create a form |
GET /v1/ai/graphs/{owner}/{name} | Retrieve a graph |
PUT /v1/ai/graphs/{owner}/{name} | Replace a graph |
PATCH /v1/ai/graphs/{owner}/{name} | Update a graph |
DELETE /v1/ai/graphs/{owner}/{name} | Delete a graph |
GET /v1/ai/graphs/global | List graphs across tenants |
GET /v1/ai/graphs | List graphs |
POST /v1/ai/graphs | Create a graph |
GET /v1/ai/k8s-status | K8s Status |
GET /v1/ai/mcp/tools | Tools reports what THIS PROCESS's MCP server carries: how many tools its own registry projects, optionally their names, and which subsystems this… |
POST /v1/ai/memory/delete | Delete one of the authenticated user's memories |
GET /v1/ai/memory/facts | List the authenticated user's stored facts |
GET /v1/ai/memory/list | List the authenticated user's memories, newest first |
GET /v1/ai/memory/recall | Recall recent/relevant memories for context injection; with q it |
POST /v1/ai/memory/remember | Store a memory for the authenticated user |
GET /v1/ai/memory/search | Search the authenticated user's memories (semantic, text fallback) |
POST /v1/ai/memory/update | Update one of the authenticated user's memories |
GET /v1/ai/messages/{owner}/{name}/answer | Answer (message) |
GET /v1/ai/messages/{owner}/{name} | Retrieve a message |
PUT /v1/ai/messages/{owner}/{name} | Replace a message |
PATCH /v1/ai/messages/{owner}/{name} | Update a message |
DELETE /v1/ai/messages/{owner}/{name} | Delete a message |
GET /v1/ai/messages/global | List messages across tenants |
DELETE /v1/ai/messages/welcome | Welcome (message) |
GET /v1/ai/messages | List messages |
POST /v1/ai/messages | Create a message |
GET /v1/ai/nodes/{owner}/{name}/tunnel | Tunnel (node) |
POST /v1/ai/nodes/{owner}/{name}/tunnel | Tunnel (node) |
GET /v1/ai/nodes/{owner}/{name} | Retrieve a node |
PUT /v1/ai/nodes/{owner}/{name} | Replace a node |
PATCH /v1/ai/nodes/{owner}/{name} | Update a node |
DELETE /v1/ai/nodes/{owner}/{name} | Delete a node |
GET /v1/ai/nodes | List nodes |
POST /v1/ai/nodes | Create a node |
GET /v1/ai/org/settings/list | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
POST /v1/ai/org/settings/list | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PUT /v1/ai/org/settings/list | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PATCH /v1/ai/org/settings/list | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
DELETE /v1/ai/org/settings/list | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
GET /v1/ai/org/settings | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
POST /v1/ai/org/settings | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PUT /v1/ai/org/settings | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PATCH /v1/ai/org/settings | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
DELETE /v1/ai/org/settings | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PUT /v1/ai/preferences | Preferences |
PATCH /v1/ai/preferences | Preferences |
GET /v1/ai/prometheus | Prometheus |
GET /v1/ai/providers/{owner}/{name} | Retrieve a provider |
PUT /v1/ai/providers/{owner}/{name} | Replace a provider |
PATCH /v1/ai/providers/{owner}/{name} | Update a provider |
DELETE /v1/ai/providers/{owner}/{name} | Delete a provider |
GET /v1/ai/providers/global | List providers across tenants |
POST /v1/ai/providers/mcp-tools | Mcp Tools (provider) |
GET /v1/ai/providers | List providers |
POST /v1/ai/providers | Create a provider |
GET /v1/ai/rag/context | Return every stored chunk of one file_id (full document context). |
POST /v1/ai/rag/delete | Delete all chunks of one or more uploaded files (by file_id) from the owner's Search+Vector index. |
POST /v1/ai/rag/embed | Parse, chunk, and embed one uploaded file under its file_id into the unified Search+Vector index, scoped to the authenticated owner. |
POST /v1/ai/rag/ingest | Unified RAG ingest: parse + chunk + embed documents and pipe them to BOTH Hanzo Vector (semantic) AND Hanzo Search (keyword) under the tenant index… |
POST /v1/ai/rag/query-multiple | Retrieve the top-K chunks relevant to a query, scoped to a SET of uploaded files (file_ids). |
POST /v1/ai/rag/query | Retrieve the top-K chunks relevant to a query, scoped to a single uploaded file (file_id). |
GET /v1/ai/records/{owner}/{name} | Retrieve a record |
PUT /v1/ai/records/{owner}/{name} | Replace a record |
PATCH /v1/ai/records/{owner}/{name} | Update a record |
DELETE /v1/ai/records/{owner}/{name} | Delete a record |
POST /v1/ai/records/batch | Batch (record) |
POST /v1/ai/records/commit-second | Commit Second (record) |
POST /v1/ai/records/commit | Commit (record) |
GET /v1/ai/records/query-second | Query Second (record) |
GET /v1/ai/records/query | Query (record) |
GET /v1/ai/records | List records |
POST /v1/ai/records | Create a record |
POST /v1/ai/remote-connections/{owner}/{name}/start | Start (connection) |
POST /v1/ai/remote-connections/{owner}/{name}/stop | Stop (connection) |
GET /v1/ai/remote-connections/{owner}/{name} | Retrieve a connection |
PUT /v1/ai/remote-connections/{owner}/{name} | Replace a connection |
PATCH /v1/ai/remote-connections/{owner}/{name} | Update a connection |
DELETE /v1/ai/remote-connections/{owner}/{name} | Delete a connection |
GET /v1/ai/remote-connections | List remote-connections |
POST /v1/ai/remote-connections | Create a connection |
GET /v1/ai/router/artifact-meta | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
POST /v1/ai/router/artifact-meta | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PUT /v1/ai/router/artifact-meta | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PATCH /v1/ai/router/artifact-meta | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
DELETE /v1/ai/router/artifact-meta | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
GET /v1/ai/router/data | Router Data |
DELETE /v1/ai/router/data | Router Data |
GET /v1/ai/router/defaults | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
POST /v1/ai/router/defaults | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PUT /v1/ai/router/defaults | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PATCH /v1/ai/router/defaults | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
DELETE /v1/ai/router/defaults | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
GET /v1/ai/router/history | Returns the router-improvement time-series. |
GET /v1/ai/router/judge-panel | Returns the LIVE Mean-Field Judge Panel state: the configured panel + dynamic judge posture (enabled/sample) resolved from the "*" GlobalDefaultOwner… |
GET /v1/ai/router/ledger | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
POST /v1/ai/router/ledger | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PUT /v1/ai/router/ledger | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PATCH /v1/ai/router/ledger | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
DELETE /v1/ai/router/ledger | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
GET /v1/ai/router/policy | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
POST /v1/ai/router/policy | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PUT /v1/ai/router/policy | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PATCH /v1/ai/router/policy | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
DELETE /v1/ai/router/policy | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
GET /v1/ai/router/rewards | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
POST /v1/ai/router/rewards | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PUT /v1/ai/router/rewards | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
PATCH /v1/ai/router/rewards | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
DELETE /v1/ai/router/rewards | The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and… |
GET /v1/ai/router/stats | Returns the router observability aggregate. |
GET /v1/ai/routes/{owner}/{name} | Retrieve a model-route |
PUT /v1/ai/routes/{owner}/{name} | Replace a model-route |
PATCH /v1/ai/routes/{owner}/{name} | Update a model-route |
DELETE /v1/ai/routes/{owner}/{name} | Delete a model-route |
GET /v1/ai/routes | List routes |
POST /v1/ai/routes | Create a model-route |
GET /v1/ai/scales/{owner}/{name} | Retrieve a scale |
PUT /v1/ai/scales/{owner}/{name} | Replace a scale |
PATCH /v1/ai/scales/{owner}/{name} | Update a scale |
DELETE /v1/ai/scales/{owner}/{name} | Delete a scale |
GET /v1/ai/scales/global | List scales across tenants |
GET /v1/ai/scales/public | Public (scale) |
GET /v1/ai/scales | List scales |
POST /v1/ai/scales | Create a scale |
GET /v1/ai/scans/{owner}/{name} | Retrieve a scan |
PUT /v1/ai/scans/{owner}/{name} | Replace a scan |
PATCH /v1/ai/scans/{owner}/{name} | Update a scan |
DELETE /v1/ai/scans/{owner}/{name} | Delete a scan |
GET /v1/ai/scans | List scans |
POST /v1/ai/scans | Create a scan |
GET /v1/ai/signin-sessions/{owner}/{name} | Retrieve a session |
PUT /v1/ai/signin-sessions/{owner}/{name} | Replace a session |
PATCH /v1/ai/signin-sessions/{owner}/{name} | Update a session |
DELETE /v1/ai/signin-sessions/{owner}/{name} | Delete a session |
GET /v1/ai/signin-sessions/duplicated | Duplicated (session) |
GET /v1/ai/signin-sessions | List signin-sessions |
POST /v1/ai/signin-sessions | Create a session |
POST /v1/ai/signin | Signin |
POST /v1/ai/signout | Signout |
POST /v1/ai/stores/{owner}/{name}/vectors | Vectors (store) |
GET /v1/ai/stores/{owner}/{name} | Retrieve a store |
PUT /v1/ai/stores/{owner}/{name} | Replace a store |
PATCH /v1/ai/stores/{owner}/{name} | Update a store |
DELETE /v1/ai/stores/{owner}/{name} | Delete a store |
GET /v1/ai/stores/global | List stores across tenants |
GET /v1/ai/stores/names | Names (store) |
GET /v1/ai/stores/providers | Providers (store) |
GET /v1/ai/stores | List stores |
POST /v1/ai/stores | Create a store |
GET /v1/ai/system | System |
POST /v1/ai/tasks/{owner}/{name}/analyze | Analyze (task) |
POST /v1/ai/tasks/{owner}/{name}/document | Document (task) |
GET /v1/ai/tasks/{owner}/{name} | Retrieve a task |
PUT /v1/ai/tasks/{owner}/{name} | Replace a task |
PATCH /v1/ai/tasks/{owner}/{name} | Update a task |
DELETE /v1/ai/tasks/{owner}/{name} | Delete a task |
GET /v1/ai/tasks/global | List tasks across tenants |
GET /v1/ai/tasks | List tasks |
POST /v1/ai/tasks | Create a task |
GET /v1/ai/templates/{owner}/{name} | Retrieve a template |
PUT /v1/ai/templates/{owner}/{name} | Replace a template |
PATCH /v1/ai/templates/{owner}/{name} | Update a template |
DELETE /v1/ai/templates/{owner}/{name} | Delete a template |
GET /v1/ai/templates | List templates |
POST /v1/ai/templates | Create a template |
GET /v1/ai/traffic/globe | Returns the PUBLIC live request-geo aggregate for the world.hanzo.ai "Hanzo mode" globe: WHERE requests to api.hanzo.ai are coming from, as… |
GET /v1/ai/training-contribution | Training Contribution |
PUT /v1/ai/training-contribution | Training Contribution |
PATCH /v1/ai/training-contribution | Training Contribution |
PUT /v1/ai/tree-files/{owner}/{name} | Replace a tree-file |
PATCH /v1/ai/tree-files/{owner}/{name} | Update a tree-file |
DELETE /v1/ai/tree-files/{owner}/{name} | Delete a tree-file |
POST /v1/ai/tree-files | Create a tree-file |
GET /v1/ai/usages/by-user | By User (usage) |
GET /v1/ai/usages/cloud | Cloud (usage) |
GET /v1/ai/usages/range | Range (usage) |
GET /v1/ai/usages/user-names | User Names (usage) |
GET /v1/ai/usages | List usages |
GET /v1/ai/vectors/{owner}/{name} | Retrieve a vector |
PUT /v1/ai/vectors/{owner}/{name} | Replace a vector |
PATCH /v1/ai/vectors/{owner}/{name} | Update a vector |
DELETE /v1/ai/vectors/{owner}/{name} | Delete a vector |
DELETE /v1/ai/vectors/all | All (vector) |
GET /v1/ai/vectors/global | List vectors across tenants |
GET /v1/ai/vectors | List vectors |
POST /v1/ai/vectors | Create a vector |
GET /v1/ai/version | Version |
GET /v1/ai/videos/{owner}/{name} | Retrieve a video |
PUT /v1/ai/videos/{owner}/{name} | Replace a video |
PATCH /v1/ai/videos/{owner}/{name} | Update a video |
DELETE /v1/ai/videos/{owner}/{name} | Delete a video |
GET /v1/ai/videos/global | List videos across tenants |
POST /v1/ai/videos/upload | Upload (video) |
GET /v1/ai/videos | List videos |
POST /v1/ai/videos | Create a video |
GET /v1/ai/workflows/{owner}/{name} | Retrieve a workflow |
PUT /v1/ai/workflows/{owner}/{name} | Replace a workflow |
PATCH /v1/ai/workflows/{owner}/{name} | Update a workflow |
DELETE /v1/ai/workflows/{owner}/{name} | Delete a workflow |
GET /v1/ai/workflows/global | List workflows across tenants |
GET /v1/ai/workflows | List workflows |
POST /v1/ai/workflows | Create a workflow |
POST /v1/audio/foley | Serves the generative audio verbs — /v1/audio/voice (TTS), /music, /foley — that the Zen family serves natively. |
POST /v1/audio/music | Serves the generative audio verbs — /v1/audio/voice (TTS), /music, /foley — that the Zen family serves natively. |
POST /v1/audio/speech | The OpenAI-compatible TTS endpoint (POST /v1/audio/speech). |
POST /v1/audio/transcriptions | The OpenAI-compatible STT endpoint (POST /v1/audio/transcriptions, multipart: file + model [+ language + response_format]). |
POST /v1/audio/voice | Serves the generative audio verbs — /v1/audio/voice (TTS), /music, /foley — that the Zen family serves natively. |
POST /v1/chat/completions | Implements the OpenAI-compatible chat completions API |
POST /v1/chat/public | Serves one completion to a caller with no account. |
POST /v1/chat | Implements the OpenAI-compatible chat completions API |
POST /v1/completions | Implements the OpenAI-compatible chat completions API |
POST /v1/embeddings | Implements POST /v1/embeddings (OpenAI-compatible). |
POST /v1/images/generations | Implements POST /v1/images/generations (OpenAI-compatible). |
POST /v1/messages/count_tokens | Implements POST /v1/messages/count_tokens. |
POST /v1/messages | Implements the Anthropic Messages API. |
GET /v1/models/{model}/access | Returns the caller's own standing for a gated model: "granted", "requested", or empty when they have never asked. |
POST /v1/models/{model}/access | Records the caller's waitlist request for a gated model and answers their new standing. |
GET /v1/models/providers | Public, secret-free list of the providers serving the models that GET /v1/models lists — the same source, projected. |
GET /v1/models | Returns the list of available models from the routing table. |
POST /v1/rerank | Implements POST /v1/rerank (Cohere/Jina-compatible). |
POST /v1/responses | Implements POST /v1/responses. |
GET /v1/videos/{id}/content | Implements GET /v1/videos/{id}/content — download the finished MP4. |
GET /v1/videos/{id} | Implements GET /v1/videos/{id} — poll a job's status. |
POST /v1/videos/generations | Implements POST /v1/videos/generations — the ASYNC create. |
How is this guide?