openapi: V8 · Open Edition — capabilities manifest + drop eval/operative dups (#26)
- capabilities.yaml: THE registry — 8 domains, one capability = one name = one /v1/<name> = one spec. core + internal + collapsed + pending + review. merge.py's grouping source. - info.version 1.0.0 -> 8.0.0 everywhere (routes stay /v1 — the contract is immutable; 8.0.0 is the platform generation). Title carries 'V8 · Open Edition'. - drop eval/ (pure dup of evals) + operative/ (computer-using-agent split: bot = the CUA, visor = the VM it runs on). hanzo.yaml regenerated.
This commit is contained in:
+1
-1
@@ -15,7 +15,7 @@ info:
|
||||
|
||||
Reads use the `/v1` envelope `{ status, msg, data, data2 }` — `data` is the
|
||||
payload, `data2` the total for list endpoints.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -35,7 +35,7 @@ info:
|
||||
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ info:
|
||||
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ info:
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service. API keys (`hk-...`) minted on hanzo.id
|
||||
are accepted on these routes as well.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: Hanzo Analytics API
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
description: Web analytics API for tracking website traffic, events, sessions, and generating reports.
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ info:
|
||||
`dist/`) or queues a git/CI build.
|
||||
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`).
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -33,7 +33,7 @@ info:
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service. Admin routes require a global-admin
|
||||
identity (fail-closed).
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ info:
|
||||
iam derives from the JWT.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ info:
|
||||
for full schema definitions and detailed endpoint documentation.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -9,7 +9,7 @@ info:
|
||||
in-process tasks engine; connector actions are also exposed as MCP tools at
|
||||
`/v1/automations/mcp`. Every flow runs in the OWNER org's namespace; the org
|
||||
is always server-derived from the validated principal, never a request body.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ info:
|
||||
`site_drafts` collection keyed by `(org, slug)`.
|
||||
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`).
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -10,7 +10,7 @@ info:
|
||||
another tenant's wallet. Bodies + status codes are forwarded from commerce
|
||||
verbatim (e.g. `402` on `gpu-charge` when a card is required or prepaid is
|
||||
insufficient).
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ info:
|
||||
pgvector for semantic skill search.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
# capabilities.yaml — the ONE registry of Hanzo public capabilities.
|
||||
#
|
||||
# One and one way, by construction:
|
||||
# • every openapi/<name>/openapi.yaml MUST appear here exactly once, in exactly
|
||||
# one domain — merge.py FAILS the build on an orphan spec, an unlisted spec,
|
||||
# or a name in two domains. Orthogonality is a build invariant, not a hope.
|
||||
# • the route IS the identity: one capability = one name = one /v1/<name> = one
|
||||
# <name>/openapi.yaml. No svc suffix, no singular/plural twins, no facade.
|
||||
# • merge.py emits x-tagGroups from `domains` so Redoc/Scalar render the eight
|
||||
# movements automatically. Docs + SDKs derive from hanzo.yaml — never hand-kept.
|
||||
#
|
||||
# version: the API path stays /v1 (the compatibility contract, immutable). The
|
||||
# release/generation is V8 — info.version: 8.0.0 on hanzo.yaml + every spec.
|
||||
|
||||
edition: "V8 · Open Edition"
|
||||
version: "8.0.0"
|
||||
|
||||
domains:
|
||||
- id: identity
|
||||
title: "Identity & Trust"
|
||||
role: "who you are · what you may touch · where secrets live"
|
||||
services: [iam, authz, kms, security, did, zt, guard]
|
||||
|
||||
- id: intelligence
|
||||
title: "Intelligence"
|
||||
role: "models · agents · evaluation — the mind of the cloud"
|
||||
services: [ai, ml, engine, agents, evals, prompts, functions, exec, graph]
|
||||
|
||||
- id: data
|
||||
title: "Data"
|
||||
role: "the stores every capability writes to and reads from"
|
||||
services: [storage, base, db, kv, vector]
|
||||
|
||||
- id: streams
|
||||
title: "Streams"
|
||||
role: "messaging · durable tasks · async orchestration"
|
||||
services: [pubsub, mq, stream, tasks, notify, automations, flow, auto]
|
||||
|
||||
- id: observability
|
||||
title: "Observability"
|
||||
role: "see everything — telemetry · analytics · usage"
|
||||
services: [o11y, analytics]
|
||||
|
||||
- id: commerce
|
||||
title: "Commerce"
|
||||
role: "the economy — meter · price · bill · reward"
|
||||
services: [commerce, billing, pricing, plan, product, crm, referrals, affiliates, licensing, treasury, wallets]
|
||||
|
||||
- id: platform
|
||||
title: "Platform"
|
||||
role: "the cloud fabric — deploy · provision · route · host"
|
||||
services: [cloud, platform, paas, provisioning, gateway, visor, edge, dns, registry, nexus]
|
||||
|
||||
- id: applications
|
||||
title: "Applications"
|
||||
role: "the user-facing surfaces built on all of the above"
|
||||
services: [console, projects, git, team, templates, integrations, bot, chat, kb, search, websearch, authors, sites, tracker, framework]
|
||||
|
||||
# Core — governance that owns no single domain.
|
||||
core: [admin, plugin]
|
||||
|
||||
# Internal — power the music, are not instruments. Excluded from /v1, SDKs, docs.
|
||||
internal: [principal, goja, mpc, controlplane, metrics, audit]
|
||||
|
||||
# Collapsed — resolved duplicates / consolidations. merge.py asserts these have
|
||||
# NO spec dir (they were removed), and records where the capability now lives.
|
||||
collapsed:
|
||||
eval: evals # pure dup — same /v1/evals
|
||||
observe: o11y + console/settings # /v1/o11y facet → o11y; /v1/settings → console
|
||||
operative: bot + visor # computer-using-agent split: bot = the CUA (@hanzo/bot), visor = the VM it runs on
|
||||
s3: storage # renamed: storage is the capability, s3 the implementation
|
||||
plans: plan # singular canonical
|
||||
plugins: plugin
|
||||
|
||||
# Not-yet-scored — LIVE surfaces missing a spec. Author these to complete the set.
|
||||
pending: [team, wallets, treasury, usage, fleet]
|
||||
|
||||
# Braids under review — same concern, different names? Verify before merging;
|
||||
# do NOT silently consolidate (would lose capability). merge.py warns, not fails.
|
||||
review:
|
||||
app_vs_projects: "app (hanzo.app builds/deploys) vs projects (buildable/deployable sites) — likely ONE concern; fold app→projects?"
|
||||
do_is_a_provider: "do (DigitalOcean VPCs/LBs) is a PROVIDER, not a capability — fold into provisioning/platform?"
|
||||
workflow_cluster: "auto (Hanzo Auto engine) · automations (connector pieces) · flow — three workflow surfaces; decomplect to one?"
|
||||
retrieval_cluster: "search vs kb (semantic) vs vector (store) — overlapping retrieval; is search distinct from kb?"
|
||||
+1
-1
@@ -6,7 +6,7 @@ info:
|
||||
MCP integration, agents, assistants, and RAG.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ openapi: 3.1.0
|
||||
info:
|
||||
title: Hanzo Cloud API
|
||||
description: Hanzo Cloud Backend API — AI model management, inference, and usage tracking.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -24,7 +24,7 @@ info:
|
||||
Tokens can be obtained via the OAuth2 password grant flow at `/auth`.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -23,7 +23,7 @@ info:
|
||||
Project-scoped API keys support project-level endpoints (traces, observations, scores, etc.).
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ info:
|
||||
proxy to a NestJS backend. Tenant isolation is enforced server-side on every
|
||||
request from the validated bearer owner claim; one tenant can never read or
|
||||
mutate another's records.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ info:
|
||||
- Usage-based billing (compute CU-hours, storage GB-hours, data transfer)
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ info:
|
||||
- Full identity change history and audit trail
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ info:
|
||||
- Full DNS record type support (A, AAAA, CNAME, MX, TXT, SRV, NS, SOA, CAA)
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ info:
|
||||
|
||||
Fail-closed: absent `DO_API_TOKEN` the surface mounts but every op returns
|
||||
503; it never fabricates a resource.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ info:
|
||||
- Built-in metrics and log tailing
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ info:
|
||||
- **Serve**: Model serving endpoint management with autoscaling
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
-1186
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -20,7 +20,7 @@ info:
|
||||
|
||||
Backends are pluggable: the native Hanzo engine is the default; DigitalOcean
|
||||
GenAI evaluations can be selected as an alternate backend per run.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ info:
|
||||
AUTH: this surface is called server-side by the chat node process with a
|
||||
shared service key on the `X-API-Key` header (NOT a user JWT — the gateway
|
||||
bypasses these paths). An unset key fails closed (503); a wrong key is 401.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ info:
|
||||
Integrates with the Hanzo ecosystem (Hanzo MQ, Hanzo KV).
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -15,7 +15,7 @@ info:
|
||||
|
||||
Everything is org-scoped: the org is the validated tenant, so one org's
|
||||
schema and data are invisible to another.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -10,7 +10,7 @@ info:
|
||||
its triggers, deployments, secrets, invocations, and metrics. Tenant
|
||||
isolation is enforced server-side from the validated bearer `owner` claim
|
||||
(HIP-0026).
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -23,7 +23,7 @@ info:
|
||||
- DNS proxy routes
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ info:
|
||||
`.../git-receive-pack`) speak the native Git wire protocol so
|
||||
`git clone` / `git fetch` / `git push` work against
|
||||
`https://api.hanzo.ai/v1/git/<org>/<repo>.git`.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ info:
|
||||
fabricates a row. An unreachable upstream surfaces an honest 502; a
|
||||
reachable-but-empty upstream returns an empty list. Every route requires a
|
||||
validated IAM principal (HIP-0026).
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ info:
|
||||
- **PTY Wrapper** (guard-wrap): wraps CLI tools with filtering
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+2
-1410
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -2,7 +2,7 @@ openapi: 3.1.0
|
||||
info:
|
||||
title: Hanzo IAM API
|
||||
description: Hanzo IAM — Identity and Access Management (OAuth2, OIDC, SAML, Web3)
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -11,7 +11,7 @@ info:
|
||||
(events + slash commands) and the per-user account-link browser flow — those
|
||||
legs authenticate INSIDE the handler (HMAC-signed body / `__Host-` cookies +
|
||||
state), not with a bearer token.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ info:
|
||||
|
||||
Every route is org-scoped to the validated tenant — a caller can only search or
|
||||
connect its own knowledge.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ info:
|
||||
secrets, PKI, integrations, and audit logging.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ info:
|
||||
- Append-only streams for event sourcing
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -127,7 +127,7 @@ def main():
|
||||
out = {
|
||||
"openapi": "3.1.0",
|
||||
"info": {
|
||||
"title": "Hanzo Cloud — Unified API",
|
||||
"title": "Hanzo Cloud — Unified API (V8 · Open Edition)",
|
||||
"description": (
|
||||
"The single unified OpenAPI surface for ALL Hanzo services, "
|
||||
"aggregated from the per-service specs. Every route is "
|
||||
@@ -135,7 +135,7 @@ def main():
|
||||
"canonical categories (see CAPABILITIES.md). Regenerated by "
|
||||
"merge.py — edit the per-service <svc>/openapi.yaml, not this file."
|
||||
),
|
||||
"version": "1.0.0",
|
||||
"version": "8.0.0",
|
||||
"contact": {"name": "Hanzo AI", "url": "https://hanzo.ai", "email": "[email protected]"},
|
||||
"license": {"name": "Proprietary"},
|
||||
},
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ info:
|
||||
- Direct deployment to Hanzo Cloud
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ info:
|
||||
multi-tenancy, IAM integration, and KMS-managed secrets.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
email: [email protected]
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ info:
|
||||
title: Hanzo Nexus API
|
||||
description: Hanzo Nexus is a knowledge base and RAG (Retrieval-Augmented Generation) platform. It provides document management,
|
||||
vector embeddings, semantic search, and AI-powered question answering across organizational knowledge stores.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ info:
|
||||
token authenticates every Hanzo service.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ info:
|
||||
- **Alerts**: Rule-based alerting with multi-channel notifications
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -25,7 +25,7 @@ info:
|
||||
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -1,665 +0,0 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: Hanzo Operative API
|
||||
description: 'Hanzo Operative is a computer-use agent that allows Claude to interact with
|
||||
|
||||
a desktop environment via screenshot, mouse, keyboard, bash, and file-editing
|
||||
|
||||
tools. It runs inside a Docker container with X11/Xvfb and exposes a Streamlit
|
||||
|
||||
UI for human interaction, an HTTP API for configuration, and WebSocket-based
|
||||
|
||||
VNC for live desktop viewing.
|
||||
|
||||
|
||||
The API provides endpoints for managing agent sessions, executing computer-use
|
||||
|
||||
tasks, retrieving screenshots, and configuring the operative environment.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
email: [email protected]
|
||||
license:
|
||||
name: MIT
|
||||
url: https://opensource.org/licenses/MIT
|
||||
servers:
|
||||
- url: https://operative.hanzo.ai
|
||||
description: Operative Production
|
||||
- url: https://api.hanzo.ai
|
||||
description: Hanzo Gateway (via api.hanzo.ai/v1/operative/*)
|
||||
security:
|
||||
- BearerAuth: []
|
||||
tags:
|
||||
- name: Sessions
|
||||
description: Manage operative agent sessions
|
||||
- name: Tasks
|
||||
description: Submit and monitor computer-use tasks
|
||||
- name: Computer
|
||||
description: Direct computer interaction (screenshot, mouse, keyboard)
|
||||
- name: Tools
|
||||
description: Tool execution (bash, file editor)
|
||||
- name: Configuration
|
||||
description: Environment and agent configuration
|
||||
paths:
|
||||
/v1/operative/sessions:
|
||||
post:
|
||||
operationId: createSession
|
||||
summary: Create a new operative session
|
||||
description: 'Creates a new agent session with the specified model, provider, and
|
||||
|
||||
configuration. Returns a session ID for subsequent interactions.
|
||||
|
||||
'
|
||||
tags:
|
||||
- Sessions
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateSessionRequest'
|
||||
responses:
|
||||
'201':
|
||||
description: Session created successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Session'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
get:
|
||||
operationId: listSessions
|
||||
summary: List all active sessions
|
||||
tags:
|
||||
- Sessions
|
||||
parameters:
|
||||
- name: status
|
||||
in: query
|
||||
schema:
|
||||
type: string
|
||||
enum:
|
||||
- active
|
||||
- completed
|
||||
- failed
|
||||
- name: limit
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
default: 20
|
||||
- name: offset
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
default: 0
|
||||
responses:
|
||||
'200':
|
||||
description: List of sessions
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
sessions:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Session'
|
||||
total:
|
||||
type: integer
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
/v1/operative/sessions/{sessionId}:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/SessionId'
|
||||
get:
|
||||
operationId: getSession
|
||||
summary: Get session details
|
||||
tags:
|
||||
- Sessions
|
||||
responses:
|
||||
'200':
|
||||
description: Session details
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Session'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
delete:
|
||||
operationId: deleteSession
|
||||
summary: Terminate and delete a session
|
||||
tags:
|
||||
- Sessions
|
||||
responses:
|
||||
'204':
|
||||
description: Session terminated
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
/v1/operative/sessions/{sessionId}/messages:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/SessionId'
|
||||
post:
|
||||
operationId: sendMessage
|
||||
summary: Send a message to the operative agent
|
||||
description: 'Sends a user message to the agent, which triggers the sampling loop.
|
||||
|
||||
The agent will process the message, potentially use tools (computer,
|
||||
|
||||
bash, editor), and return a response with any tool results.
|
||||
|
||||
'
|
||||
tags:
|
||||
- Tasks
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/SendMessageRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Agent response with tool results
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AgentResponse'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
get:
|
||||
operationId: getMessages
|
||||
summary: Get conversation history for a session
|
||||
tags:
|
||||
- Tasks
|
||||
responses:
|
||||
'200':
|
||||
description: Conversation messages
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
messages:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Message'
|
||||
/v1/operative/sessions/{sessionId}/screenshot:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/SessionId'
|
||||
get:
|
||||
operationId: takeScreenshot
|
||||
summary: Take a screenshot of the current desktop
|
||||
tags:
|
||||
- Computer
|
||||
responses:
|
||||
'200':
|
||||
description: Screenshot captured
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ScreenshotResult'
|
||||
image/png:
|
||||
schema:
|
||||
type: string
|
||||
format: binary
|
||||
/v1/operative/sessions/{sessionId}/computer:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/SessionId'
|
||||
post:
|
||||
operationId: computerAction
|
||||
summary: Execute a computer action
|
||||
description: 'Execute a direct computer interaction action such as mouse clicks,
|
||||
|
||||
keyboard input, scrolling, or taking a screenshot.
|
||||
|
||||
'
|
||||
tags:
|
||||
- Computer
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ComputerActionRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Action result with optional screenshot
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ToolResult'
|
||||
/v1/operative/sessions/{sessionId}/bash:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/SessionId'
|
||||
post:
|
||||
operationId: executeBash
|
||||
summary: Execute a bash command
|
||||
tags:
|
||||
- Tools
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BashRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Command output
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ToolResult'
|
||||
/v1/operative/sessions/{sessionId}/edit:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/SessionId'
|
||||
post:
|
||||
operationId: editFile
|
||||
summary: Execute a file editing command
|
||||
tags:
|
||||
- Tools
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/EditRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Edit result
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ToolResult'
|
||||
/v1/operative/sessions/{sessionId}/reset:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/SessionId'
|
||||
post:
|
||||
operationId: resetSession
|
||||
summary: Reset the session environment
|
||||
description: 'Resets the desktop environment (kills Xvfb, tint2) and restarts all
|
||||
|
||||
services. Clears conversation state.
|
||||
|
||||
'
|
||||
tags:
|
||||
- Sessions
|
||||
responses:
|
||||
'200':
|
||||
description: Session reset successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Session'
|
||||
/v1/operative/env-config.json:
|
||||
get:
|
||||
operationId: getEnvConfig
|
||||
summary: Get environment configuration
|
||||
description: Returns runtime endpoint configuration for the UI.
|
||||
tags:
|
||||
- Configuration
|
||||
security: []
|
||||
responses:
|
||||
'200':
|
||||
description: Environment configuration
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/EnvConfig'
|
||||
/health:
|
||||
get:
|
||||
operationId: getHealth
|
||||
summary: Health check
|
||||
tags:
|
||||
- Configuration
|
||||
security: []
|
||||
responses:
|
||||
'200':
|
||||
description: Service is healthy
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
example: ok
|
||||
components:
|
||||
securitySchemes:
|
||||
BearerAuth:
|
||||
type: http
|
||||
scheme: bearer
|
||||
bearerFormat: JWT
|
||||
description: 'Bearer JWT issued by Hanzo IAM (https://hanzo.id). Discovery: https://hanzo.id/.well-known/openid-configuration.
|
||||
Obtain via /v1/iam/auth/login, /oauth/token, or the API key UI on hanzo.id.'
|
||||
parameters:
|
||||
SessionId:
|
||||
name: sessionId
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
description: Unique session identifier
|
||||
responses:
|
||||
BadRequest:
|
||||
description: Invalid request parameters
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
Unauthorized:
|
||||
description: Missing or invalid authentication
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
NotFound:
|
||||
description: Resource not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
schemas:
|
||||
CreateSessionRequest:
|
||||
type: object
|
||||
required:
|
||||
- provider
|
||||
properties:
|
||||
provider:
|
||||
type: string
|
||||
enum:
|
||||
- anthropic
|
||||
- bedrock
|
||||
- vertex
|
||||
description: API provider to use
|
||||
model:
|
||||
type: string
|
||||
description: Model name (defaults to provider default)
|
||||
example: claude-3-7-sonnet-20250219
|
||||
apiKey:
|
||||
type: string
|
||||
description: API key for the provider (if not set via env)
|
||||
systemPromptSuffix:
|
||||
type: string
|
||||
description: Extra instructions appended to the system prompt
|
||||
toolVersion:
|
||||
type: string
|
||||
enum:
|
||||
- computer_use_20241022
|
||||
- computer_use_20250124
|
||||
default: computer_use_20250124
|
||||
description: Tool version to use
|
||||
maxTokens:
|
||||
type: integer
|
||||
default: 128000
|
||||
description: Maximum output tokens
|
||||
thinkingBudget:
|
||||
type: integer
|
||||
description: Token budget for thinking (null to disable)
|
||||
onlyNMostRecentImages:
|
||||
type: integer
|
||||
default: 1
|
||||
description: Number of recent screenshots to send to model
|
||||
tokenEfficientToolsBeta:
|
||||
type: boolean
|
||||
default: false
|
||||
description: Enable token-efficient tools beta flag
|
||||
displayWidth:
|
||||
type: integer
|
||||
default: 1024
|
||||
description: Virtual display width in pixels
|
||||
displayHeight:
|
||||
type: integer
|
||||
default: 768
|
||||
description: Virtual display height in pixels
|
||||
Session:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
format: uuid
|
||||
status:
|
||||
type: string
|
||||
enum:
|
||||
- active
|
||||
- completed
|
||||
- failed
|
||||
provider:
|
||||
type: string
|
||||
enum:
|
||||
- anthropic
|
||||
- bedrock
|
||||
- vertex
|
||||
model:
|
||||
type: string
|
||||
toolVersion:
|
||||
type: string
|
||||
messageCount:
|
||||
type: integer
|
||||
createdAt:
|
||||
type: string
|
||||
format: date-time
|
||||
updatedAt:
|
||||
type: string
|
||||
format: date-time
|
||||
SendMessageRequest:
|
||||
type: object
|
||||
required:
|
||||
- content
|
||||
properties:
|
||||
content:
|
||||
type: string
|
||||
description: User message text
|
||||
AgentResponse:
|
||||
type: object
|
||||
properties:
|
||||
messages:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Message'
|
||||
toolResults:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ToolResult'
|
||||
Message:
|
||||
type: object
|
||||
properties:
|
||||
role:
|
||||
type: string
|
||||
enum:
|
||||
- user
|
||||
- assistant
|
||||
- tool
|
||||
content:
|
||||
oneOf:
|
||||
- type: string
|
||||
- type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ContentBlock'
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
ContentBlock:
|
||||
type: object
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
enum:
|
||||
- text
|
||||
- tool_use
|
||||
- tool_result
|
||||
- thinking
|
||||
- image
|
||||
text:
|
||||
type: string
|
||||
thinking:
|
||||
type: string
|
||||
id:
|
||||
type: string
|
||||
description: Tool use ID
|
||||
name:
|
||||
type: string
|
||||
description: Tool name (computer, bash, str_replace_editor)
|
||||
input:
|
||||
type: object
|
||||
description: Tool input parameters
|
||||
toolUseId:
|
||||
type: string
|
||||
description: Reference to the tool_use block
|
||||
content:
|
||||
type: string
|
||||
description: Tool result content
|
||||
isError:
|
||||
type: boolean
|
||||
base64Image:
|
||||
type: string
|
||||
format: byte
|
||||
description: Base64-encoded PNG screenshot
|
||||
ComputerActionRequest:
|
||||
type: object
|
||||
required:
|
||||
- action
|
||||
properties:
|
||||
action:
|
||||
type: string
|
||||
enum:
|
||||
- key
|
||||
- type
|
||||
- mouse_move
|
||||
- left_click
|
||||
- left_click_drag
|
||||
- right_click
|
||||
- middle_click
|
||||
- double_click
|
||||
- triple_click
|
||||
- screenshot
|
||||
- cursor_position
|
||||
- left_mouse_down
|
||||
- left_mouse_up
|
||||
- scroll
|
||||
- hold_key
|
||||
- wait
|
||||
description: The computer action to perform
|
||||
text:
|
||||
type: string
|
||||
description: Text for key/type actions, modifier key for scroll
|
||||
coordinate:
|
||||
type: array
|
||||
items:
|
||||
type: integer
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
description: '[x, y] pixel coordinates for mouse actions'
|
||||
scrollDirection:
|
||||
type: string
|
||||
enum:
|
||||
- up
|
||||
- down
|
||||
- left
|
||||
- right
|
||||
description: Scroll direction (for scroll action)
|
||||
scrollAmount:
|
||||
type: integer
|
||||
description: Number of scroll clicks
|
||||
duration:
|
||||
type: number
|
||||
description: Duration in seconds (for hold_key, wait actions)
|
||||
key:
|
||||
type: string
|
||||
description: Modifier key to hold during click actions
|
||||
BashRequest:
|
||||
type: object
|
||||
properties:
|
||||
command:
|
||||
type: string
|
||||
description: Bash command to execute
|
||||
restart:
|
||||
type: boolean
|
||||
default: false
|
||||
description: Restart the bash session
|
||||
EditRequest:
|
||||
type: object
|
||||
required:
|
||||
- command
|
||||
- path
|
||||
properties:
|
||||
command:
|
||||
type: string
|
||||
enum:
|
||||
- view
|
||||
- create
|
||||
- str_replace
|
||||
- insert
|
||||
- undo_edit
|
||||
description: Editor command to execute
|
||||
path:
|
||||
type: string
|
||||
description: Absolute file path
|
||||
fileText:
|
||||
type: string
|
||||
description: File content (for create command)
|
||||
oldStr:
|
||||
type: string
|
||||
description: String to find (for str_replace command)
|
||||
newStr:
|
||||
type: string
|
||||
description: Replacement string (for str_replace and insert commands)
|
||||
insertLine:
|
||||
type: integer
|
||||
description: Line number to insert at (for insert command)
|
||||
viewRange:
|
||||
type: array
|
||||
items:
|
||||
type: integer
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
description: '[startLine, endLine] range to view'
|
||||
ToolResult:
|
||||
type: object
|
||||
properties:
|
||||
output:
|
||||
type: string
|
||||
description: Standard output text
|
||||
error:
|
||||
type: string
|
||||
description: Error message if the tool failed
|
||||
base64Image:
|
||||
type: string
|
||||
format: byte
|
||||
description: Base64-encoded PNG screenshot
|
||||
system:
|
||||
type: string
|
||||
description: System message (e.g. tool restart notice)
|
||||
ScreenshotResult:
|
||||
type: object
|
||||
properties:
|
||||
base64Image:
|
||||
type: string
|
||||
format: byte
|
||||
description: Base64-encoded PNG of the current desktop
|
||||
width:
|
||||
type: integer
|
||||
height:
|
||||
type: integer
|
||||
EnvConfig:
|
||||
type: object
|
||||
properties:
|
||||
APP_ENDPOINT:
|
||||
type: string
|
||||
example: operative-app.hanzo.ai
|
||||
VNC_ENDPOINT:
|
||||
type: string
|
||||
example: operative-vnc.hanzo.ai
|
||||
Error:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
example: error
|
||||
message:
|
||||
type: string
|
||||
code:
|
||||
type: string
|
||||
+1
-1
@@ -21,7 +21,7 @@ info:
|
||||
- Tekton CI/CD pipelines
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ info:
|
||||
gateway-minted identity (`X-Org-Id`, HIP-0026) as the tenant so a reseller
|
||||
org sees its own catalog overrides; an anonymous or forged org falls back to
|
||||
the public `hanzo` default. Responses are the bundle's catalog JSON.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -8,7 +8,7 @@ info:
|
||||
\ deployment orchestration,\n authenticated via Bearer JWT.\n\n## Authentication\n\nAll endpoints (except those marked\
|
||||
\ public) require:\n\n- Bearer JWT issued by Hanzo IAM (https://hanzo.id) in the\n `Authorization` header, or\n- Session\
|
||||
\ cookie established via the platform web UI after IAM login.\n"
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ info:
|
||||
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: Hanzo Pricing API
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
description: 'Unified pricing API for the Hanzo AI platform. Serves real-time pricing
|
||||
|
||||
for AI models (376+), cloud VM plans, GPU tiers, subscription plans,
|
||||
|
||||
@@ -40,7 +40,7 @@ info:
|
||||
unset key fails closed with HTTP 503.
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -24,7 +24,7 @@ info:
|
||||
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -9,7 +9,7 @@ info:
|
||||
every query. Creating a prompt whose name already exists appends a new
|
||||
version — real, inspectable history. The store holds template text + taxonomy
|
||||
only, never a secret.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -38,7 +38,7 @@ info:
|
||||
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ info:
|
||||
- WebSocket transport for browser clients
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -23,7 +23,7 @@ info:
|
||||
Authentication: Bearer JWT issued by Hanzo IAM (`https://hanzo.id`). The same
|
||||
token authenticates every Hanzo service. The customer routes are scoped to the
|
||||
caller's org server-side; the `/v1/admin/referrals*` routes require global-admin.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -17,7 +17,7 @@ info:
|
||||
- Storage quota management per project
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ info:
|
||||
- OIDC SSO via hanzo.id for console access
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ info:
|
||||
- Webhooks for event notifications
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -7,7 +7,7 @@ info:
|
||||
the engine runs its detection ruleset over them in memory (raw content is
|
||||
never stored), and persists a per-org scan summary plus redacted findings.
|
||||
Every route is tenant-scoped to the caller's validated org.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ info:
|
||||
- Horizontal scaling behind load balancer
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ info:
|
||||
(the engine JSON API, `/mcp`, `/events`) is identity-gated — a request
|
||||
without a gateway-validated principal (X-User-Id) is refused (403). The
|
||||
engine is resolved lazily, so requests before it is live return 503.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -9,7 +9,7 @@ info:
|
||||
catalog with no external dependency. Reference content, not org data — a user
|
||||
forks a template into a project via the deploy flow, not by mutating this
|
||||
catalog.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -9,7 +9,7 @@ info:
|
||||
(`KEY-<number>`). Tenant isolation is enforced server-side on every
|
||||
request from the validated bearer `owner` claim (HIP-0026) — never a
|
||||
client-supplied header.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ info:
|
||||
- Hybrid search (vector + keyword)
|
||||
|
||||
'
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ info:
|
||||
compute). Every resource is scoped to the caller's org from the validated IAM
|
||||
owner claim; a caller only ever reads or mutates their OWN tenant's compute.
|
||||
A Bot is a composition: a `kind=bot` machine plus an agent binding.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
@@ -12,7 +12,7 @@ info:
|
||||
AUTH: both surfaces require the shared service key (KMS-sourced) and fail
|
||||
closed — search via the `X-API-Key` header, scrape via `Authorization:
|
||||
Bearer`. An unset key returns 503; a missing/mismatched key returns 401.
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ info:
|
||||
filtered to the caller's org by the `org-<org>` role attribute from the
|
||||
validated IAM owner claim. Fail-closed: absent the ZT service credential the
|
||||
routes mount but every op returns 503 (never a fabricated resource).
|
||||
version: 1.0.0
|
||||
version: 8.0.0
|
||||
contact:
|
||||
name: Hanzo AI
|
||||
url: https://hanzo.ai
|
||||
|
||||
Reference in New Issue
Block a user