{"openapi":"3.1.0","info":{"title":"empryo.com public API","version":"1.0.0","description":"The read-only public surface of empryo.com — release metadata for the Empryo AI coding agent, plus the machine-readable content mirrors (llms.txt and per-page markdown). Empryo itself is a local tool: the primary programmatic interface is the CLI (`empryo --headless \"<prompt>\" --json`), documented at https://empryo.com/docs/headless. No authentication; all endpoints are public GETs. Please cache: release data changes only on releases.","contact":{"name":"Empryo","url":"https://empryo.com/contact"}},"servers":[{"url":"https://empryo.com"}],"paths":{"/api/health":{"get":{"operationId":"getHealth","summary":"Service health check","description":"Returns ok:true when the site and its edge worker are serving. Useful as a reachability probe before scripting against the other endpoints.","responses":{"200":{"description":"Service is healthy.","content":{"application/json":{"schema":{"type":"object","required":["ok","service","time"],"properties":{"ok":{"type":"boolean","description":"Always true when serving."},"service":{"type":"string","description":"Service identifier.","examples":["empryo.com"]},"time":{"type":"string","format":"date-time","description":"Server time, ISO 8601."}}}}}}}}},"/api/version":{"get":{"operationId":"getLatestRelease","summary":"Latest Empryo release","description":"The current release manifest: version string and the artifact filename for every platform/surface. Combine with the download host https://dl.empryo.com/v{version}/{file} to build a direct download URL. Identical to /latest.json.","responses":{"200":{"description":"The current release manifest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseManifest"}}}},"503":{"description":"Manifest temporarily unreadable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/releases":{"get":{"operationId":"listReleases","summary":"Every Empryo release","description":"Full release history, newest first: version, date, and headline for each release. Human-readable notes live at https://empryo.com/changelog/{version}.","responses":{"200":{"description":"Release history.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseList"}}}},"503":{"description":"Data temporarily unreadable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/docs":{"get":{"operationId":"listDocs","summary":"Documentation index","description":"Every documentation page: slug, title, description, canonical URL and its raw-markdown mirror URL. Use it to pick which page to fetch instead of crawling.","responses":{"200":{"description":"Docs index.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocList"}}}},"503":{"description":"Data temporarily unreadable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/blog":{"get":{"operationId":"listBlogPosts","summary":"Blog index","description":"Every blog post, newest first: slug, title, description, date, author, canonical URL and its raw-markdown mirror URL.","responses":{"200":{"description":"Blog index.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostList"}}}},"503":{"description":"Data temporarily unreadable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/glossary":{"get":{"operationId":"getGlossary","summary":"Coding-agent glossary","description":"Definitions of coding-agent and code-intelligence terms (AST editing, dependency graph, LSP, …) with the canonical page for each term.","responses":{"200":{"description":"Glossary terms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlossaryList"}}}},"503":{"description":"Data temporarily unreadable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/latest.json":{"get":{"operationId":"getReleaseManifest","summary":"Latest release manifest (static)","description":"Static twin of /api/version, refreshed on every release. Includes the version and per-platform artifact filenames.","responses":{"200":{"description":"The current release manifest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseManifest"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsIndex","summary":"Agent-readable site index (llmstxt.org format)","description":"A curated markdown index of every page on empryo.com, with one-line descriptions — the recommended entry point for AI agents. Also served for `GET /` with `Accept: text/markdown`.","responses":{"200":{"description":"Markdown index.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"operationId":"getLlmsFullCorpus","summary":"Full docs + blog corpus in one fetch","description":"Every docs page and blog post inlined into a single markdown file, each section carrying its canonical URL.","responses":{"200":{"description":"Markdown corpus.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/docs/{slug}.md":{"get":{"operationId":"getDocMarkdown","summary":"Markdown mirror of a docs page","description":"Raw-markdown mirror of https://empryo.com/docs/{slug}. Every docs URL serves markdown at the same path + `.md`, or via `Accept: text/markdown` on the HTML path.","parameters":[{"name":"slug","in":"path","required":true,"description":"Docs page slug, e.g. `quickstart` or `tools/ast-edit`. The full list is in /llms.txt.","schema":{"type":"string","examples":["quickstart","installation","tools/ast-edit"]}}],"responses":{"200":{"description":"The page as markdown.","content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"description":"No such docs page.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/blog/{slug}.md":{"get":{"operationId":"getBlogPostMarkdown","summary":"Markdown mirror of a blog post","description":"Raw-markdown mirror of https://empryo.com/blog/{slug}. The post list is in /llms.txt.","parameters":[{"name":"slug","in":"path","required":true,"description":"Blog post slug, e.g. `the-genome`.","schema":{"type":"string"}}],"responses":{"200":{"description":"The post as markdown.","content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"description":"No such post.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/api/docs/sections":{"get":{"summary":"Section-level docs index","description":"Every heading-delimited section of every docs page and blog post: page, headingPath, anchor, summary, keywords, url, markdownUrl (the .md mirror + #anchor) and a token estimate. Fetch one exact section instead of a whole page.","operationId":"docsSections","responses":{"200":{"description":"Sections","content":{"application/json":{"schema":{"type":"object","properties":{"generatedAt":{"type":"string"},"count":{"type":"integer"},"sections":{"type":"array","items":{"type":"object","properties":{"page":{"type":"string"},"pageTitle":{"type":"string"},"headingPath":{"type":"array","items":{"type":"string"}},"anchor":{"type":"string"},"url":{"type":"string"},"markdownUrl":{"type":"string"},"summary":{"type":"string"},"keywords":{"type":"array","items":{"type":"string"}},"tokens":{"type":"integer"}}}}}}}}}}}},"/api/docs/search":{"get":{"summary":"Search docs sections","description":"BM25-ranked SECTIONS (not pages) for a query. scope narrows the corpus: cells (Cells & Morphs docs + post), docs, blog.","operationId":"docsSearch","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string","enum":["cells","morph","docs","blog"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25,"default":10}}],"responses":{"200":{"description":"Ranked sections","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"scope":{"type":"string","nullable":true},"count":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"score":{"type":"number"},"page":{"type":"string"},"pageTitle":{"type":"string"},"headingPath":{"type":"array","items":{"type":"string"}},"url":{"type":"string"},"markdownUrl":{"type":"string"},"summary":{"type":"string"},"tokens":{"type":"integer"}}}}}}}}},"400":{"description":"Missing q"}}}},"/morphs.schema.json":{"get":{"summary":"Cell JSON Schema","description":"JSON Schema (draft 2020-12) for a Cell file (.empryo/morphs/<id>.json) — the exact keys, types, enums and limits the desktop runtime accepts. Generated from the runtime's validator.","operationId":"cellSchema","responses":{"200":{"description":"JSON Schema","content":{"application/schema+json":{}}}}}},"/docs/tools/morphs/llms.txt":{"get":{"summary":"Cells task map for agents","description":"llms.txt scoped to Cells & Morphs, grouped by task (create, surfaces, blocks, pulses, triggers, agent layer, credentials, limits); each entry links one section as markdown (.md#anchor).","operationId":"cellsLlmsTxt","responses":{"200":{"description":"Markdown","content":{"text/markdown":{}}}}}},"/api/manifest":{"get":{"summary":"Agent discovery manifest","responses":{"200":{"description":"Agent discovery manifest","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"Source data temporarily unavailable"}}}},"/api/morphs":{"get":{"summary":"Committed public Cell catalog","responses":{"200":{"description":"Committed public Cell catalog","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"Source data temporarily unavailable"}}}},"/api/docs/section":{"get":{"summary":"Retrieve one exact documentation or blog section","responses":{"200":{"description":"Retrieve one exact documentation or blog section","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing selector"},"404":{"description":"No exact section"},"503":{"description":"Source data temporarily unavailable"}},"parameters":[{"name":"page","in":"query","required":true,"allowEmptyValue":false,"schema":{"type":"string"},"description":"Exact value from /api/docs/sections"},{"name":"anchor","in":"query","required":true,"allowEmptyValue":true,"schema":{"type":"string"},"description":"Exact value from /api/docs/sections"}]}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"description":"Structured error returned by every /api/* endpoint — never HTML.","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code.","examples":["not_found","method_not_allowed"]},"message":{"type":"string","description":"Human-readable explanation."},"hint":{"type":"string","description":"Where to look next."}}}}},"ReleaseList":{"type":"object","required":["latest","count","releases"],"description":"Release history, newest first.","properties":{"latest":{"type":"string","description":"The current version.","examples":["3.6.0-beta"]},"count":{"type":"integer","description":"Number of releases in the list."},"releases":{"type":"array","items":{"type":"object","required":["version"],"properties":{"version":{"type":"string","examples":["3.6.0-beta"]},"date":{"type":["string","null"],"description":"Release date, YYYY-MM-DD."},"headline":{"type":"string","description":"One-line summary of the release."},"summary":{"type":"string","description":"Short prose summary of the release."}}}}}},"DocList":{"type":"object","required":["docs"],"properties":{"docs":{"type":"array","items":{"type":"object","required":["slug","title","url","markdownUrl"],"properties":{"slug":{"type":"string","examples":["quickstart","tools/ast-edit"]},"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri","description":"Canonical HTML page."},"markdownUrl":{"type":"string","format":"uri","description":"Raw-markdown mirror of the same page."}}}}}},"BlogPostList":{"type":"object","required":["posts"],"properties":{"posts":{"type":"array","items":{"type":"object","required":["slug","title","url","markdownUrl"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"date":{"type":"string","description":"Publication date, YYYY-MM-DD."},"author":{"type":"string"},"url":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}}}}},"GlossaryList":{"type":"object","required":["terms"],"properties":{"terms":{"type":"array","items":{"type":"object","required":["slug","term","definition","url"],"properties":{"slug":{"type":"string"},"term":{"type":"string"},"definition":{"type":"string"},"url":{"type":"string","format":"uri"}}}}}},"ReleaseManifest":{"type":"object","required":["version","files"],"description":"The current Empryo release: version + artifact filenames. Download URL pattern: https://dl.empryo.com/v{version}/{file}; checksums at https://dl.empryo.com/v{version}/SHA256SUMS.txt.","properties":{"version":{"type":"string","description":"Release version.","examples":["3.6.0-beta"]},"files":{"type":"object","description":"Map of platform/surface key → artifact filename (e.g. darwin-arm64, linux-x64, windows-zip, desktop-mac-arm64).","additionalProperties":{"type":"string"}}}}}}}