Takes the decision file ({decision_id, structure, objective?}) and registers its structure as the decision’s next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, created is true and version.number is 1. Evaluations can then name the version by structure_hash. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. objective: absent leaves the stored objective as it is; null clears it; an objective is stored as a new revision in the key’s environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective’s outcomes are checked against the body’s structure, and one that structure can’t produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while getObjective and setObjective report unknown_outcomes against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; getVersion reads it back. An Idempotency-Key covers the body as sent.
An API key, sent as Authorization: Bearer <key>. Each operation lists the scope its key needs: decisions:evaluate (evaluate and read evaluations), decisions:feedback (your app's feedback) or decisions:develop (everything else, including owner feedback and the review queue). An operation listing no scope takes any scoped key. A key with no scope, or without the operation's, gets 403 INSUFFICIENT_SCOPE.
Makes a retry safe. For 24 hours, the same key with the same request returns the first stored result (with Idempotent-Replayed: true); the same key with a different request is a 422 IDEMPOTENCY_KEY_REUSED. Keys are scoped to the organization and environment across every operation, so use a fresh key per request. A request that failed before its result was stored runs again when retried with its key.
Required string length: 1 - 255
Pattern: ^[\x20-\x7e]+$
Body
application/json
The decision file your repository keeps (moonbounce/<decision_id>.json).
A name you choose for this decision, such as refund-exception: a lowercase letter, then up to 127 of a-z 0-9 _ . -. Unique in your organization and shared by its test and production keys. The first registration or evaluation under a new one creates the decision.
What the decision optimizes for, stored for the key's environment. Absent: the stored objective is left as it is. null: cleared, back to balanced losses. An objective: stored as a new revision when it differs from the current one. Its outcomes must be ones this body's structure can produce (400 otherwise), even when that structure is an older version; getObjective checks the stored one against the newest version. Never part of the structure hash.
A name you choose for this decision, such as refund-exception: a lowercase letter, then up to 127 of a-z 0-9 _ . -. Unique in your organization and shared by its test and production keys. The first registration or evaluation under a new one creates the decision.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Moonbounce Decisions API","colors":{"primary":"#1D5AB5","light":"#74A8F0","dark":"#478EF0"},"logo":{"light":"https://mintcdn.com/moonbounce/mWuXGW-nUJSEdABp/logo/lockup-light.svg?fit=max\u0026auto=format\u0026n=mWuXGW-nUJSEdABp\u0026q=85\u0026s=367a5dedb5799a16c5737d136af68dc5","dark":"https://mintcdn.com/moonbounce/mWuXGW-nUJSEdABp/logo/lockup-dark.svg?fit=max\u0026auto=format\u0026n=mWuXGW-nUJSEdABp\u0026q=85\u0026s=3b3e891bc9f1e5b26bee272f878ecd4f","href":"https://moonbounce.ai"},"favicon":{"light":"https://mintcdn.com/moonbounce/XgvwJtU0Z2TC5k2H/logo/symbol-light.svg?fit=max\u0026auto=format\u0026n=XgvwJtU0Z2TC5k2H\u0026q=85\u0026s=cd361cb434cc5cabaa2240471ebc780a","dark":"https://mintcdn.com/moonbounce/XgvwJtU0Z2TC5k2H/logo/symbol-dark.svg?fit=max\u0026auto=format\u0026n=XgvwJtU0Z2TC5k2H\u0026q=85\u0026s=30d3353b4d3a5756ecfadd153e271d89"},"background":{"color":{"light":"#FFFEEE","dark":"#000000"}},"navbar":{"primary":{"type":"button","label":"Request access","href":"https://app.moonbounce.ai"}},"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","color":{"light":"#1D5AB5","dark":"#1D5AB5"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"moonbounce","hasAudioNarration":false,"actualSubdomain":"moonbounce","customDomains":["docs.moonbounce.ai"],"gitSource":{"type":"github","owner":"clavataai","repo":"decisions-platform","deployBranch":"main","contentDirectory":"docs/site","isPrivate":true,"mountPath":"","label":"","_id":"6ae8f7a905e268646b31d443"},"chroma":{"latestBuiltDeploymentHistoryId":"6aeca9a037327199c83cec33","collectionId":"e9c425b7-eb17-41bc-adf6-390226fcaa59","liveDeploymentHistoryId":"6aeca9a037327199c83cec33","schemaVersion":"v3"},"entitlements":{},"buildId":"6aee8126743394e1d8192bce","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":41},{"language":"default","tag":"Endpoints","count":40},{"language":"default","tag":"Guides","count":15},{"language":"default","tag":"review","count":10},{"language":"default","tag":"decisions","count":6},{"language":"default","tag":"suggestions","count":6},{"language":"default","tag":"feedback","count":5},{"language":"default","tag":"objective","count":4},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Build a decision","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":"rbac-expansion","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":"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":"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":"editor-metadata","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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"brand.css","content":":root{--mb-font-sans: \"Helvetica Neue\", Helvetica, Arial, sans-serif;--mb-font-mono: ui-monospace, \"SF Mono\", Menlo, Consolas, monospace;--mb-rule: rgb(225, 230, 240);--mb-rule-strong: rgb(134, 134, 134)}.dark{--mb-rule: rgb(68, 69, 74);--mb-rule-strong: rgb(134, 134, 134)}body{font-family:var(--mb-font-sans)}h1,h2,h3,h4,h5,h6{font-family:var(--mb-font-sans);font-weight:600;letter-spacing:-0.011em}#page-title{letter-spacing:-0.03em;line-height:1.05}code,pre,kbd,samp{font-family:var(--mb-font-mono)}#navbar a[target=\"_blank\"][href=\"https://app.moonbounce.ai\"]>span.absolute{background:rgb(0, 0, 0);border-radius:999px}#navbar a[target=\"_blank\"][href=\"https://app.moonbounce.ai\"] .text-white,#navbar a[target=\"_blank\"][href=\"https://app.moonbounce.ai\"] svg{color:rgb(255, 254, 238)}.dark #navbar a[target=\"_blank\"][href=\"https://app.moonbounce.ai\"]>span.absolute{background:rgb(255, 254, 238)}.dark #navbar a[target=\"_blank\"][href=\"https://app.moonbounce.ai\"] .text-white,.dark #navbar a[target=\"_blank\"][href=\"https://app.moonbounce.ai\"] svg{color:rgb(0, 0, 0)}.card,.callout,.code-block,.accordion,table{border-radius:0;box-shadow:none}.card{border:1px solid var(--mb-rule)}.card:hover{border-color:var(--mb-rule-strong)}"}],"page":{"pagePath":"api-reference/decisions/register-a-decisions-version","slug":"/api-reference/decisions/register-a-decisions-version","pageMetadata":{"title":"Register a decision's version","description":"Takes the decision file (`{decision_id, structure, objective?}`) and registers its structure as the decision's next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, `created` is true and `version.number` is 1. Evaluations can then name the version by `structure_hash`. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. `objective`: absent leaves the stored objective as it is; `null` clears it; an objective is stored as a new revision in the key's environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective's outcomes are checked against the body's `structure`, and one that structure can't produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while `getObjective` and `setObjective` report `unknown_outcomes` against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; `getVersion` reads it back. An Idempotency-Key covers the body as sent.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions","href":"/api-reference/decisions/register-a-decisions-version","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: [\"Takes the decision file (\", _jsx(_components.code, {\n children: \"{decision_id, structure, objective?}\"\n }), \") and registers its structure as the decision’s next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, \", _jsx(_components.code, {\n children: \"created\"\n }), \" is true and \", _jsx(_components.code, {\n children: \"version.number\"\n }), \" is 1. Evaluations can then name the version by \", _jsx(_components.code, {\n children: \"structure_hash\"\n }), \". Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. \", _jsx(_components.code, {\n children: \"objective\"\n }), \": absent leaves the stored objective as it is; \", _jsx(_components.code, {\n children: \"null\"\n }), \" clears it; an objective is stored as a new revision in the key’s environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective’s outcomes are checked against the body’s \", _jsx(_components.code, {\n children: \"structure\"\n }), \", and one that structure can’t produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while \", _jsx(_components.code, {\n children: \"getObjective\"\n }), \" and \", _jsx(_components.code, {\n children: \"setObjective\"\n }), \" report \", _jsx(_components.code, {\n children: \"unknown_outcomes\"\n }), \" against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; \", _jsx(_components.code, {\n children: \"getVersion\"\n }), \" reads it back. An Idempotency-Key covers the body as sent.\"]\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":"Register a decision's version","description":"Takes the decision file (`{decision_id, structure, objective?}`) and registers its structure as the decision's next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, `created` is true and `version.number` is 1. Evaluations can then name the version by `structure_hash`. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. `objective`: absent leaves the stored objective as it is; `null` clears it; an objective is stored as a new revision in the key's environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective's outcomes are checked against the body's `structure`, and one that structure can't produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while `getObjective` and `setObjective` report `unknown_outcomes` against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; `getVersion` reads it back. An Idempotency-Key covers the body as sent.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions","href":"/api-reference/decisions/register-a-decisions-version","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"registerDecision","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"tags":["decisions"],"security":["09795b9b-a512-4bf7-acdd-ec5cc7d8e78b"],"summary":"Register a decision's version","description":"Takes the decision file (`{decision_id, structure, objective?}`) and registers its structure as the decision's next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, `created` is true and `version.number` is 1. Evaluations can then name the version by `structure_hash`. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. `objective`: absent leaves the stored objective as it is; `null` clears it; an objective is stored as a new revision in the key's environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective's outcomes are checked against the body's `structure`, and one that structure can't produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while `getObjective` and `setObjective` report `unknown_outcomes` against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; `getVersion` reads it back. An Idempotency-Key covers the body as sent.","parameters":["7dbd649e-3906-4938-9ec3-b845762ee9a4"],"requestBody":"7e36031f-1f1c-4f40-9cce-847ac3bd55d9","responses":{"200":"d690bf17-c363-4e51-86cf-fd196262248a","201":"7d7ba6e7-07b1-4a43-86ba-4d5669de0109","400":"baa7a75f-92ee-4c4e-a7d3-943c458cadbc","401":"1f2a8f64-a0f6-43d5-aea1-0a83c104d78a","403":"4de5d1c5-be7c-48ae-af5b-db9baef353fe","410":"d2358a41-e8ae-45f1-bb75-7474dd7c2625","413":"c9b65de9-6cf0-45d1-a102-548b03a8aeb6","422":"3c6faf11-19f6-481f-89c5-01ddb42ca4e7","429":"c15b754c-84d3-4fb9-95d6-cca70be4427a","503":"4922661f-35f4-4637-af64-9cb3daa806eb"},"method":"post","type":"path","servers":["d74a0e6e-c4ac-4495-a224-a84e2d741c54"],"path":"/v1/decisions","baseUrlOptions":["https://api.moonbounce.ai"],"title":"Register a decision's version","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"7dbd649e-3906-4938-9ec3-b845762ee9a4":{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x20-\\x7e]+$","description":"Makes a retry safe. For 24 hours, the same key with the same request returns the first stored result (with Idempotent-Replayed: true); the same key with a different request is a 422 IDEMPOTENCY_KEY_REUSED. Keys are scoped to the organization and environment across every operation, so use a fresh key per request. A request that failed before its result was stored runs again when retried with its key.","isRequired":false,"uniqueKey":"","typeLabel":"string"},"required":false,"description":"Makes a retry safe. For 24 hours, the same key with the same request returns the first stored result (with Idempotent-Replayed: true); the same key with a different request is a 422 IDEMPOTENCY_KEY_REUSED. Keys are scoped to the organization and environment across every operation, so use a fresh key per request. A request that failed before its result was stored runs again when retried with its key.","name":"idempotency-key","in":"header"}},"requestBody":{"required":true,"content":{"application/json":{"examples":{"decision_file":{"title":"decision_file","value":{"decision_id":"refund-exception","structure":{"questions":{"item_used":{"type":"noul","instructions":"Has the customer used the item beyond trying it on or setting it up once?","reads":["state.message"]},"defective":{"type":"noul","instructions":"Does the customer describe a defect, damage on arrival, or the item failing under normal use?","reads":["state.message"]}},"attributes":{"days_since_delivery":{"type":"number","minimum":0}},"aggregations":{"grant_score":{"type":"weighted_mean","inputs":[{"name":"questions.item_used","invert":true},{"name":"questions.defective"}]},"handling":{"type":"rules","rules":[{"when":{"name":"attributes.days_since_delivery","gt":30},"outcome":"escalate"},{"when":{"name":"aggregations.grant_score","gte":0.72},"outcome":"grant"},{"when":{"name":"aggregations.grant_score","lt":0.38},"outcome":"deny"}],"else":"escalate"}},"result":"aggregations.handling"},"objective":{"fallback":"escalate","mistakes":[{"expected":"deny","got":"grant","severity":"costly"}]}}}},"schema":{"type":"object","properties":{"decision_id":{"type":"string","pattern":"^[a-z][a-z0-9_.-]{0,127}$","description":"A name you choose for this decision, such as `refund-exception`: a lowercase letter, then up to 127 of `a-z 0-9 _ . -`. Unique in your organization and shared by its test and production keys. The first registration or evaluation under a new one creates the decision.","isRequired":true,"uniqueKey":"decision_id","typeLabel":"string"},"structure":{"type":"object","properties":{"questions":{"type":"object","additionalProperties":{"type":"object","description":"P(true) for a statement about the state.","required":["type","instructions"],"properties":{"type":{"type":"string","enum":["noul"],"isRequired":true,"uniqueKey":"structure.questions.additionalProperties.type","typeLabel":"enum\u003cstring>"},"instructions":{"oneOf":[{"type":"string","maxLength":4000,"minLength":1,"isRequired":true,"uniqueKey":"structure.questions.additionalProperties.instructions.oneOf.0","typeLabel":"string"},{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"structure.questions.additionalProperties.instructions.oneOf.1.additionalProperties","typeLabel":"any"},"isRequired":true,"uniqueKey":"structure.questions.additionalProperties.instructions.oneOf.1","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"structure.questions.additionalProperties.instructions.oneOf.2.items.[INDEX]","typeLabel":"any"},"minItems":1,"isRequired":true,"uniqueKey":"structure.questions.additionalProperties.instructions.oneOf.2","typeLabel":"any[]"}],"isRequired":true,"uniqueKey":"structure.questions.additionalProperties.instructions","typeLabel":"string | object | any[]"},"criteria":{"type":"object","properties":{"true":{"type":"string","minLength":1,"maxLength":4000,"uniqueKey":"structure.questions.additionalProperties.criteria.true","typeLabel":"string"},"false":{"type":"string","minLength":1,"maxLength":4000,"uniqueKey":"structure.questions.additionalProperties.criteria.false","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"structure.questions.additionalProperties.criteria","typeLabel":"object"},"reads":{"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"description":"`state.\u003ckey>` or a nested object path such as `state.order.customer.tier`: keys of an object `state`. A key has no `.`, `[` or `]`. Array indexes are not supported yet.","examples":["state.message","state.order.order_total_usd"],"uniqueKey":"structure.questions.additionalProperties.reads.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":64,"description":"Paths into an object `state` this question reads, such as `state.message` or `state.order.customer.tier`. The question sees just those values, nested as in the state. Without it the question sees the whole state, as in System One. Every path must exist in the call's `state`; no entry may repeat or contain another.","uniqueKey":"structure.questions.additionalProperties.reads","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"structure.questions.additionalProperties","typeLabel":"object"},"description":"System One questions, keyed by name.","isRequired":true,"uniqueKey":"structure.questions","typeLabel":"object"},"result":{"type":"string","minLength":1,"maxLength":80,"description":"The final feature's path, such as `aggregations.band`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.result","typeLabel":"string"},"attributes":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","required":["type","enum"],"properties":{"type":{"type":"string","enum":["string"],"isRequired":true,"uniqueKey":"structure.attributes.additionalProperties.oneOf.0.type","typeLabel":"enum\u003cstring>"},"enum":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"uniqueKey":"structure.attributes.additionalProperties.oneOf.0.enum.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":255,"isRequired":true,"uniqueKey":"structure.attributes.additionalProperties.oneOf.0.enum","typeLabel":"string[]"},"default":{"type":"string","uniqueKey":"structure.attributes.additionalProperties.oneOf.0.default","typeLabel":"string"},"source":{"type":"string","minLength":1,"maxLength":200,"description":"The model and version behind this attribute, such as `toxicity-classifier-v3`. Hashed.","uniqueKey":"structure.attributes.additionalProperties.oneOf.0.source","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"structure.attributes.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["number"],"isRequired":true,"uniqueKey":"structure.attributes.additionalProperties.oneOf.1.type","typeLabel":"enum\u003cstring>"},"minimum":{"type":"number","uniqueKey":"structure.attributes.additionalProperties.oneOf.1.minimum","typeLabel":"number"},"maximum":{"type":"number","uniqueKey":"structure.attributes.additionalProperties.oneOf.1.maximum","typeLabel":"number"},"default":{"type":"number","uniqueKey":"structure.attributes.additionalProperties.oneOf.1.default","typeLabel":"number"},"source":{"type":"string","minLength":1,"maxLength":200,"description":"The model and version behind this attribute, such as `toxicity-classifier-v3`. Hashed.","uniqueKey":"structure.attributes.additionalProperties.oneOf.1.source","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"structure.attributes.additionalProperties.oneOf.1","typeLabel":"object"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["boolean"],"isRequired":true,"uniqueKey":"structure.attributes.additionalProperties.oneOf.2.type","typeLabel":"enum\u003cstring>"},"default":{"type":"boolean","uniqueKey":"structure.attributes.additionalProperties.oneOf.2.default","typeLabel":"boolean"},"source":{"type":"string","minLength":1,"maxLength":200,"description":"The model and version behind this attribute, such as `toxicity-classifier-v3`. Hashed.","uniqueKey":"structure.attributes.additionalProperties.oneOf.2.source","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"structure.attributes.additionalProperties.oneOf.2","typeLabel":"object"}],"uniqueKey":"structure.attributes.additionalProperties","typeLabel":"object"},"description":"Values your app supplies with each call in `attribute_values`. The model never sees them.","uniqueKey":"structure.attributes","typeLabel":"object"},"aggregations":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","description":"Σ wᵢ·xᵢ / Σ wᵢ: a weighted average from 0 to 1, not a probability.","required":["type","inputs"],"properties":{"type":{"type":"string","enum":["weighted_mean"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.0.type","typeLabel":"enum\u003cstring>"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.0.inputs.items.[INDEX].name","typeLabel":"string"},"weight":{"type":"number","exclusiveMinimum":0,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.0.inputs.items.[INDEX].weight","typeLabel":"number"},"invert":{"type":"boolean","uniqueKey":"structure.aggregations.additionalProperties.oneOf.0.inputs.items.[INDEX].invert","typeLabel":"boolean"}},"required":["name"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.0.inputs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.0.inputs","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","description":"σ(bias + Σ wᵢ·xᵢ), with signed weights on raw input values.","required":["type","bias","inputs"],"properties":{"type":{"type":"string","enum":["logistic"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.1.type","typeLabel":"enum\u003cstring>"},"bias":{"type":"number","isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.1.bias","typeLabel":"number"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.1.inputs.items.[INDEX].name","typeLabel":"string"},"weight":{"type":"number","isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.1.inputs.items.[INDEX].weight","typeLabel":"number"}},"required":["name","weight"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.1.inputs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.1.inputs","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.1","typeLabel":"object"},{"type":"object","description":"min xᵢ: all of these, when they overlap.","required":["type","inputs"],"properties":{"type":{"type":"string","enum":["min"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.2.type","typeLabel":"enum\u003cstring>"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.2.inputs.items.[INDEX].name","typeLabel":"string"},"invert":{"type":"boolean","uniqueKey":"structure.aggregations.additionalProperties.oneOf.2.inputs.items.[INDEX].invert","typeLabel":"boolean"}},"required":["name"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.2.inputs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.2.inputs","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"object","description":"max xᵢ: any of these, when they overlap.","required":["type","inputs"],"properties":{"type":{"type":"string","enum":["max"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.3.type","typeLabel":"enum\u003cstring>"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.3.inputs.items.[INDEX].name","typeLabel":"string"},"invert":{"type":"boolean","uniqueKey":"structure.aggregations.additionalProperties.oneOf.3.inputs.items.[INDEX].invert","typeLabel":"boolean"}},"required":["name"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.3.inputs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.3.inputs","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.3","typeLabel":"object"},{"type":"object","description":"Π xᵢ: all of these, when they are independent.","required":["type","inputs"],"properties":{"type":{"type":"string","enum":["product"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.4.type","typeLabel":"enum\u003cstring>"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.4.inputs.items.[INDEX].name","typeLabel":"string"},"invert":{"type":"boolean","uniqueKey":"structure.aggregations.additionalProperties.oneOf.4.inputs.items.[INDEX].invert","typeLabel":"boolean"}},"required":["name"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.4.inputs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.4.inputs","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.4","typeLabel":"object"},{"type":"object","description":"1 − Π(1 − xᵢ): any of these, when they are independent.","required":["type","inputs"],"properties":{"type":{"type":"string","enum":["noisy_or"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.5.type","typeLabel":"enum\u003cstring>"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.5.inputs.items.[INDEX].name","typeLabel":"string"},"invert":{"type":"boolean","uniqueKey":"structure.aggregations.additionalProperties.oneOf.5.inputs.items.[INDEX].invert","typeLabel":"boolean"}},"required":["name"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.5.inputs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.5.inputs","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.5","typeLabel":"object"},{"type":"object","description":"1 when every input passes its threshold (default ≥ 0.5), else 0.","required":["type","inputs"],"properties":{"type":{"type":"string","enum":["all"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.6.type","typeLabel":"enum\u003cstring>"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.6.inputs.items.[INDEX].name","typeLabel":"string"},"gte":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.6.inputs.items.[INDEX].gte","typeLabel":"number"},"gt":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.6.inputs.items.[INDEX].gt","typeLabel":"number"},"lte":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.6.inputs.items.[INDEX].lte","typeLabel":"number"},"lt":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.6.inputs.items.[INDEX].lt","typeLabel":"number"}},"required":["name"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.6.inputs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.6.inputs","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.6","typeLabel":"object"},{"type":"object","description":"1 when any input passes its threshold (default ≥ 0.5), else 0.","required":["type","inputs"],"properties":{"type":{"type":"string","enum":["any"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.7.type","typeLabel":"enum\u003cstring>"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.7.inputs.items.[INDEX].name","typeLabel":"string"},"gte":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.7.inputs.items.[INDEX].gte","typeLabel":"number"},"gt":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.7.inputs.items.[INDEX].gt","typeLabel":"number"},"lte":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.7.inputs.items.[INDEX].lte","typeLabel":"number"},"lt":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.7.inputs.items.[INDEX].lt","typeLabel":"number"}},"required":["name"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.7.inputs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.7.inputs","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.7","typeLabel":"object"},{"type":"object","description":"Names an outcome for each range of one feature's value. `at` means ≥; `below` is under the first cut.","required":["type","input","below","cuts"],"properties":{"type":{"type":"string","enum":["bands"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.8.type","typeLabel":"enum\u003cstring>"},"input":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.8.input","typeLabel":"string"},"below":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.8.below","typeLabel":"string"},"cuts":{"type":"array","items":{"type":"object","properties":{"at":{"type":"number","isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.8.cuts.items.[INDEX].at","typeLabel":"number"},"outcome":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.8.cuts.items.[INDEX].outcome","typeLabel":"string"}},"required":["at","outcome"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.8.cuts.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":9,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.8.cuts","typeLabel":"object[]"},"abstain":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","uniqueKey":"structure.aggregations.additionalProperties.oneOf.8.abstain","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.8","typeLabel":"object"},{"type":"object","description":"The first rule whose condition is true names its `outcome`; otherwise `else`.","required":["type","rules","else"],"properties":{"type":{"type":"string","enum":["rules"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.type","typeLabel":"enum\u003cstring>"},"rules":{"type":"array","items":{"type":"object","properties":{"when":{"oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.name","typeLabel":"string"},"gte":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.gte","typeLabel":"number"},"gt":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.gt","typeLabel":"number"},"lte":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.lte","typeLabel":"number"},"lt":{"type":"number","uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.lt","typeLabel":"number"},"is":{"type":"string","minLength":1,"maxLength":200,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.is","typeLabel":"string"},"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":255,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.in","typeLabel":"string[]"},"abstained":{"type":"boolean","enum":[true],"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0.abstained","typeLabel":"enum\u003cboolean>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.0","typeLabel":"object"},{"type":"object","required":["all"],"properties":{"all":{"type":"array","items":{"$circularRef":"f3a56dea-20a6-4cd1-9853-cd499bc639d6"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.1.all","typeLabel":"array"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.1","typeLabel":"object"},{"type":"object","required":["any"],"properties":{"any":{"type":"array","items":{"$circularRef":"f3a56dea-20a6-4cd1-9853-cd499bc639d6"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.2.any","typeLabel":"array"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.2","typeLabel":"object"},{"type":"object","required":["not"],"properties":{"not":{"oneOf":[{"$circularRef":"f3a56dea-20a6-4cd1-9853-cd499bc639d6","isRequired":true}],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.3.not","typeLabel":"any"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].when","typeLabel":"object"},"outcome":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX].outcome","typeLabel":"string"}},"required":["when","outcome"],"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":64,"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.rules","typeLabel":"object[]"},"else":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9.else","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.9","typeLabel":"object"},{"type":"object","description":"Maps a label straight to an outcome.","required":["type","input","cases"],"properties":{"type":{"type":"string","enum":["match"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.10.type","typeLabel":"enum\u003cstring>"},"input":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.10.input","typeLabel":"string"},"cases":{"type":"object","additionalProperties":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","uniqueKey":"structure.aggregations.additionalProperties.oneOf.10.cases.additionalProperties","typeLabel":"string"},"description":"Maps labels to outcomes. \"__proto__\" is not supported as a case key; use a rules is-condition for that label.","isRequired":true,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.10.cases","typeLabel":"object"},"else":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","uniqueKey":"structure.aggregations.additionalProperties.oneOf.10.else","typeLabel":"string"},"abstain":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","uniqueKey":"structure.aggregations.additionalProperties.oneOf.10.abstain","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"structure.aggregations.additionalProperties.oneOf.10","typeLabel":"object"}],"uniqueKey":"structure.aggregations.additionalProperties","typeLabel":"object"},"uniqueKey":"structure.aggregations","typeLabel":"object"}},"required":["questions","result"],"additionalProperties":false,"description":"Everything that defines a decision: questions, attribute declarations, aggregations and the result. Names are unique across all three maps.","isRequired":true,"uniqueKey":"structure","typeLabel":"object"},"objective":{"oneOf":[{"type":"object","description":"What the decision optimizes for, stored for the key's environment. Absent: the stored objective is left as it is. `null`: cleared, back to balanced losses. An objective: stored as a new revision when it differs from the current one. Its outcomes must be ones this body's `structure` can produce (400 otherwise), even when that structure is an older version; `getObjective` checks the stored one against the newest version. Never part of the structure hash.","properties":{"fallback":{"type":"string","minLength":1,"maxLength":200,"description":"The safe outcome. Sending a case there when it belonged elsewhere is `minor`, unless that mistake is listed.","uniqueKey":"objective.oneOf.0.fallback","typeLabel":"string"},"mistakes":{"type":"array","items":{"oneOf":[{"type":"object","description":"One mistake that matters, by severity or by a direct loss. A mistake that isn't listed is `normal`.","required":["expected","got","severity"],"properties":{"expected":{"type":"string","minLength":1,"maxLength":200,"description":"The outcome the case should have had.","isRequired":true,"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX].oneOf.0.expected","typeLabel":"string"},"got":{"type":"string","minLength":1,"maxLength":200,"description":"The outcome the decision gave instead.","isRequired":true,"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX].oneOf.0.got","typeLabel":"string"},"severity":{"type":"string","enum":["minor","normal","costly","severe"],"description":"How bad a mistake is: `minor` weighs 0.5, `normal` 1, `costly` 3 and `severe` 10.","isRequired":true,"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX].oneOf.0.severity","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"One mistake that matters, by severity or by a direct loss. A mistake that isn't listed is `normal`.","required":["expected","got","loss"],"properties":{"expected":{"type":"string","minLength":1,"maxLength":200,"description":"The outcome the case should have had.","isRequired":true,"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX].oneOf.1.expected","typeLabel":"string"},"got":{"type":"string","minLength":1,"maxLength":200,"description":"The outcome the decision gave instead.","isRequired":true,"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX].oneOf.1.got","typeLabel":"string"},"loss":{"type":"number","minimum":0,"maximum":1000000,"description":"A direct loss in place of a severity. At least 10 counts as severe.","isRequired":true,"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX].oneOf.1.loss","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"objective.oneOf.0.mistakes.items.[INDEX]","typeLabel":"object"},"maxItems":400,"uniqueKey":"objective.oneOf.0.mistakes","typeLabel":"object[]"},"target":{"type":"object","properties":{"max_loss_per_case":{"type":"number","minimum":0,"description":"A reference loss per case the owner would be content with.","isRequired":true,"uniqueKey":"objective.oneOf.0.target.max_loss_per_case","typeLabel":"number"}},"required":["max_loss_per_case"],"additionalProperties":false,"description":"Optional, a soft reference point: reports say whether loss per case is at or below it (`target_met`). The refine loop stops when the owner decides, not on the target.","uniqueKey":"objective.oneOf.0.target","typeLabel":"object"},"outcome":{"type":"string","minLength":1,"maxLength":200,"description":"With `priority`: the outcome the two-outcome shortcut is about.","uniqueKey":"objective.oneOf.0.outcome","typeLabel":"string"},"priority":{"type":"string","enum":["catch_all","be_sure","balanced"],"description":"With `outcome`, the shortcut: `catch_all` makes missing `outcome` costly and a false alarm normal, `be_sure` the reverse, `balanced` both normal. A listed mistake overrides the shortcut's entry for it.","uniqueKey":"objective.oneOf.0.priority","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"objective.oneOf.0","typeLabel":"object"},{"type":"null","description":"What the decision optimizes for, stored for the key's environment. Absent: the stored objective is left as it is. `null`: cleared, back to balanced losses. An objective: stored as a new revision when it differs from the current one. Its outcomes must be ones this body's `structure` can produce (400 otherwise), even when that structure is an older version; `getObjective` checks the stored one against the newest version. Never part of the structure hash.","uniqueKey":"objective.oneOf.1","typeLabel":"null"}],"uniqueKey":"objective","typeLabel":"object | null"}},"required":["decision_id","structure"],"additionalProperties":false,"description":"The decision file your repository keeps (`moonbounce/\u003cdecision_id>.json`).","uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"d690bf17-c363-4e51-86cf-fd196262248a":{"description":"The version was already registered","headers":{"Idempotent-Replayed":{"schema":{"type":"string","enum":["true"],"description":"Present and `true` when this is the stored result of an earlier request with the same Idempotency-Key."},"required":false,"description":"Present and `true` when this is the stored result of an earlier request with the same Idempotency-Key."}},"content":{"application/json":{"examples":{"already_registered":{"title":"already_registered","value":{"decision_id":"refund-exception","version":{"structure_hash":"sha256:bdad6e5b1b879209305f1555b43ec62666a4d74a925280c66e54cc4dc07bb1ae","number":1,"question_hashes":{"item_used":"sha256:2cd936709034818c3beca2574ca48ef400577728a20532924ed68f1ca1f26e3d","defective":"sha256:8dd4a69d6bfaf9fa766adcac7cfa1c4af7eff57a690a1e39666398bf85cd1869"},"created_at":"2026-11-06T09:00:00.000Z"},"created":false,"objective":{"revision":1,"created":false}}}},"schema":{"type":"object","properties":{"decision_id":{"type":"string","pattern":"^[a-z][a-z0-9_.-]{0,127}$","description":"A name you choose for this decision, such as `refund-exception`: a lowercase letter, then up to 127 of `a-z 0-9 _ . -`. Unique in your organization and shared by its test and production keys. The first registration or evaluation under a new one creates the decision.","isRequired":true,"uniqueKey":"decision_id","typeLabel":"string"},"version":{"type":"object","properties":{"structure_hash":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","isRequired":true,"uniqueKey":"version.structure_hash","typeLabel":"string"},"number":{"type":"integer","minimum":1,"description":"The version's number under its decision: 1 for the first structure registered, then 2, 3... in the order the organization registered them. For people; the hash is the version's identity.","isRequired":true,"uniqueKey":"version.number","typeLabel":"integer"},"question_hashes":{"type":"object","additionalProperties":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","uniqueKey":"version.question_hashes.additionalProperties","typeLabel":"string"},"description":"Each question, by name, mapped to its hash (its definition without its name). A question's hash is what feedback about it is stored against.","isRequired":true,"uniqueKey":"version.question_hashes","typeLabel":"object"},"created_at":{"type":"string","format":"date-time","description":"When the version was first registered.","isRequired":true,"uniqueKey":"version.created_at","typeLabel":"string\u003cdate-time>"}},"required":["structure_hash","number","question_hashes","created_at"],"additionalProperties":true,"description":"A registered structure: its hash, its number under the decision and each question's hash.","x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"version","typeLabel":"object"},"created":{"type":"boolean","description":"True when this call registered the version, false when it already existed.","isRequired":true,"uniqueKey":"created","typeLabel":"boolean"},"objective":{"type":"object","properties":{"revision":{"oneOf":[{"type":"integer","minimum":1,"description":"The objective revision current in the key's environment after this call (a clear is a revision too); null when none was ever set there.","isRequired":true,"uniqueKey":"objective.revision.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"The objective revision current in the key's environment after this call (a clear is a revision too); null when none was ever set there.","isRequired":true,"uniqueKey":"objective.revision.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"objective.revision","typeLabel":"integer | null"},"created":{"type":"boolean","description":"True when this call stored a new revision.","isRequired":true,"uniqueKey":"objective.created","typeLabel":"boolean"}},"required":["revision","created"],"additionalProperties":true,"description":"Present only when the body had an `objective` key.","x-moonbounce-sdk-known-fields":true,"uniqueKey":"objective","typeLabel":"object"}},"required":["decision_id","version","created"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"7d7ba6e7-07b1-4a43-86ba-4d5669de0109":{"description":"Registered a new version","headers":{"Idempotent-Replayed":{"schema":{"type":"string","enum":["true"],"description":"Present and `true` when this is the stored result of an earlier request with the same Idempotency-Key."},"required":false,"description":"Present and `true` when this is the stored result of an earlier request with the same Idempotency-Key."}},"content":{"application/json":{"examples":{"new_decision":{"title":"new_decision","value":{"decision_id":"refund-exception","version":{"structure_hash":"sha256:bdad6e5b1b879209305f1555b43ec62666a4d74a925280c66e54cc4dc07bb1ae","number":1,"question_hashes":{"item_used":"sha256:2cd936709034818c3beca2574ca48ef400577728a20532924ed68f1ca1f26e3d","defective":"sha256:8dd4a69d6bfaf9fa766adcac7cfa1c4af7eff57a690a1e39666398bf85cd1869"},"created_at":"2026-11-06T09:00:00.000Z"},"created":true,"objective":{"revision":1,"created":true}}}},"schema":{"type":"object","properties":{"decision_id":{"type":"string","pattern":"^[a-z][a-z0-9_.-]{0,127}$","description":"A name you choose for this decision, such as `refund-exception`: a lowercase letter, then up to 127 of `a-z 0-9 _ . -`. Unique in your organization and shared by its test and production keys. The first registration or evaluation under a new one creates the decision.","isRequired":true,"uniqueKey":"decision_id","typeLabel":"string"},"version":{"type":"object","properties":{"structure_hash":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","isRequired":true,"uniqueKey":"version.structure_hash","typeLabel":"string"},"number":{"type":"integer","minimum":1,"description":"The version's number under its decision: 1 for the first structure registered, then 2, 3... in the order the organization registered them. For people; the hash is the version's identity.","isRequired":true,"uniqueKey":"version.number","typeLabel":"integer"},"question_hashes":{"type":"object","additionalProperties":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","uniqueKey":"version.question_hashes.additionalProperties","typeLabel":"string"},"description":"Each question, by name, mapped to its hash (its definition without its name). A question's hash is what feedback about it is stored against.","isRequired":true,"uniqueKey":"version.question_hashes","typeLabel":"object"},"created_at":{"type":"string","format":"date-time","description":"When the version was first registered.","isRequired":true,"uniqueKey":"version.created_at","typeLabel":"string\u003cdate-time>"}},"required":["structure_hash","number","question_hashes","created_at"],"additionalProperties":true,"description":"A registered structure: its hash, its number under the decision and each question's hash.","x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"version","typeLabel":"object"},"created":{"type":"boolean","description":"True when this call registered the version, false when it already existed.","isRequired":true,"uniqueKey":"created","typeLabel":"boolean"},"objective":{"type":"object","properties":{"revision":{"oneOf":[{"type":"integer","minimum":1,"description":"The objective revision current in the key's environment after this call (a clear is a revision too); null when none was ever set there.","isRequired":true,"uniqueKey":"objective.revision.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"The objective revision current in the key's environment after this call (a clear is a revision too); null when none was ever set there.","isRequired":true,"uniqueKey":"objective.revision.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"objective.revision","typeLabel":"integer | null"},"created":{"type":"boolean","description":"True when this call stored a new revision.","isRequired":true,"uniqueKey":"objective.created","typeLabel":"boolean"}},"required":["revision","created"],"additionalProperties":true,"description":"Present only when the body had an `objective` key.","x-moonbounce-sdk-known-fields":true,"uniqueKey":"objective","typeLabel":"object"}},"required":["decision_id","version","created"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"baa7a75f-92ee-4c4e-a7d3-943c458cadbc":{"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 (`attribute_values.region`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].param","typeLabel":"string"},"code":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Stable, extensible issue code; unknown codes still have a parameter and human-readable message.","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].message","typeLabel":"string"}},"required":["param","code","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"error.details.issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.issues","typeLabel":"object[]"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{"issues":[{"param":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"1f2a8f64-a0f6-43d5-aea1-0a83c104d78a":{"description":"Missing or invalid API key (reason KEY_INVALID)","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 (`attribute_values.region`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].param","typeLabel":"string"},"code":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Stable, extensible issue code; unknown codes still have a parameter and human-readable message.","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].message","typeLabel":"string"}},"required":["param","code","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"error.details.issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.issues","typeLabel":"object[]"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{"issues":[{"param":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"4de5d1c5-be7c-48ae-af5b-db9baef353fe":{"description":"The key may not do this","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 (`attribute_values.region`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].param","typeLabel":"string"},"code":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Stable, extensible issue code; unknown codes still have a parameter and human-readable message.","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].message","typeLabel":"string"}},"required":["param","code","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"error.details.issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.issues","typeLabel":"object[]"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{"issues":[{"param":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"d2358a41-e8ae-45f1-bb75-7474dd7c2625":{"description":"The Idempotency-Key's first result was deleted, so it cannot be replayed","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 (`attribute_values.region`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].param","typeLabel":"string"},"code":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Stable, extensible issue code; unknown codes still have a parameter and human-readable message.","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].message","typeLabel":"string"}},"required":["param","code","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"error.details.issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.issues","typeLabel":"object[]"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{"issues":[{"param":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"c9b65de9-6cf0-45d1-a102-548b03a8aeb6":{"description":"The HTTP body exceeds 1 MB (reason BODY_TOO_LARGE)","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 (`attribute_values.region`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].param","typeLabel":"string"},"code":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Stable, extensible issue code; unknown codes still have a parameter and human-readable message.","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].message","typeLabel":"string"}},"required":["param","code","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"error.details.issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.issues","typeLabel":"object[]"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{"issues":[{"param":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"3c6faf11-19f6-481f-89c5-01ddb42ca4e7":{"description":"The request is well formed but cannot be processed (IDEMPOTENCY_KEY_REUSED requires a fresh key; REQUEST_TOO_LARGE requires a smaller request)","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 (`attribute_values.region`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].param","typeLabel":"string"},"code":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Stable, extensible issue code; unknown codes still have a parameter and human-readable message.","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].message","typeLabel":"string"}},"required":["param","code","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"error.details.issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.issues","typeLabel":"object[]"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{"issues":[{"param":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"c15b754c-84d3-4fb9-95d6-cca70be4427a":{"description":"RATE_LIMITED: retry after Retry-After seconds; QUOTA_EXCEEDED: details.reset_at gives the daily reset time (no Retry-After)","headers":{"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying, when waiting helps."},"required":false,"description":"Seconds to wait before retrying, when waiting helps."}},"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 (`attribute_values.region`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].param","typeLabel":"string"},"code":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Stable, extensible issue code; unknown codes still have a parameter and human-readable message.","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].message","typeLabel":"string"}},"required":["param","code","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"error.details.issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.issues","typeLabel":"object[]"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{"issues":[{"param":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"4922661f-35f4-4637-af64-9cb3daa806eb":{"description":"Temporarily unavailable, with Retry-After (for example reason AUTH_UNAVAILABLE, ENGINE_UNAVAILABLE or STORE_UNAVAILABLE): retry with the same Idempotency-Key","headers":{"Retry-After":{"schema":{"type":"string","description":"Seconds to wait before retrying, when waiting helps."},"required":true,"description":"Seconds to wait before retrying, when waiting helps."}},"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 (`attribute_values.region`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].param","typeLabel":"string"},"code":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Stable, extensible issue code; unknown codes still have a parameter and human-readable message.","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.issues.items.[INDEX].message","typeLabel":"string"}},"required":["param","code","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"error.details.issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.issues","typeLabel":"object[]"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{"issues":[{"param":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"09795b9b-a512-4bf7-acdd-ec5cc7d8e78b":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key, sent as `Authorization: Bearer \u003ckey>`. Each operation lists the scope its key needs: `decisions:evaluate` (evaluate and read evaluations), `decisions:feedback` (your app's feedback) or `decisions:develop` (everything else, including owner feedback and the review queue). An operation listing no scope takes any scoped key. A key with no scope, or without the operation's, gets 403 INSUFFICIENT_SCOPE.","scopes":["decisions:develop"],"schemeName":"bearerAuth"}}},"servers":{"d74a0e6e-c4ac-4495-a224-a84e2d741c54":{"url":"https://api.moonbounce.ai","description":"Production"}},"schemas":{"f3a56dea-20a6-4cd1-9853-cd499bc639d6":{"oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"A feature's path: `questions.\u003cname>`, `attributes.\u003cname>` or `aggregations.\u003cname>`.","examples":["questions.asks_for_refund","aggregations.band"],"isRequired":true},"gte":{"type":"number"},"gt":{"type":"number"},"lte":{"type":"number"},"lt":{"type":"number"},"is":{"type":"string","minLength":1,"maxLength":200},"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"minItems":1,"maxItems":255},"abstained":{"type":"boolean","enum":[true]}},"additionalProperties":false},{"type":"object","required":["all"],"properties":{"all":{"type":"array","items":{"$circularRef":"f3a56dea-20a6-4cd1-9853-cd499bc639d6"},"minItems":1,"maxItems":64,"isRequired":true}},"additionalProperties":false},{"type":"object","required":["any"],"properties":{"any":{"type":"array","items":{"$circularRef":"f3a56dea-20a6-4cd1-9853-cd499bc639d6"},"minItems":1,"maxItems":64,"isRequired":true}},"additionalProperties":false},{"type":"object","required":["not"],"properties":{"not":{"oneOf":[{"isRequired":true}],"isRequired":true}},"additionalProperties":false}]}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An API key, sent as `Authorization: Bearer \u003ckey>`. Each operation lists the scope its key needs: `decisions:evaluate` (evaluate and read evaluations), `decisions:feedback` (your app's feedback) or `decisions:develop` (everything else, including owner feedback and the review queue). An operation listing no scope takes any scoped key. A key with no scope, or without the operation's, gets 403 INSUFFICIENT_SCOPE.","scopes":["decisions:develop"],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An API key, sent as `Authorization: Bearer \u003ckey>`. Each operation lists the scope its key needs: `decisions:evaluate` (evaluate and read evaluations), `decisions:feedback` (your app's feedback) or `decisions:develop` (everything else, including owner feedback and the review queue). An operation listing no scope takes any scoped key. A key with no scope, or without the operation's, gets 403 INSUFFICIENT_SCOPE.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"moonbounce","siteName":"Moonbounce Decisions API","title":"Register a decision's version - Moonbounce Decisions API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-07T01:38:52.513Z","originalFileLocation":"api-reference/decisions/register-a-decisions-version.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=\"Takes the decision file ({decision_id, structure, objective?}) and registers its structure as the decision\u0026#x27;s next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, created is true and version.number is 1. Evaluations can then name the version by structure_hash. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. objective: absent leaves the stored objective as it is; null clears it; an objective is stored as a new revision in the key\u0026#x27;s environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective\u0026#x27;s outcomes are checked against the body\u0026#x27;s structure, and one that structure can\u0026#x27;t produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while getObjective and setObjective report unknown_outcomes against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; getVersion reads it back. An Idempotency-Key covers the body as sent.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Register a decision\u0026#x27;s version - Moonbounce Decisions API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Takes the decision file ({decision_id, structure, objective?}) and registers its structure as the decision\u0026#x27;s next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, created is true and version.number is 1. Evaluations can then name the version by structure_hash. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. objective: absent leaves the stored objective as it is; null clears it; an objective is stored as a new revision in the key\u0026#x27;s environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective\u0026#x27;s outcomes are checked against the body\u0026#x27;s structure, and one that structure can\u0026#x27;t produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while getObjective and setObjective report unknown_outcomes against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; getVersion reads it back. An Idempotency-Key covers the body as sent.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Moonbounce Decisions API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://moonbounce.mintlify.site/_mintlify/api/og/v2?division=decisions\u0026amp;title=Register+a+decision%27s+version\u0026amp;description=Takes+the+decision+file+%28%60%7Bdecision_id%2C+structure%2C+objective%3F%7D%60%29+and+registers+its+structure+as+the+decision%27s+next+version%2C+creating+the+decision+if+the+id+is+\u0026amp;theme=e6d1608244ab860cac0ff47e\u0026amp;signature=aeb578b251913aa1a7e3465462ff080f6b7b30cac5b6e3f434b4547784e4ac97\">\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=\"Register a decision\u0026#x27;s version - Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Takes the decision file ({decision_id, structure, objective?}) and registers its structure as the decision\u0026#x27;s next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, created is true and version.number is 1. Evaluations can then name the version by structure_hash. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. objective: absent leaves the stored objective as it is; null clears it; an objective is stored as a new revision in the key\u0026#x27;s environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective\u0026#x27;s outcomes are checked against the body\u0026#x27;s structure, and one that structure can\u0026#x27;t produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while getObjective and setObjective report unknown_outcomes against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; getVersion reads it back. An Idempotency-Key covers the body as sent.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://moonbounce.mintlify.site/_mintlify/api/og/v2?division=decisions\u0026amp;title=Register+a+decision%27s+version\u0026amp;description=Takes+the+decision+file+%28%60%7Bdecision_id%2C+structure%2C+objective%3F%7D%60%29+and+registers+its+structure+as+the+decision%27s+next+version%2C+creating+the+decision+if+the+id+is+\u0026amp;theme=e6d1608244ab860cac0ff47e\u0026amp;signature=aeb578b251913aa1a7e3465462ff080f6b7b30cac5b6e3f434b4547784e4ac97\">\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=\"/mintlify-assets/_mintlify/favicons/moonbounce/Pq6Jhs_BrzDTLcf2/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1D5AB5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/decisions/register-a-decisions-version.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.moonbounce.ai/#organization\",\"name\":\"Moonbounce Decisions API\",\"url\":\"https://docs.moonbounce.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/moonbounce/mWuXGW-nUJSEdABp/logo/lockup-light.svg?fit=max\u0026auto=format\u0026n=mWuXGW-nUJSEdABp\u0026q=85\u0026s=367a5dedb5799a16c5737d136af68dc5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.moonbounce.ai#website\",\"name\":\"Moonbounce Decisions API\",\"url\":\"https://docs.moonbounce.ai\",\"publisher\":{\"@id\":\"https://docs.moonbounce.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version#webpage\",\"url\":\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version\",\"name\":\"Register a decision's version\",\"description\":\"Takes the decision file ({decision_id, structure, objective?}) and registers its structure as the decision's next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, created is true and version.number is 1. Evaluations can then name the version by structure_hash. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. objective: absent leaves the stored objective as it is; null clears it; an objective is stored as a new revision in the key's environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective's outcomes are checked against the body's structure, and one that structure can't produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while getObjective and setObjective report unknown_outcomes against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; getVersion reads it back. An Idempotency-Key covers the body as sent.\",\"dateModified\":\"2026-11-07T01:38:52.513Z\",\"isPartOf\":{\"@id\":\"https://docs.moonbounce.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.moonbounce.ai/api-reference/health/health-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"decisions\",\"item\":\"https://docs.moonbounce.ai/api-reference/decisions/validate-a-decision-file\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Register a decision's version\",\"item\":\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version#apireference\",\"headline\":\"Register a decision's version\",\"name\":\"Register a decision's version\",\"description\":\"Takes the decision file ({decision_id, structure, objective?}) and registers its structure as the decision's next version, creating the decision if the id is new. Idempotent by content: 201 when this call added the version, 200 when that structure hash was already registered for the decision. On the first registration, created is true and version.number is 1. Evaluations can then name the version by structure_hash. Decisions and versions belong to the whole organization, so a test key and a production key see the same ones. objective: absent leaves the stored objective as it is; null clears it; an objective is stored as a new revision in the key's environment when it differs from the current one, in the same transaction as the version. The file is the unit: its objective's outcomes are checked against the body's structure, and one that structure can't produce is a 400 that writes nothing. That holds when the body re-registers an older version too, while getObjective and setObjective report unknown_outcomes against the newest version, so an objective stored that way can list some there. Returns hashes without the structure; getVersion reads it back. An Idempotency-Key covers the body as sent.\",\"url\":\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version\",\"mainEntityOfPage\":{\"@id\":\"https://docs.moonbounce.ai/api-reference/decisions/register-a-decisions-version#webpage\"},\"dateModified\":\"2026-11-07T01:38:52.513Z\",\"publisher\":{\"@id\":\"https://docs.moonbounce.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.moonbounce.ai#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","deprecated":null,"version":null,"openapi":"/openapi.json get /health","href":"/api-reference/health/health-check"}]},{"group":"decisions","pages":[{"title":"Validate a decision file","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/validate","href":"/api-reference/decisions/validate-a-decision-file"},{"title":"List decisions","description":"Reads only. Lists the organization's decisions, newest decision first; test and production keys see the same ones. Pass next_cursor as cursor while has_more is true.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions","href":"/api-reference/decisions/list-decisions"},{"title":"Register a decision's version","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions","href":"/api-reference/decisions/register-a-decisions-version"},{"title":"Get a version","description":"Reads only. Returns one of the decision's versions with its structure, in authored key order. `ref` is the version's structure hash or its number; the response always carries both. 404 STRUCTURE_UNKNOWN when no such version is registered for the decision.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/versions/{ref}","href":"/api-reference/decisions/get-a-version"},{"title":"Get a decision","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}","href":"/api-reference/decisions/get-a-decision"},{"title":"List a decision's versions","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/versions","href":"/api-reference/decisions/list-a-decisions-versions"}]},{"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":"objective","pages":[{"title":"Sweep a cut over a run's answers","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/cut-sweeps","href":"/api-reference/objective/sweep-a-cut-over-a-runs-answers"},{"title":"Judge results under a decision's objective","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/loss-reports","href":"/api-reference/objective/judge-results-under-a-decisions-objective"},{"title":"Get what a decision optimizes for","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/objective","href":"/api-reference/objective/get-what-a-decision-optimizes-for"},{"title":"Set what a decision optimizes for","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/objective/revisions","href":"/api-reference/objective/set-what-a-decision-optimizes-for"}]},{"group":"feedback","pages":[{"title":"List a decision's labeled cases","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/cases","href":"/api-reference/feedback/list-a-decisions-labeled-cases"},{"title":"Submit feedback on evaluations or items","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/feedback","href":"/api-reference/feedback/submit-feedback-on-evaluations-or-items"},{"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":"Import labeled examples","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/examples","href":"/api-reference/feedback/import-labeled-examples"}]},{"group":"evaluate","pages":[{"title":"Evaluate an item, or run a version over many items","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/evaluate","href":"/api-reference/evaluate/evaluate-an-item-or-run-a-version-over-many-items"},{"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":"review","pages":[{"title":"Fill the review queue","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/fill","href":"/api-reference/review/fill-the-review-queue"},{"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/{review_item_id}","href":"/api-reference/review/get-a-review-item"},{"title":"Get the structure a review item was decided with","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/review/items/{review_item_id}/configuration","href":"/api-reference/review/get-the-structure-a-review-item-was-decided-with"},{"title":"Mark a review item as shown","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{review_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/{review_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/{review_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/{review_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/{review_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/{review_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 structure change against past feedback","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/previews","href":"/api-reference/suggestions/preview-a-structure-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":"Get a decision's engine cost, per evaluation and in total","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/usage","href":"/api-reference/usage/get-a-decisions-engine-cost-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":"Register a decision's version - Moonbounce Decisions API","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-BcDCEkh6.js","dist-CwjSCXIK.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-eKJ4rcii.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","AssistantPageLink-9EK5IAXV.js"]}