Files
zeekayandHanzo Dev 6faf3a00ae The deck curls what the API serves, and the score slide claims what its column shows
Four platform pages printed a call that answers nothing. /v1/agents, /v1/functions,
/v1/integrations and /v1/wallets are all zero paths on the served document, and
the deck said them nine slides after the tour correctly said POST /v1/agent.

The cause is one fact, not four: THE API SINGULARISED ITS SEGMENTS and the
commerce catalog still advertises the plural. Sixteen of the seventeen products
whose advertised path now 404s answer at the singular — /v1/agents at /v1/agent,
/v1/evals/datasets at /v1/eval/datasets, /v1/bots at /v1/bot — so `singular` is
a rule in scripts/catalog.mjs rather than sixteen rows somebody keeps. It
replaces twelve hand-written renames, four of which had themselves gone stale
and pointed at paths that no longer answer either; prompts was aimed at
/v1/agents and referrals at /v1/commerce/referrals, both dead. No candidate is
believed on its shape: it goes through `serves` exactly like the advertised
path, so a word that merely ends in "s" costs nothing.

The families gate now refuses an IMPLAUSIBLE read rather than a smaller one. It
refused any shrink at all, which is a gate against change and not against
corruption, and it had frozen that snapshot for three weeks while the document
regrouped 183 tags into 120 by merging four families into `ai`. What the gate is
for is a truncated document or an error body that still parses, and those arrive
at almost nothing rather than at two thirds. Below half of the last good read is
the refusal; a shrink above it is written and announced.

THE PRODUCT GATE STAYS SHUT and the comment says why. Opening it drops five
products and half the hero tour's beats: /v1/sandboxes, /v1/vector,
/v1/bot/connect and three more answer at no spelling, and replacing them is a
product decision. Two of the five, /sdks and /api, have pages and are lost only
because the catalog moved them to /cloud/sdks while `bespoke` resolves one
segment. Flipping it is one word once those are settled.

A family's layer is now keyed by the path that answers too. Keying by the
advertised one filed every layer under a family the document no longer declares
and left `agent` in none, which is what the deck's own resolver refused to print.

EVERY CALL THIS DECK PRINTS IS NOW PUT TO THE API AT SYNC, through the same
reader sync-catalog probes with, and the sync throws rather than shrugging when
it cannot reach it — every other number here degrades to a committed snapshot
safely, but a dead path fails silently and lands in front of an investor. That
check found six more: the hero's tour is twelve beats in the snapshot and six of
them are retired, so the page now reads "Six calls, and the shop is open" with
the count spelled from what survived rather than typed.

The score slide said "the field's best score, at a fraction of the price". The
first half holds and the second does not: the model we beat on score, Gemini 3.1
Pro, is $12 against Enso Ultra's $25. It now claims the two ends the column
actually shows — the best score outright, and Enso Flash within half a point of
GPT-5.2 Pro at a forty-second of its price — and the footnote names the rung we
lose rather than leaving a reader to find it.

deck/sync.mjs also resolves app/(app) into assets/rooms.json here, which the
slide after this one draws.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-07 19:24:53 -07:00

677 lines
9.4 KiB
JSON

