Returns the structure hash, every node’s hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of inputs and combine terms, defaults spelled out (effect: "raises", prior: "mean", empty criteria) and meta do not change the hashes; any other edit to a prompt, guidance or target text does.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Moonbounce Decisions API","colors":{"primary":"#4f46e5"},"banner":{"content":"Looking for the Clavata policy and labeling API? Those docs are at [docs.clavata.ai](https://docs.clavata.ai). You are on the docs for the Moonbounce decisions platform.","dismissible":true,"type":"info"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"moonbounce","hasAudioNarration":false,"actualSubdomain":"moonbounce","customDomains":[],"gitSource":{"type":"github","owner":"clavataai","repo":"decisions-platform","deployBranch":"main","contentDirectory":"docs/site","isPrivate":true,"mountPath":"","label":"","_id":"6ae8f7a905e268646b31d443"},"chroma":{"latestBuiltDeploymentHistoryId":"6ae8f896f8277f19c7cc79c9","collectionId":"f756780d-07b6-4802-bb88-e6a9d392f388","liveDeploymentHistoryId":"6ae8f896f8277f19c7cc79c9","schemaVersion":"v3"},"entitlements":{},"buildId":"6ae8f896f8277f19c7cc79c9","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API reference","count":34},{"language":"default","tag":"Endpoints","count":33},{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"review","count":9},{"language":"default","tag":"suggestions","count":6},{"language":"default","tag":"specs","count":5},{"language":"default","tag":"Improve a decision","count":4},{"language":"default","tag":"feedback","count":4},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"engines","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/specs/hash-a-decision-spec","slug":"/api-reference/specs/hash-a-decision-spec","pageMetadata":{"title":"Hash a decision spec","description":"Returns the structure hash, every node's hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of `inputs` and combine `terms`, defaults spelled out (`effect: \"raises\"`, `prior: \"mean\"`, empty `criteria`) and `meta` do not change the hashes; any other edit to a prompt, guidance or target text does.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/specs/hash","href":"/api-reference/specs/hash-a-decision-spec","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Returns the structure hash, every node’s hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of \", _jsx(_components.code, {\n children: \"inputs\"\n }), \" and combine \", _jsx(_components.code, {\n children: \"terms\"\n }), \", defaults spelled out (\", _jsx(_components.code, {\n children: \"effect: \\\"raises\\\"\"\n }), \", \", _jsx(_components.code, {\n children: \"prior: \\\"mean\\\"\"\n }), \", empty \", _jsx(_components.code, {\n children: \"criteria\"\n }), \") and \", _jsx(_components.code, {\n children: \"meta\"\n }), \" do not change the hashes; any other edit to a prompt, guidance or target text does.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Hash a decision spec","description":"Returns the structure hash, every node's hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of `inputs` and combine `terms`, defaults spelled out (`effect: \"raises\"`, `prior: \"mean\"`, empty `criteria`) and `meta` do not change the hashes; any other edit to a prompt, guidance or target text does.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/specs/hash","href":"/api-reference/specs/hash-a-decision-spec","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"hashSpec","tags":["specs"],"security":[],"summary":"Hash a decision spec","description":"Returns the structure hash, every node's hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of `inputs` and combine `terms`, defaults spelled out (`effect: \"raises\"`, `prior: \"mean\"`, empty `criteria`) and `meta` do not change the hashes; any other edit to a prompt, guidance or target text does.","requestBody":"1d890c45-8f3c-4d14-b5c6-9942f5498557","responses":{"200":"26a24179-b516-490d-ae36-1c63be1d8ee0","400":"e7500351-22dc-41fa-af6d-610858ee0d4b"},"method":"post","type":"path","servers":["9e61324b-4cc4-430d-a8d9-fa0221e50db5"],"path":"/v1/specs/hash","baseUrlOptions":["https://api.moonbounce.ai"],"title":"Hash a decision spec","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"spec":{"type":"object","properties":{"format":{"type":"string","enum":["moonbounce.spec/0"],"isRequired":true,"uniqueKey":"spec.format","typeLabel":"enum\u003cstring>"},"nodes":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","required":["type","prompt"],"properties":{"type":{"type":"string","enum":["boolean"],"isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.0.type","typeLabel":"enum\u003cstring>"},"prompt":{"type":"string","minLength":1,"maxLength":4000,"isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.0.prompt","typeLabel":"string"},"guidance":{"type":"string","minLength":1,"maxLength":4000,"uniqueKey":"spec.nodes.additionalProperties.oneOf.0.guidance","typeLabel":"string"},"inputs":{"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","uniqueKey":"spec.nodes.additionalProperties.oneOf.0.inputs.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"Names of the `subject` parts this feature reads (default: all of them); `context` parts are always read. Every name must match a subject part's `name`, or the request is a 400 CONTENT_INVALID.","uniqueKey":"spec.nodes.additionalProperties.oneOf.0.inputs","typeLabel":"string[]"},"criteria":{"type":"object","properties":{"true":{"type":"string","minLength":1,"maxLength":4000,"uniqueKey":"spec.nodes.additionalProperties.oneOf.0.criteria.true","typeLabel":"string"},"false":{"type":"string","minLength":1,"maxLength":4000,"uniqueKey":"spec.nodes.additionalProperties.oneOf.0.criteria.false","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"spec.nodes.additionalProperties.oneOf.0.criteria","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"spec.nodes.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","description":"Scores a node from its terms. Before fitting (and without fixed numbers), mean averages the oriented inputs, so each of n terms weighs 1/n and adding a term dilutes the others; any computes sigmoid(-4 + 8·Σraises - 8·Σlowers): one strong raise is enough, weak raises add up, and lowers cancel raises. Fitted or fixed numbers replace the prior.","required":["type","terms"],"properties":{"type":{"type":"string","enum":["combine"],"isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.1.type","typeLabel":"enum\u003cstring>"},"terms":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.1.terms.items.[INDEX].node","typeLabel":"string"},"option":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","description":"Reserved for choice and scale features, which are not available yet: any value is a 400.","uniqueKey":"spec.nodes.additionalProperties.oneOf.1.terms.items.[INDEX].option","typeLabel":"string"},"effect":{"type":"string","enum":["raises","lowers"],"default":"raises","description":"raises: a yes pushes the score up; lowers: a yes pushes it down. The sign lives here; fixed weights must agree with it.","uniqueKey":"spec.nodes.additionalProperties.oneOf.1.terms.items.[INDEX].effect","typeLabel":"enum\u003cstring>"}},"required":["node"],"additionalProperties":false,"uniqueKey":"spec.nodes.additionalProperties.oneOf.1.terms.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.1.terms","typeLabel":"object[]"},"prior":{"type":"string","enum":["mean","any"],"description":"Default combine weights before fitting. mean averages oriented inputs; any computes sigmoid(-4 + 8·Σraises - 8·Σlowers), a logistic of a signed sum: one strong raise is enough and weak raises add up.","uniqueKey":"spec.nodes.additionalProperties.oneOf.1.prior","typeLabel":"enum\u003cstring>"},"fixed":{"type":"object","properties":{"link":{"type":"string","enum":["identity","logistic"],"description":"identity: the weighted sum plus bias, clipped to 0..1; logistic: the sigmoid of the weighted sum plus bias.","isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.1.fixed.link","typeLabel":"enum\u003cstring>"},"weights":{"type":"object","additionalProperties":{"type":"number","uniqueKey":"spec.nodes.additionalProperties.oneOf.1.fixed.weights.additionalProperties","typeLabel":"number"},"description":"Signed weights per term key (node; options are reserved).","isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.1.fixed.weights","typeLabel":"object"},"bias":{"type":"number","description":"Offset added to the weighted sum before applying the link.","isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.1.fixed.bias","typeLabel":"number"}},"required":["link","weights","bias"],"additionalProperties":false,"description":"Numbers fixed in code, never overridden by fitted weights. Signed weights multiply raw P(yes): raises weights must be >= 0 and lowers weights \u003c= 0.","uniqueKey":"spec.nodes.additionalProperties.oneOf.1.fixed","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"spec.nodes.additionalProperties.oneOf.1","typeLabel":"object"},{"type":"object","required":["type","node"],"properties":{"type":{"type":"string","enum":["calibrate"],"isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.2.type","typeLabel":"enum\u003cstring>"},"node":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"spec.nodes.additionalProperties.oneOf.2.node","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"spec.nodes.additionalProperties.oneOf.2","typeLabel":"object"}],"uniqueKey":"spec.nodes.additionalProperties","typeLabel":"object"},"description":"The spec's named nodes, 1 to 64: boolean features and the aggregators that read them. Every reference (`output`, a combine term's `node`, a calibrate's `node`) names a node in this map, with no cycles.","isRequired":true,"uniqueKey":"spec.nodes","typeLabel":"object"},"output":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"spec.output","typeLabel":"string"},"guidance":{"type":"string","minLength":1,"maxLength":20000,"uniqueKey":"spec.guidance","typeLabel":"string"},"target":{"type":"string","minLength":1,"maxLength":4000,"description":"The yes/no statement the output's score is the probability of. Required when `output` is a combine or calibrate node, optional on a boolean output. Feedback `target` claims need it.","uniqueKey":"spec.target","typeLabel":"string"},"meta":{"type":"object","properties":{"title":{"type":"string","maxLength":200,"uniqueKey":"spec.meta.title","typeLabel":"string"},"description":{"type":"string","maxLength":4000,"uniqueKey":"spec.meta.description","typeLabel":"string"},"owner":{"type":"string","maxLength":200,"uniqueKey":"spec.meta.owner","typeLabel":"string"},"tags":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"spec.meta.tags.items.[INDEX]","typeLabel":"string"},"maxItems":32,"uniqueKey":"spec.meta.tags","typeLabel":"string[]"},"display":{"type":"object","additionalProperties":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":40,"isRequired":true,"uniqueKey":"spec.meta.display.additionalProperties.text","typeLabel":"string"},"help":{"type":"string","maxLength":200,"uniqueKey":"spec.meta.display.additionalProperties.help","typeLabel":"string"}},"required":["text"],"additionalProperties":false,"uniqueKey":"spec.meta.display.additionalProperties","typeLabel":"object"},"uniqueKey":"spec.meta.display","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"spec.meta","typeLabel":"object"}},"required":["format","nodes","output"],"additionalProperties":false,"isRequired":true,"uniqueKey":"spec","typeLabel":"object"}},"required":["spec"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"spec":{"format":"moonbounce.spec/0","nodes":{},"output":"\u003cstring>","guidance":"\u003cstring>","target":"\u003cstring>","meta":{"title":"\u003cstring>","description":"\u003cstring>","owner":"\u003cstring>","tags":["\u003cstring>"],"display":{}}}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"26a24179-b516-490d-ae36-1c63be1d8ee0":{"description":"The spec's hashes","content":{"application/json":{"schema":{"type":"object","properties":{"structure":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","isRequired":true,"uniqueKey":"structure","typeLabel":"string"},"nodes":{"type":"object","additionalProperties":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","uniqueKey":"nodes.additionalProperties","typeLabel":"string"},"description":"Each of the spec's nodes, by name, mapped to that node's hash (not its definition).","isRequired":true,"uniqueKey":"nodes","typeLabel":"object"},"default_weights":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","isRequired":true,"uniqueKey":"default_weights","typeLabel":"string"}},"required":["structure","nodes","default_weights"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"structure":"\u003cstring>","nodes":{},"default_weights":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"e7500351-22dc-41fa-af6d-610858ee0d4b":{"description":"Invalid request: `param` names the field at fault when one applies","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission_denied","not_found","conflict","rate_limited","engine_failed","unavailable","internal"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"For people; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Set where a caller can act on it, one of the reasons in the ErrorReason schema. New reasons may be added: treat an unknown one by the status and `type`.","uniqueKey":"error.reason","typeLabel":"string"},"param":{"type":"string","description":"The request field at fault, as a dotted path (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{},"servers":{"9e61324b-4cc4-430d-a8d9-fa0221e50db5":{"url":"https://api.moonbounce.ai","description":"Production"}}},"originalFileLocation":"openapi.json"},"subdomain":"moonbounce","siteName":"Moonbounce Decisions API","title":"Hash a decision spec - Moonbounce Decisions API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T20:55:03.814Z","originalFileLocation":"api-reference/specs/hash-a-decision-spec.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns the structure hash, every node\u0026#x27;s hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of inputs and combine terms, defaults spelled out (effect: \u0026quot;raises\u0026quot;, prior: \u0026quot;mean\u0026quot;, empty criteria) and meta do not change the hashes; any other edit to a prompt, guidance or target text does.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Hash a decision spec - Moonbounce Decisions API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns the structure hash, every node\u0026#x27;s hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of inputs and combine terms, defaults spelled out (effect: \u0026quot;raises\u0026quot;, prior: \u0026quot;mean\u0026quot;, empty criteria) and meta do not change the hashes; any other edit to a prompt, guidance or target text does.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Moonbounce Decisions API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://moonbounce.mintlify.app/_mintlify/api/og/v2?division=specs\u0026amp;title=Hash+a+decision+spec\u0026amp;description=Returns+the+structure+hash%2C+every+node%27s+hash+and+the+default-weights+hash+of+a+spec%2C+without+registering+it+or+touching+data.+Public%3A+needs+no+API+key.+Key+ord\u0026amp;theme=6d67371419b6cc4f4d7d2b27\u0026amp;signature=7f088efe72fbbbb2432385fda83b524df49522719d5e85dfe6191eb7301da9f6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Hash a decision spec - Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns the structure hash, every node\u0026#x27;s hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of inputs and combine terms, defaults spelled out (effect: \u0026quot;raises\u0026quot;, prior: \u0026quot;mean\u0026quot;, empty criteria) and meta do not change the hashes; any other edit to a prompt, guidance or target text does.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://moonbounce.mintlify.app/_mintlify/api/og/v2?division=specs\u0026amp;title=Hash+a+decision+spec\u0026amp;description=Returns+the+structure+hash%2C+every+node%27s+hash+and+the+default-weights+hash+of+a+spec%2C+without+registering+it+or+touching+data.+Public%3A+needs+no+API+key.+Key+ord\u0026amp;theme=6d67371419b6cc4f4d7d2b27\u0026amp;signature=7f088efe72fbbbb2432385fda83b524df49522719d5e85dfe6191eb7301da9f6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/specs/hash-a-decision-spec.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://moonbounce.mintlify.app/#organization\",\"name\":\"Moonbounce Decisions API\",\"url\":\"https://moonbounce.mintlify.app\"},{\"@type\":\"WebSite\",\"@id\":\"https://moonbounce.mintlify.app#website\",\"name\":\"Moonbounce Decisions API\",\"url\":\"https://moonbounce.mintlify.app\",\"publisher\":{\"@id\":\"https://moonbounce.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec#webpage\",\"url\":\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec\",\"name\":\"Hash a decision spec\",\"description\":\"Returns the structure hash, every node's hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of inputs and combine terms, defaults spelled out (effect: \\\"raises\\\", prior: \\\"mean\\\", empty criteria) and meta do not change the hashes; any other edit to a prompt, guidance or target text does.\",\"dateModified\":\"2026-11-02T20:55:03.814Z\",\"isPartOf\":{\"@id\":\"https://moonbounce.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://moonbounce.mintlify.app/api-reference/health/health-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hash a decision spec\",\"item\":\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec#apireference\",\"headline\":\"Hash a decision spec\",\"name\":\"Hash a decision spec\",\"description\":\"Returns the structure hash, every node's hash and the default-weights hash of a spec, without registering it or touching data. Public: needs no API key. Key order, whitespace around a string, Unicode normalization (NFC), the order of inputs and combine terms, defaults spelled out (effect: \\\"raises\\\", prior: \\\"mean\\\", empty criteria) and meta do not change the hashes; any other edit to a prompt, guidance or target text does.\",\"url\":\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec\",\"mainEntityOfPage\":{\"@id\":\"https://moonbounce.mintlify.app/api-reference/specs/hash-a-decision-spec#webpage\"},\"dateModified\":\"2026-11-02T20:55:03.814Z\",\"publisher\":{\"@id\":\"https://moonbounce.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://moonbounce.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Moonbounce Decisions API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Moonbounce Decisions API","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"API reference overview","href":"/reference/overview"}]},{"group":"Endpoints","pages":[{"group":"health","pages":[{"title":"Health check","description":"Public, no customer data. Reports the deployed version (the deploy tag, else the Worker version id) and whether a Postgres round trip through the Worker's own Hyperdrive binding succeeded within about 2 seconds and showed the app role holding the write privileges the API needs. 503 with `db: unavailable` when it did not; the cause is logged, never returned.","deprecated":null,"version":null,"openapi":"/openapi.json get /health","href":"/api-reference/health/health-check"}]},{"group":"specs","pages":[{"title":"Hash a decision spec","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/specs/hash","href":"/api-reference/specs/hash-a-decision-spec"},{"title":"List registered structures","description":"Reads only. Lists a decision's registered structures, newest first, without spec bodies; getStructure returns the spec. The decision must have a binding in the key's environment. Its structure registry is shared across the organization's environments. Pass next_cursor as cursor while has_more is true.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/structures","href":"/api-reference/specs/list-registered-structures"},{"title":"Register a spec structure","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/structures","href":"/api-reference/specs/register-a-spec-structure"},{"title":"Get a registered structure and its spec","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/structures/{structure}","href":"/api-reference/specs/get-a-registered-structure-and-its-spec"},{"title":"List decisions in this environment","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions","href":"/api-reference/specs/list-decisions-in-this-environment"}]},{"group":"engines","pages":[{"title":"List the engines a decision can run on","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/engines","href":"/api-reference/engines/list-the-engines-a-decision-can-run-on"},{"title":"Get the engine a decision runs on","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/binding","href":"/api-reference/engines/get-the-engine-a-decision-runs-on"},{"title":"Choose the engine a decision runs on","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/binding/revisions","href":"/api-reference/engines/choose-the-engine-a-decision-runs-on"}]},{"group":"evaluate","pages":[{"title":"Evaluate an item against a decision","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/evaluate","href":"/api-reference/evaluate/evaluate-an-item-against-a-decision"},{"title":"Get a past evaluation","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/evaluations/{evaluation_id}","href":"/api-reference/evaluate/get-a-past-evaluation"},{"title":"List a decision's evaluations","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/evaluations","href":"/api-reference/evaluate/list-a-decisions-evaluations"}]},{"group":"feedback","pages":[{"title":"Submit feedback on an evaluation or item","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/feedback","href":"/api-reference/feedback/submit-feedback-on-an-evaluation-or-item"},{"title":"Get a feedback submission as stored","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/feedback/{feedback_id}","href":"/api-reference/feedback/get-a-feedback-submission-as-stored"},{"title":"Export a decision's feedback as training data","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/feedback","href":"/api-reference/feedback/export-a-decisions-feedback-as-training-data"},{"title":"Seed a decision with labeled examples","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/seeds","href":"/api-reference/feedback/seed-a-decision-with-labeled-examples"}]},{"group":"review","pages":[{"title":"List review items","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/review/items","href":"/api-reference/review/list-review-items"},{"title":"Get a review item","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/review/items/{item_id}","href":"/api-reference/review/get-a-review-item"},{"title":"Get the structure and weights a review item was decided with","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/review/items/{item_id}/configuration","href":"/api-reference/review/get-the-structure-and-weights-a-review-item-was-decided-with"},{"title":"Mark a review item as shown","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/shown","href":"/api-reference/review/mark-a-review-item-as-shown"},{"title":"Submit a review","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/submit","href":"/api-reference/review/submit-a-review"},{"title":"Withdraw a review answer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/withdraw","href":"/api-reference/review/withdraw-a-review-answer"},{"title":"Change your own earlier review answer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/change","href":"/api-reference/review/change-your-own-earlier-review-answer"},{"title":"Skip a review item","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/skip","href":"/api-reference/review/skip-a-review-item"},{"title":"Add the reason for a blind disagreement","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/reason","href":"/api-reference/review/add-the-reason-for-a-blind-disagreement"}]},{"group":"suggestions","pages":[{"title":"List suggestions for a decision","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/suggestions","href":"/api-reference/suggestions/list-suggestions-for-a-decision"},{"title":"Generate a suggestion on demand","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/suggestions","href":"/api-reference/suggestions/generate-a-suggestion-on-demand"},{"title":"Get a suggestion","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/suggestions/{suggestion_id}","href":"/api-reference/suggestions/get-a-suggestion"},{"title":"Mark a suggestion pulled or rejected","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/suggestions/{suggestion_id}/status","href":"/api-reference/suggestions/mark-a-suggestion-pulled-or-rejected"},{"title":"Preview a spec change against past feedback","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/previews","href":"/api-reference/suggestions/preview-a-spec-change-against-past-feedback"},{"title":"Get the improvement loop's status","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/loop","href":"/api-reference/suggestions/get-the-improvement-loops-status"}]},{"group":"usage","pages":[{"title":"Engine and model cost for a decision, per evaluation and in total","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/usage","href":"/api-reference/usage/engine-and-model-cost-for-a-decision-per-evaluation-and-in-total"}]},{"group":"keys","pages":[{"title":"Identify the calling key or sign-in","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/whoami","href":"/api-reference/keys/identify-the-calling-key-or-sign-in"}]}]}]}]},"basePath":"","title":"Hash a decision spec - Moonbounce Decisions API","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-DHaG7hr_.js","dist-DKZWslLH.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-BIWXJmsZ.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","AssistantPageLink-UDqbR6xh.js"]}