[{"data":1,"prerenderedAt":487},["ShallowReactive",2],{"navigation_docs":3,"-concepts-content-hash":194,"-concepts-content-hash-surround":482},[4,22,82,124,146,168,190],{"title":5,"path":6,"stem":7,"children":8},"Getting started","/getting-started","1.getting-started/0.index",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"MCP quickstart","/getting-started/mcp-quickstart","1.getting-started/1.mcp-quickstart",{"title":15,"path":16,"stem":17},"REST quickstart","/getting-started/rest-quickstart","1.getting-started/2.rest-quickstart",{"title":19,"path":20,"stem":21},"UI quickstart","/getting-started/ui-quickstart","1.getting-started/3.ui-quickstart",{"title":23,"path":24,"stem":25,"children":26},"MCP server","/mcp","2.mcp/0.index",[27,28,32,36,40],{"title":23,"path":24,"stem":25},{"title":29,"path":30,"stem":31},"Connecting","/mcp/connection","2.mcp/1.connection",{"title":33,"path":34,"stem":35},"Envelope","/mcp/envelope","2.mcp/2.envelope",{"title":37,"path":38,"stem":39},"Resources","/mcp/resources","2.mcp/3.resources",{"title":41,"path":42,"stem":43,"children":44},"Tools","/mcp/tools","2.mcp/4.tools/0.index",[45,46,50,54,58,62,66,70,74,78],{"title":41,"path":42,"stem":43},{"title":47,"path":48,"stem":49},"list_schema_versions","/mcp/tools/list-schema-versions","2.mcp/4.tools/1.list-schema-versions",{"title":51,"path":52,"stem":53},"get_schema","/mcp/tools/get-schema","2.mcp/4.tools/2.get-schema",{"title":55,"path":56,"stem":57},"list_categories","/mcp/tools/list-categories","2.mcp/4.tools/3.list-categories",{"title":59,"path":60,"stem":61},"list_elements","/mcp/tools/list-elements","2.mcp/4.tools/4.list-elements",{"title":63,"path":64,"stem":65},"get_element","/mcp/tools/get-element","2.mcp/4.tools/5.get-element",{"title":67,"path":68,"stem":69},"get_elements","/mcp/tools/get-elements","2.mcp/4.tools/6.get-elements",{"title":71,"path":72,"stem":73},"validate_datachain","/mcp/tools/validate-datachain","2.mcp/4.tools/7.validate-datachain",{"title":75,"path":76,"stem":77},"render_datachain","/mcp/tools/render-datachain","2.mcp/4.tools/8.render-datachain",{"title":79,"path":80,"stem":81},"get_icon_url","/mcp/tools/get-icon-url","2.mcp/4.tools/9.get-icon-url",{"title":83,"path":84,"stem":85,"children":86},"REST API (v2)","/rest","3.rest/0.index",[87,88,92,96,100,104,108,112,116,120],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91},"GET /schemas","/rest/schemas","3.rest/1.schemas",{"title":93,"path":94,"stem":95},"GET /schemas/:version/manifest","/rest/manifest","3.rest/2.manifest",{"title":97,"path":98,"stem":99},"GET /schemas/:version/categories","/rest/categories","3.rest/3.categories",{"title":101,"path":102,"stem":103},"GET /schemas/:version/elements","/rest/elements-list","3.rest/4.elements-list",{"title":105,"path":106,"stem":107},"GET /schemas/:version/elements/:element_id","/rest/element-detail","3.rest/5.element-detail",{"title":109,"path":110,"stem":111},"POST /schemas/:version/validate","/rest/validate","3.rest/6.validate",{"title":113,"path":114,"stem":115},"Icon routes","/rest/icons","3.rest/7.icons",{"title":117,"path":118,"stem":119},"Pagination & fields","/rest/pagination-and-fields","3.rest/8.pagination-and-fields",{"title":121,"path":122,"stem":123},"Errors","/rest/errors","3.rest/9.errors",{"title":125,"path":126,"stem":127,"children":128},"Icon composition","/icons","4.icons/0.index",[129,130,134,138,142],{"title":125,"path":126,"stem":127},{"title":131,"path":132,"stem":133},"Shapes","/icons/shapes","4.icons/1.shapes",{"title":135,"path":136,"stem":137},"Symbols","/icons/symbols","4.icons/2.symbols",{"title":139,"path":140,"stem":141},"Composed variants","/icons/composed-variants","4.icons/3.composed-variants",{"title":143,"path":144,"stem":145},"URLs","/icons/urls","4.icons/4.urls",{"title":147,"path":148,"stem":149,"children":150},"@dtpr/ui","/ui","5.ui/0.index",[151,152,156,160,164],{"title":147,"path":148,"stem":149},{"title":153,"path":154,"stem":155},"@dtpr/ui/core","/ui/core","5.ui/1.core",{"title":157,"path":158,"stem":159},"@dtpr/ui/vue","/ui/vue","5.ui/2.vue",{"title":161,"path":162,"stem":163},"@dtpr/ui/html","/ui/html","5.ui/3.html",{"title":165,"path":166,"stem":167},"Theming","/ui/theming","5.ui/4.theming",{"title":169,"path":170,"stem":171,"children":172},"Concepts","/concepts","6.concepts/0.index",[173,174,178,182,186],{"title":169,"path":170,"stem":171},{"title":175,"path":176,"stem":177},"Datachains","/concepts/datachains","6.concepts/1.datachains",{"title":179,"path":180,"stem":181},"Elements & categories","/concepts/elements-categories","6.concepts/2.elements-categories",{"title":183,"path":184,"stem":185},"Versions & releases","/concepts/versions-and-releases","6.concepts/3.versions-and-releases",{"title":187,"path":188,"stem":189},"Content hash","/concepts/content-hash","6.concepts/4.content-hash",{"title":191,"path":192,"stem":193},"Changelog","/changelog","7.changelog",{"id":195,"title":187,"body":196,"description":475,"extension":476,"links":477,"meta":478,"navigation":479,"path":188,"seo":480,"stem":189,"__hash__":481},"docs/6.concepts/4.content-hash.md",{"type":197,"value":198,"toc":467},"minimark",[199,203,217,222,226,229,233,239,268,278,400,404,407,415,421,425,432,436,439,443,463],[200,201,187],"h1",{"id":202},"content-hash",[204,205,207,208,212,213,216],"callout",{"type":206},"info","Every version-scoped response carries a ",[209,210,211],"code",{},"DTPR-Content-Hash"," header and — for JSON responses — the same value in ",[209,214,215],{},"meta.content_hash",". Use it to detect drift.",[218,219,221],"h2",{"id":220},"what-it-is","What it is",[223,224,225],"p",{},"A hex digest computed over the frozen schema content for a version. Same inputs → same hash. Different inputs → different hash. The server never emits a partial or best-effort hash.",[223,227,228],{},"Stable versions have a content hash that never changes once promoted. Beta versions emit the current hash on each read; the hash only changes when an author rebuilds the schema.",[218,230,232],{"id":231},"where-it-appears","Where it appears",[223,234,235],{},[236,237,238],"strong",{},"REST, version-scoped endpoints:",[240,241,246],"pre",{"className":242,"code":243,"language":244,"meta":245,"style":245},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","HTTP/1.1 200 OK\nContent-Type: application/json\nDTPR-Content-Hash: sha256-f8a2…\n","http","",[209,247,248,256,262],{"__ignoreMap":245},[249,250,253],"span",{"class":251,"line":252},"line",1,[249,254,255],{},"HTTP/1.1 200 OK\n",[249,257,259],{"class":251,"line":258},2,[249,260,261],{},"Content-Type: application/json\n",[249,263,265],{"class":251,"line":264},3,[249,266,267],{},"DTPR-Content-Hash: sha256-f8a2…\n",[223,269,270,273,274,277],{},[236,271,272],{},"MCP envelopes"," — inside ",[209,275,276],{},"meta",":",[240,279,283],{"className":280,"code":281,"language":282,"meta":245,"style":245},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"ok\": true,\n  \"data\": { \"...\": \"...\" },\n  \"meta\": { \"content_hash\": \"sha256-f8a2…\", \"version\": \"ai@2026-04-16-beta\" }\n}\n","json",[209,284,285,291,308,343,394],{"__ignoreMap":245},[249,286,287],{"class":251,"line":252},[249,288,290],{"class":289},"sMK4o","{\n",[249,292,293,296,300,303,305],{"class":251,"line":258},[249,294,295],{"class":289},"  \"",[249,297,299],{"class":298},"spNyl","ok",[249,301,302],{"class":289},"\"",[249,304,277],{"class":289},[249,306,307],{"class":289}," true,\n",[249,309,310,312,315,317,319,322,325,329,331,333,335,338,340],{"class":251,"line":264},[249,311,295],{"class":289},[249,313,314],{"class":298},"data",[249,316,302],{"class":289},[249,318,277],{"class":289},[249,320,321],{"class":289}," {",[249,323,324],{"class":289}," \"",[249,326,328],{"class":327},"sBMFI","...",[249,330,302],{"class":289},[249,332,277],{"class":289},[249,334,324],{"class":289},[249,336,328],{"class":337},"sfazB",[249,339,302],{"class":289},[249,341,342],{"class":289}," },\n",[249,344,346,348,350,352,354,356,358,361,363,365,367,370,372,375,377,380,382,384,386,389,391],{"class":251,"line":345},4,[249,347,295],{"class":289},[249,349,276],{"class":298},[249,351,302],{"class":289},[249,353,277],{"class":289},[249,355,321],{"class":289},[249,357,324],{"class":289},[249,359,360],{"class":327},"content_hash",[249,362,302],{"class":289},[249,364,277],{"class":289},[249,366,324],{"class":289},[249,368,369],{"class":337},"sha256-f8a2…",[249,371,302],{"class":289},[249,373,374],{"class":289},",",[249,376,324],{"class":289},[249,378,379],{"class":327},"version",[249,381,302],{"class":289},[249,383,277],{"class":289},[249,385,324],{"class":289},[249,387,388],{"class":337},"ai@2026-04-16-beta",[249,390,302],{"class":289},[249,392,393],{"class":289}," }\n",[249,395,397],{"class":251,"line":396},5,[249,398,399],{"class":289},"}\n",[218,401,403],{"id":402},"why-agents-care","Why agents care",[223,405,406],{},"An AI agent that caches DTPR content (element titles, category structure, rendered HTML) can use the content hash as a cache key:",[240,408,413],{"className":409,"code":411,"language":412},[410],"language-text","cache_key = content_hash\n","text",[209,414,411],{"__ignoreMap":245},[223,416,417,418,420],{},"When the next response carries a different ",[209,419,360],{},", the cache entry is stale — invalidate and re-fetch. No polling, no version number parsing, no \"every 5 minutes check if the schema moved.\"",[218,422,424],{"id":423},"not-a-crypto-signature","Not a crypto signature",[223,426,427,428,431],{},"The hash is a fingerprint, not a signature. It detects drift; it does not authenticate origin. If you need authenticated content, rely on TLS to ",[209,429,430],{},"api.dtpr.io",".",[218,433,435],{"id":434},"beta-churn","Beta churn",[223,437,438],{},"A beta version's content hash changes on every rebuild. If your client pins on the hash against a beta version, expect cache turnover during active authoring. Pinning on a stable version's hash gives you an immutable handle.",[218,440,442],{"id":441},"see-also","See also",[444,445,446,452,457],"ul",{},[447,448,449],"li",{},[450,451,183],"a",{"href":184},[447,453,454],{},[450,455,456],{"href":34},"MCP envelope",[447,458,459,462],{},[450,460,461],{"href":84},"REST conventions"," — response headers.",[464,465,466],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":245,"searchDepth":258,"depth":258,"links":468},[469,470,471,472,473,474],{"id":220,"depth":258,"text":221},{"id":231,"depth":258,"text":232},{"id":402,"depth":258,"text":403},{"id":423,"depth":258,"text":424},{"id":434,"depth":258,"text":435},{"id":441,"depth":258,"text":442},"How agents detect DTPR schema content drift without polling.","md",null,{},true,{"title":187,"description":475},"4ELYL7ta0hdDHzJt77CPsdi9maCSBSa4BpRda-_xDFw",[483,485],{"title":183,"path":184,"stem":185,"description":484,"children":-1},"Canonical version ids, aliases, status, and what \"release\" means for DTPR.",{"title":191,"path":192,"stem":193,"description":486,"children":-1},"What landed when — MCP, REST v2, icons, @dtpr/ui, and this microsite.",1776525923597]