{"openapi":"3.1.0","info":{"title":"Zeq SDK — Full Machine API","version":"1.287.0","description":"The complete OpenAPI surface for this Zeq machine: 647 paths / 699 operations across every public /api/* endpoint, plus the full MCP tool surface (57 tools, see x-mcp-tools). All 32 sealed solvers are tagged \"Solvers\" and carry x-solver metadata (domain, numerical method, operator chain, unit). HULYAS Master Equation, KO42, HulyaPulse 1.287 Hz, Zeqond 0.777 s, HMAC ZeqProof receipts. The MCP tools zeq_api_catalog (the map) and zeq_http (the door) reach every endpoint below.","contact":{"email":"info@hulyas.org","url":"https://machine.zeqvm.com"}},"servers":[{"url":"https://machine.zeqvm.com"}],"tags":[{"name":"Solvers","description":"The sealed physics and engineering solvers — each runs a real numerical method (RK4, leapfrog, eigensolvers, FEM/PCG, Monte-Carlo, DPLL, Riemann-Siegel, ...), validates against the analytic/textbook result, and returns an HMAC-signed ZeqProof receipt. 32 solver endpoints; each carries x-solver metadata."},{"name":"Compute & Proof","description":"The compute spine (/api/zeq/compute) and the proof / verification surface."},{"name":"MCP","description":"Model Context Protocol. POST /api/mcp (JSON-RPC 2.0: initialize, tools/list, tools/call). 57 tools — the full list with input schemas is at x-mcp-tools."},{"name":"Operators & Kernel","description":"The 1,597-operator registry and the kernel prompt."},{"name":"Reactor","description":"Stateful reactor simulation surface."},{"name":"Contracts","description":"State-contract templates, deploy and fire."},{"name":"Chain & State","description":"State-machine chain, transitions and explorer."},{"name":"Mesh & Nodes","description":"Mesh coherence, node status, DNS and time-shift."},{"name":"Accounts & Keys","description":"Demo keys, accounts, plans and billing."},{"name":"Oracle","description":"Oracle price / data feeds."},{"name":"System","description":"Health, status and metrics."},{"name":"Zeq Core","description":"Core Zeq endpoints."},{"name":"Other","description":"Additional endpoints on this machine."}],"paths":{"/api/.well-known/jwks.json":{"get":{"tags":["Other"],"summary":"GET /api/.well-known/jwks.json","responses":{"200":{"description":"OK"}}}},"/api/.well-known/openid-configuration":{"get":{"tags":["Other"],"summary":"Standard OIDC discovery endpoints","responses":{"200":{"description":"OK"}}}},"/api/agent/{zid}/plans/{planId}":{"get":{"tags":["Accounts & Keys"],"summary":"GET /plans/:planId","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}},{"name":"planId","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/agent/{zid}/plans/current":{"get":{"tags":["Accounts & Keys"],"summary":"GET /plans/current","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/agent/{zid}/plans/draft":{"get":{"tags":["Accounts & Keys"],"summary":"GET /plans/draft","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"post":{"tags":["Accounts & Keys"],"summary":"POST /plans/draft Upserts the draft for (agent, slug). Single draft per pair; subsequent writes overwrite. Lock promotes the draft to a new locked version.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/agent/{zid}/plans/history":{"get":{"tags":["Accounts & Keys"],"summary":"GET /plans/history","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/agent/{zid}/plans/lock":{"post":{"tags":["Accounts & Keys"],"summary":"Promotes the current draft (or the body shape) to a new locked version. Bumps version = max(prior locked) + 1, marks prior locked rows superseded, patches agent_protocol_state.current_plan_id. Emits a plan_locked audit r","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/agent/{zid}/sandbox/quota":{"get":{"tags":["Accounts & Keys"],"summary":"Cheap snapshot of the rolling-24h quota window. Used by the BUILD surface to render the \"X / 20 runs · Y / 60 000 mz\" counters before the user clicks Run.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/agent/{zid}/sandbox/run":{"post":{"tags":["Accounts & Keys"],"summary":"machine context). Always returns 200 with `{ ok, ... }`; non-zero `exit_code` (1, 124, 137) means the Python failed but the call itself completed successfully — clients render the receipt either way.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/agent/{zid}/sandbox/runs":{"get":{"tags":["Accounts & Keys"],"summary":"Returns the most recent runs for the agent, newest first. Bodies are included (capped server-side at 64 KB per stream); for very long listings the UI can pass `limit=5` and request more lazily.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/agent/{zid}/skills":{"get":{"tags":["Accounts & Keys"],"summary":"GET /skills","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/agent/{zid}/skills/attach":{"post":{"tags":["Accounts & Keys"],"summary":"POST /skills/attach","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/agent/{zid}/skills/detach":{"post":{"tags":["Accounts & Keys"],"summary":"POST /skills/detach","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/agent/{zid}/state":{"get":{"tags":["Accounts & Keys"],"summary":"GET /state","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"patch":{"tags":["Accounts & Keys"],"summary":"PATCH /state","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/agent/files/history":{"get":{"tags":["Accounts & Keys"],"summary":"GET /history","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/agent/files/list":{"get":{"tags":["Accounts & Keys"],"summary":"GET /list","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/agent/files/read":{"get":{"tags":["Accounts & Keys"],"summary":"GET /read","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/agent/files/write":{"post":{"tags":["Accounts & Keys"],"summary":"POST /write","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/agents":{"get":{"tags":["Accounts & Keys"],"summary":"GET /api/agents","responses":{"200":{"description":"OK"}}}},"/api/agents/{zid}":{"get":{"tags":["Accounts & Keys"],"summary":"GET /api/agents/:zid","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/analyze":{"post":{"tags":["Other"],"summary":"POST /analyze","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/apps/track":{"post":{"tags":["Other"],"summary":"POST /api/apps/track","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/attest":{"post":{"tags":["Other"],"summary":"POST /api/attest","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/auth/callback":{"get":{"tags":["Accounts & Keys"],"summary":"auth/callback","responses":{"200":{"description":"OK"}}}},"/api/auth/login":{"post":{"tags":["Accounts & Keys"],"summary":"Security: this is intentionally \"email = identity\" — consistent with the trial sign-up flow where knowing the email is the sole proof of identity. The session gives access to the portal UI only; the API key material itse","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/auth/sso-start":{"get":{"tags":["Accounts & Keys"],"summary":"auth/sso-start","responses":{"200":{"description":"OK"}}}},"/api/av/claim":{"post":{"tags":["Other"],"summary":"locally. Response: { ok: true, audit_row_id, s_forensic, fired, notified }","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/av/devices":{"get":{"tags":["Other"],"summary":"GET /api/av/devices?slug=<machine> — list devices for a machine POST /api/av/devices — register a new device","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Other"],"summary":"POST /api/av/devices","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/av/mesh-feed":{"get":{"tags":["Other"],"summary":"GET /api/av/mesh-feed?slug=<machine> — peer threats this machine subscribes to","responses":{"200":{"description":"OK"}}}},"/api/av/threats":{"get":{"tags":["Other"],"summary":"GET /api/av/threats?slug=<machine>&window=24h — recent threat events","responses":{"200":{"description":"OK"}}}},"/api/cf/sites":{"get":{"tags":["Other"],"summary":"GET /api/cf/sites?slug=<machine_slug>","responses":{"200":{"description":"OK"}}},"post":{"tags":["Other"],"summary":"POST /api/cf/sites — register a site","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/cf/sites/{id}":{"get":{"tags":["Other"],"summary":"GET /api/cf/sites/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/cf/sites/{id}/analytics":{"get":{"tags":["Other"],"summary":"GET /api/cf/sites/:id/analytics?window=60z|24h|7d","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/cf/sites/{id}/purge":{"post":{"tags":["Other"],"summary":"POST /api/cf/sites/:id/purge","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/cf/sites/{id}/rules":{"post":{"tags":["Other"],"summary":"POST /api/cf/sites/:id/rules","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/cf/sites/{id}/rules/{rule_id}":{"delete":{"tags":["Other"],"summary":"DELETE /api/cf/sites/:id/rules/:rule_id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{motherSlug}/anchor":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:motherSlug/anchor","responses":{"200":{"description":"OK"}},"parameters":[{"name":"motherSlug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{motherSlug}/anchored":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:motherSlug/anchored Pseudonymous overview of every private machine anchoring here.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"motherSlug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{motherSlug}/anchors":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:motherSlug/anchors","responses":{"200":{"description":"OK"}},"parameters":[{"name":"motherSlug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/admins":{"get":{"tags":["Chain & State"],"summary":"1. GET /api/chain/:slug/admins","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"tags":["Chain & State"],"summary":"2. POST /api/chain/:slug/admins Body: { zid: string, role: \"admin\" | \"operator\" | \"viewer\" }","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/admins/{zid}":{"delete":{"tags":["Chain & State"],"summary":"4. DELETE /api/chain/:slug/admins/:zid","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"tags":["Chain & State"],"summary":"3. PATCH /api/chain/:slug/admins/:zid Body: { role: \"admin\" | \"operator\" | \"viewer\" }","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/analytics":{"get":{"tags":["Chain & State"],"summary":"15.8 GET /api/chain/:slug/analytics — per-machine sparkline data EX.H (2026-05-19). Bins audit_log rows into N buckets over the last `windowZeqonds` Zeqonds. Pure COUNT(*) GROUP BY — no fabricated values. Publ","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/api-keys":{"get":{"tags":["Chain & State"],"summary":"9. GET /api/chain/:slug/api-keys — list (no raw values)","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"tags":["Chain & State"],"summary":"9. POST /api/chain/:slug/api-keys — mint a developer API key Body: { name: string, scope?: 'read'|'write'|'admin', rate_limit_tier?: string, expires_at?: ISO-8601 } admin+ only. The raw key is returned","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/api-keys/{id}":{"delete":{"tags":["Chain & State"],"summary":"10. DELETE /api/chain/:slug/api-keys/:id — revoke","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/at":{"get":{"tags":["Chain & State"],"summary":"api/chain/:slug/at?zeqond=N","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/audit/decrypt":{"post":{"tags":["Chain & State"],"summary":"admin role does NOT suffice — only owner. The intent is \"review my own audit history\", not \"read every other admin's actions\". A separate global admin path (legal hold) would live elsewhere with higher gating.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/awareness/status":{"get":{"tags":["Chain & State"],"summary":"Public read — same canRead gate as /state. The numbers are aggregate counters per origin, not per-row data, so even a share-token caller gets to see the integrity state of the chain they're allowed to read.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/block":{"get":{"tags":["Chain & State"],"summary":"10. GET /api/chain/:slug/block?zeqond=N — snapshot at N","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/connection":{"post":{"tags":["Chain & State"],"summary":"7. POST /api/chain/:slug/connection — connection event","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts":{"get":{"tags":["Chain & State"],"summary":"2. GET /api/chain/:slug/contracts — list contracts","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"tags":["Chain & State"],"summary":"1. POST /api/chain/:slug/contracts — create contract","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}":{"get":{"tags":["Chain & State"],"summary":"3. GET /api/chain/:slug/contracts/:id — get contract + recent transitions","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"tags":["Chain & State"],"summary":"overwrites the live row and bumps current_version_no. Rollback inserts a new version row (the audit trail stays linear — history never rewrites).","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/audit":{"get":{"tags":["Chain & State"],"summary":"5. GET /api/chain/:slug/contracts/:id/audit — full transition history","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/contracts/{id}/dry-run":{"post":{"tags":["Chain & State"],"summary":"what would fire / be filtered / pass. No audit rows, no fires, no watermarks, no compute. Pure debug primitive.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/export":{"get":{"tags":["Chain & State"],"summary":"Returns a portable envelope of the contract's definition + metadata. Owner-only, no charge. Omits runtime state (audit, watermarks, secrets).","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/contracts/{id}/fire-now":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/contracts/:id/fire-now","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/freeze":{"post":{"tags":["Chain & State"],"summary":"fires. The row stays in the DB so audit history is preserved. To free up scheduler capacity, frozen contracts also have their next_fire cleared.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/integrity":{"get":{"tags":["Chain & State"],"summary":"Public-read, returns the stored hash + the live re-hash. If they differ, the contract has been tampered with at the DB level.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/contracts/{id}/next-fires":{"get":{"tags":["Chain & State"],"summary":"Predict the next N fires for time-based triggers (one_shot/recurring/cron). Event-triggered contracts return empty + a note. Owner-only, no charge.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/contracts/{id}/pause":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/contracts/:id/pause","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/preview":{"get":{"tags":["Chain & State"],"summary":"Cheap, GET-only, owner-only, no charge. The IDE polls this every ~5 Z to give a live reactor view.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/contracts/{id}/resume":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/contracts/:id/resume","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/rollback":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/contracts/:id/rollback","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/skip-next":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/contracts/:id/skip-next","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/transition":{"post":{"tags":["Chain & State"],"summary":"4. POST /api/chain/:slug/contracts/:id/transition — execute transition","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/transitions/stream":{"get":{"tags":["Chain & State"],"summary":"Push every successful transition for this contract.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/contracts/{id}/verify":{"post":{"tags":["Chain & State"],"summary":"6. POST /api/chain/:slug/contracts/:id/verify — verify entire proof chain","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/{id}/versions":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:slug/contracts/:id/versions","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/contracts/{id}/versions/{n}":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:slug/contracts/:id/versions/:n","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"n","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/contracts/custom":{"post":{"tags":["Chain & State"],"summary":"templated deploy path; the only difference is the body carries a `definition` blob instead of a template id.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/contracts/import":{"post":{"tags":["Chain & State"],"summary":"slug. Runtime state (audit, fire_count, watermarks, secrets) starts clean — definition + metadata only.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/event":{"post":{"tags":["Chain & State"],"summary":"4. POST /api/chain/:slug/event — catch-all log","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/events":{"get":{"tags":["Chain & State"],"summary":"Read-only feed over contract_events for one slug. Filterable by event name + a since_zeqond watermark + a limit. Auth-gated by canRead so only the machine's members can tail. Emit is the only writer (M).","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/events/stream":{"get":{"tags":["Chain & State"],"summary":"Push every contract_events insert for this slug to the connected client as an SSE frame. Heartbeat every 25s. Owner-only auth.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/chain/{slug}/explore":{"get":{"tags":["Chain & State"],"summary":"} Response shape `version` field marks the new shape so consumers can negotiate. Existing consumers that only read `rows` keep working.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/explore/sse":{"get":{"tags":["Chain & State"],"summary":"12. GET /api/chain/:slug/explore/sse — live feed","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/file":{"post":{"tags":["Chain & State"],"summary":"6. POST /api/chain/:slug/file — file-hash event","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/oracles":{"get":{"tags":["Chain & State"],"summary":"the contracts that carry definition.oracle, each enriched with its latest reading (value + Zeqond) and a small recent-history series so the UI can render a per-oracle card (target site · current value · sparkline) rather","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/pohc/validate":{"get":{"tags":["Chain & State"],"summary":"13. GET /api/chain/:slug/pohc/validate?from=A&to=B PoHC = Proof of Harmonic Convergence. Validates the audit chain integrity over a window using validateHashChain from zeqondClock.ts.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/settings":{"patch":{"tags":["Chain & State"],"summary":"5. PATCH /api/chain/:slug/settings","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/site/file/{sha}":{"get":{"tags":["Chain & State"],"summary":"3. GET /api/chain/:slug/site/file/:sha — single file metadata","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"sha","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/site/list":{"get":{"tags":["Chain & State"],"summary":"2. GET /api/chain/:slug/site/list — list pages","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/site/publish-key":{"delete":{"tags":["Chain & State"],"summary":"DELETE /api/chain/:slug/site/publish-key","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:slug/site/publish-key","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"tags":["Chain & State"],"summary":"Plaintext is only returned on issue; thereafter the proxy at /s/<slug>/sdk/zeq/<op> attaches it server-side from the encrypted blob.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/site/upload":{"post":{"tags":["Chain & State"],"summary":"1. POST /api/chain/:slug/site/upload — upload one page","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/sources":{"get":{"tags":["Chain & State"],"summary":"shows a section per named source). The data lives in data_source_audits (display_name, source_type, events_seen/stamped, alive) — this is the read surface the Observer's Sources section uses. canRead-gated: private machi","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/state":{"get":{"tags":["Chain & State"],"summary":"9. GET /api/chain/:slug/state — latest state","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"tags":["Chain & State"],"summary":"5. POST /api/chain/:slug/state — state-hash snapshot","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/stats":{"get":{"tags":["Chain & State"],"summary":"7. GET /api/chain/:slug/stats","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/status":{"post":{"tags":["Chain & State"],"summary":"6. POST /api/chain/:slug/status Body: { status: \"active\" | \"paused\" | \"archived\" }","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/tally/mint-rate":{"get":{"tags":["Chain & State"],"summary":"the global ticker drips it into `tokens_remaining` automatically. Cap is `max_supply` (lifetime issuance ceiling).","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/tally/mint-rate","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/tally/supply":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:slug/tally/supply","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/tally/token":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:slug/tally/token — public token metadata","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/tally/token/{tokenId}":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:slug/tally/token/:tokenId","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/tally/token/avatar":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:slug/tally/token/avatar — decrypt + serve","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/tally/token/avatar — encrypted upload","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/tally/token/genesis":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/tally/token/genesis — one-shot create + lock","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/tally/tokens":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/:slug/tally/tokens","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/{slug}/tally/verify":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/tally/verify","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/tx/submit":{"post":{"tags":["Chain & State"],"summary":"8. POST /api/chain/:slug/tx/submit — contract transition (stub for 6.1.N integration) ─","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/{slug}/unlock":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/:slug/unlock","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/active":{"get":{"tags":["Chain & State"],"summary":"Returns the top public machines by transition count in the last N Zeqonds. Used by the network-home \"Most active this Zeqond\" widget. Window defaults to 60 Zeqonds (≈47s wall-clock). Private machines never appear.","responses":{"200":{"description":"OK"}}}},"/api/chain/aggregate/list":{"get":{"tags":["Chain & State"],"summary":"Phase 6.1.U — aggregator-friendly list of every public state machine. Distinct from /chain/state-machines which mixes the caller's own private machines with public ones. This endpoint is anonymous-safe by design: only is","responses":{"200":{"description":"OK"}}}},"/api/chain/aggregate/sse":{"get":{"tags":["Chain & State"],"summary":"One SSE per consumer (e.g. an external aggregator) replaces N per-machine subscriptions. ONLY public-machine events reach this channel — private machines never leak. The chain.ts publish path (recordEvent) gates the p","responses":{"200":{"description":"OK"}}}},"/api/chain/fleet":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/fleet","responses":{"200":{"description":"OK"}}}},"/api/chain/newest":{"get":{"tags":["Chain & State"],"summary":"15.4 GET /api/chain/newest — newest registered public machines Network-home \"Latest registered machines\" panel. Newest-first by genesis_zeqond. Privacy: is_public=true only.","responses":{"200":{"description":"OK"}}}},"/api/chain/recent":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/recent?limit=50&type=<optional> Returns newest-first. Cached for 1 Zeqond (777ms) — fresh enough for the live feed under HulyaPulse cadence.","responses":{"200":{"description":"OK"}}}},"/api/chain/rejection-log":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/rejection-log","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/seal":{"get":{"tags":["Chain & State"],"summary":"it binds, with every constant and recipe a stranger needs to verify the whole thing OFFLINE (tools/verify-zeq-chain.mjs — also served at /verify-zeq-chain.mjs). Distribution of a self-verifying artifact, not an external","responses":{"200":{"description":"OK"}}}},"/api/chain/state-machines":{"get":{"tags":["Chain & State"],"summary":"2. GET /api/chain/state-machines — list","responses":{"200":{"description":"OK"}}},"post":{"tags":["Chain & State"],"summary":"1. POST /api/chain/state-machines — spin up","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/state-machines/{slug}":{"get":{"tags":["Chain & State"],"summary":"3. GET /api/chain/state-machines/:slug — metadata","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/chain/state-machines/{slug}/anchor-config":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/state-machines/:slug/anchor-config","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"put":{"tags":["Chain & State"],"summary":"PUT /api/chain/state-machines/:slug/anchor-config","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/state-machines/{slug}/anchor-key/rotate":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/state-machines/:slug/anchor-key/rotate","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/state-machines/{slug}/share/disable":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/state-machines/:slug/share/disable","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/state-machines/{slug}/share/set":{"post":{"tags":["Chain & State"],"summary":"POST /api/chain/state-machines/:slug/share/set","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chain/verify-anchor":{"get":{"tags":["Chain & State"],"summary":"GET /api/chain/verify-anchor Verifier helper. Recomputes id_hash from (slug, genesis_hash) and reports. PUBLIC — that's the whole point.","responses":{"200":{"description":"OK"}}}},"/api/chat/free":{"post":{"tags":["Other"],"summary":"POST /api/chat/free","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/chat/free/quota":{"get":{"tags":["Other"],"summary":"GET /api/chat/free/quota — UI inspection.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/community-operators":{"get":{"tags":["Other"],"summary":"GET /community-operators","responses":{"200":{"description":"OK"}}}},"/api/community-operators/{id}":{"get":{"tags":["Other"],"summary":"GET /community-operators/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/community-operators/{id}/open-vote":{"post":{"tags":["Other"],"summary":"POST /community-operators/:id/open-vote","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/community-operators/{id}/promote":{"post":{"tags":["Other"],"summary":"this), and an explicit { confirm: true } is mandatory: a machine may PROPOSE and the vote may APPROVE, but a person must take this deliberate step. The actual operator-registry.json merge remains a maintainer commit (sou","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/community-operators/{id}/resolve":{"post":{"tags":["Other"],"summary":"POST /community-operators/:id/resolve Deterministic; anyone may trigger after the window closes. Tallies, then RETURNS every staked envelope (clears locked_for_vote, marks votes unloc","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/community-operators/{id}/stake":{"post":{"tags":["Other"],"summary":"POST /community-operators/:id/stake","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/community-operators/propose":{"post":{"tags":["Other"],"summary":"POST /community-operators/propose","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/compress":{"post":{"tags":["Other"],"summary":"POST /compress","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/compute/usage":{"get":{"tags":["Other"],"summary":"GET /api/compute/usage","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/conformance/badge.svg":{"get":{"tags":["Other"],"summary":"GET /api/conformance/badge.svg","responses":{"200":{"description":"OK"}}}},"/api/constants":{"get":{"tags":["Other"],"summary":"Physical Constants","responses":{"200":{"description":"OK"}}}},"/api/constants/{key}":{"get":{"tags":["Other"],"summary":"GET /api/constants/:key","responses":{"200":{"description":"OK"}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/contact":{"post":{"tags":["Other"],"summary":"POST /api/contact","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/contracts/generate":{"post":{"tags":["Contracts"],"summary":"route","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/contracts/public":{"get":{"tags":["Contracts"],"summary":"1. GET /api/contracts/public — directory list (paginated, filterable)","responses":{"200":{"description":"OK"}}}},"/api/contracts/public/{id}":{"get":{"tags":["Contracts"],"summary":"2. GET /api/contracts/public/:id — single contract + status","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/contracts/public/{id}/audit":{"get":{"tags":["Contracts"],"summary":"4. GET /api/contracts/public/:id/audit — recent transitions","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/contracts/public/{id}/next-fires":{"get":{"tags":["Contracts"],"summary":"3. GET /api/contracts/public/:id/next-fires — predict next 10 fires","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/contracts/public/{id}/subscribers":{"get":{"tags":["Contracts"],"summary":"5. GET /api/contracts/public/:id/subscribers — cross-machine listeners","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/contracts/public/{id}/superposition":{"get":{"tags":["Contracts"],"summary":"(the /prove result object). It does NOT compute and does NOT touch the mathematics — same doctrine as sealCompute. zsp_envelope stays sealed; we never read ciphertext for display.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/contracts/simulate":{"post":{"tags":["Contracts"],"summary":"C3 (2026-06-13): accept a machine API key (Bearer zsm_*) as well as a session, so a CI pipeline can lint → simulate → deploy with one credential. The inline dry-run only uses the caller zid as a created_by fallback; the","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/contracts/templates":{"get":{"tags":["Contracts"],"summary":"GET /api/contracts/templates","responses":{"200":{"description":"OK"}}}},"/api/contracts/templates/{id}":{"get":{"tags":["Contracts"],"summary":"GET /api/contracts/templates/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/contracts/templates/{id}/deploy":{"post":{"tags":["Contracts"],"summary":"POST /api/contracts/templates/:id/deploy","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/contracts/templates/categories":{"get":{"tags":["Contracts"],"summary":"GET /api/contracts/templates/categories","responses":{"200":{"description":"OK"}}}},"/api/contribute/bond":{"post":{"tags":["Other"],"summary":"Marks envelopes immovable IN PLACE. They are not moved, and `issued_to` is untouched: after bonding they are still yours, and the vault still lists them as yours, because they are.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/contribute/census":{"get":{"tags":["Other"],"summary":"It is only publishable BECAUSE it carries no identity — how many machines are contributing, never which. A contributor can also read it before joining, to see the size of the network they are being asked to stake into.","responses":{"200":{"description":"OK"}}}},"/api/contribute/heartbeat":{"post":{"tags":["Other"],"summary":"Deliberately CANNOT change mode — see contributionSeats.heartbeat for why a high-frequency call that could also flip a mode is a replay attack with extra steps.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/contribute/mode":{"post":{"tags":["Other"],"summary":"POST /api/contribute/mode","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/contribute/policy":{"get":{"tags":["Other"],"summary":"Deliberately public. You cannot be asked to stake a thousand envelopes without being able to read, in advance and without an account, exactly what is required, what it secures and what you lose if you cheat. It also give","responses":{"200":{"description":"OK"}}}},"/api/contribute/release":{"post":{"tags":["Other"],"summary":"POST /api/contribute/release","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/contribute/status":{"get":{"tags":["Other"],"summary":"GET /api/contribute/status","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/credits/claim":{"post":{"tags":["Other"],"summary":"POST /api/credits/claim","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/credits/status":{"get":{"tags":["Other"],"summary":"GET /api/credits/status Drives the Vault's Claim button: whether this period is still open, what it is worth, and what has been claimed before. Reads only; costs no wo","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/daemon/health":{"get":{"tags":["Other"],"summary":"Health and status endpoints","responses":{"200":{"description":"OK"}}}},"/api/daemon/landauer":{"get":{"tags":["Other"],"summary":"GET /api/daemon/landauer","responses":{"200":{"description":"OK"}}}},"/api/daemon/pulse":{"get":{"tags":["Other"],"summary":"GET /api/daemon/pulse","responses":{"200":{"description":"OK"}}}},"/api/daemon/status":{"get":{"tags":["Other"],"summary":"GET /api/daemon/status","responses":{"200":{"description":"OK"}}}},"/api/daemon/tesc":{"get":{"tags":["Other"],"summary":"GET /api/daemon/tesc","responses":{"200":{"description":"OK"}}}},"/api/decompress":{"post":{"tags":["Other"],"summary":"POST /decompress","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/demo-key":{"get":{"tags":["Accounts & Keys"],"summary":"Shared demo key (10/day, spin-up only — mint your own via POST /api/demo-key/mint).","responses":{"200":{"description":"{ key, plan, dailyLimit }"}}}},"/api/demo-key/mint":{"post":{"tags":["Accounts & Keys"],"summary":"demo-key (one shared key, IP-windowed), each call here mints a FRESH key with its own isolated compute budget; when the budget is spent the caller mints another. IP-rate-limited (same limiter) so it can't spawn unlimite","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/dns/lookup/{address}":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/dns/lookup/:address","responses":{"200":{"description":"OK"}},"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/dns/register":{"post":{"tags":["Mesh & Nodes"],"summary":"POST /api/dns/register","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/dns/resolve":{"post":{"tags":["Mesh & Nodes"],"summary":"POST /api/dns/resolve","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/dns/status":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/dns/status","responses":{"200":{"description":"OK"}}}},"/api/donate/addresses":{"get":{"tags":["Other"],"summary":"Public: deposit addresses + price snapshot","responses":{"200":{"description":"OK"}}}},"/api/donate/crypto/claim":{"post":{"tags":["Other"],"summary":"Public: submit a TX hash to claim N months of credit","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/donate/crypto/status/{id}":{"get":{"tags":["Other"],"summary":"Public: poll status of a claim","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/donors/wall":{"get":{"tags":["Other"],"summary":"still count toward the pool but are aggregated into a single \"Anonymous\" tile so privacy holds. Public — no auth. Rate-limited via readLimiter.","responses":{"200":{"description":"OK"}}}},"/api/download/source":{"get":{"tags":["Other"],"summary":"PROJECT_ROOT was used by the retired /source.zip handler that walked the live filesystem (Phase F batch #15). Removed because it's no longer referenced — see the route comment below for full context.","responses":{"200":{"description":"OK"}}}},"/api/download/source.zip":{"get":{"tags":["Other"],"summary":"We respond 410 Gone so monitoring catches anyone who was scripting against it. Switch to 404 once we're sure no internal tooling depends on the path.","responses":{"200":{"description":"OK"}}}},"/api/endpoints":{"get":{"tags":["Other"],"summary":"GET /api/mcp (discovery / health) GET /api/endpoints — the public endpoint manifest as plain JSON Powers the API Explorer page and any client that wants the map wi","responses":{"200":{"description":"OK"}}}},"/api/equation-study":{"get":{"tags":["Other"],"summary":"GET /equation-study","responses":{"200":{"description":"OK"}}},"post":{"tags":["Other"],"summary":"POST /equation-study","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/equation-study/{id}":{"get":{"tags":["Other"],"summary":"GET /equation-study/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/equations":{"get":{"tags":["Other"],"summary":"Core Equations (informational)","responses":{"200":{"description":"OK"}}}},"/api/experiments":{"get":{"tags":["Other"],"summary":"Premade Experiments","responses":{"200":{"description":"OK"}}}},"/api/explorer/agent-files":{"get":{"tags":["Chain & State"],"summary":"15.7 GET /api/explorer/agent-files — public agent-file activity summary EX.F (2026-05-19). Count-only directory (paths + role + version, never content) of files written by agents whose owner machine is_public=true.","responses":{"200":{"description":"OK"}}}},"/api/explorer/computations":{"get":{"tags":["Chain & State"],"summary":"GET /api/explorer/computations","responses":{"200":{"description":"OK"}}}},"/api/explorer/computations/{id}":{"get":{"tags":["Chain & State"],"summary":"GET /api/explorer/computations/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/explorer/pages":{"get":{"tags":["Chain & State"],"summary":"15.6 GET /api/explorer/pages — network-wide hosted pages directory EX.F (2026-05-19). Every published page on the network, joined to state_machines with is_public=true. Excludes the launcher (page_slug='index').","responses":{"200":{"description":"OK"}}}},"/api/explorer/sources":{"get":{"tags":["Chain & State"],"summary":"GET /api/explorer/sources","responses":{"200":{"description":"OK"}}}},"/api/explorer/stats":{"get":{"tags":["Chain & State"],"summary":"GET /api/explorer/stats","responses":{"200":{"description":"OK"}}}},"/api/explorer/stream":{"get":{"tags":["Chain & State"],"summary":"GET /api/explorer/stream","responses":{"200":{"description":"OK"}}}},"/api/explorer/tags":{"get":{"tags":["Chain & State"],"summary":"15.10 GET /api/explorer/tags — tag-bus directory (Phase X) EX.J (2026-05-19). Lists distinct contract_event tags, with emit_count, emitter slugs, and last_seen Zeqond. Only public machines feed the bus.","responses":{"200":{"description":"OK"}}}},"/api/external-engines":{"get":{"tags":["Other"],"summary":"GET /api/external-engines","responses":{"200":{"description":"OK"}}}},"/api/external-engines/{id}":{"get":{"tags":["Other"],"summary":"GET /api/external-engines/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/external-engines/{id}/probe":{"get":{"tags":["Other"],"summary":"GET /api/external-engines/:id/probe","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/files/_meta/health":{"get":{"tags":["Other"],"summary":"DEV utility: route count + storage path (no PII)","responses":{"200":{"description":"OK"}}}},"/api/files/{id}/chunk":{"post":{"tags":["Other"],"summary":"POST /api/files/:id/chunk — append one chunk","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/files/{id}/collect":{"post":{"tags":["Other"],"summary":"POST /api/files/:id/collect","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/files/{id}/complete":{"post":{"tags":["Other"],"summary":"POST /api/files/:id/complete — finalizer","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/files/{id}/download":{"get":{"tags":["Other"],"summary":"GET /api/files/:id/download — owner OR share token","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/files/{id}/share":{"post":{"tags":["Other"],"summary":"POST /api/files/:id/share — mint a share URL","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/files/{id}/status":{"get":{"tags":["Other"],"summary":"GET /api/files/:id/status — lifetime without downloading Lets the mail UI show \"expires in 6h\" or \"expired\" on an attachment chip without pulling the bytes down just to find out.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/files/init":{"post":{"tags":["Other"],"summary":"POST /api/files/init — multi-chunk session init","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/files/upload":{"post":{"tags":["Other"],"summary":"POST /api/files/upload — single-shot upload","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/fleet":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/fleet","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/fleet/{slug}/govern":{"post":{"tags":["Mesh & Nodes"],"summary":"1. Propose","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/fleet/{slug}/invite":{"post":{"tags":["Mesh & Nodes"],"summary":"1. POST /api/fleet/:slug/invite","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/fleet/{slug}/parties":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/fleet/:slug/parties","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/fleet/governance":{"get":{"tags":["Mesh & Nodes"],"summary":"2. What is waiting for MY equation","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/fleet/governance/{id}/approve":{"post":{"tags":["Mesh & Nodes"],"summary":"3. Approve, with an equation proof","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/fleet/governance/{id}/cancel":{"post":{"tags":["Mesh & Nodes"],"summary":"4. Withdraw","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/fleet/invites":{"get":{"tags":["Mesh & Nodes"],"summary":"2. GET /api/fleet/invites Invitations addressed to ME. Scoped by the session ZID, never by a parameter: a parameter is a thing the caller gets to choose.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/fleet/invites/{id}/accept":{"post":{"tags":["Mesh & Nodes"],"summary":"POST /api/fleet/invites/:id/accept","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/genesis/analyze":{"post":{"tags":["Other"],"summary":"POST /genesis/analyze","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/genesis/execute":{"post":{"tags":["Other"],"summary":"Step 7: Verify result — check if precision target was met","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/genesis/gaps":{"get":{"tags":["Other"],"summary":"GET /genesis/gaps — View the gap log","responses":{"200":{"description":"OK"}}}},"/api/genesis/generate":{"post":{"tags":["Other"],"summary":"POST /genesis/generate","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/genesis/promote/{id}":{"post":{"tags":["Other"],"summary":"POST /genesis/promote/:id — Promote protocol to permanent","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/genesis/protocol/{id}":{"get":{"tags":["Other"],"summary":"GET /genesis/protocol/:id — Get a specific protocol","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/genesis/protocols":{"get":{"tags":["Other"],"summary":"GET /genesis/protocols — List all generated protocols","responses":{"200":{"description":"OK"}}}},"/api/genesis/query-to-equation":{"post":{"tags":["Other"],"summary":"POST /genesis/query-to-equation — Convert query to equation","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/genesis/stats":{"get":{"tags":["Other"],"summary":"GET /genesis/stats — Engine statistics (public)","responses":{"200":{"description":"OK"}}}},"/api/genesis/status":{"get":{"tags":["Other"],"summary":"GET /api/genesis/status","responses":{"200":{"description":"OK"}}}},"/api/handshake":{"post":{"tags":["Other"],"summary":"POST /node/handshake","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/health":{"get":{"tags":["System"],"summary":"Liveness probe — reports the live git SHA and build time.","responses":{"200":{"description":"OK"}}}},"/api/healthz":{"get":{"tags":["System"],"summary":"GET /api/healthz","responses":{"200":{"description":"OK"}}}},"/api/hite/decrypt":{"post":{"tags":["Other"],"summary":"POST /api/hite/decrypt","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/hite/encrypt":{"post":{"tags":["Other"],"summary":"POST /api/hite/encrypt","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/hz/check/{label}":{"get":{"tags":["Other"],"summary":"GET /api/hz/check/:label","responses":{"200":{"description":"OK"}},"parameters":[{"name":"label","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/hz/names/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/hz/names/:zid","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/hz/register":{"post":{"tags":["Other"],"summary":"POST /api/hz/register body: { label, years?, payment: { method: \"credits\" | \"envelopes\", envelope_ids?: string[] }, machine_id? }","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/hz/resolve/{name}":{"get":{"tags":["Other"],"summary":"GET /api/hz/resolve/:name","responses":{"200":{"description":"OK"}},"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/identity":{"get":{"tags":["Other"],"summary":"GET /api/identity","responses":{"200":{"description":"OK"}}}},"/api/kernel":{"get":{"tags":["Operators & Kernel"],"summary":"GET /api/kernel — full structured JSON","responses":{"200":{"description":"OK"}}}},"/api/kernel/demo":{"get":{"tags":["Operators & Kernel"],"summary":"GET /api/kernel/demo — cached three-body computation result","responses":{"200":{"description":"OK"}}}},"/api/kernel/live":{"get":{"tags":["Operators & Kernel"],"summary":"GET /api/kernel/live — re-run three-body computation, refresh cache","responses":{"200":{"description":"OK"}}}},"/api/kernel/prompt":{"get":{"tags":["Operators & Kernel"],"summary":"Full Zeq kernel prompt (LLM bootstrap).","responses":{"200":{"description":"Kernel markdown"}}}},"/api/kernel/skill":{"get":{"tags":["Operators & Kernel"],"summary":"GET /api/kernel/skill — JSON manifest with install instructions Programmatic install path: client GETs this, reads the install commands for its platform (claude-code / cowork / cursor / openai), and writes","responses":{"200":{"description":"OK"}}}},"/api/kernel/skill.md":{"get":{"tags":["Operators & Kernel"],"summary":"other skill-aware LLM clients can drop into their skills directory verbatim. Source of truth is buildKernelMarkdown() — change once, every install re-syncs on next pull. Same content as /.well-known/zeq-os-kernel.md but","responses":{"200":{"description":"OK"}}}},"/api/keyex/{slug}/handshake":{"post":{"tags":["Accounts & Keys"],"summary":"POST /api/keyex/:slug/handshake","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/keyex/{slug}/pubkey":{"get":{"tags":["Accounts & Keys"],"summary":"GET /api/keyex/:slug/pubkey","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/keys/issue":{"post":{"tags":["Accounts & Keys"],"summary":"The middleware is permissive by design: no token → next(), a zeq_ak_/zsm_ bearer → next(). So adding it cannot lock out the legacy cookie path, and the handler keeps its own 401 for the genuinely-unauthenticated case.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/keys/list":{"get":{"tags":["Accounts & Keys"],"summary":"GET /api/keys/list","responses":{"200":{"description":"OK"}}}},"/api/keys/me":{"get":{"tags":["Accounts & Keys"],"summary":"GET /api/keys/me","responses":{"200":{"description":"OK"}}}},"/api/keys/revoke":{"post":{"tags":["Accounts & Keys"],"summary":"POST /api/keys/revoke","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/keys/rotate":{"post":{"tags":["Accounts & Keys"],"summary":"POST /api/keys/rotate","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/llm/chat":{"post":{"tags":["Other"],"summary":"authed browser sessions (the canonical /apps/skills/ chatbot path) can reach this endpoint without minting a Bearer key on the client. The authenticateKey middleware short-circuits when both req.user and req.zeqAuth are","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/llm/key":{"post":{"tags":["Other"],"summary":"A10-F1 FIX: req.body guard protects destructure against empty body (500 → 400). async as of 2026-08-02: storing a key is now a durable write to ZSC rather than a synchronous Map.set, so this handler has to await it — and","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/llm/models":{"get":{"tags":["Other"],"summary":"GET /api/llm/models?provider=xxx","responses":{"200":{"description":"OK"}}}},"/api/llm/providers":{"get":{"tags":["Other"],"summary":"Async now: hasKey is a question about the vault, not about this process's memory. It was the only signal a user had for \"is the LLM configured?\", and it answered for one container out of fourteen.","responses":{"200":{"description":"OK"}}}},"/api/machine/allocation":{"get":{"tags":["Other"],"summary":"GET /api/machine/allocation","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/machines/top":{"get":{"tags":["Other"],"summary":"GET /api/machines/top","responses":{"200":{"description":"OK"}}}},"/api/mail/ai/compose-html":{"post":{"tags":["Other"],"summary":"POST /api/mail/ai/compose-html","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/aliases":{"get":{"tags":["Other"],"summary":"GET /mail/aliases","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Other"],"summary":"POST /mail/aliases","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/aliases/{id}":{"delete":{"tags":["Other"],"summary":"DELETE /mail/aliases/:id","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/mail/blocklist":{"get":{"tags":["Other"],"summary":"GET /mail/blocklist","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Other"],"summary":"POST /mail/blocklist { kind: \"address\"|\"domain\"|\"pattern\", value, reason? }","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/blocklist/{id}":{"delete":{"tags":["Other"],"summary":"DELETE /mail/blocklist/:id","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/mail/contacts":{"get":{"tags":["Other"],"summary":"GET /mail/contacts Derived from message history: every distinct address the owner has sent to OR received from. No separate persistence — keeps the mail schema lean and cont","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"put":{"tags":["Other"],"summary":"PUT /mail/contacts Save or update the detail for one address. Upsert, so the client does not have to know whether a record already exists.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/contacts/{id}":{"delete":{"tags":["Other"],"summary":"Removes the SAVED DETAIL, not the contact. The person reappears from message history with their bare address — we cannot honestly forget someone you have exchanged mail with while that mail still exists, and pretending o","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/mail/foundation/daily":{"post":{"tags":["Other"],"summary":"POST /api/mail/foundation/daily","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/foundation/unsubscribe":{"get":{"tags":["Other"],"summary":"GET /mail/foundation/unsubscribe?zid=&t= — one click, no login.","responses":{"200":{"description":"OK"}}}},"/api/mail/inbound":{"post":{"tags":["Other"],"summary":"POST /api/mail/inbound","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/inbox":{"get":{"tags":["Other"],"summary":"GET /mail/inbox","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/mail/message/{id}":{"get":{"tags":["Other"],"summary":"GET /mail/message/:id","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"patch":{"tags":["Other"],"summary":"PATCH /mail/message/:id","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/message/{id}/block":{"post":{"tags":["Other"],"summary":"POST /mail/message/:id/block One-click block from an open message or a card. Blocks the sender and sweeps their existing mail into spam so the inbox is clean immediately.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/send":{"post":{"tags":["Other"],"summary":"Internal routing: alias-table OR ZID-derived address → local zid. Both sender's sent-copy and (if internal) recipient's inbox-copy are inserted as separate rows, each independently encrypted under the owner's encryption","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/sent":{"get":{"tags":["Other"],"summary":"GET /mail/sent","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/mail/signatures":{"get":{"tags":["Other"],"summary":"GET /mail/signatures","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"put":{"tags":["Other"],"summary":"PUT /mail/signatures Upsert the signature for one address you own. Stored server-side so it is appended on send no matter which client sent the message.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mail/spam":{"get":{"tags":["Other"],"summary":"GET /mail/spam Quarantine. Nothing here was rejected — it was scored, filed and kept, so a false positive is always recoverable by moving it back to the inbox.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/mail/stats":{"get":{"tags":["Other"],"summary":"GET /mail/stats Auth-gate bootstrap. Returns counts + identity card. The UI checks {ok:true} to hide the auth-gate div and render the mailbox.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/mcp":{"get":{"tags":["MCP"],"summary":"MCP discovery document — per-node name/url, machine_hash, surface stats and tool list.","responses":{"200":{"description":"Discovery JSON"}}},"post":{"tags":["MCP"],"summary":"MCP Streamable HTTP endpoint (JSON-RPC 2.0): initialize, tools/list, tools/call. Every tool is listed under x-mcp-tools at the document root; zeq_api_catalog maps the surface and zeq_http calls any endpoint.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string"},"id":{},"method":{"type":"string"},"params":{"type":"object"}},"required":["jsonrpc","method"]}}}},"responses":{"200":{"description":"JSON-RPC result"}}}},"/api/mesh":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/mesh","responses":{"200":{"description":"OK"}}}},"/api/mesh/gossip":{"post":{"tags":["Mesh & Nodes"],"summary":"POST /api/mesh/gossip","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/mesh/self":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/mesh/self","responses":{"200":{"description":"OK"}}}},"/api/mesh/status":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/mesh/status","responses":{"200":{"description":"OK"}}}},"/api/mesh/verify":{"post":{"tags":["Mesh & Nodes"],"summary":"POST /api/mesh/verify","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/ai/chat":{"post":{"tags":["Other"],"summary":"POST /api/msg/ai/chat","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/ai/history":{"get":{"tags":["Other"],"summary":"GET /api/msg/ai/history","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/msg/ai/key":{"get":{"tags":["Other"],"summary":"GET /msg/ai/key — which credentials exist? (never returns a key)","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Other"],"summary":"POST /msg/ai/key — save/rotate a credential","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/ai/key/{provider}":{"delete":{"tags":["Other"],"summary":"DELETE /msg/ai/key/:provider","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/msg/ai/transcript-key":{"get":{"tags":["Other"],"summary":"GET /api/msg/ai/transcript-key","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/msg/ai/turn":{"post":{"tags":["Other"],"summary":"POST /msg/ai/turn — start a durable turn, return its id at once","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/ai/turn/{id}":{"get":{"tags":["Other"],"summary":"GET /msg/ai/turn/:id — collect a turn, running or finished","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/msg/ai/turn/{id}/stop":{"post":{"tags":["Other"],"summary":"POST /api/msg/ai/turn/:id/stop","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/ai/turns/active":{"get":{"tags":["Other"],"summary":"GET /api/msg/ai/turns/active","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/msg/calls/history":{"get":{"tags":["Other"],"summary":"Calls","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/msg/calls/log":{"post":{"tags":["Other"],"summary":"POST /api/msg/calls/log","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/calls/missed-count":{"get":{"tags":["Other"],"summary":"GET /api/msg/calls/missed-count","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/msg/channels":{"get":{"tags":["Other"],"summary":"GET /msg/channels","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/msg/channels/{slug}/messages":{"get":{"tags":["Other"],"summary":"GET /msg/channels/:slug/messages","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"post":{"tags":["Other"],"summary":"POST /msg/channels/:slug/messages","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/channels/{slug}/messages/{id}/delete":{"post":{"tags":["Other"],"summary":"POST /msg/channels/:slug/messages/:id/delete Delete a channel message. The AUTHOR or a channel admin may delete it. Hard delete (channels persist; there's nothing to soft-tombstone against","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/channels/{slug}/messages/{id}/edit":{"post":{"tags":["Other"],"summary":"POST /msg/channels/:slug/messages/:id/edit Edit a channel message (AUTHOR only). Sets content + edited_at. Body {content}.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/channels/{slug}/messages/{id}/pin":{"post":{"tags":["Other"],"summary":"POST /msg/channels/:slug/messages/:id/pin Pin/unpin a channel message. The message AUTHOR or a channel admin may pin; the pin is shared (everyone sees the pinned bar). Body: { pinned: bo","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/channels/{slug}/messages/{id}/react":{"post":{"tags":["Other"],"summary":"POST /msg/channels/:slug/messages/:id/react Toggle the caller's reaction on a channel message. Body: { emoji }. Stored in the `reactions` jsonb ({ emoji: [zids] }); returns the updated map","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/channels/{slug}/search":{"get":{"tags":["Other"],"summary":"GET /msg/channels/:slug/search?q= Search a channel's full history by content (case-insensitive). Returns the newest matches first. Channels persist, so this is a real server quer","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/msg/cli/exec":{"post":{"tags":["Other"],"summary":"POST /msg/cli/exec","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/contacts":{"get":{"tags":["Other"],"summary":"Contacts","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Other"],"summary":"POST /api/msg/contacts","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/contacts/{zid}":{"delete":{"tags":["Other"],"summary":"DELETE /api/msg/contacts/:zid","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"patch":{"tags":["Other"],"summary":"PATCH /api/msg/contacts/:zid","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/contacts/search/{term}":{"get":{"tags":["Other"],"summary":"GET /api/msg/contacts/search/:term","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"term","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/msg/conversations":{"get":{"tags":["Other"],"summary":"Conversations","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Other"],"summary":"POST /api/msg/conversations","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/conversations/{id}/messages":{"get":{"tags":["Other"],"summary":"GET /msg/conversations/:id/messages — P2P: the server holds nothing. History lives on the user's devices (client localStorage); this returns an empty page so the client merges its local store.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"post":{"tags":["Other"],"summary":"POST /msg/conversations/:id/messages — relay + receipt, store nothing.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/conversations/{id}/read":{"post":{"tags":["Other"],"summary":"POST /msg/conversations/:id/read — read-receipt relay.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/feed":{"get":{"tags":["Other"],"summary":"GET /msg/feed","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/msg/feed/save":{"post":{"tags":["Other"],"summary":"This is NOT an append to the ledger: it writes to the user's vault, and a vault write can never alter the chain. Kept in this router because it is the feed's \"save\" action from the user's point of view.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/ice-servers":{"get":{"tags":["Other"],"summary":"GET /api/msg/ice-servers","responses":{"200":{"description":"OK"}}}},"/api/msg/messages/{id}":{"delete":{"tags":["Other"],"summary":"DELETE /msg/messages/:id — delete relay (tombstone applied client-side).","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"patch":{"tags":["Other"],"summary":"PATCH /msg/messages/:id — edit relay. The server stores nothing, so the client supplies conversationId; recipients apply the edit locally.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/messages/{id}/react":{"post":{"tags":["Other"],"summary":"POST /msg/messages/:id/react — reaction relay. No aggregation server-side (nothing stored): the delta {zid, emoji} relays and every client applies the toggle to its local copy.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/profile":{"get":{"tags":["Other"],"summary":"Profile","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["Other"],"summary":"PATCH /api/msg/profile","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/profile/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/msg/profile/:zid","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/msg/profile/links":{"get":{"tags":["Other"],"summary":"GET /api/msg/profile/links","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"put":{"tags":["Other"],"summary":"PUT /api/msg/profile/links","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/profile/links/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/msg/profile/links/:zid","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/msg/push/key":{"get":{"tags":["Other"],"summary":"GET /msg/push/key — the VAPID public key a browser needs to subscribe.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/msg/push/subscribe":{"post":{"tags":["Other"],"summary":"POST /msg/push/subscribe — register this browser","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/push/unsubscribe":{"post":{"tags":["Other"],"summary":"POST /msg/push/unsubscribe — the user turned it off on this device","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/settings":{"get":{"tags":["Other"],"summary":"Settings + Status","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["Other"],"summary":"PATCH /api/msg/settings","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/msg/status":{"put":{"tags":["Other"],"summary":"PUT /api/msg/status","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/multibody":{"post":{"tags":["Other"],"summary":"POST /api/multibody","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/node/attest":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/node/attest","responses":{"200":{"description":"OK"}}}},"/api/node/peers":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/node/peers","responses":{"200":{"description":"OK"}}}},"/api/node/relay":{"post":{"tags":["Mesh & Nodes"],"summary":"POST /api/node/relay","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/node/status":{"get":{"tags":["Mesh & Nodes"],"summary":"GET /api/node/status","responses":{"200":{"description":"OK"}}}},"/api/node/sync":{"post":{"tags":["Mesh & Nodes"],"summary":"POST /api/node/sync","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/oauth/authorize":{"get":{"tags":["Other"],"summary":"oauth/authorize (GET) — entry point of the vault-issuance ceremony","responses":{"200":{"description":"OK"}}}},"/api/oauth/authorize/consent":{"post":{"tags":["Other"],"summary":"oauth/authorize/consent (POST) — user clicked Approve or Cancel","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/oauth/refresh":{"post":{"tags":["Other"],"summary":"5. token NOT in oauth_tokens_revoked (rotation, revoke, or logout). On success: revoke the old refresh token (rotation), mint NEW access + NEW refresh + NEW id_token. Old refresh is INVALID from this point.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/oauth/revoke":{"post":{"tags":["Other"],"summary":"Accepts optional token_type_hint ('access_token' | 'refresh_token') — we try both kinds when the hint is wrong or missing (RFC 7009 §2.1).","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/oauth/token":{"post":{"tags":["Other"],"summary":"7. redeemCodeOnce — single-use enforcement, TOCTOU-safe via DB. On success: mint access_token (HITE-sealed), refresh_token (HITE-sealed), id_token (JWT HS256). Return OIDC-shaped JSON.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/oauth/userinfo":{"get":{"tags":["Other"],"summary":"GET /api/oauth/userinfo","responses":{"200":{"description":"OK"}}},"post":{"tags":["Other"],"summary":"POST /api/oauth/userinfo","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/operator/{id}":{"get":{"tags":["Other"],"summary":"Canonical Operator Lookup","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/operators":{"get":{"tags":["Operators & Kernel"],"summary":"Operator registry (1,597 operators across 65 domains; served verbatim from data/operator-registry.json).","responses":{"200":{"description":"Full operator list"}}}},"/api/operators/categories":{"get":{"tags":["Operators & Kernel"],"summary":"Operator domain categories.","responses":{"200":{"description":"Categories"}}}},"/api/operators/details":{"get":{"tags":["Operators & Kernel"],"summary":"{ id, name, domain, equation, equationLaTeX, latexTrusted, founder, description } per id, in the given order. Public, read-only. Unknown ids come back with the id preserved and empty fields (a missing operator is informa","responses":{"200":{"description":"OK"}}}},"/api/oracle/history/{chain}":{"get":{"tags":["Oracle"],"summary":"api/oracle/history/:chain?n=120 — consensus history for charts","responses":{"200":{"description":"OK"}},"parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/oracle/price/{chain}":{"get":{"tags":["Oracle"],"summary":"api/oracle/price/:chain","responses":{"200":{"description":"OK"}},"parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/oracle/prices":{"get":{"tags":["Oracle"],"summary":"api/oracle/prices (both chains)","responses":{"200":{"description":"OK"}}}},"/api/oracle/sources/{chain}":{"get":{"tags":["Oracle"],"summary":"api/oracle/sources/:chain — most recent per-source rows","responses":{"200":{"description":"OK"}},"parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/orb/{userZid}":{"get":{"tags":["Other"],"summary":"zeqonds_since_genesis (live pulse counter) - wallet { tokens_remaining, mint_rate_per_zeqond, balance_zqt } - paired_user_zid - explorer_url (where to view the orb's chain)","responses":{"200":{"description":"OK"}},"parameters":[{"name":"userZid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/params":{"get":{"tags":["Other"],"summary":"Framework Parameters","responses":{"200":{"description":"OK"}}}},"/api/peers":{"get":{"tags":["Other"],"summary":"GET /node/peers","responses":{"200":{"description":"OK"}}}},"/api/phish/check":{"get":{"tags":["Other"],"summary":"GET /api/phish/check?fingerprint=<hash> — public lookup","responses":{"200":{"description":"OK"}}}},"/api/phish/classify":{"post":{"tags":["Other"],"summary":"POST /api/phish/classify — body { url } → { score, reasons }","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/phish/feed":{"get":{"tags":["Other"],"summary":"GET /api/phish/feed — public top-N by confidence in last 24h","responses":{"200":{"description":"OK"}}}},"/api/phish/report":{"post":{"tags":["Other"],"summary":"→ upsert into phish_fingerprints OR mal_fingerprints (when kind present), + audit row + 'av.phish.detected' fanout. ═","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/phish/verify":{"post":{"tags":["Other"],"summary":"POST /api/phish/verify — body { fingerprint_hash } — increment count","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/playground/compute":{"post":{"tags":["Other"],"summary":"POST /api/playground/compute","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/portability/discover/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/portability/discover/:zid — owner-gated, fans out","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/portability/peer/export/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/portability/peer/export/:zid — peer-only, signed, cursor-paged","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/portability/peer/manifest/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/portability/peer/manifest/:zid — peer-only, signed","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/portability/pull":{"post":{"tags":["Other"],"summary":"POST /api/portability/pull — owner-gated; walks A's export cursors","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/portal/certificate":{"get":{"tags":["Accounts & Keys"],"summary":"portal/certificate","responses":{"200":{"description":"OK"}}}},"/api/portal/key":{"get":{"tags":["Accounts & Keys"],"summary":"portal/key (legacy — single key)","responses":{"200":{"description":"OK"}}}},"/api/portal/keys":{"get":{"tags":["Accounts & Keys"],"summary":"portal/keys (multi-key management)","responses":{"200":{"description":"OK"}}},"post":{"tags":["Accounts & Keys"],"summary":"POST /api/portal/keys","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/portal/keys/{id}":{"delete":{"tags":["Accounts & Keys"],"summary":"DELETE /api/portal/keys/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/portal/keys/{id}/reveal":{"post":{"tags":["Accounts & Keys"],"summary":"portal/keys/:id/reveal (one-time encrypted reveal)","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/portal/me":{"get":{"tags":["Accounts & Keys"],"summary":"portal/me","responses":{"200":{"description":"OK"}}}},"/api/portal/regenerate-key":{"post":{"tags":["Accounts & Keys"],"summary":"portal/regenerate-key (legacy — kept for backward compatibility)","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/portal/usage":{"get":{"tags":["Accounts & Keys"],"summary":"portal/usage","responses":{"200":{"description":"OK"}}}},"/api/protocol":{"get":{"tags":["Other"],"summary":"7-Step Wizard Protocol","responses":{"200":{"description":"OK"}}}},"/api/protocol/pohc":{"get":{"tags":["Other"],"summary":"GET /api/protocol/pohc — full specification","responses":{"200":{"description":"OK"}}}},"/api/protocol/pohc/attest":{"post":{"tags":["Other"],"summary":"POST /api/protocol/pohc/attest — Landauer thermal attestation Proves a computation meets the thermodynamic minimum energy bound.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/protocol/pohc/convergence":{"post":{"tags":["Other"],"summary":"POST /api/protocol/pohc/convergence — check convergence of identities Used by smart contracts to verify that N identities agree on a value.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/protocol/pohc/energy":{"get":{"tags":["Other"],"summary":"GET /api/protocol/pohc/energy — energy per computation comparison","responses":{"200":{"description":"OK"}}}},"/api/protocol/pohc/finality":{"post":{"tags":["Other"],"summary":"POST /api/protocol/pohc/finality — PLAT-chain finality check Verifies that a state transition has reached finality (2 Zeqonds old).","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/protocol/pohc/layers":{"get":{"tags":["Other"],"summary":"GET /api/protocol/pohc/layers — just the layers","responses":{"200":{"description":"OK"}}}},"/api/protocol/reputation":{"post":{"tags":["Other"],"summary":"POST /api/protocol/reputation — reputation weight for a ZID Used by contracts for weighted voting / access control.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/protocol/sybil":{"get":{"tags":["Other"],"summary":"GET /api/protocol/sybil — sybil resistance status","responses":{"200":{"description":"OK"}}}},"/api/protocols/":{"get":{"tags":["Other"],"summary":"Full Protocol Registry","responses":{"200":{"description":"OK"}}}},"/api/protocols/{id}":{"get":{"tags":["Other"],"summary":"Single Protocol Detail","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/protocols/category/{category}":{"get":{"tags":["Other"],"summary":"Protocols by Category","responses":{"200":{"description":"OK"}},"parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/qm3/deposit-addresses/{id}":{"get":{"tags":["Other"],"summary":"GET /api/qm3/wallets/:id ─ wallet detail + owners","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/qm3/deposit-addresses/{id}/initiate":{"post":{"tags":["Other"],"summary":"POST /api/qm3/wallets/:id/initiate ─ start a pending transition","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/qm3/deposit-addresses/{id}/pending":{"get":{"tags":["Other"],"summary":"GET /api/qm3/wallets/:id/pending ─ list pending for wallet","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/qm3/deposit-addresses/mine":{"get":{"tags":["Other"],"summary":"GET /api/qm3/wallets/mine ─ wallets where caller is an owner","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/qm3/pending/{tid}/cancel":{"post":{"tags":["Other"],"summary":"POST /api/qm3/pending/:tid/cancel ─ cancel pending tx","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/qm3/pending/{tid}/compute-sig":{"post":{"tags":["Other"],"summary":"signature directly (the caller's identity is proven by the v3 cookie either way). Returns the signature, the caller can then POST it back to /sign. We don't auto-attach because the UX should show \"here's what you're abou","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/qm3/pending/{tid}/sign":{"post":{"tags":["Other"],"summary":"POST /api/qm3/pending/:tid/sign ─ attach signature Body: { signature_hex } — caller-computed.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/quantum-verify":{"post":{"tags":["Other"],"summary":"POST /quantum-verify","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/quantum-verify/{id}":{"get":{"tags":["Other"],"summary":"GET /quantum-verify/:id Re-checks the stored proof against the stored fields → tamper-evident.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/quantum-verify/coverage":{"get":{"tags":["Other"],"summary":"GET /quantum-verify/coverage","responses":{"200":{"description":"OK"}}}},"/api/registry":{"get":{"tags":["Other"],"summary":"Full Canonical Registry","responses":{"200":{"description":"OK"}}}},"/api/registry/categories":{"get":{"tags":["Other"],"summary":"Registry Category Breakdown","responses":{"200":{"description":"OK"}}}},"/api/relay":{"post":{"tags":["Other"],"summary":"POST /node/relay","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/science/domains":{"get":{"tags":["Other"],"summary":"answer carries its own limits rather than a yes. See lib/scienceDomains.ts. GET /science/domains — the 67 registry domains, with the literature sources that actually serve each. Public: an agent needs it to scope a searc","responses":{"200":{"description":"OK"}}}},"/api/science/fetch":{"post":{"tags":["Other"],"summary":"POST /science/fetch — resolve one canonical id to its record.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/science/match":{"post":{"tags":["Other"],"summary":"POST /science/match — which operator domains a paper plausibly falls in. { id } to classify a fetched record, or { text } to classify anything.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/science/search":{"post":{"tags":["Other"],"summary":"POST /science/search — fan out across literature sources, one shape back.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/science/sources":{"get":{"tags":["Other"],"summary":"GET /science/sources — the catalogue. Public: an agent needs to know what it can ask for before it asks, and a client needs it to render a picker.","responses":{"200":{"description":"OK"}}}},"/api/search":{"get":{"tags":["Other"],"summary":"Top-level dispatcher","responses":{"200":{"description":"OK"}}}},"/api/skills":{"get":{"tags":["Other"],"summary":"GET /skills — list industry skill templates (browse the directory)","responses":{"200":{"description":"OK"}}}},"/api/skills/{id}":{"get":{"tags":["Other"],"summary":"GET /skills/:id — one industry skill template","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/skills/generate":{"post":{"tags":["Other"],"summary":"POST /api/skills/generate","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/skills/preview":{"get":{"tags":["Other"],"summary":"`writeSkillFile` would persist on attach. This is the user-facing transparency surface: clicking Preview on a catalogue card calls this and shows the full body before they hit Load. No auth — the catalogue itself is alre","responses":{"200":{"description":"OK"}}}},"/api/solve":{"post":{"tags":["Other"],"summary":"POST /api/solve","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/solve/strict":{"post":{"tags":["Other"],"summary":"POST /api/solve/strict","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/sources":{"get":{"tags":["Other"],"summary":"GET /api/sources — adapter directory","responses":{"200":{"description":"OK"}}}},"/api/sources/{adapter}/{source_id}":{"get":{"tags":["Other"],"summary":"GET /api/sources/:adapter/:source_id — per-source detail","responses":{"200":{"description":"OK"}},"parameters":[{"name":"adapter","in":"path","required":true,"schema":{"type":"string"}},{"name":"source_id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/ssl/credentials":{"get":{"tags":["Other"],"summary":"GET /api/ssl/credentials?machine=<slug>","responses":{"200":{"description":"OK"}}}},"/api/ssl/credentials/issue":{"post":{"tags":["Other"],"summary":"POST /api/ssl/credentials/issue","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/credentials/revoke":{"post":{"tags":["Other"],"summary":"POST /api/ssl/credentials/revoke","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/credentials/rotate":{"post":{"tags":["Other"],"summary":"POST /api/ssl/credentials/rotate","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/handshake/verify":{"post":{"tags":["Other"],"summary":"POST /api/ssl/handshake/verify","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/peer-seed":{"post":{"tags":["Other"],"summary":"POST /api/ssl/peer-seed","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/peer-seed/keyex/initiate":{"post":{"tags":["Other"],"summary":"POST /api/ssl/peer-seed/keyex/initiate","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/peer-seed/keyex/respond":{"post":{"tags":["Other"],"summary":"POST /api/ssl/peer-seed/keyex/respond","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/trust":{"get":{"tags":["Other"],"summary":"directions. Before this, grant/revoke wrote rows that no surface could display — the manager page's trust panel was a dead placeholder. Trust edges are public records (like credentials' public rows); the signature stays","responses":{"200":{"description":"OK"}}}},"/api/ssl/trust/grant":{"post":{"tags":["Other"],"summary":"POST /api/ssl/trust/grant","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/trust/revoke":{"post":{"tags":["Other"],"summary":"POST /api/ssl/trust/revoke","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/ssl/verify":{"get":{"tags":["Other"],"summary":"GET /api/ssl/verify?machine=&kid=&zeqond=","responses":{"200":{"description":"OK"}}}},"/api/state-machines/{slug}/chats":{"get":{"tags":["Chain & State"],"summary":"GET /chats — thread list (meta only)","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"put":{"tags":["Chain & State"],"summary":"PUT /chats — bulk upsert (debounced client push)","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/state-machines/{slug}/chats/{threadKey}":{"delete":{"tags":["Chain & State"],"summary":"DELETE /chats/:threadKey","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"threadKey","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/state-machines/{slug}/chats/full":{"get":{"tags":["Chain & State"],"summary":"GET /chats/full — everything incl. messages (boot pull)","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/state-machines/{slug}/pages":{"get":{"tags":["Chain & State"],"summary":"GET /list Public — published pages are hosted content. Excludes the launcher.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/state-machines/{slug}/pages/{pageSlug}":{"get":{"tags":["Chain & State"],"summary":"GET /:pageSlug Public read of the published version. Returns html + python.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageSlug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/state-machines/{slug}/pages/{pageSlug}/history":{"get":{"tags":["Chain & State"],"summary":"GET /:pageSlug/history (owner-only)","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageSlug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/state-machines/{slug}/pages/{pageSlug}/publish":{"post":{"tags":["Chain & State"],"summary":"POST /api/state-machines/:slug/pages/:pageSlug/publish","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageSlug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/state-machines/{slug}/pages/{pageSlug}/rollback":{"post":{"tags":["Chain & State"],"summary":"POST /:pageSlug/rollback (owner-only)","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageSlug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/state-machines/{slug}/pages/{pageSlug}/unpublish":{"post":{"tags":["Chain & State"],"summary":"POST /:pageSlug/unpublish (owner-only)","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageSlug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/stats":{"get":{"tags":["Other"],"summary":"GET /api/stats","responses":{"200":{"description":"OK"}}}},"/api/stats/tiers":{"get":{"tags":["Other"],"summary":"GET /api/stats/tiers","responses":{"200":{"description":"OK"}}}},"/api/store/app/{slug}":{"get":{"tags":["Other"],"summary":"GET /store/app/:slug — single app detail","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/store/apps":{"get":{"tags":["Other"],"summary":"GET /store/apps — full app listing with optional filters","responses":{"200":{"description":"OK"}}}},"/api/store/categories":{"get":{"tags":["Other"],"summary":"GET /store/categories — category list with app counts","responses":{"200":{"description":"OK"}}}},"/api/store/launch":{"post":{"tags":["Other"],"summary":"POST /store/launch — track app launches (analytics)","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/stripe/create-checkout":{"post":{"tags":["Accounts & Keys"],"summary":"Checkout creation","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/stripe/portal":{"post":{"tags":["Accounts & Keys"],"summary":"Production webhook endpoint URL: <PUBLIC_BASE_URL>/api/stripe/webhook (register this in your Stripe dashboard with your fork's base URL). Enable the Customer Portal at: dashboard.stripe.com/settings/billing/portal","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/stripe/prices":{"get":{"tags":["Accounts & Keys"],"summary":"Price listing","responses":{"200":{"description":"OK"}}}},"/api/stripe/success":{"get":{"tags":["Accounts & Keys"],"summary":"Checkout success (Stripe redirects here after payment/trial start)","responses":{"200":{"description":"OK"}}}},"/api/subscriptions":{"get":{"tags":["Other"],"summary":"GET /api/subscriptions","responses":{"200":{"description":"OK"}}}},"/api/swap/foundation-pot":{"get":{"tags":["Other"],"summary":"Public: foundation pot status (so /tally/ can show the live inventory) ─","responses":{"200":{"description":"OK"}}}},"/api/swap/quote":{"get":{"tags":["Other"],"summary":"the UI can show \"stamped at Z2,288,775,000\" and the user knows the quote is current. The quote is INFORMATIONAL — when the user actually claims, the server re-runs the math against the oracle's price at claim time.","responses":{"200":{"description":"OK"}}}},"/api/sync":{"post":{"tags":["Other"],"summary":"POST /node/sync","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/account/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/tally/account/:zid — balance + stats for a ZID","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/block/{n}":{"get":{"tags":["Other"],"summary":"GET /api/tally/block/:n — zeqond block data","responses":{"200":{"description":"OK"}},"parameters":[{"name":"n","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/burn":{"post":{"tags":["Other"],"summary":"POST /api/tally/burn — burn tokens → compute → mint proof token This is the CORE economy endpoint.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/claims/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/tally/claims/:zid — P4.3b — list peer-homed coins you hold (claims) Owner-gated (own claims only).","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/claims/import":{"post":{"tags":["Other"],"summary":"HTTP (trust the home, not the messenger), then records a local claim so the coin shows up in the recipient's wallet. The coin's authority stays on its home chain; this row is a view, never used to serialize.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/claims/publish":{"post":{"tags":["Other"],"summary":"spend_seq, so anyone reading this observer can verify it against the home chain (anchored, not asserted). Private by default — only happens when the holder explicitly publishes. Re-verifies authenticity at the home first","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/claims/transfer":{"post":{"tags":["Other"],"summary":"(transfer-claim) server-side — so any client (CLI or browser Vault) calls its own origin, no CORS, no direct cross-origin from the client. On success the coin has moved away, so the local claim is marked spent.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/clock":{"get":{"tags":["Other"],"summary":"GET /api/tally/clock — current Zeqond + phase (wallet heartbeat)","responses":{"200":{"description":"OK"}}}},"/api/tally/consensus":{"get":{"tags":["Other"],"summary":"GET /api/tally/consensus — protocol status","responses":{"200":{"description":"OK"}}}},"/api/tally/cost":{"get":{"tags":["Other"],"summary":"GET /api/tally/cost — preview cost for a computation (no execution)","responses":{"200":{"description":"OK"}}}},"/api/tally/credits/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/tally/credits/:zid — credit balance, tier, usage","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/credits/claim":{"post":{"tags":["Other"],"summary":"generated .md alone would be overwritten on the next regeneration — the comment IS the doc. Corrected at source 2026-08-01.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/credits/history/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/tally/credits/history/:zid — transaction history","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/tally/credits/transfer":{"post":{"tags":["Other"],"summary":"both machines, atomically moves balance from sender supply → recipient supply, writes a chain row on both ledgers via inter-machine edges. Free-tier supplies are locked (isLockedTier gate above) — paid only.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/{tokenId}/authority":{"get":{"tags":["Other"],"summary":"authoritative for a coin and its spend-sequence height — never the holder graph. Lets anyone confirm where a coin must be serialized and verify its sequence is monotonic against the (anchored) entangled-state transitions","responses":{"200":{"description":"OK"}},"parameters":[{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/envelopes/{tokenId}/export":{"post":{"tags":["Other"],"summary":"and bumps spend_seq (killing any prior receipt/ticket), then issues a spend_seq-pinned bearer ticket. Home-chain only. The coin is now live in exactly ONE place: this bearer file. Redeem (Phase 2) brings it back live.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/{tokenId}/height":{"get":{"tags":["Other"],"summary":"GET /api/tally/coins/:tokenId/height — witness read. Any node reports the highest spend_seq + status it has recorded for a token, so a sovereign rescue can ask a coin's custody witnesses whether it has moved past a heigh","responses":{"200":{"description":"OK"}},"parameters":[{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/envelopes/{zid}":{"get":{"tags":["Other"],"summary":"The transferable tokens minted by compute. Owner-gated like all per-ZID reads (P8 security model).","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/envelopes/{zid}/folders":{"get":{"tags":["Other"],"summary":"Powers the folder chips in the Envelopes manager. Local coins only (the folder is the owner's private organisation, not a mesh concept). \"unfiled\" (NULL/''/'unfiled') is rolled into one bucket the UI shows as Unfiled.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/envelopes/burn":{"post":{"tags":["Other"],"summary":"not vote-locked, kind='envelope', V > 0, homed on this chain. ALL-OR-NOTHING: any ineligible id aborts the whole batch (rollback). Replay-idempotent: the burn_tx id is deterministic over the sorted id set; retrying a com","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/failover":{"post":{"tags":["Other"],"summary":"aborts (the coin already moved); (4) >=1 independent witness is required. Residual risk = a duplicate of the exact last state (like bearer cash) — it is recorded in the coin's lineage, so a fork is detectable + resolvabl","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/folder":{"post":{"tags":["Other"],"summary":"source folder / search), all owner-scoped. folder:\"\" or \"unfiled\" clears it. No cap. Same movability rules do NOT apply — a soulbound proof can still be FILED (organisation is not a transfer); only ownership is required.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/meta":{"post":{"tags":["Other"],"summary":"POST /api/tally/envelopes/meta — name + note for a coin. A holder labels an envelope with the experiment / compute it belongs to and jots context. Owner-scoped; empty string clears a field, undefined leaves it.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/migrate-out":{"post":{"tags":["Other"],"summary":"if already migrated to the SAME destination, re-returns the stored auth (so a destination that burned-but-didn't-mint can safely retry — no double-mint, no lost coin).","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/redeem":{"post":{"tags":["Other"],"summary":"POST /api/tally/envelopes/redeem","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/transfer":{"post":{"tags":["Other"],"summary":"POST /api/tally/envelopes/transfer","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/transfer-bulk":{"post":{"tags":["Other"],"summary":"move a Foundation-backing proof. Value is conserved (∑ before = ∑ after). One summary transition is recorded (not a per-coin wizard run — that would be pointless at this scale); each coin's spend_seq still advances by on","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/envelopes/transfer-claim":{"post":{"tags":["Other"],"summary":"home re-derives and compares it, confirms the holder is the live issued_to, then serializes the move (spend_seq++ under the lock), records the transition on the coin's machine, and mints a fresh ticket for the new holder","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/health":{"get":{"tags":["Other"],"summary":"GET /api/tally/health — system status","responses":{"200":{"description":"OK"}}}},"/api/tally/height":{"get":{"tags":["Other"],"summary":"GET /api/tally/height — current chain height (zeqond number)","responses":{"200":{"description":"OK"}}}},"/api/tally/machine/{slug}/transitions":{"get":{"tags":["Other"],"summary":"owner's current envelope holdings. Powers the observer detail page's \"Envelope transfer\" section (Etherscan-style). The tally chain is public by design (same surface as /tally/ledger, /tally/transparency).","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/peer/envelopes/{zid}":{"get":{"tags":["Other"],"summary":"A sibling domain (allowlisted + Ed25519-signed) asks for the coins THIS chain homes for a given ZID. Never trusts a user session — only a valid peer node signature over `peer-envelopes|zid|zeqond`, verified against the p","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tally/promo/claim":{"post":{"tags":["Other"],"summary":"POST /api/tally/promo/claim","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/promo/status":{"get":{"tags":["Other"],"summary":"GET /api/tally/promo/status","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/tally/receipt/verify":{"post":{"tags":["Other"],"summary":"live spend_seq) or has been superseded by a later transfer. This is how a receiving domain trusts a transfer without trusting the messenger — and how it detects a stale/replayed receipt. Public; reveals no holder identit","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/record":{"get":{"tags":["Other"],"summary":"GET /api/tally/ledger — public ledger of recent burns + mints","responses":{"200":{"description":"OK"}}}},"/api/tally/settings/publish-default":{"get":{"tags":["Other"],"summary":"(P19-PUB Phase 2c). When true, transfers SENT by this owner default to public unless the caller passes visibility explicitly. Owner-gated; operates on the caller's primary machine. Value transfer never depends on this fl","responses":{"200":{"description":"OK"}}},"post":{"tags":["Other"],"summary":"POST /api/tally/settings/publish-default","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/tally/transparency":{"get":{"tags":["Other"],"summary":"GET /api/tally/transparency — foundation stats, economy overview","responses":{"200":{"description":"OK"}}}},"/api/tally/user/{zid}":{"get":{"tags":["Other"],"summary":"GET /api/tally/user/:zid — resolve ZID to display info","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/tesc/send":{"post":{"tags":["Other"],"summary":"POST /api/tesc/send Temporal Entangled State Channel — encrypts a message with a Phase-Locked Authentication Tag (PLAT) that is valid for exactly one Zeqond (0.77","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/text/channel/{channelId}/info":{"get":{"tags":["Other"],"summary":"GET /text/channel/:channelId/info","responses":{"200":{"description":"OK"}},"parameters":[{"name":"channelId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/text/channel/create":{"post":{"tags":["Other"],"summary":"POST /text/channel/create","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/text/receive":{"post":{"tags":["Other"],"summary":"POST /text/receive","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/text/send":{"post":{"tags":["Other"],"summary":"POST /text/send","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/text/verify":{"post":{"tags":["Other"],"summary":"POST /text/verify","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/transparency/breakdown":{"get":{"tags":["Other"],"summary":"Returns a row per active machine: slug, plan, balance, mint rate, burn rate, last mint zeqond. Used by the dashboard's \"see every wallet\" expand panel. Drops PII — only public fields are returned.","responses":{"200":{"description":"OK"}}}},"/api/transparency/history":{"get":{"tags":["Other"],"summary":"api/transparency/history?n=120","responses":{"200":{"description":"OK"}}}},"/api/transparency/now":{"get":{"tags":["Other"],"summary":"api/transparency/now","responses":{"200":{"description":"OK"}}}},"/api/transparency/revenue":{"get":{"tags":["Other"],"summary":"Every confirmed crypto_donations row where plan_slug='swap' contributes its USD value. Capped at foundation pot inventory (~111k ZQT/day at 1 ZQT/Z drip × $0.01 list = $1,112/day max).","responses":{"200":{"description":"OK"}}}},"/api/transparency/snapshot":{"get":{"tags":["Other"],"summary":"api/transparency/snapshot?zeqond=N","responses":{"200":{"description":"OK"}}}},"/api/trial/me":{"get":{"tags":["Other"],"summary":"GET /api/trial/me","responses":{"200":{"description":"OK"}}}},"/api/trial/start":{"post":{"tags":["Other"],"summary":"POST /api/trial/start","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/updates/manifest":{"get":{"tags":["Other"],"summary":"Signed manifest — subscription-gated. Client verifies signature vs the pinned node_pubkey, compares registry_version, then pulls changed artifacts.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/updates/pubkey":{"get":{"tags":["Other"],"summary":"Public — pin the mother public key + current version (client trust-on-first-use).","responses":{"200":{"description":"OK"}}}},"/api/updates/pull/{artifact}":{"get":{"tags":["Other"],"summary":"Pull one allowlisted artifact — subscription-gated. Body is the canonical JSON whose sha256 is published in the manifest, so the client verifies integrity.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"artifact","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/vault/sync":{"get":{"tags":["Other"],"summary":"GET /api/vault/sync","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"put":{"tags":["Other"],"summary":"PUT /api/vault/sync","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/vpn/marketplace":{"get":{"tags":["Other"],"summary":"GET /api/vpn/marketplace","responses":{"200":{"description":"OK"}}}},"/api/vpn/marketplace/list":{"post":{"tags":["Other"],"summary":"POST /api/vpn/marketplace/list","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/vpn/tunnel/{id}/terminate":{"post":{"tags":["Other"],"summary":"POST /api/vpn/tunnel/:id/terminate","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/vpn/tunnel/handshake-accept":{"post":{"tags":["Other"],"summary":"POST /api/vpn/tunnel/handshake-accept","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/vpn/tunnel/handshake-request":{"post":{"tags":["Other"],"summary":"POST /api/vpn/tunnel/handshake-request","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/vpn/tunnels":{"get":{"tags":["Other"],"summary":"GET /api/vpn/tunnels?slug=X","responses":{"200":{"description":"OK"}}}},"/api/waitlist":{"post":{"tags":["Other"],"summary":"POST /api/waitlist","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/api-key":{"delete":{"tags":["Other"],"summary":"DELETE /api/zeq-auth/api-key","responses":{"200":{"description":"OK"}}},"get":{"tags":["Other"],"summary":"GET /api/zeq-auth/api-key","responses":{"200":{"description":"OK"}}},"post":{"tags":["Other"],"summary":"POST /api/zeq-auth/api-key","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/api-keys":{"get":{"tags":["Other"],"summary":"GET /api/zeq-auth/api-keys — List API keys for authenticated user","responses":{"200":{"description":"OK"}}},"post":{"tags":["Other"],"summary":"POST /api/zeq-auth/api-keys — Create API key for authenticated ZeqAuth user","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/equation-reissue":{"post":{"tags":["Other"],"summary":"POST /api/zeq-auth/equation-reissue","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/health":{"get":{"tags":["Other"],"summary":"GET /api/zeq-auth/health","responses":{"200":{"description":"OK"}}}},"/api/zeq-auth/login-v3":{"post":{"tags":["Other"],"summary":"POST /api/zeq-auth/login-v3","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/logout-v3":{"post":{"tags":["Other"],"summary":"POST /api/zeq-auth/logout-v3","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/me":{"get":{"tags":["Other"],"summary":"GET /api/zeq-auth/me — alias of /profile (ZID + identity card)","responses":{"200":{"description":"OK"}}}},"/api/zeq-auth/profile":{"get":{"tags":["Other"],"summary":"GET /api/zeq-auth/profile","responses":{"200":{"description":"OK"}}}},"/api/zeq-auth/recovery-password":{"delete":{"tags":["Other"],"summary":"DELETE /api/zeq-auth/recovery-password","responses":{"200":{"description":"OK"}}},"get":{"tags":["Other"],"summary":"GET /api/zeq-auth/recovery-password","responses":{"200":{"description":"OK"}}},"post":{"tags":["Other"],"summary":"POST /api/zeq-auth/recovery-password","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/register-v3":{"post":{"tags":["Other"],"summary":"POST /api/zeq-auth/register-v3","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/salt/{zid}":{"get":{"tags":["Other"],"summary":"The DB query runs unconditionally, so response timing remains close to the registered path (HMAC is microseconds; DB dominates). - /login-v3 already flattens timing on the auth side, so even if an attacker","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq-auth/session-key":{"get":{"tags":["Other"],"summary":"Per-user doctrine: there is no anonymous tier. /api/zeq-auth/session-key always reflects the caller's owned state machine — never a shared/free pool key.","responses":{"200":{"description":"OK"}}}},"/api/zeq-auth/session-key/mint":{"post":{"tags":["Other"],"summary":"own row), so this never invalidates the key the web app already stored. Auth: v3 cookie (zeq_auth_token) OR Bearer JWT (same as session-key). Response: 200 { ok, slug, machine_id, api_key, key_prefix, scope } · 401 · 40","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-auth/verify-v3":{"post":{"tags":["Other"],"summary":"POST /api/zeq-auth/verify-v3 Used by the wizard page on load to detect an existing logged-in session. Accepts token from Authorization header, body.token, or zeq_auth_token cookie.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-mail/archive":{"post":{"tags":["Other"],"summary":"POST /mail/archive","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-mail/compose":{"post":{"tags":["Other"],"summary":"POST /mail/compose","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-mail/contacts":{"get":{"tags":["Other"],"summary":"GET /mail/contacts","responses":{"200":{"description":"OK"}}}},"/api/zeq-mail/health":{"get":{"tags":["Other"],"summary":"Routes GET /mail/health","responses":{"200":{"description":"OK"}}}},"/api/zeq-mail/inbox":{"get":{"tags":["Other"],"summary":"GET /mail/inbox","responses":{"200":{"description":"OK"}}}},"/api/zeq-mail/login":{"post":{"tags":["Other"],"summary":"POST /mail/login","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-mail/mark-read":{"post":{"tags":["Other"],"summary":"POST /mail/mark-read","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-mail/pubkey":{"post":{"tags":["Other"],"summary":"POST /mail/pubkey","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-mail/pubkey/{zid}":{"get":{"tags":["Other"],"summary":"ruinous for scanners trying to map the ZID space. • ZID_RE pre-validates format and returns the SAME 404 shape as a genuine miss, so attackers can't distinguish \"ZID exists but pubkey not set\" from \"ZID for","responses":{"200":{"description":"OK"}},"parameters":[{"name":"zid","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq-mail/register":{"post":{"tags":["Other"],"summary":"POST /mail/register","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-mail/sent":{"get":{"tags":["Other"],"summary":"GET /mail/sent","responses":{"200":{"description":"OK"}}}},"/api/zeq-mail/star":{"post":{"tags":["Other"],"summary":"POST /mail/star","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-mail/starred":{"get":{"tags":["Other"],"summary":"GET /mail/starred","responses":{"200":{"description":"OK"}}}},"/api/zeq-mail/status":{"get":{"tags":["Other"],"summary":"GET /mail/status","responses":{"200":{"description":"OK"}}}},"/api/zeq-mail/trash":{"get":{"tags":["Other"],"summary":"GET /mail/trash","responses":{"200":{"description":"OK"}}}},"/api/zeq-mail/trash-msg":{"post":{"tags":["Other"],"summary":"POST /mail/trash-msg","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq-vault/{id}":{"delete":{"tags":["Other"],"summary":"DELETE /api/zeq-vault/:id","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]},"get":{"tags":["Other"],"summary":"GET /api/zeq-vault/:id","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/zeq-vault/list":{"get":{"tags":["Other"],"summary":"GET /api/zeq-vault/list Returns every entry's id + decrypted label + created_at. Does NOT return the blob — that costs a separate /:id GET so the audit log can distinguish \"browsi","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/zeq-vault/save":{"post":{"tags":["Other"],"summary":"POST /api/zeq-vault/save","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/acoustic":{"post":{"tags":["Solvers"],"summary":"Helmholtz acoustics — -p'' = k^2 p, open/closed ends (finite-volume + half-cell mass, Sturm bisection).","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Helmholtz acoustics — -p'' = k^2 p, open/closed ends (finite-volume + half-cell mass, Sturm bisection).","domain":"Acoustics","numericalMethod":"FV Helmholtz eigensolver","operatorChain":"KO42, WM1","unit":"Hz"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/action":{"post":{"tags":["Solvers"],"summary":"Least-action symplectic mechanics — leapfrog Hamiltonian flow q<-q+(h/2)p; p<-p-h*gradV; q<-q+(h/2)p.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Least-action symplectic mechanics — leapfrog Hamiltonian flow q<-q+(h/2)p; p<-p-h*gradV; q<-q+(h/2)p.","domain":"Symplectic Mechanics","numericalMethod":"Leapfrog symplectic map","operatorChain":"KO42-tensioned","unit":"E"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/agent/context-hash":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/agent/context-hash","responses":{"200":{"description":"OK"}}}},"/api/zeq/agent/generate-html":{"post":{"tags":["Zeq Core"],"summary":"s/<slug>/ via the existing site-hosting pipeline. PAID-TIER: gates on the same logic as zeqLlm.ts requirePaid(). BYOK calls don't burn compute units; the user pays the LLM provider directly.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/kill/{id}":{"post":{"tags":["Zeq Core"],"summary":"4. POST /kill/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/lineage/{id}":{"get":{"tags":["Zeq Core"],"summary":"3. GET /lineage/:id Spec §8. Full proof genealogy.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/agent/list":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/agent/list","responses":{"200":{"description":"OK"}}}},"/api/zeq/agent/mesh/{master_id}":{"get":{"tags":["Zeq Core"],"summary":"their ZeqProofs to the mesh; master collects into a composite tree. WIRED (Phase 7 source-of-truth pass): in-process snapshot via lib/agentMesh.ts; Redis pub/sub auto-subscribes when REDIS_URL is set.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"master_id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/agent/mesh/{master_id}/publish":{"post":{"tags":["Zeq Core"],"summary":"12. POST /mesh/:master_id/publish — child posts its ZeqProof Used by collaborative-agent runs to publish into the mesh. Idempotent per (master_id, agent_id) — re-posting overwrites the previous entry.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"master_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/operators/custom":{"get":{"tags":["Zeq Core"],"summary":"9. GET /operators/custom — catalogue of derived operators","responses":{"200":{"description":"OK"}}}},"/api/zeq/agent/operators/derive":{"post":{"tags":["Zeq Core"],"summary":"WIRED (Phase 7 source-of-truth pass): calls lib/operatorDeriver.ts which runs all 5 steps using the existing zeqCompute + 1,606 operator catalogue. Verification runs ≥3 reference cases at ≤0.1% precision (KO42 guarantee)","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/operators/promote":{"post":{"tags":["Zeq Core"],"summary":"Queue for admin review (skills are user-facing IP). Accepts either operator_id (NPD01-style) or skill_id (synth-*) and routes to the appropriate criterion check.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/page-chat":{"post":{"tags":["Zeq Core"],"summary":"POST /api/zeq/agent/page-chat","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/prd/{slug}":{"get":{"tags":["Zeq Core"],"summary":"1. GET /api/zeq/agent/prd/:slug","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"tags":["Zeq Core"],"summary":"2. PUT /api/zeq/agent/prd/:slug Body: { markdown: string, expected_version?: number }","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/prd/{slug}/markdown":{"get":{"tags":["Zeq Core"],"summary":"4. GET /api/zeq/agent/prd/:slug/markdown Raw text/markdown body — used by the standalone /s/<slug>/prd/ view + the Phase D build directive composer. Same owner gate as the JSON endpoint","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/agent/prd/{slug}/send":{"post":{"tags":["Zeq Core"],"summary":"(gives us the full BYOK pipeline, ZQT charging, tripwires, and chain commit for free). On success: status flips to 'built', build_run_id is recorded, and the response carries the deployed page summary.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/skills":{"get":{"tags":["Zeq Core"],"summary":"The permanent UI library at /apps/skills/ is the deterministic catalogue (industry × use_case → operator pick). Agents inherit it implicitly via buildSkill() — no DB-backed listing needed for that surface.","responses":{"200":{"description":"OK"}}}},"/api/zeq/agent/skills/{id}":{"get":{"tags":["Zeq Core"],"summary":"7. GET /skills/:id — get a synthesised skill definition","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/agent/skills/synthesise":{"post":{"tags":["Zeq Core"],"summary":"WIRED (Phase 7 source-of-truth pass): calls into lib/skillBuilder.ts — the same deterministic synthesis logic the existing UI route (/api/skills/generate) uses. Persists to synthesised_skills table.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/spawn":{"post":{"tags":["Zeq Core"],"summary":"against the user's daily quota BEFORE spawn. Reject 402 if over. • IDEMPOTENCY: optional `Idempotency-Key` header — same key + same canonical body within 1h returns the same agent_id. Critical for retries a","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/agent/status/{id}":{"get":{"tags":["Zeq Core"],"summary":"2. GET /status/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/agent/tick/{id}":{"post":{"tags":["Zeq Core"],"summary":"3b. POST /tick/:id — manually advance one generation (Driver / poll endpoint while we don't have an in-process daemon yet.)","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/apis/{slug}":{"get":{"tags":["Zeq Core"],"summary":"1. GET /api/zeq/apis/:slug","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"tags":["Zeq Core"],"summary":"2. POST /api/zeq/apis/:slug Body: { name, base_url, auth_header?, schema_json?, rate_limit_per_min? }","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/apis/{slug}/{id}":{"delete":{"tags":["Zeq Core"],"summary":"4. DELETE /api/zeq/apis/:slug/:id Soft-delete (sets archived_at). Hard-delete would orphan contract refs.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"tags":["Zeq Core"],"summary":"3. PATCH /api/zeq/apis/:slug/:id Body: any subset of { base_url, auth_header (string|null), schema_json, rate_limit_per_min, enabled }","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/apis/{slug}/{id}/test":{"post":{"tags":["Zeq Core"],"summary":"5. POST /api/zeq/apis/:slug/:id/test Server-side test forward. Body: { path?, method?, params?, body? } Returns { status, headers, body } — body is text-truncated to 16 KB.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/attest":{"post":{"tags":["Compute & Proof"],"summary":"Surface route (auth: session+key), registered via verifySurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/audit-source/{id}/event":{"post":{"tags":["Zeq Core"],"summary":"POST /api/zeq/audit-source/:id/event","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/audit-source/{id}/kill":{"post":{"tags":["Zeq Core"],"summary":"POST /:id/kill","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/audit-source/{id}/narrations":{"get":{"tags":["Zeq Core"],"summary":"GET /:id/narrations","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/audit-source/{id}/status":{"get":{"tags":["Zeq Core"],"summary":"GET /:id/status","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/audit-source/{id}/sweep":{"post":{"tags":["Zeq Core"],"summary":"POST /:id/sweep","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/audit-source/list":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/audit-source/list","responses":{"200":{"description":"OK"}}}},"/api/zeq/audit-source/spawn":{"post":{"tags":["Zeq Core"],"summary":"POST /spawn","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/audit-source/types":{"get":{"tags":["Zeq Core"],"summary":"GET /types","responses":{"200":{"description":"OK"}}}},"/api/zeq/auto":{"post":{"tags":["Solvers"],"summary":"Auto-router — classifies a natural-language query and dispatches to the best-fit solver, which seals under its own source.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Auto-router — classifies a natural-language query and dispatches to the best-fit solver, which seals under its own source.","domain":"Solver dispatch","numericalMethod":"NL classifier then dispatch","operatorChain":"inherits target solver","unit":"varies"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/buckling":{"post":{"tags":["Solvers"],"summary":"Beam-column buckling — K*phi = P * Kg*phi (Hermitian beam FEM); smallest eigenvalue vs the Euler critical load.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Beam-column buckling — K*phi = P * Kg*phi (Hermitian beam FEM); smallest eigenvalue vs the Euler critical load.","domain":"Structural Stability","numericalMethod":"Generalized eigenvalue FEM","operatorChain":"KO42, BEAM_DEFLECTION","unit":"N"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/climate":{"post":{"tags":["Solvers"],"summary":"Geophysical fluid dynamics — the shallow-water equations solved with a Lax-Friedrichs finite volume scheme.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Geophysical fluid dynamics — the shallow-water equations solved with a Lax-Friedrichs finite volume scheme.","domain":"Geophysical Fluid Dynamics","numericalMethod":"Finite-volume Lax-Friedrichs","operatorChain":"KO42, OC1","unit":"h"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/compliance/verify":{"post":{"tags":["Compute & Proof"],"summary":"Surface route (auth: public), registered via verifySurface.ts manifest.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/compose":{"post":{"tags":["Zeq Core"],"summary":"POST /api/zeq/compose","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/compute":{"post":{"tags":["Solvers"],"summary":"Operator compute — the billing spine. Runs the 7-step Zeqond protocol (SELECT · BIND · VALIDATE · COMPUTE · VERIFY · PULSE · RETURN) over KO42 + up to 3 operators and seals a signed receipt.","x-solver":{"summary":"Operator compute — the billing spine. Runs the 7-step Zeqond protocol (SELECT · BIND · VALIDATE · COMPUTE · VERIFY · PULSE · RETURN) over KO42 + up to 3 operators and seals a signed receipt.","domain":"wizard-selected","numericalMethod":"7-step wizard protocol","operatorChain":"KO42 + up to 3 operators","unit":"per-operator"},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}},"responses":{"200":{"description":"Sealed wizard result with ZeqProof"},"401":{"description":"Missing/invalid key"},"402":{"description":"Insufficient compute credit"}}}},"/api/zeq/computes":{"get":{"tags":["Compute & Proof"],"summary":"Surface route (auth: session+key), registered via verifySurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/zeq/conformance":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/conformance","responses":{"200":{"description":"OK"}}}},"/api/zeq/conformance/badge.json":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/conformance/badge.json","responses":{"200":{"description":"OK"}}}},"/api/zeq/conformance/badge.svg":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/conformance/badge.svg","responses":{"200":{"description":"OK"}}}},"/api/zeq/device":{"post":{"tags":["Solvers"],"summary":"Semiconductor devices — PN-junction built-in voltage and Poisson/Laplace electrostatics (matrix-free Jacobi-PCG).","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Semiconductor devices — PN-junction built-in voltage and Poisson/Laplace electrostatics (matrix-free Jacobi-PCG).","domain":"Semiconductor Devices","numericalMethod":"Poisson/Laplace solver (PCG)","operatorChain":"KO42, CMP11","unit":"V"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/dock":{"post":{"tags":["Solvers"],"summary":"Molecular docking — rigid-body 6-DOF minimisation of the Lennard-Jones + Coulomb interaction energy.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Molecular docking — rigid-body 6-DOF minimisation of the Lennard-Jones + Coulomb interaction energy.","domain":"Molecular Docking","numericalMethod":"Global optimization (6 DOF)","operatorChain":"KO42, BINDING_AFFINITY","unit":"epsilon"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/epi":{"post":{"tags":["Solvers"],"summary":"Compartmental epidemiology — SIR/SEIR ODEs; basic reproduction number R0 and epidemic peak.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Compartmental epidemiology — SIR/SEIR ODEs; basic reproduction number R0 and epidemic peak.","domain":"Epidemiology","numericalMethod":"Compartmental ODE","operatorChain":"KO42, CELL_GROWTH","unit":"R0"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/evolve":{"post":{"tags":["Solvers"],"summary":"Molecular dynamics — velocity-Verlet NVE over a Lennard-Jones + harmonic potential, energy-conserving.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Molecular dynamics — velocity-Verlet NVE over a Lennard-Jones + harmonic potential, energy-conserving.","domain":"Molecular Dynamics","numericalMethod":"Velocity-Verlet (symplectic)","operatorChain":"KO42-tensioned","unit":"epsilon"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/fea":{"post":{"tags":["Solvers"],"summary":"Structural FEA — plane-stress K*u=f (Q4 elements, matrix-free Jacobi-PCG); tip deflection vs Euler-Bernoulli.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Structural FEA — plane-stress K*u=f (Q4 elements, matrix-free Jacobi-PCG); tip deflection vs Euler-Bernoulli.","domain":"Structural FEA","numericalMethod":"Q4 FEM, matrix-free PCG","operatorChain":"KO42, FEA_DISPLACEMENT, BEAM_DEFLECTION","unit":"m"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/flow":{"post":{"tags":["Solvers"],"summary":"Incompressible Navier-Stokes — du/dt+(u.grad)u = -grad p + nu*laplacian(u), div u = 0 (Stam stable fluids).","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Incompressible Navier-Stokes — du/dt+(u.grad)u = -grad p + nu*laplacian(u), div u = 0 (Stam stable fluids).","domain":"Fluid Dynamics","numericalMethod":"Semi-Lagrangian projection (Stam)","operatorChain":"KO42, FL3","unit":"m/s"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/fracture":{"post":{"tags":["Solvers"],"summary":"Bond-based peridynamics — mode-I crack; bonds break on irreversible stretch, cascaded quasi-static equilibrium.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Bond-based peridynamics — mode-I crack; bonds break on irreversible stretch, cascaded quasi-static equilibrium.","domain":"Fracture Mechanics","numericalMethod":"Bond-based peridynamics","operatorChain":"KO42, STRESS_ANALYSIS","unit":"sigma"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/gauge":{"post":{"tags":["Solvers"],"summary":"Lattice gauge theory — compact U(1), Wilson action; mean plaquette vs the exact I1(beta)/I0(beta).","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Lattice gauge theory — compact U(1), Wilson action; mean plaquette vs the exact I1(beta)/I0(beta).","domain":"Lattice Gauge Theory","numericalMethod":"Monte Carlo lattice","operatorChain":"KO42, HEP4","unit":"plaq"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/grid":{"post":{"tags":["Solvers"],"summary":"Power systems — DC power flow B*theta=P; line flows and Kirchhoff current law checked.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Power systems — DC power flow B*theta=P; line flows and Kirchhoff current law checked.","domain":"Power Systems","numericalMethod":"Linear DC power-flow solve","operatorChain":"KO42, POWER_ELECTRICAL","unit":"pu"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/harness":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/harness What this node actually offers, and honestly what it does not.","responses":{"200":{"description":"OK"}}}},"/api/zeq/heat":{"post":{"tags":["Solvers"],"summary":"Heat / thermal diffusion — dT/dt = alpha * laplacian(T) in 1-D and 2-D, Crank-Nicolson / FTCS / ADI, checked vs the exact Fourier decay.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Heat / thermal diffusion — dT/dt = alpha * laplacian(T) in 1-D and 2-D, Crank-Nicolson / FTCS / ADI, checked vs the exact Fourier decay.","domain":"Thermal Diffusion","numericalMethod":"Crank-Nicolson / FTCS / ADI","operatorChain":"KO42, CHE17","unit":"T"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/kalman":{"post":{"tags":["Solvers"],"summary":"Kalman filter — predict/update with Joseph-form covariance; converges to the discrete-algebraic-Riccati fixed point.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Kalman filter — predict/update with Joseph-form covariance; converges to the discrete-algebraic-Riccati fixed point.","domain":"State Estimation","numericalMethod":"Recursive Bayes / Riccati (Joseph)","operatorChain":"KO42, CS47","unit":"err"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/lattice":{"post":{"tags":["Zeq Core"],"summary":"Surface route (auth: session+key), registered via wizardSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/lib-search":{"post":{"tags":["Zeq Core"],"summary":"POST /api/zeq/lib-search 208 libraries / 44 categories, ONE merged catalogue. Ask before writing code that needs a library; it returns the exact package id.","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/llm/credentials":{"get":{"tags":["Zeq Core"],"summary":"GET /credentials — list caller's credentials","responses":{"200":{"description":"OK"}}},"post":{"tags":["Zeq Core"],"summary":"POST /credentials — create","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/llm/credentials/{id}":{"delete":{"tags":["Zeq Core"],"summary":"DELETE /credentials/:id — soft disable","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"get":{"tags":["Zeq Core"],"summary":"GET /credentials/:id","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/llm/credentials/{id}/system-default":{"post":{"tags":["Zeq Core"],"summary":"At most one credential per provider can hold the flag — the partial unique index in migration 0004 enforces this. We unset any prior default for the same provider in the same transaction-equivalent (sequential updates; t","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/llm/providers":{"get":{"tags":["Zeq Core"],"summary":"GET /providers — public registry of supported providers Open route (no paid gate) so the frontend can render the choose-provider UI before the user upgrades.","responses":{"200":{"description":"OK"}}}},"/api/zeq/llm/system-default/{provider}":{"get":{"tags":["Zeq Core"],"summary":"GET /system-default/:provider — public (no key info) Lets the chat UI know whether a free-tier provider is configured so it can render the right CTA. Returns booleans only.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/llm/test":{"post":{"tags":["Zeq Core"],"summary":"POST /test — test a credential without storing Useful for the admin frontend's \"Verify key\" button. Sends a tiny \"ping\" prompt; returns provider response shape so users see whether their key +","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/lorenz":{"post":{"tags":["Solvers"],"summary":"Lorenz system — x'=sigma(y-x), y'=x(rho-z)-y, z'=xy-beta*z, RK4; phase-volume contraction invariant.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Lorenz system — x'=sigma(y-x), y'=x(rho-z)-y, z'=xy-beta*z, RK4; phase-volume contraction invariant.","domain":"Chaotic Dynamics","numericalMethod":"RK4","operatorChain":"KO42, NL10","unit":"1/t"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/lotka":{"post":{"tags":["Solvers"],"summary":"Lotka-Volterra predator-prey — dx/dt=ax-bxy, dy/dt=dxy-gy; conserved first integral.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Lotka-Volterra predator-prey — dx/dt=ax-bxy, dy/dt=dxy-gy; conserved first integral.","domain":"Population Ecology","numericalMethod":"ODE integrator (conserved H)","operatorChain":"KO42, CELL_GROWTH","unit":"T"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/multibody":{"post":{"tags":["Solvers"],"summary":"N-body master-equation engine — pairwise Newtonian gravity when positions are supplied, RK4 time-stepping.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"N-body master-equation engine — pairwise Newtonian gravity when positions are supplied, RK4 time-stepping.","domain":"HULYAS Master Field (N-body)","numericalMethod":"RK4 (N-body)","operatorChain":"KO42-tensioned","unit":"J"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/operator-spec":{"post":{"tags":["Zeq Core"],"summary":"The accepted INPUT KEYS for an operator or domain — what zeq_find_operator's description promises. Call it BEFORE zeq_compute instead of guessing a key name: a guessed key plus (until today) a silent default is how GR37","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/opt":{"post":{"tags":["Solvers"],"summary":"Numerical optimization — min f(x) by descent; convergence checked against the known optimum.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Numerical optimization — min f(x) by descent; convergence checked against the known optimum.","domain":"Optimization","numericalMethod":"Numerical optimization (descent)","operatorChain":"KO42, CS75","unit":"f"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/phase":{"get":{"tags":["Compute & Proof"],"summary":"Surface route (auth: public), registered via heartbeatSurface.ts manifest.","responses":{"200":{"description":"OK"}}}},"/api/zeq/plnb/observe":{"post":{"tags":["Zeq Core"],"summary":"POST /api/zeq/plnb/observe","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/plnb/operator":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/plnb/operator","responses":{"200":{"description":"OK"}}}},"/api/zeq/prove":{"post":{"tags":["Compute & Proof"],"summary":"PUBLIC keyless KO42 proof — 10/min/IP. For AI agents to verify the SDK computes real math.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"}},"domain":{"type":"string"},"inputs":{"type":"object","additionalProperties":{"type":"number"}}}}}}},"responses":{"200":{"description":"Signed 7-step protocol receipt"},"429":{"description":"Rate limited"}}}},"/api/zeq/prove/verify":{"post":{"tags":["Compute & Proof"],"summary":"Verify a /prove receipt (PUBLIC, no auth, 10/min/IP).","responses":{"200":{"description":"{ valid, R_t, zeqond, operatorIds }"}}}},"/api/zeq/pulse":{"get":{"tags":["Compute & Proof"],"summary":"Live HulyaPulse — Zeqond number, phase, R(t) modulation (no auth).","responses":{"200":{"description":"Pulse object"}}}},"/api/zeq/pulse/stream":{"get":{"tags":["Compute & Proof"],"summary":"Surface route (auth: session+key), registered via heartbeatSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/zeq/quant":{"post":{"tags":["Solvers"],"summary":"Quantitative finance — geometric-Brownian-motion Monte-Carlo option pricing, verified vs the Black-Scholes closed form.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Quantitative finance — geometric-Brownian-motion Monte-Carlo option pricing, verified vs the Black-Scholes closed form.","domain":"Quantitative Finance","numericalMethod":"Monte Carlo (vs Black-Scholes)","operatorChain":"KO42, BLACK_SCHOLES","unit":"$"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/react":{"post":{"tags":["Solvers"],"summary":"Reaction-diffusion chemical kinetics — coupled species diffuse and react on a grid; steady state / pattern checked.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Reaction-diffusion chemical kinetics — coupled species diffuse and react on a grid; steady state / pattern checked.","domain":"Reaction-Diffusion","numericalMethod":"Reaction-diffusion integrator","operatorChain":"KO42, ICO9","unit":"c"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/reactor":{"post":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/reactor/{id}":{"get":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/zeq/reactor/{id}/close":{"post":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/reactor/{id}/next":{"get":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/zeq/reactor/{id}/observe":{"post":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/reactor/{id}/secure/open":{"post":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/reactor/{id}/secure/pull":{"get":{"tags":["Reactor"],"summary":"Surface route (auth: public), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/reactor/{id}/state":{"get":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/zeq/reactor/{id}/step":{"post":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/reactor/{id}/telemetry":{"get":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/zeq/reactor/{id}/trajectory":{"get":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/zeq/reactors":{"get":{"tags":["Reactor"],"summary":"Surface route (auth: session+key), registered via reactorSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/zeq/receipts":{"get":{"tags":["Compute & Proof"],"summary":"Surface route (auth: session+key), registered via verifySurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/zeq/receipts/{id}":{"get":{"tags":["Compute & Proof"],"summary":"Surface route (auth: session+key), registered via verifySurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/api/zeq/reverify":{"post":{"tags":["Zeq Core"],"summary":"POST /api/zeq/reverify","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/sat":{"post":{"tags":["Solvers"],"summary":"Boolean satisfiability — random 3-SAT (hardness peak alpha~4.26), DPLL + unit propagation; assignment certified.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Boolean satisfiability — random 3-SAT (hardness peak alpha~4.26), DPLL + unit propagation; assignment certified.","domain":"Computational Complexity","numericalMethod":"DPLL + unit propagation","operatorChain":"KO42, CS81","unit":"decisions"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/schrodinger":{"post":{"tags":["Solvers"],"summary":"Time-independent Schrodinger — H*psi = E*psi, tridiagonal finite-difference spectrum (Sturm bisection) vs the exact analytic levels.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Time-independent Schrodinger — H*psi = E*psi, tridiagonal finite-difference spectrum (Sturm bisection) vs the exact analytic levels.","domain":"Quantum Mechanics","numericalMethod":"FD eigensolver (Sturm bisection)","operatorChain":"KO42, QM5","unit":"E"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/sdk/metadata":{"get":{"tags":["Compute & Proof"],"summary":"Surface route (auth: public), registered via heartbeatSurface.ts manifest.","responses":{"200":{"description":"OK"}}}},"/api/zeq/settle":{"post":{"tags":["Zeq Core"],"summary":"POST /api/zeq/settle","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/shift":{"post":{"tags":["Zeq Core"],"summary":"Surface route (auth: session+key), registered via wizardSurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/solve":{"post":{"tags":["Solvers"],"summary":"HULYAS master-field solver — integrates the master equation Box-phi - mu^2(r)phi - lambda*phi^3 - e^(-phi/phi_c) + phi_42 * Sum C_k(phi) by RK4.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"HULYAS master-field solver — integrates the master equation Box-phi - mu^2(r)phi - lambda*phi^3 - e^(-phi/phi_c) + phi_42 * Sum C_k(phi) by RK4.","domain":"HULYAS Master Field","numericalMethod":"RK4","operatorChain":"KO42-tensioned","unit":"J"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/state/live":{"get":{"tags":["Compute & Proof"],"summary":"Surface route (auth: public), registered via heartbeatSurface.ts manifest.","responses":{"200":{"description":"OK"}}}},"/api/zeq/stream/channels/{id}/pull":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/stream/channels/:id/pull","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/stream/channels/{id}/secure/pull":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/stream/channels/:id/secure/pull","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/stream/solvers":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/stream/solvers","responses":{"200":{"description":"OK"}}}},"/api/zeq/streams/{id}/pull":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/streams/:id/pull","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/streams/{id}/secure/pull":{"get":{"tags":["Zeq Core"],"summary":"GET /api/zeq/streams/:id/secure/pull","responses":{"200":{"description":"OK"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zeq/streams/solvers":{"get":{"tags":["Zeq Core"],"summary":"GET solvers — the catalogue a builder UI populates from","responses":{"200":{"description":"OK"}}}},"/api/zeq/tumor":{"post":{"tags":["Solvers"],"summary":"Fisher-KPP tumor growth-front — du/dt = D u_xx + r u(1-u); front speed vs the Ablowitz-Zeppetella exact wave.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Fisher-KPP tumor growth-front — du/dt = D u_xx + r u(1-u); front speed vs the Ablowitz-Zeppetella exact wave.","domain":"Growth-Front Dynamics","numericalMethod":"Reaction-diffusion PDE","operatorChain":"KO42, CELL_GROWTH","unit":"c"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/unified":{"post":{"tags":["Solvers"],"summary":"Unified multi-domain composer — evaluates a supplied operator list into ONE sealed value with a safe evaluator (no eval/Function): algebraic product, sequential/RK4, or fallback, under the KO42 frame. Operator chain, unit and master equation are derived at runtime.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Unified multi-domain composer — evaluates a supplied operator list into ONE sealed value with a safe evaluator (no eval/Function): algebraic product, sequential/RK4, or fallback, under the KO42 frame. Operator chain, unit and master equation are derived at runtime.","domain":"Multi-Domain Composition","numericalMethod":"Safe evaluator — algebraic / sequential-RK4 / fallback","operatorChain":"dynamic (from the operators you pass)","unit":"dynamic"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/usage":{"get":{"tags":["Compute & Proof"],"summary":"Surface route (auth: session+key), registered via verifySurface.ts manifest.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]}},"/api/zeq/verify":{"post":{"tags":["Compute & Proof"],"summary":"Verify a /compute ZeqProof HMAC (auth required).","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Verification result"},"401":{"description":"Missing/invalid key"}}}},"/api/zeq/wave":{"post":{"tags":["Solvers"],"summary":"Wave equation — 2-D membrane d2u/dt2 = c^2 * laplacian(u), energy-conserving leapfrog; exact standing-mode check.","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Wave equation — 2-D membrane d2u/dt2 = c^2 * laplacian(u), energy-conserving leapfrog; exact standing-mode check.","domain":"Wave Mechanics","numericalMethod":"Leapfrog (energy-conserving)","operatorChain":"KO42, WM1","unit":"E"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeq/web-search":{"post":{"tags":["Zeq Core"],"summary":"POST /api/zeq/web-search","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/wizard/auth-bootstrap":{"post":{"tags":["Zeq Core"],"summary":"This split was added under the wizard-ratelimit-emergency-fix patch after agent + browser-driven traffic exhausted the shared anon counter and locked every visitor out of /auth/. Vault generators that should consume the","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/wizard/compute":{"post":{"tags":["Zeq Core"],"summary":"NOTE: the registration wizard at /auth/ does NOT call this endpoint anymore — it calls /zeq/wizard/auth-bootstrap (below) which has its own dedicated bucket so account creation cannot be starved by general anon compute t","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/zeta":{"post":{"tags":["Solvers"],"summary":"Riemann zeta — Riemann-Siegel Z(t); nontrivial zeros of zeta(1/2+it) counted vs N(T).","responses":{"200":{"description":"Sealed result envelope — value, unit, operatorChain, masterEquation, HMAC zeqProof."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}},"security":[{"bearerAuth":[]}],"x-solver":{"summary":"Riemann zeta — Riemann-Siegel Z(t); nontrivial zeros of zeta(1/2+it) counted vs N(T).","domain":"Analytic Number Theory","numericalMethod":"Riemann-Siegel root count","operatorChain":"KO42","unit":"zeros"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"string"},"description":"Operator IDs to run. KO42 sets the metric frame, e.g. [\"KO42\",\"GR37\",\"NM19\"]."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Named numeric inputs the operators consume (mass, r, v, ...)."},"consts":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional constant overrides (t, alpha, f_H, ...)."},"domain":{"type":"string","description":"Optional domain hint (used by /compute and /auto)."},"query":{"type":"string","description":"Natural-language problem statement (used by /auto)."}}}}}}}},"/api/zeqpm/vault":{"get":{"tags":["Other"],"summary":"GET — pull the encrypted blob for this ZID (null if none yet).","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}]},"put":{"tags":["Other"],"summary":"PUT — push; optimistic concurrency on updated_at.","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsc/compute-key":{"delete":{"tags":["Other"],"summary":"DELETE /api/zsc/compute-key — revoke (unreadable AND unusable)","responses":{"200":{"description":"OK"}}},"get":{"tags":["Other"],"summary":"be able to paste it into something. After that only the elided prefix ever leaves the vault. GET /api/zsc/compute-key — what this app uses (never the key)","responses":{"200":{"description":"OK"}}},"post":{"tags":["Other"],"summary":"POST /api/zsc/compute-key — mint for an app (idempotent)","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsc/compute-key/list":{"get":{"tags":["Other"],"summary":"GET /api/zsc/compute-key/list — default + every per-app key","responses":{"200":{"description":"OK"}}}},"/api/zsc/public/{app}/{env}/{name}":{"delete":{"tags":["Other"],"summary":"DELETE /api/zsc/public/:app/:env/:name","responses":{"200":{"description":"OK"}},"parameters":[{"name":"app","in":"path","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/zsc/public/get":{"get":{"tags":["Other"],"summary":"GET /api/zsc/public/get?app=X&key=Y[&env=Z]","responses":{"200":{"description":"OK"}}}},"/api/zsc/public/list":{"get":{"tags":["Other"],"summary":"GET /api/zsc/public/list?app=X[&env=Z]","responses":{"200":{"description":"OK"}}}},"/api/zsc/public/put":{"post":{"tags":["Other"],"summary":"POST /api/zsc/public/put","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsc/public/rotate":{"post":{"tags":["Other"],"summary":"POST /api/zsc/public/rotate","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsc/public/subscribe":{"post":{"tags":["Other"],"summary":"POST /api/zsc/public/subscribe","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsc/user-key":{"delete":{"tags":["Other"],"summary":"DELETE /api/zsc/user-key — revoke","responses":{"200":{"description":"OK"}}},"get":{"tags":["Other"],"summary":"GET /api/zsc/user-key — what is connected (never the key)","responses":{"200":{"description":"OK"}}},"put":{"tags":["Other"],"summary":"PUT /api/zsc/user-key — seal or rotate","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsc/user-key/list":{"get":{"tags":["Other"],"summary":"GET /api/zsc/user-key/list — the default + every per-app override","responses":{"200":{"description":"OK"}}}},"/api/zsc/user-key/resolve":{"post":{"tags":["Other"],"summary":"POST /api/zsc/user-key/resolve — service-to-service, emits the key","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsp/protect":{"post":{"tags":["Other"],"summary":"POST /api/zsp/protect","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsp/scan":{"post":{"tags":["Other"],"summary":"POST /api/zsp/scan","responses":{"200":{"description":"OK"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zsp/status":{"get":{"tags":["Other"],"summary":"Phase C completion (TODO-2 from phase-c-report.md) — public read-only status snapshot used by apps/zeq-dev/public/apps/zsp/index.html. No secret material is exposed; this surface only describes current health of the prot","responses":{"200":{"description":"OK"}}}},"/api/zsp/unprotect":{"post":{"tags":["Other"],"summary":"AU2: auth-gated like protect. The zid used for the temporal HMAC stays body→env.zid resolution (backward compat — old envelopes were stamped with the zid they carry; forcing the session zid here would break them).","responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/api/zeq/protect":{"post":{"tags":["Solvers"],"summary":"PulseGuard protection heartbeat — computes ZEQ-PROTECT-001 |sin(5*phi)|/f_pulse and ZEQ-PROTECT-002 0.5+0.3*sin(t/30) from the Zeqond phase, maps a liveness signal (health up/slow/down, or liveness 0..1, or an HTTP status) to a branch (harmonic guard / hyperbolic alarm), and seals the attestation with R(t)=S(t)[1+alpha*sin(2pi*1.287*t)]. guardState OK/DEGRADED/BREACH.","x-solver":{"summary":"PulseGuard protection heartbeat — computes ZEQ-PROTECT-001 |sin(5*phi)|/f_pulse and ZEQ-PROTECT-002 0.5+0.3*sin(t/30) from the Zeqond phase, maps a liveness signal (health up/slow/down, or liveness 0..1, or an HTTP status) to a branch (harmonic guard / hyperbolic alarm), and seals the attestation with R(t)=S(t)[1+alpha*sin(2pi*1.287*t)]. guardState OK/DEGRADED/BREACH.","domain":"PulseGuard Protection","numericalMethod":"ZEQ-PROTECT operators + Zeq proper-time modulation","operatorChain":"KO42 + ZEQ-PROTECT-001/002","unit":"P"},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"All fields optional. Supply t (unix seconds) or phase (radians), and a liveness signal.","properties":{"t":{"type":"number","description":"unix seconds — drives the Zeqond phase and P002"},"phase":{"type":"number","description":"phase in radians (overrides t for P001)"},"health":{"type":"string","enum":["up","slow","down"],"description":"liveness; or use liveness or status"},"liveness":{"type":"number","description":"liveness in [0,1]"},"status":{"type":"number","description":"HTTP status as a liveness proxy (200=up)"}}}}}},"responses":{"200":{"description":"Sealed protection attestation: { ok:true, value:P001, unit:P, result:{ P001, P002, branch, guardState, mu2_eff, R_t }, zeqProof, envelope }"},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}}}},"/api/zeq/closedform":{"post":{"tags":["Solvers"],"summary":"Closed-form master-equation solve — the analytic counterpart to /api/zeq/solve. Compiles polynomial couplings into effective (mu2_eff, lambda_eff, F_eff) and evaluates the EXACT branch of d2phi/dt2 = mu2_eff*phi + lambda_eff*phi^3 + F_eff (all / KO42 tensioner): free, uniform-accel, harmonic, hyperbolic, driven, and Duffing phi0*cn(Omega*t,k) via AGM. KO42 first-order on the linear branches; phi^2 / sqrt / exp shapes refused by name. Ships an independent RK4 closed-vs-open cross-check.","x-solver":{"summary":"Closed-form master-equation solve — the analytic counterpart to /api/zeq/solve. Compiles polynomial couplings into effective (mu2_eff, lambda_eff, F_eff) and evaluates the EXACT branch of d2phi/dt2 = mu2_eff*phi + lambda_eff*phi^3 + F_eff (all / KO42 tensioner): free, uniform-accel, harmonic, hyperbolic, driven, and Duffing phi0*cn(Omega*t,k) via AGM. KO42 first-order on the linear branches; phi^2 / sqrt / exp shapes refused by name. Ships an independent RK4 closed-vs-open cross-check.","domain":"Closed-Form Master Field","numericalMethod":"Analytic branch (compile + cn via AGM) + KO42 perturbation","operatorChain":"KO42-tensioned","unit":"phi"},"security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Give the effective ODE one of three ways. Precedence: explicit coeffs > operators/couplings. All fields optional.","properties":{"mu2_eff":{"type":"number","description":"Effective mu^2 (skip compile). mu2_eff<0 oscillates (omega0=sqrt(-mu2_eff)); >0 hyperbolic."},"lambda_eff":{"type":"number","description":"Effective lambda (cubic term -> Duffing)."},"F_eff":{"type":"number","description":"Effective constant forcing."},"couplings":{"type":"array","items":{"type":"object"},"description":"Polynomial couplings to fold: {a,b,c,d} cubic (c!=0 -> refused QUADRATIC) or {samples:[[x,y],...]} (>=4 pts; extra pts checked -> NONPOLY)."},"operators":{"type":"array","items":{},"description":"Operator IDs (or {id,equation,unit,drive}) compiled AS couplings: one input is driven base*(1+scale*phi), the real formula is sampled over the phi grid, fit to a cubic and folded. KO42 sets the frame. Non-polynomial operators (Kepler a^1.5, de-Broglie 1/v) refuse NONPOLY by name."},"inputs":{"type":"object","additionalProperties":{"type":"number"},"description":"Anchor values the operator formulas consume (mass, a, r, v, ...)."},"compile":{"type":"object","properties":{"scale":{"type":"number","description":"Drive amplitude in base*(1+scale*phi). Default 0.25."}}},"phi0":{"type":"number","description":"Initial field value. Default: equilibrium launch -F_eff/mu2_eff + 0.5."},"phidot0":{"type":"number","description":"Initial field velocity. Default 0."},"t":{"type":"number","description":"Evaluation time. Default 1."},"ko42":{"type":"boolean","description":"Apply the KO42 tensioner first-order on the linear branches. Default true."},"alpha":{"type":"number","description":"KO42.1 tensioner amplitude. Default 1e-3."},"mode":{"type":"string","enum":["auto","manual"],"description":"manual uses beta as the tensioner amplitude."}}}}}},"responses":{"200":{"description":"On solve: {ok:true, value:phi(t), branch, mu2_eff/lambda_eff/F_eff, phi_t, phidot_t, closedVsOpenPct, compile:{mode,ruleset,scale,operators,anchors,effective}, zeqProof, envelope}. On a shape the master equation cannot carry: {ok:true, refused:true, refusal:{code,term,message}} with code in QUADRATIC | NONPOLY | DRIVEN_DUFFING | SEPARATRIX | NO_BOUNDED_OSCILLATION | DUFFING_NEEDS_REST | PARAMETRIC_RESONANCE | UNKNOWN_OPERATOR | MISSING_INPUT | COMPILE_DEGENERATE (the refusal IS the answer)."},"401":{"description":"Missing or invalid key"},"402":{"description":"Insufficient compute credit"}}}}},"x-mcp":{"endpoint":"/api/mcp","protocol":"JSON-RPC 2.0 (MCP Streamable HTTP)","toolCount":57,"map":"zeq_api_catalog","door":"zeq_http"},"x-mcp-tools":[{"name":"zeq_protect","description":"ZeqPulseGuard — the PROTECT solver: a sealed protection heartbeat. Computes ZEQ-PROTECT-001 |sin(5ϕ)|/f_pulse and ZEQ-PROTECT-002 0.5+0.3·sin(t/30) from the live Zeqond phase, maps a liveness signal to a branch (healthy→bounded harmonic guard; down→hyperbolic alarm), applies the Zeq proper-time modulation R(t)=S(t)[1+α·sin(2π·1.287·t)], and returns guardState OK/DEGRADED/BREACH. Give t (unix seconds) or phase (radians), and health (up|slow|down) or liveness [0,1] or an HTTP status. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"t":{"type":"number","description":"unix seconds"},"phase":{"type":"number","description":"phase in radians"},"health":{"type":"string","description":"up | slow | down"},"liveness":{"type":"number","description":"0..1"},"status":{"type":"number","description":"HTTP status (200=up)"}}}},{"name":"zeq_api_catalog","description":"THE MAP - search the FULL public API surface of this Zeq node (701 public endpoints; admin routes are not exposed). Filter by q (substring across path+description), method, auth. Use this to discover endpoints, then call them with zeq_http.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Substring filter across path + description (e.g. 'tally envelopes', 'observer', 'state-machines')."},"method":{"type":"string","description":"Filter: GET | POST | PUT | PATCH | DELETE."},"auth":{"type":"string","description":"Filter: public | user | key | admin."},"limit":{"type":"number","description":"Max entries returned (default 40, max 200)."}}}},{"name":"zeq_http","description":"THE DOOR - call ANY public /api/* endpoint on this node directly (the full 701-endpoint public surface, not just the curated tools). Supports GET/POST/PUT/PATCH/DELETE and the new HTTP QUERY method (RFC 10008, June 2026): the safe, idempotent GET-with-a-body for complex data grabs - pass method QUERY with a JSON body and the node merges it into query params per the RFC semantics. Your Authorization bearer key is forwarded. Admin routes and /api/mcp itself are blocked. Discover endpoints with zeq_api_catalog first.","inputSchema":{"type":"object","required":["method","path"],"properties":{"method":{"type":"string","description":"GET | POST | PUT | PATCH | DELETE | QUERY (RFC 10008: safe GET-with-body - use for complex searches)"},"path":{"type":"string","description":"Endpoint path starting /api/ (e.g. /api/zeq/pulse, /api/mesh, /api/chain/state-machines/foundation)."},"query":{"type":"object","description":"Optional query params as a flat object."},"body":{"type":"object","description":"Optional JSON body for non-GET requests."}}}},{"name":"zeq_spin_up","description":"Spin up your own ZeqVM state machine and get a REAL, account-backed API key. REQUIRES authentication: pass a demo key as Authorization: Bearer zeq_ak_demo_… — if you have no key yet, first POST /api/demo-key/mint (free, no signup) to get one, then call this with it. Provisions a fresh machine (unique ZID), seeds its audit chain, and mints an active zeq_ak_ compute key on the free tier. Returns your ZID, recovery equation + salt (SHOWN ONCE — save them, there is no password reset), the machine slug, and the API key (SHOWN ONCE). Put the returned apiKey in your connector's Authorization header and every subsequent zeq_compute / zeq_solve / contract call runs on YOUR machine. (Every API key belongs to an account — there is no keyless minting.)","inputSchema":{"type":"object","properties":{"displayName":{"type":"string","description":"Optional label for your machine (e.g. your agent's name). Defaults to 'mcp-agent'."}}}},{"name":"zeq_contract_generate","description":"Draft a state contract from a plain-English description. The framework turns your intent into an operator-grounded contract definition on YOUR machine. Returns the definition — pass it to zeq_contract_deploy. Requires your zeq_ak_ key (from zeq_spin_up).","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"8-600 chars: what the contract should do, its states, and transition conditions."}}}},{"name":"zeq_contract_templates","description":"List the 321 built-in state-contract templates (id + name) across every industry category. Deploy any with zeq_contract_deploy { templateId } — no LLM credential needed. Requires your zeq_ak_ key.","inputSchema":{"type":"object","properties":{}}},{"name":"zeq_contract_deploy","description":"Deploy a state contract to your machine. Every transition is ZeqProof-anchored on the entangled-state chain and visible in the Observer. Pass EITHER `templateId` (from zeq_contract_templates — works with no LLM credential) OR a full `definition` object (must include a version; from zeq_contract_generate). Requires your zeq_ak_ key.","inputSchema":{"type":"object","properties":{"templateId":{"type":"string","description":"Built-in template id to deploy (see zeq_contract_templates)."},"definition":{"type":"object","description":"A full custom contract definition (states, transitions, operators, conditions, version)."}}}},{"name":"zeq_contract_list","description":"List the state contracts on your machine — id, name, current state, and fire count. Requires your zeq_ak_ key.","inputSchema":{"type":"object","properties":{}}},{"name":"zeq_contract_get","description":"Get one contract's full state + definition by id. Requires your zeq_ak_ key.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Contract id (from zeq_contract_list)."}}}},{"name":"zeq_contract_fire","description":"Fire a contract's next transition now. Returns a ZeqProof receipt; guarded transitions report their reason instead of firing. Requires your zeq_ak_ key.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Contract id to advance."}}}},{"name":"zeq_observer","description":"Read the live entangled-state chain — your proof-of-computation feed. With no key it returns the global recent feed; with your zeq_ak_ key it focuses on YOUR machine's state. Each entry links to the Explorer.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"How many entries (1-50, default 15)."}}}},{"name":"zeq_publish_page","description":"Publish a live HTML page/app to your machine — instantly hosted at /s/<machine>/p/<pageSlug>/ and added to your machine launcher. Pass `title` and full `html` (optional `pageSlug`). Owner-authenticated. Requires your zeq_ak_ key (from zeq_spin_up).","inputSchema":{"type":"object","required":["title","html"],"properties":{"title":{"type":"string","description":"Page title."},"html":{"type":"string","description":"Full HTML markup of the page/app."},"pageSlug":{"type":"string","description":"URL slug (a-z0-9-, defaults to 'app')."}}}},{"name":"zeq_mail_html","description":"Build an HTML email and deliver it straight to YOUR OWN Zeq Mail inbox (<zid>@<your node's mail domain>), where you can review it and forward it on to anyone. This does NOT send to third parties — it only ever delivers to the mailbox of the identity making the call, so an agent cannot be talked into mailing strangers. Use it to draft newsletters, announcements and campaigns: compose the markup, deliver it here, open Zeq Mail, then hit Forward. Write email HTML, not web-page HTML — table layout, all CSS inline, absolute https:// links, max 600px wide. Scripts, forms and iframes are stripped on arrival. Owner-authenticated: requires your zeq_ak_ key (from zeq_spin_up).","inputSchema":{"type":"object","required":["subject","html"],"properties":{"subject":{"type":"string","description":"Subject line of the email."},"html":{"type":"string","description":"The email body as HTML (fragment or full document)."},"text":{"type":"string","description":"Optional plain-text alternative. Generated from the HTML if omitted — always sent, because an empty text part reads blank in text-only clients."},"from":{"type":"string","description":"Optional display name to attribute the draft to, e.g. 'Campaign Builder'. Cosmetic only; delivery is always to your own mailbox."}}}},{"name":"zeq_compute","description":"Compute physics results using the Zeq.dev HulyaSync framework. Applies 1,600+ catalogued operators across 67 domains (19 closed-form solvers; coverage map published). Every result is phase-stamped to the HulyaPulse (1.287 Hz system clock) and returned as a ZeqState envelope with masterSum R(t), phase φ, Zeqond τ, and an explicit numeric-accuracy bound. KO42 is always included. Response includes a zeqProof HMAC for tamper-evident verification. Requires a valid zeq_ak_ API key in the Authorization header.","inputSchema":{"type":"object","required":["domain","inputs"],"properties":{"domain":{"type":"string","description":"Physics domain to compute in. Examples: quantum-mechanics, classical-mechanics, thermodynamics, fluid-dynamics, aerospace, electromagnetism, astrophysics, biomedical, materials-science. 67 domains are available — use zeq_list_operators to see all."},"inputs":{"type":"object","description":"Key-value pairs of numeric domain inputs — use the keys the solver actually reads. Example for quantum-mechanics (particle in a box): {\"n\": 1, \"L\": 1e-10, \"m\": 9.109e-31} → E_n eigenvalue. Unrecognized keys are rejected by the dimensional gate (value: NaN), so match the domain's documented inputs. Values must be finite numbers.","additionalProperties":{"type":"number"}},"operators":{"type":"array","items":{"type":"string"},"description":"Optional list of specific operator IDs to apply (e.g. ['QM01', 'QM03']). KO42 is always added automatically. If omitted, the domain default operator is used. Use zeq_list_operators to discover available IDs per domain."},"folder":{"type":"string","description":"Optional folder name to file this computation under (e.g. 'Orbital Mechanics'). Computations sharing a folder group together: each folder becomes a tab in the state explorer and a directory in the user's ZeqGit 'computations' repo (open in Zeq Studio). Reuse the same name to keep adding to it; omit for the 'unfiled' catch-all. When a user is running several related computes, ask if they want to name a folder."}}}},{"name":"zeq_list_operators","description":"List available Zeq.dev physics operators for a given domain, or list all 67 domains. Use this to discover operator IDs before calling zeq_compute. No API key required.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain to list operators for. Omit or pass empty string to list all 67 domains."}}}},{"name":"zeq_paper_search","description":"Search the scientific literature across arXiv, OpenAlex, Crossref and Europe PMC in one call. Returns deduplicated results with a canonical id (arxiv:… / doi:… / pmid:…), title, authors, date, venue and abstract snippet. Use this INSTEAD of answering a literature question from memory — a citation you did not look up is a guess. No API key required.","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search query, e.g. 'AlphaFold protein structure prediction'."},"sources":{"type":"array","items":{"type":"string"},"description":"Optional subset of: arxiv, openalex, crossref, europepmc, semanticscholar, biorxiv. Defaults to the four that work without a key."},"limit":{"type":"number","description":"Max results, 1-50. Default 20."}}}},{"name":"zeq_paper_fetch","description":"Fetch one scientific record by canonical id — 'arxiv:1706.03762', 'doi:10.1038/s41586-021-03819-2', 'pmid:34265844'. Returns the full record including abstract where the source provides one. Use this to verify a citation before repeating it. No API key required.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Canonical id in 'scheme:local' form. Schemes: arxiv, doi, pmid, openalex, s2, biorxiv."}}}},{"name":"zeq_domain_match","description":"Given a paper (canonical id) or any text, return which of the 67 Zeq operator domains it plausibly falls in, with the exact vocabulary terms that fired as evidence. Use this to ask 'could the framework compute this?' before claiming it can. IMPORTANT: this is deterministic term overlap, NOT a solvability proof — 258 of 1,612 operators (16%) have their own equation evaluated, so a domain match means 'worth testing with zeq_solve', never 'solvable'.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Canonical id — arxiv:1706.03762, doi:10.1038/…, pmid:…"},"text":{"type":"string","description":"Raw text to classify, if you have no id."},"limit":{"type":"number","description":"Max domains to return, 1-12. Default 5."}}}},{"name":"zeq_science_domains","description":"List the 67 Zeq operator domains and which literature sources serve each. Use before zeq_paper_search to scope a search: applied/industry domains (ENERGY, FIN, ENG, MAT) are served by Crossref + OpenAlex, physics and CS by arXiv, biomedical by Europe PMC. Scoping measurably improves precision. No API key required.","inputSchema":{"type":"object","properties":{}}},{"name":"zeq_find_operator","description":"Find operators by name, id, equation or description — ONE call instead of paging through domains. Returns id, domain, PREFIX (what zeq_compute takes), tier, equation and the domain's accepted input keys. No API key required.","inputSchema":{"type":"object","required":["term"],"properties":{"term":{"type":"string","description":"Search term, e.g. 'schwarzschild', 'kinetic', 'QM9', 'entropy'."},"limit":{"type":"number","description":"Max matches (default 12, max 40)."}}}},{"name":"zeq_pulse","description":"Get the current ZeqPulse state — live Zeqond counter, HulyaPulse phase φ, and R(t) value. No API key required. Use this to read the real-time 1.287 Hz heartbeat of the Zeq.dev framework and synchronize agent operations to the HulyaPulse clock.","inputSchema":{"type":"object","properties":{}}},{"name":"zeq_verify","description":"Verify a ZeqProof HMAC returned by zeq_compute. Confirms the response (including the physics value, for v2 receipts) reached you unmodified — integrity, not independent re-derivation of the physics. Pass the proof string along with operatorIds, R_t, zeqond, value, unit, and the keyPrefix from the original response. Returns valid: true/false. Requires API key.","inputSchema":{"type":"object","required":["proof","operatorIds","R_t","zeqond"],"properties":{"proof":{"type":"string","description":"The 64-character hex zeqProof HMAC from the compute response (field: zeqProof)."},"operatorIds":{"type":"array","items":{"type":"string"},"description":"Operator IDs array from the original zeqState.operators field."},"R_t":{"type":"number","description":"The masterSum value from the original zeqState.masterSum field."},"zeqond":{"type":"number","description":"The zeqond value from the original zeqState.zeqond field."},"keyPrefix":{"type":"string","description":"Optional keyPrefix from the original response. Defaults to the API key user ID prefix."},"value":{"type":"number","description":"The physics value from the original response (required for v2 receipts, which sign the value)."},"unit":{"type":"string","description":"The unit string from the original response (v2 receipts)."}}}},{"name":"zeq_lattice","description":"Compute a ZeqLattice — a multi-node coherence grid. Pass an array of 2–5 node specs, each with optional { domain, inputs }. All nodes share one Date.now() timestamp but run at staggered HulyaPulse phases. Returns per-node R_t, coherenceScore (0–1), and lattice equation. Counts as N compute tokens (one per node). Requires API key.","inputSchema":{"type":"object","required":["nodes"],"properties":{"nodes":{"type":"array","description":"Array of 2–5 node specifications, each with optional domain and inputs.","minItems":2,"maxItems":5,"items":{"type":"object","properties":{"domain":{"type":"string","description":"Physics domain for this node (same options as zeq_compute)."},"inputs":{"type":"object","description":"Numeric key-value physics inputs for this node.","additionalProperties":{"type":"number"}}}}}}}},{"name":"zeq_shift","description":"Compute a ZeqShift — a deterministic forward time-series projection of R(t) across up to 64 Zeqond steps. Each step advances by 0.777 s (one Zeqond) and returns t (absolute seconds), phase φ, zeqond τ, R_t, and delta (R_t change from previous step; 0 for step 0). Counts as N compute tokens (one per step). Requires API key.","inputSchema":{"type":"object","properties":{"steps":{"type":"number","description":"Number of Zeqond steps to project forward (1–64, default 16)."},"domain":{"type":"string","description":"Physics domain (optional, defaults to Quantum Mechanics)."},"inputs":{"type":"object","description":"Numeric key-value physics inputs for S(t) computation.","additionalProperties":{"type":"number"}}}}},{"name":"zeq_field_status","description":"Query the ZeqField security system status — cipher algorithm, key source, and protocol versions. Returns whether ZEQ_FIELD_KEY is configured, current PBKDF2 parameters, and ZeqProof HMAC settings. No API key required.","inputSchema":{"type":"object","properties":{}}},{"name":"zeq_solve","description":"Integrates the geodesic in the KO42-tensioned metric  ds² = gμν dxμ dxν + α·sin(2π·1.287·t)·dt²  and returns the trajectory φ(t), the register dump, the HULYAS functional energy E = P_φ · Z(M,R,δ,C,X), and the term-by-term diagnostic. The base metric carries the REAL physics selected by the operators (7-step SELECT→BIND): NM19/NM24 → free-fall −g; NM21 (+ real `position` in metres) → radial gravity −GM/x²; NM30 → SHM −ω²x; GR33–38 add the weak-field g₀₀ factor √(1−2GM/xc²) (relativity, in the metric). The KO42 metric tension rides on top for every domain — the unification — so R(t)=S(t)[1+α·sin] reduces to textbook mechanics within the α≈1.29e-3 band and its Zeqond-average recovers S(t) exactly. `errorPct` is a TOLERANCE CEILING (≤0.1% confirms 'computed within physical law'), not an error rate. Use REAL numbers and REAL positions. (`zeq_compute` is the exact static closed-form path.) Requires zeq_ak_ API key.","inputSchema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"Label only — never read by math. Max 500 chars."},"mass":{"type":"number","description":"Object mass in kg. Default 1.0."},"location":{"type":"string","description":"Categorical: earth | mars | moon | jupiter | sun."},"medium":{"type":"string","description":"Categorical: air | water | vacuum."},"object":{"type":"string","description":"Free-form object label — not read by math."},"alpha":{"type":"number","description":"KO42.1 amplitude. Default 1.0."},"beta":{"type":"number","description":"KO42.2 amplitude. Default 0.0."},"koSettings":{"type":"object","description":"Operator weights, keyed by operator ID (e.g. { KO42: 1.0, NM21: 0.5, GR35: 0.3 }).","additionalProperties":{"type":"number"}},"tMax":{"type":"number","description":"Simulation horizon in seconds. Clamped to [0.1, 30]. Default 5.0."},"position":{"type":"number","description":"Real starting position/radius in METRES for gravity mode (a=−GM/x²). Real numbers only — not toy units."},"dt":{"type":"number","description":"Integrator timestep. Clamped to [0.001, 0.1]. Default 0.01."},"useOperatorModules":{"type":"boolean","description":"Use operator-specific physics values (SDK formula path)."},"normalizeOperators":{"type":"boolean","description":"Default true: normalise operator values by reference scale."},"coreOnly":{"type":"boolean","description":"Restrict coupling to the 8 Core Operator Families."},"referenceMode":{"type":"string","enum":["free-fall","shm","gravity","model"],"description":"Base-metric law: free-fall (−g), shm (−ω²x), gravity (−GM/x², needs `position`), or model. Operators (NM19/NM21/NM24/NM30, GR33–38) also select it automatically."},"strict":{"type":"boolean","description":"ALWAYS ON (2026-08-10 — same rule as the REST route since 2026-08-01): every solve autotunes β + operator weights to drive the precision bound vs the chosen referenceMode to ≤ 0.1 %, and REFUSES to seal anything still outside it. This flag is accepted and ignored; there is no opt-out. Honest — returns tuneStatus 'converged' (tolerance met) or a refusal (never a faked pass)."},"maxIterations":{"type":"number","description":"Strict-mode autotune budget (1–40). Default 40."},"folder":{"type":"string","description":"Optional folder name to file this solve under. Computations sharing a folder group into a tab in the state explorer and a directory in the user's ZeqGit 'computations' repo (open in Zeq Studio). Reuse the name to append; omit for the 'unfiled' catch-all."}}}},{"name":"zeq_multibody","description":"Run the vector master equation: N coupled φ_i(t) trajectories with pairwise inverse-square coupling. Each body gets its own register dump; every pair returns mean/final force magnitude + separation statistics. Use for Sun-Earth-Moon-style three-body experiments. Strictly mathematical — math reads only the numerical/categorical fields. Requires zeq_ak_ API key.","inputSchema":{"type":"object","required":["prompt","bodies"],"properties":{"prompt":{"type":"string","description":"Label only — never read by math."},"bodies":{"type":"array","minItems":2,"maxItems":16,"description":"Array of body specs (2–16 bodies).","items":{"type":"object","required":["mass"],"properties":{"mass":{"type":"number","description":"Body mass in kg."},"location":{"type":"string","description":"earth | mars | moon | jupiter | sun."},"medium":{"type":"string","description":"air | water | vacuum."},"object":{"type":"string","description":"Free-form label."},"phi0":{"type":"number","description":"Optional explicit initial φ."},"dphi0":{"type":"number","description":"Optional explicit initial dφ/dt."},"position":{"type":"number","description":"Real 1-D position in METRES. If every body has one, runs REAL Newtonian gravity (G, real r) instead of the dimensionless φ-field."}}}},"alpha":{"type":"number"},"beta":{"type":"number"},"koSettings":{"type":"object","additionalProperties":{"type":"number"},"description":"Operator weights shared across all bodies."},"tMax":{"type":"number"},"dt":{"type":"number"},"pairwiseCoupling":{"type":"number","description":"γ in the pairwise term. Default 0.05."},"pairwiseSoftening":{"type":"number","description":"ε² softening. Default 1e-6."},"useOperatorModules":{"type":"boolean"},"normalizeOperators":{"type":"boolean"},"coreOnly":{"type":"boolean"},"folder":{"type":"string","description":"Optional folder name to file this multibody run under. Computations sharing a folder group into a tab in the state explorer and a directory in the user's ZeqGit 'computations' repo (open in Zeq Studio). Reuse the name to append; omit for 'unfiled'."}}}},{"name":"zeq_evolve","description":"Run ZeqEvolve — deterministic Nano-Zeqond MOLECULAR DYNAMICS: velocity-Verlet (2nd-order symplectic) integration of a Lennard-Jones system (NM19) with optional harmonic bonds (NM30) in the NVE ensemble. Presets: lj-liquid, lj-gas, crystal, polymer. Returns the energy-conservation drift (the ≤0.1% reality check), temperature, virial pressure and total momentum, plus a ZEQOND_RECEIPT of the real fields it produced. Same inputs reproduce the same run (seeded). Real physics for materials/soft-matter/biology sandboxes. Requires zeq_ak_ API key.","inputSchema":{"type":"object","properties":{"preset":{"type":"string","description":"lj-liquid | lj-gas | crystal | polymer. Default lj-liquid."},"N":{"type":"number","description":"Particle count (2–2000). Default from preset."},"rho":{"type":"number","description":"Number density N/area (reduced units)."},"T0":{"type":"number","description":"Initial temperature (reduced units)."},"steps":{"type":"number","description":"Velocity-Verlet steps (10–200000). Default 2000."},"dtSim":{"type":"number","description":"MD time step, reduced units. Default 0.003 (VV-stable)."},"eps":{"type":"number","description":"Lennard-Jones ε. Default 1."},"sig":{"type":"number","description":"Lennard-Jones σ. Default 1."},"rc":{"type":"number","description":"Cutoff in units of σ. Default 2.5."},"kBond":{"type":"number","description":"Harmonic bond stiffness (polymer). Default 30."},"r0Bond":{"type":"number","description":"Bond rest length. Default 1."},"seed":{"type":"number","description":"Seed for reproducibility. Omit → deterministic seed derived from the inputs."},"sample":{"type":"number","description":"Energy samples in the returned series (2–500). Default 40."},"folder":{"type":"string","description":"Optional folder to file this run under (groups in the explorer + ZeqGit)."}}}},{"name":"zeq_action","description":"Run ZeqAction — a least-action, HIGH-ORDER SYMPLECTIC integrator (Störmer-Verlet → Yoshida triple-jump, order 4/6/8, fixed dt, Kahan-compensated). Structure-preserving, so energy has NO secular drift. Systems: kepler (orbit), oscillator (anharmonic), pendulum. It ALSO runs classical RK4 on the same system and returns both drifts, proving the difference — symplectic stays bounded, RK4 drifts (the orbit decays). The reality check for long-horizon dynamics. Requires zeq_ak_ API key.","inputSchema":{"type":"object","properties":{"system":{"type":"string","description":"kepler | oscillator | pendulum. Default kepler."},"order":{"type":"number","description":"Symplectic composition order: 2 | 4 | 6 | 8. Default 4."},"steps":{"type":"number","description":"Integration steps (10–2,000,000). Default 20000."},"dt":{"type":"number","description":"Fixed time step (symplecticity needs it constant). Default 0.01."},"eccentricity":{"type":"number","description":"Kepler orbit eccentricity 0–0.98. Default 0.6."},"mu":{"type":"number","description":"Kepler gravitational parameter. Default 1."},"omega":{"type":"number","description":"Oscillator frequency. Default 1."},"lambda":{"type":"number","description":"Oscillator quartic anharmonicity. Default 1."},"q0":{"type":"number","description":"Initial coordinate (oscillator/pendulum)."},"p0":{"type":"number","description":"Initial momentum (oscillator/pendulum)."},"compare":{"type":"boolean","description":"Also run RK4 to show the drift difference. Default true."},"sample":{"type":"number","description":"Series points returned (2–500). Default 60."},"folder":{"type":"string","description":"Optional folder to file this run under."}}}},{"name":"zeq_heat","description":"ZeqHeat — 2-D heat/diffusion ∂T/∂t=α(∂²T/∂x²+∂²T/∂y²) on a grid (the default). method 'explicit' (FTCS, conditionally stable — blows up past the 2-D CFL r=α·dt·(1/dx²+1/dy²)=½) or 'implicit' (ADI Peaceman–Rachford, UNCONDITIONALLY stable). Compared to the exact 2-D Fourier-mode decay. Fills temperature_field + heat_flux_vector. Pass dim:1 (or L, or the 1-D `mode`) for the original 1-D bar. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"method":{"type":"string","description":"explicit | implicit (default)"},"nx":{"type":"number","description":"grid points in x (8–128)"},"ny":{"type":"number","description":"grid points in y (8–128)"},"kx":{"type":"number","description":"Fourier mode in x"},"ky":{"type":"number","description":"Fourier mode in y"},"alpha":{"type":"number"},"dt":{"type":"number"},"steps":{"type":"number"},"dim":{"type":"number","description":"1 for the 1-D bar"},"mode":{"type":"number","description":"1-D Fourier mode (selects the 1-D bar)"},"folder":{"type":"string"}}}},{"name":"zeq_lorenz","description":"ZeqLorenz — the Lorenz attractor (RK4), deterministic chaos. Checks the exact phase-volume contraction −(σ+1+β) and measures the Lyapunov exponent (butterfly effect) from a twin trajectory. Bounded strange attractor, reproduced bit-for-bit. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"sigma":{"type":"number"},"rho":{"type":"number"},"beta":{"type":"number"},"dt":{"type":"number"},"steps":{"type":"number"},"delta":{"type":"number","description":"twin separation for the Lyapunov estimate"},"folder":{"type":"string"}}}},{"name":"zeq_wave","description":"ZeqWave — 2-D MEMBRANE wave ∂²u/∂t²=c²(∂²u/∂x²+∂²u/∂y²) by leapfrog (the default), reality-checked by EXACT discrete-energy conservation (drift ~1e-13) and against the standing mode ω=cπ√(kx²/Lx²+ky²/Ly²). 2-D Courant C=c·dt·√(1/dx²+1/dy²)≤1 or it explodes. Pass mode:'maxwell' for 1-D Maxwell (Yee FDTD), or dim:1 / mode_k for the 1-D scalar wave. Fills displacement/velocity (or E,B in maxwell). Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","description":"membrane (default) | maxwell | wave1d"},"nx":{"type":"number","description":"grid x (16–128)"},"ny":{"type":"number","description":"grid y (16–128)"},"kx":{"type":"number","description":"2-D mode in x"},"ky":{"type":"number","description":"2-D mode in y"},"c":{"type":"number"},"dt":{"type":"number"},"courant":{"type":"number","description":"target 2-D Courant (default 0.5)"},"steps":{"type":"number"},"dim":{"type":"number","description":"1 for the 1-D scalar wave"},"mode_k":{"type":"number","description":"1-D Fourier mode (selects 1-D)"},"eps":{"type":"number"},"mu":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_flow","description":"ZeqFlow — 2-D incompressible Navier–Stokes (Stam stable fluids): advect + diffuse + pressure PROJECTION so ∇·u→0. Reports divergence before/after projection. Fills velocity/pressure/viscosity. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"N":{"type":"number","description":"grid size (8–160)"},"steps":{"type":"number"},"dt":{"type":"number"},"visc":{"type":"number"},"iters":{"type":"number","description":"Poisson iterations"},"folder":{"type":"string"}}}},{"name":"zeq_fracture","description":"ZeqFracture — 2-D bond-based peridynamic CRACK PROPAGATION (mode-I SENT, the default): a seeded edge notch either holds below a critical far-field strain, or the crack initiates at the tip and runs across the specimen above it (unstable fracture). Reports crack tip, advance, whether it spanned, critical strain. Fills the material+boundary receipt tier: stress, strain, damage, elasticity, boundary_traction, contact. Pass mode:\"bar\" (or an N) for the 1-D cohesive bar. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","description":"\"2d\" (default, crack propagation) | \"bar\" (1-D)"},"nx":{"type":"number","description":"2-D grid width (16–64)"},"ny":{"type":"number","description":"2-D grid height (8–40)"},"notchFrac":{"type":"number","description":"2-D starter-notch length as a fraction of width (0.1–0.6)"},"horizonM":{"type":"number","description":"peridynamic horizon in grid spacings (2–4)"},"N":{"type":"number","description":"1-D bar node count (selects mode:bar)"},"E":{"type":"number"},"strain":{"type":"number","description":"max applied far-field strain"},"s0":{"type":"number","description":"critical bond stretch"},"sf":{"type":"number","description":"1-D full-failure stretch"},"loadSteps":{"type":"number"},"relaxIters":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_react","description":"ZeqReact — reaction–diffusion (biology). model 'gray-scott' (Turing morphogenesis: spots/stripes/worms self-organise) or 'fitzhugh-nagumo' (excitable media: cardiac/neural travelling & spiral waves). 2-D grid, explicit. Stability D·dt/dx²≤¼ or it blows up. Fills the chemical/biological receipt tier (concentration + reaction rate). Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"gray-scott | fitzhugh-nagumo"},"N":{"type":"number","description":"grid size (16–400)"},"steps":{"type":"number"},"dt":{"type":"number"},"Du":{"type":"number"},"Dv":{"type":"number"},"F":{"type":"number","description":"Gray-Scott feed"},"k":{"type":"number","description":"Gray-Scott kill"},"epsilon":{"type":"number"},"a":{"type":"number"},"b":{"type":"number"},"I":{"type":"number","description":"FitzHugh-Nagumo stimulus"},"folder":{"type":"string"}}}},{"name":"zeq_epi","description":"ZeqEpi — SIR/SEIR epidemic dynamics (RK4). Reality check: population conserved. Reports R₀, peak infected, peak day, final size (Kermack–McKendrick). Public-health domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"model":{"type":"string","description":"sir | seir"},"beta":{"type":"number"},"gamma":{"type":"number"},"sigma":{"type":"number"},"N":{"type":"number"},"I0":{"type":"number"},"days":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_quant","description":"ZeqQuant — European option price by Monte-Carlo, verified against the closed-form Black–Scholes. Reports price, standard error, delta. Quant-finance domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"call | put"},"S0":{"type":"number"},"K":{"type":"number"},"r":{"type":"number"},"sigma":{"type":"number"},"T":{"type":"number"},"paths":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_zeta","description":"ZeqZeta — locate Riemann zeta nontrivial zeros on the ½-line (Riemann–Siegel) and VERIFY the count against N(T)=θ(T)/π+1 up to height T. Verifies RH in range; does NOT prove it. Number-theory domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"T":{"type":"number","description":"height up to which to verify (15–2000)"},"dt":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_sat","description":"ZeqSAT — DPLL 3-SAT solver on a seeded random instance at ratio α=m/n (hardness peaks ≈4.26). Certifies SAT assignments; reports decisions/propagations (the NP-hard scaling). Solves instances; does NOT resolve P vs NP. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"n":{"type":"number","description":"variables (3–120)"},"alpha":{"type":"number","description":"clause/variable ratio"},"m":{"type":"number"},"seed":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_gauge","description":"ZeqGauge — 2-D compact U(1) lattice gauge theory (Metropolis). Mean plaquette verified against the EXACT Bessel result I₁(β)/I₀(β). The method used to study Yang–Mills numerically; does NOT prove the mass-gap theorem. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"L":{"type":"number","description":"lattice size (4–64)"},"beta":{"type":"number"},"sweeps":{"type":"number"},"seed":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_fea","description":"ZeqFEA — 2-D plane-stress finite-element cantilever (Q4, matrix-free element-by-element Jacobi-preconditioned CG — memory O(dof), so LARGE meshes run: up to ~9000 elements). Tip deflection vs Euler–Bernoulli beam theory; refine the mesh and the ratio CONVERGES to ~1.00 (coarse 24×6 is ~0.94, refined 120×30 is ~1.00). Reports von Mises stress, CG residual. Fills stress/strain/displacement/elasticity. Structural-engineering domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"nx":{"type":"number","description":"elements along length (4–220, default 120)"},"ny":{"type":"number","description":"elements through depth (2–80, default 30)"},"Lx":{"type":"number"},"Ly":{"type":"number"},"E":{"type":"number"},"P":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_grid","description":"ZeqGrid — DC power-flow on an N-bus network (B·θ=P). Reality check: Kirchhoff's current law + power balance. Reports bus angles, line flows, max loading. Power-systems domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"N":{"type":"number","description":"buses (3–300)"},"chords":{"type":"number"},"reactance":{"type":"number"},"seed":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_device","description":"ZeqDevice — 2-D device ELECTROSTATICS (the default): the potential + field in a semiconductor cross-section under an electrode, solving ∇²φ=0 by matrix-free Jacobi-preconditioned CG, verified against the EXACT analytic solution (a sinh Fourier mode) to ~0.004% — the peak |E| sets breakdown (MOSFET/HEMT/diode design). Pass dim:1 (or Na/Nd) for the 1-D PN junction (built-in voltage V_bi=V_T·ln(NaNd/ni²) vs Poisson). Fills potential + E-field. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"nx":{"type":"number","description":"2-D grid x (16–220)"},"ny":{"type":"number","description":"2-D grid y (16–220)"},"Lx":{"type":"number"},"Ly":{"type":"number"},"V":{"type":"number","description":"electrode voltage"},"kx":{"type":"number","description":"electrode mode"},"dim":{"type":"number","description":"1 for the PN junction"},"Na":{"type":"number","description":"1-D acceptor doping (m⁻³) — selects PN junction"},"Nd":{"type":"number","description":"1-D donor doping (m⁻³)"},"ni":{"type":"number"},"T":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_opt","description":"ZeqOpt — nonlinear optimization: minimise a test function (sphere, rosenbrock, rastrigin, beale) by Nelder–Mead or gradient descent, checked against the KNOWN global minimum. Operations-research / ML / design domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"fn":{"type":"string","description":"sphere | rosenbrock | rastrigin | beale"},"method":{"type":"string","description":"nelder-mead | gradient"},"dim":{"type":"number"},"maxIter":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_climate","description":"ZeqClimate — 2-D shallow-water equations (Lax–Friedrichs), a droplet radiating gravity waves. Reality check: total mass conserved; CFL √(gH)dt/dx≤1. Fills velocity + height. Climate / geophysics / oceanography domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"N":{"type":"number"},"steps":{"type":"number"},"g":{"type":"number"},"H":{"type":"number"},"dt":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_unified","description":"ZeqUnifiedComposer -- compose MULTIPLE operators in ONE call. Give an operator chain (KO42 is auto-prepended) plus numeric inputs; each operator is evaluated formula-as-data (no eval) and composed: Strategy A (algebraic product under the KO42 frame), B (sequential Zeqond timeline, RK4 for ODE operators), or C (single-operator fallback). Operators may be ids (GR37, NM19, NM21, QM9, ORBIT_PERIOD, NM23/24/26, GR35/36/41, QM10) or {id, equation, unit?, kind?} objects for ANY formula-as-data expression. Returns the composed value, the method, per-operator intermediates and the compiled expression, sealed like every solver. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"operators":{"type":"array","description":"operator ids and/or {id, equation, unit?, kind?} objects; KO42 auto-prepended","items":{}},"inputs":{"type":"object","description":"numeric inputs used by the operator equations (mass, m, v, r, a, ...)"},"consts":{"type":"object","description":"optional overrides: t, alpha, f_H, T_Z"},"folder":{"type":"string"}}}},{"name":"zeq_dock","description":"ZeqDock — rigid-body molecular docking: minimise a Lennard-Jones + Coulomb score over the ligand's 6 DOF against a receptor pocket, from seeded restarts. Reports binding energy + pose. Drug-discovery / comp-chem domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"restarts":{"type":"number"},"iters":{"type":"number"},"seed":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_buckling","description":"ZeqBuckling — the Euler critical buckling load of a compressed column/strut: the axial load P_cr at which a slender member collapses (columns, struts, landing gear, rocket interstages, scaffolding). Solves the beam-column buckling generalised eigenproblem K φ=P·K_g φ from Hermitian Euler–Bernoulli beam finite elements (Cholesky reduction + Jacobi), the smallest positive P being P_cr. Checked against EULER's exact P_cr=π²·EI/(K·L)² for the end condition — pinned-pinned K=1, fixed-fixed K=0.5, fixed-free K=2, fixed-pinned K≈0.699. RMS error vs Euler is the seal (a coarse mesh seals observable-differential). Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"ends":{"type":"string","description":"\"pinned-pinned\" (default), \"fixed-fixed\", \"fixed-free\", \"fixed-pinned\""},"EI":{"type":"number","description":"flexural rigidity E·I (N·m²)"},"E":{"type":"number","description":"Young's modulus (Pa)"},"I":{"type":"number","description":"second moment of area (m⁴)"},"L":{"type":"number","description":"column length (m)"},"ne":{"type":"number","description":"elements (4–80)"},"folder":{"type":"string"}}}},{"name":"zeq_acoustic","description":"ZeqAcoustic — the resonant modes of a 1-D acoustic resonator (Helmholtz −p″=k²p): the standing-wave frequencies of an organ pipe, wind instrument, exhaust/HVAC duct or muffler. Each end is OPEN (pressure-release) or CLOSED (rigid); a finite-volume + half-cell-mass discretisation gives a symmetric tridiagonal solved by Sturm bisection, and the frequencies f=kc/2π are checked against the EXACT closed forms — open–open n·c/2L, open–closed (2n−1)·c/4L, closed–closed n·c/2L. RMS error vs exact is the seal (a coarse grid seals observable-differential). Reports the fundamental + overtones in Hz. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"ends":{"type":"string","description":"\"open-open\" (default), \"open-closed\", or \"closed-closed\""},"L":{"type":"number","description":"resonator length (m)"},"c":{"type":"number","description":"sound speed (m/s), default 343"},"N":{"type":"number","description":"cells (64–6000)"},"modes":{"type":"number","description":"resonances to return (1–16)"},"folder":{"type":"string"}}}},{"name":"zeq_schrodinger","description":"ZeqSchrodinger — the time-independent Schrödinger eigenvalue problem Ĥψ=Eψ, Ĥ=−(ℏ²/2m)d²/dx²+V(x): the quantum bound-state ENERGY LEVELS behind atoms, quantum wells/dots, molecular vibration and the qubit. A finite-difference tridiagonal Hamiltonian is diagonalised by Sturm-sequence bisection (robust, deterministic) and its lowest levels are checked against the EXACT analytic spectrum — harmonic oscillator Eₙ=ℏω(n+½), infinite square well Eₙ=n²π²ℏ²/2mL². The RMS error vs exact is the seal (life-or-death: too coarse a grid or too small a box gives WRONG levels and seals observable-differential). Natural units ℏ=m=1. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"potential":{"type":"string","description":"\"harmonic\" (default) or \"square-well\""},"N":{"type":"number","description":"grid points (64–4000)"},"levels":{"type":"number","description":"eigenvalues to return (1–12)"},"omega":{"type":"number","description":"harmonic frequency ω"},"L":{"type":"number","description":"square-well width"},"folder":{"type":"string"}}}},{"name":"zeq_tumor","description":"ZeqTumor — Fisher–KPP growth front ∂u/∂t=D u_xx+r u(1−u): a population/tumor/gene that grows AND spreads, invading as a travelling front (oncology, invasion biology, gene spread, spatial epidemics). Reality checks: the density stays in [0,1] (the seal — a stable scheme holds it, an unstable one past CFL D·dt/dx²≤½ violates it and explodes), and the front advances at the EXACT Ablowitz–Zeppetella speed c=5√(rD/6) (verified to ~0.2%). Reports front speed, boundedness, pointwise error vs the exact wave. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"D":{"type":"number","description":"diffusion (spread rate)"},"r":{"type":"number","description":"growth rate"},"nx":{"type":"number","description":"grid points (50–2000)"},"L":{"type":"number","description":"domain length"},"x0":{"type":"number","description":"initial front position"},"dt":{"type":"number"},"steps":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_lotka","description":"ZeqLotka — predator–prey / ecosystem dynamics (Lotka–Volterra). dx/dt=αx−βxy, dy/dt=δxy−γy. Reality check: the first integral H=δx−γ·ln x+βy−α·ln y is conserved on every orbit — RK4 (default) holds it to ~1e-9 (the seal), forward-Euler drifts and the populations spiral to a FALSE extinction/explosion (the life-or-death). Reports the boom-bust extremes, cycle period, and coexistence fixed point (γ/δ, α/β). Fisheries, pest control, conservation biology. method 'rk4'|'symplectic'|'euler'. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"method":{"type":"string","description":"rk4 (default) | symplectic | euler"},"alpha":{"type":"number","description":"prey growth"},"beta":{"type":"number","description":"predation rate"},"delta":{"type":"number","description":"predator growth from prey"},"gamma":{"type":"number","description":"predator death"},"x0":{"type":"number","description":"initial prey"},"y0":{"type":"number","description":"initial predator"},"dt":{"type":"number"},"steps":{"type":"number"},"folder":{"type":"string"}}}},{"name":"zeq_kalman","description":"ZeqKalman — optimal state estimation (the Kalman filter): track a constant-velocity target from noisy position measurements (GPS/radar/robotics/sensor-fusion/navigation). Reality checks: the error covariance converges to the steady-state Riccati/DARE solution (the seal, → machine precision); empirical RMSE → √P∞ (optimality); innovation variance ≈ HP⁻Hᵀ+R (whiteness); the Joseph-form update keeps the covariance positive-definite (a naive update diverges). Deterministic (seeded). State-estimation / control domain. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"steps":{"type":"number","description":"filter steps (50–20000)"},"dt":{"type":"number"},"sigmaA":{"type":"number","description":"process (acceleration) noise σ"},"sigmaZ":{"type":"number","description":"measurement noise σ"},"seed":{"type":"number"},"v0":{"type":"number","description":"true target velocity"},"folder":{"type":"string"}}}},{"name":"zeq_auto","description":"ZeqAuto — FRICTIONLESS: send a natural-language `query` + `constants` and the right solver is auto-selected, run, and sealed. Covers molecular dynamics, orbits, heat, chaos, waves/EM, fluids, fracture, reaction-diffusion, epidemics, option pricing, Riemann zeros, SAT, lattice gauge, FEA, power flow, semiconductors, optimization, shallow-water, docking. No operators or endpoint to pick. Requires zeq_ak_ key.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"e.g. 'simulate a Lennard-Jones liquid', 'price a call S0=100 K=100 sigma=0.2', 'shallow-water tsunami', 'SIR epidemic R0=3'"},"constants":{"type":"object","description":"solver parameters (S0, K, sigma, preset, steps, beta, gamma, …)"},"solver":{"type":"string","description":"optional: force a specific solver key"},"folder":{"type":"string"}}}},{"name":"zeq_stream","description":"ZeqStream — hosted, ticking solver channels. A channel is a solver wrapped as a live endpoint with its OWN key that a game/sensor/instrument ticks. action=create makes one (returns its key, shown once); action=tick advances ONE Zeqond and seals an envelope + receipt; action=get/list/close manage it. Each seal is one credit-compute; `tickIntervalZeqonds` sets the fair cadence (≈111197 ≈ a 24-hour tick). Requires zeq_ak_ key.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","description":"create | tick | get | list | close | link | secure. link = a keyless signed pull URL (no API key/.env). secure = open a ZeqSSH AES-256-GCM encrypted line (returns a one-time sessionSecret)."},"solver":{"type":"string","description":"create: solver key (lorenz, quant, evolve, heat, …) — or use query"},"query":{"type":"string","description":"create: natural-language, auto-classified like zeq_auto"},"constants":{"type":"object","description":"create: base constants merged into every tick"},"label":{"type":"string"},"autotick":{"type":"boolean","description":"create: server advances it every cadence (spends credits)"},"tickIntervalZeqonds":{"type":"number","description":"create: Zeqonds between seals; ~111197 ≈ 24h"},"ttlSeconds":{"type":"number","description":"link: how long the keyless URL stays valid (default 30d)"},"channel":{"type":"string","description":"tick/get/close/link/secure: the channel id"},"inputs":{"type":"object","description":"tick: values merged over the channel constants"}}}},{"name":"zeq_closedform","description":"ZeqClosedForm — the CLOSED-FORM master-equation solver, the analytic counterpart to the open-form RK4 (/api/solve). Compiles polynomial couplings a+bϕ+dϕ³ into effective (μ²_eff,λ_eff,F_eff) and writes the EXACT branch solution of ϕ̈=μ²_eff·ϕ+λ_eff·ϕ³+F_eff (÷ KO42 tensioner): free / uniform-accel / harmonic / hyperbolic / driven, and Duffing ϕ₀·cn(Ωt,k) via AGM (hardening & softening). KO42 enters first-order in α on the linear branches. Ships an independent RK4 closed-vs-open cross-check. ϕ² / √ / exp shapes are REFUSED by name, never approximated. Give effective coeffs directly (mu2_eff,lambda_eff,F_eff) OR couplings [{a,b,c,d}] / [{samples:[[x,y],...]}]; phi0/phidot0 (else equilibrium launch), t, ko42, alpha. Requires zeq_ak_ key.","inputSchema":{"type":"object","properties":{"mu2_eff":{"type":"number","description":"effective μ² (skip compile)"},"lambda_eff":{"type":"number","description":"effective λ (cubic)"},"F_eff":{"type":"number","description":"effective constant forcing"},"couplings":{"type":"array","description":"couplings to compile: {a,b,c,d} cubics or {samples:[[x,y],...]} (≥4 pts; c≠0 → refused QUADRATIC)","items":{}},"mu2":{"type":"number"},"lambda":{"type":"number"},"Jext":{"type":"number"},"phi42":{"type":"number"},"phi0":{"type":"number"},"phidot0":{"type":"number"},"t":{"type":"number","description":"evaluation time"},"ko42":{"type":"boolean","description":"apply the KO42 tensioner (default true)"},"alpha":{"type":"number","description":"KO42.1 amplitude (default 1e-3)"},"mode":{"type":"string","description":"auto | manual"},"beta":{"type":"number","description":"manual-mode tensioner amplitude"},"folder":{"type":"string"}}}},{"name":"zeq_reactor","description":"ZeqReactor — recursive, sealed, environment-driven compute loops. Where zeq_stream BROADCASTS one sealed envelope, a reactor CLOSES THE LOOP: the sealed output of step n plus a live environment observation become the inputs for step n+1 — xₙ₊₁ = seal(Solver(T(xₙ, uₙ))), each step hash-linked to the previous. action=create builds one from a transition contract (a solver + initialInput + a transition.inputs map whose values are literals or dot-paths over {output, env, step}, e.g. sigmaZ:'env.noise', v0:'output.rmse'); action=step advances one step (a credit-compute, sealed + receipt), optional inline env; action=observe pushes an environment reading and steps immediately if the contract's trigger is 'on-observe'; action=state/trajectory/telemetry/get read it (owner-scoped); action=close stops it. Any of the 26 solvers can drive a reactor. Field-carry makes a stateful digital twin — set transition.inputs.initialState:'output.finalDensity' (e.g. a tumour front that keeps advancing). Each step is reality-gated: a step that fails its ≤0.1% check seals observable-differential and the onUnverified guard can halt the loop, so a blown-up state can never seed the next. Requires zeq_ak_ key (step/observe burn credit, tied to your ZID).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","description":"create | list | step | observe | state | trajectory | telemetry | secure | get | close. secure = open a keyless ZeqSSH encrypted line to consume sealed states (no API key)."},"solver":{"type":"string","description":"create: solver key (kalman, lorenz, tumor, heat, …) or 'auto'"},"initialInput":{"type":"object","description":"create: x₀ base inputs, e.g. { steps: 60, sigmaZ: 0.5 }"},"transition":{"type":"object","description":"create: { inputs: { nextKey: 'env.x' | 'output.y' | literal } }"},"trigger":{"type":"object","description":"create: { mode: 'on-request' | 'on-observe' }"},"guards":{"type":"object","description":"create: { maxSteps, creditBudget, until, onUnverified: 'halt'|'continue' }"},"contract":{"type":"object","description":"create: a full contract object (overrides solver/initialInput/transition/trigger/guards)"},"reactor":{"type":"string","description":"step/observe/state/trajectory/telemetry/get/close: the reactor id"},"env":{"type":"object","description":"step/observe: the environment observation uₙ, e.g. { noise: 0.8 }"},"folder":{"type":"string","description":"create: seal folder for this reactor's steps"}}}}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}}}