{
"document": "https://api.hanzo.ai/v1/openapi.json",
"catalog": "https://api.hanzo.ai/v1/commerce/catalog?brand=hanzo",
"host": "api.hanzo.ai",
"taken": "August 16, 2026",
"families": 120,
"operations": 2290,
"products": 79,
"surface": [
[
"o11y",
381
],
[
"ai",
293
],
[
"commerce",
179
],
[
"iam",
156
],
[
"integration",
56
],
[
"git",
51
],
[
"billing",
48
],
[
"agent",
39
],
[
"platform",
36
],
[
"marketing",
35
],
[
"cloudflare",
32
],
[
"captable",
31
],
[
"compute",
30
],
[
"project",
29
],
[
"pricing",
28
],
[
"provisioning",
28
],
[
"dataroom",
26
],
[
"books",
25
],
[
"company",
24
],
[
"team",
21
],
[
"deploy",
20
],
[
"guide",
19
],
[
"sandbox",
19
],
[
"tool",
19
],
[
"ingress",
18
],
[
"auto",
17
],
[
"compliance",
17
],
[
"index",
17
],
[
"trust",
17
],
[
"eval",
16
],
[
"framework",
16
],
[
"mq",
15
],
[
"plan",
14
],
[
"esign",
13
],
[
"social",
13
],
[
"todo",
13
],
[
"dns",
12
],
[
"event",
12
],
[
"campaign",
11
],
[
"function",
11
],
[
"legal",
11
],
[
"licensing",
11
],
[
"link",
11
],
[
"metrics",
11
],
[
"risk",
11
],
[
"account",
10
],
[
"affiliate",
10
],
[
"knowledge",
10
],
[
"tel",
10
],
[
"benchmark",
9
],
[
"channel",
9
],
[
"graph",
9
],
[
"flag",
8
],
[
"flow",
8
],
[
"network",
8
],
[
"wallet",
8
],
[
"webhook",
8
],
[
"ad",
7
],
[
"code",
7
],
[
"dataset",
7
],
[
"domain",
7
],
[
"experiment",
7
],
[
"label",
7
],
[
"meet",
7
],
[
"ml",
7
],
[
"security",
7
],
[
"seo",
7
],
[
"space",
7
],
[
"websearch",
7
],
[
"content",
6
],
[
"kv",
6
],
[
"marketplace",
6
],
[
"prompt",
6
],
[
"reference",
6
],
[
"registry",
6
],
[
"s3",
6
],
[
"sync",
6
],
[
"world",
6
],
[
"author",
5
],
[
"bot",
5
],
[
"destination",
5
],
[
"kms",
5
],
[
"leaderboard",
5
],
[
"lsp",
5
],
[
"market",
5
],
[
"openapi",
5
],
[
"tasks",
5
],
[
"taxonomy",
5
],
[
"template",
5
],
[
"usage",
5
],
[
"engine",
4
],
[
"exec",
4
],
[
"help",
4
],
[
"node",
4
],
[
"notify",
4
],
[
"validator",
4
],
[
"web3",
4
],
[
"authz",
3
],
[
"base",
3
],
[
"blueprint",
3
],
[
"entitlement",
3
],
[
"gateway",
3
],
[
"translate",
3
],
[
"ask",
2
],
[
"ci",
2
],
[
"explorer",
2
],
[
"pref",
2
],
[
"pubsub",
2
],
[
"referral",
2
],
[
"sbom",
2
],
[
"settings",
2
],
[
"share",
2
],
[
"treasury",
2
],
[
"allowance",
1
],
[
"audit",
1
],
[
"catalog",
1
],
[
"crawl",
1
],
[
"search",
1
],
[
"standing",
1
],
[
"x402",
1
]
],
"layers": [
{
"label": "AI",
"products": 7
},
{
"label": "Compute",
"products": 8
},
{
"label": "Data",
"products": 8
},
{
"label": "Network",
"products": 6
},
{
"label": "Security",
"products": 6
},
{
"label": "Dev",
"products": 7
},
{
"label": "Infrastructure",
"products": 6
},
{
"label": "Observe",
"products": 17
},
{
"label": "Web3",
"products": 7
},
{
"label": "Apps",
"products": 7
}
],
"tour": {
"story": "One org, one afternoon: a spaceship shop that did not exist this morning.",
"beats": [
{
"line": "Start with the models.",
"method": "GET",
"path": "/v1/models",
"summary": "Returns the list of available models from the routing table."
},
{
"line": "Blend them behind one route.",
"method": "POST",
"path": "/v1/ai/routes",
"summary": "Create a model-route"
},
{
"line": "Ask it something.",
"method": "POST",
"path": "/v1/chat/completions",
"summary": "Implements the OpenAI-compatible chat completions API"
},
{
"line": "Hand it your own tools.",
"method": "POST",
"path": "/v1/agent",
"summary": "Run one tool-calling round against your org's own tools"
},
{
"line": "Open the store.",
"method": "POST",
"path": "/v1/commerce/product/",
"summary": "Create a product"
},
{
"line": "Watch what it cost.",
"method": "GET",
"path": "/v1/billing/usage",
"summary": "Every billed call the caller's org made, attributed to a product"
}
]
},
"core": [
{
"family": "agent",
"name": "Agents",
"layer": "AI",
"path": "/v1/agent",
"operations": 39,
"summary": "Autonomous agents for your org: define them, run them, keep every run.",
"page": "/agents",
"repo": "hanzoai/agent"
},
{
"family": "function",
"name": "Functions",
"layer": "Compute",
"path": "/v1/function",
"operations": 11,
"summary": "Your serverless code: publish it, call it over HTTP, watch every run and what it cost.",
"page": "/functions",
"repo": "hanzoai/functions"
},
{
"family": "s3",
"name": "Object Storage",
"layer": "Data",
"path": "/v1/s3",
"operations": 6,
"summary": "Object storage: your buckets and the files in them, with signed URLs for upload and download.",
"page": "/s3",
"repo": "hanzoai/s3"
},
{
"family": "dns",
"name": "DNS",
"layer": "Network",
"path": "/v1/dns",
"operations": 12,
"summary": "Your DNS records: the zones and records behind every name you point at Hanzo.",
"page": "/dns",
"repo": "hanzoai/dns"
},
{
"family": "iam",
"name": "IAM",
"layer": "Security",
"path": "/v1/iam",
"operations": 156,
"summary": "Hanzo's identity provider: users, organizations, applications, and the OIDC/OAuth2 endpoints every Hanzo service authenticates against.",
"page": "/iam",
"repo": "hanzoai/iam"
},
{
"family": "integration",
"name": "Integrations",
"layer": "Dev",
"path": "/v1/integration",
"operations": 56,
"summary": "How your org connects third-party accounts like Slack, and revokes them.",
"page": "/integrations",
"repo": "hanzoai/console"
},
{
"family": "registry",
"name": "Registry",
"layer": "Infrastructure",
"path": "/v1/registry",
"operations": 6,
"summary": "Your container and package registry: push images, pull them back, see what you store.",
"page": "/registry",
"repo": "hanzoai/registry"
},
{
"family": "o11y",
"name": "Traces",
"layer": "Observe",
"path": "/v1/o11y",
"operations": 381,
"summary": "Your logs, metrics and traces: ship them in, query them, chart them.",
"page": "/o11y",
"repo": "hanzoai/o11y"
},
{
"family": "wallet",
"name": "Wallets",
"layer": "Web3",
"path": "/v1/wallet",
"operations": 8,
"summary": "Blockchain key custody: create wallets, rotate their keys, and sign with them.",
"page": "/cloud/wallet",
"repo": "hanzoai/billing"
},
{
"family": "bot",
"name": "Bot",
"layer": "Apps",
"path": "/v1/bot",
"operations": 5,
"summary": "A bot doing your work on a real desktop, live, while you watch.",
"page": "/bot",
"repo": "hanzoai/bot"
}
]
}