Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs’ labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision’s objective, as loss_report does. Name the aggregation (as near_cuts gives it, or aggregations.<name>) and the cut by its current at; without at, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (points), each kept inside the input’s range, the best range with what it fixes and breaks against the current cut, and cross_validation: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). holds: false means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by run_ids from evaluate with items or cases, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn’t bands or isn’t on the result’s path is 400 AGGREGATION_INVALID; a cut it doesn’t have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.
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.
The environment of the key that made the call: production or test. Evaluations, feedback, reviews and suggestions are separate per environment; registered structures are shared.
One per cut swept, in the aggregation's order; each moves alone.
Show child attributes
{"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/mWuXGW-nUJSEdABp/logo/symbol-light.svg?fit=max\u0026auto=format\u0026n=mWuXGW-nUJSEdABp\u0026q=85\u0026s=78644bdbff4fda3f026238ea5135e647","dark":"https://mintcdn.com/moonbounce/mWuXGW-nUJSEdABp/logo/symbol-dark.svg?fit=max\u0026auto=format\u0026n=mWuXGW-nUJSEdABp\u0026q=85\u0026s=946e0ccec72a87a3d707728e895639e1"},"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":"6aee1c2a9e80a9566968b1c8","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API reference","count":40},{"language":"default","tag":"Endpoints","count":39},{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"review","count":10},{"language":"default","tag":"suggestions","count":6},{"language":"default","tag":"feedback","count":5},{"language":"default","tag":"structures","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":"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/objective/sweep-a-cut-over-a-runs-answers","slug":"/api-reference/objective/sweep-a-cut-over-a-runs-answers","pageMetadata":{"title":"Sweep a cut over a run's answers","description":"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs' labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision's objective, as loss_report does. Name the aggregation (as `near_cuts` gives it, or `aggregations.\u003cname>`) and the cut by its current `at`; without `at`, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (`points`), each kept inside the input's range, the `best` range with what it fixes and breaks against the current cut, and `cross_validation`: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). `holds: false` means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by `run_ids` from evaluate with `items` or `cases`, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn't bands or isn't on the result's path is 400 AGGREGATION_INVALID; a cut it doesn't have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.","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","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: [\"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs’ labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision’s objective, as loss_report does. Name the aggregation (as \", _jsx(_components.code, {\n children: \"near_cuts\"\n }), \" gives it, or \", _jsx(_components.code, {\n children: \"aggregations.\u003cname>\"\n }), \") and the cut by its current \", _jsx(_components.code, {\n children: \"at\"\n }), \"; without \", _jsx(_components.code, {\n children: \"at\"\n }), \", each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (\", _jsx(_components.code, {\n children: \"points\"\n }), \"), each kept inside the input’s range, the \", _jsx(_components.code, {\n children: \"best\"\n }), \" range with what it fixes and breaks against the current cut, and \", _jsx(_components.code, {\n children: \"cross_validation\"\n }), \": the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). \", _jsx(_components.code, {\n children: \"holds: false\"\n }), \" means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by \", _jsx(_components.code, {\n children: \"run_ids\"\n }), \" from evaluate with \", _jsx(_components.code, {\n children: \"items\"\n }), \" or \", _jsx(_components.code, {\n children: \"cases\"\n }), \", one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn’t bands or isn’t on the result’s path is 400 AGGREGATION_INVALID; a cut it doesn’t have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.\"]\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":"Sweep a cut over a run's answers","description":"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs' labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision's objective, as loss_report does. Name the aggregation (as `near_cuts` gives it, or `aggregations.\u003cname>`) and the cut by its current `at`; without `at`, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (`points`), each kept inside the input's range, the `best` range with what it fixes and breaks against the current cut, and `cross_validation`: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). `holds: false` means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by `run_ids` from evaluate with `items` or `cases`, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn't bands or isn't on the result's path is 400 AGGREGATION_INVALID; a cut it doesn't have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.","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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"sweepCut","x-mcp-annotations":{"readOnlyHint":true,"openWorldHint":false},"tags":["objective"],"security":["03b53094-9bcf-4803-a74e-523913e0fff0"],"summary":"Sweep a cut over a run's answers","description":"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs' labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision's objective, as loss_report does. Name the aggregation (as `near_cuts` gives it, or `aggregations.\u003cname>`) and the cut by its current `at`; without `at`, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (`points`), each kept inside the input's range, the `best` range with what it fixes and breaks against the current cut, and `cross_validation`: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). `holds: false` means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by `run_ids` from evaluate with `items` or `cases`, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn't bands or isn't on the result's path is 400 AGGREGATION_INVALID; a cut it doesn't have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.","parameters":["11ca2d9b-0a13-4377-8435-7493ccffa71b"],"requestBody":"44e0b721-30dc-4f99-bcc0-93d7681854f5","responses":{"200":"1a7d5001-05ca-4831-8d01-5c8c86f8ed54","400":"3cc0fe92-3fab-41cb-bd20-72b4d9194bed","401":"e7d1c374-d1cf-4c62-a132-1347ec8b3e67","403":"23d625be-a4b4-4f0e-bd57-88b7670198cc","404":"2bce8224-f8ea-4062-b921-b364e5dede2e","422":"89bc1139-cf78-4916-8741-c5b96095e732","429":"3fc234bc-211b-4cf4-9bef-58ca8a0d11fb","503":"d67974b5-e899-4b32-951b-ae9d64cc9540"},"method":"post","type":"path","servers":["a693c168-8b0c-4b0e-9c37-1ac5dc48dedc"],"path":"/v1/decisions/{decision_id}/cut-sweeps","baseUrlOptions":["https://api.moonbounce.ai"],"title":"Sweep a cut over a run's answers","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"11ca2d9b-0a13-4377-8435-7493ccffa71b":{"schema":{"type":"string","pattern":"^[a-z][a-z0-9_.-]{0,127}$","isRequired":true,"uniqueKey":"","typeLabel":"string"},"required":true,"name":"decision_id","in":"path"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"run_ids":{"type":"array","items":{"type":"string","pattern":"^evr_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","uniqueKey":"run_ids.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":50,"description":"Runs of one structure, from evaluate with `items` or `cases`, as a loss_report side takes them.","isRequired":true,"uniqueKey":"run_ids","typeLabel":"string[]"},"aggregation":{"type":"string","minLength":1,"maxLength":200,"description":"The bands aggregation whose cut to sweep: its name, as `near_cuts` gives it, or its path (`aggregations.\u003cname>`).","isRequired":true,"uniqueKey":"aggregation","typeLabel":"string"},"at":{"type":"number","description":"The cut to sweep, by its current `at`. Without it, every cut of the aggregation, one at a time.","uniqueKey":"at","typeLabel":"number"}},"required":["run_ids","aggregation"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"run_ids":["\u003cstring>"],"aggregation":"\u003cstring>","at":123}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"1a7d5001-05ca-4831-8d01-5c8c86f8ed54":{"description":"The sweep","content":{"application/json":{"schema":{"type":"object","properties":{"environment":{"type":"string","enum":["production","test"],"description":"The environment of the key that made the call: `production` or `test`. Evaluations, feedback, reviews and suggestions are separate per environment; registered structures are shared.","isRequired":true,"uniqueKey":"environment","typeLabel":"enum\u003cstring>"},"decision_id":{"type":"string","pattern":"^[a-z][a-z0-9_.-]{0,127}$","isRequired":true,"uniqueKey":"decision_id","typeLabel":"string"},"structure_hash":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","isRequired":true,"uniqueKey":"structure_hash","typeLabel":"string"},"aggregation":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","description":"The bands aggregation swept.","isRequired":true,"uniqueKey":"aggregation","typeLabel":"string"},"objective":{"type":"object","properties":{"source":{"type":"string","enum":["stored","balanced"],"description":"`stored`: the decision's stored objective. `balanced`: none is set, so each outcome's mistakes weigh the same in total.","isRequired":true,"uniqueKey":"objective.source","typeLabel":"enum\u003cstring>"},"revision":{"oneOf":[{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"objective.revision.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"isRequired":true,"uniqueKey":"objective.revision.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"objective.revision","typeLabel":"integer | null"},"objective_hash":{"oneOf":[{"type":"string","description":"The stored objective as written (null when balanced).","isRequired":true,"uniqueKey":"objective.objective_hash.oneOf.0","typeLabel":"string"},{"type":"null","description":"The stored objective as written (null when balanced).","isRequired":true,"uniqueKey":"objective.objective_hash.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"objective.objective_hash","typeLabel":"string | null"},"effective_hash":{"type":"string","description":"The hash of the severities and target scored by (each run weighs outcomes by its own cases). Never compare reports under different ones.","isRequired":true,"uniqueKey":"objective.effective_hash","typeLabel":"string"},"unknown_outcomes":{"type":"array","items":{"type":"string","uniqueKey":"objective.unknown_outcomes.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"objective.unknown_outcomes","typeLabel":"string[]"}},"required":["source","revision","objective_hash","effective_hash","unknown_outcomes"],"additionalProperties":true,"description":"What this run scored with.","x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"objective","typeLabel":"object"},"n":{"type":"integer","minimum":0,"description":"Cases scored, as loss_report counts them.","isRequired":true,"uniqueKey":"n","typeLabel":"integer"},"excluded":{"type":"object","properties":{"unlabeled":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"excluded.unlabeled","typeLabel":"integer"},"failed_transient":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"excluded.failed_transient","typeLabel":"integer"},"outcome_not_in_result":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"excluded.outcome_not_in_result","typeLabel":"integer"}},"required":["unlabeled","failed_transient","outcome_not_in_result"],"additionalProperties":true,"description":"Items left out, as loss_report leaves them out.","x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"excluded","typeLabel":"object"},"cuts":{"type":"array","items":{"type":"object","properties":{"at":{"type":"number","description":"The cut's current value.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].at","typeLabel":"number"},"outcome":{"type":"string","minLength":1,"maxLength":200,"description":"The outcome at and above the cut.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].outcome","typeLabel":"string"},"below":{"type":"string","minLength":1,"maxLength":200,"description":"The outcome just below it.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].below","typeLabel":"string"},"bounds":{"type":"object","properties":{"above":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"cuts.items.[INDEX].bounds.above.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"cuts.items.[INDEX].bounds.above.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cuts.items.[INDEX].bounds.above","typeLabel":"number | null"},"below":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"cuts.items.[INDEX].bounds.below.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"cuts.items.[INDEX].bounds.below.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cuts.items.[INDEX].bounds.below","typeLabel":"number | null"}},"required":["above","below"],"additionalProperties":true,"description":"The cut moves strictly between its neighbours: `above` the cut beneath it, `below` the cut over it. Null: none.","x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].bounds","typeLabel":"object"},"moving":{"type":"integer","minimum":0,"description":"Cases whose outcome this cut can change: a known value between its neighbours, at which the two bands give different outcomes. The rest keep theirs at every point.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].moving","typeLabel":"integer"},"current":{"type":"object","properties":{"loss_per_case":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].current.loss_per_case","typeLabel":"number"}},"required":["loss_per_case"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].current","typeLabel":"object"},"points":{"type":"array","items":{"type":"object","properties":{"at":{"type":"number","description":"A cut in the range: the current cut when the range holds it, else the middle; an open-ended range is given the width of its neighbour.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].at","typeLabel":"number"},"from":{"oneOf":[{"type":"number","description":"Every cut above this value and up to `to` gives the same loss (neighbouring ranges with equal loss are merged, so an outcome may change inside one). Null: no lower bound.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].from.oneOf.0","typeLabel":"number"},{"type":"null","description":"Every cut above this value and up to `to` gives the same loss (neighbouring ranges with equal loss are merged, so an outcome may change inside one). Null: no lower bound.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].from.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].from","typeLabel":"number | null"},"to":{"oneOf":[{"type":"number","description":"Null: no upper bound.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"null","description":"Null: no upper bound.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].to.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].to","typeLabel":"number | null"},"loss_per_case":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].loss_per_case","typeLabel":"number"},"fixed":{"type":"integer","minimum":0,"description":"Cases wrong at the current cut that this cut gets right.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].fixed","typeLabel":"integer"},"broken":{"type":"integer","minimum":0,"description":"Cases right at the current cut that this cut gets wrong.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX].broken","typeLabel":"integer"}},"required":["at","from","to","loss_per_case","fixed","broken"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"cuts.items.[INDEX].points.items.[INDEX]","typeLabel":"object"},"description":"One per range of cuts that gives a different loss, ascending. A response lists at most 100, nearest the current cut.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].points","typeLabel":"object[]"},"points_total":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].points_total","typeLabel":"integer"},"best":{"type":"object","properties":{"at":{"type":"number","description":"A cut in the range: the current cut when the range holds it, else the middle; an open-ended range is given the width of its neighbour.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.at","typeLabel":"number"},"from":{"oneOf":[{"type":"number","description":"Every cut above this value and up to `to` gives the same loss (neighbouring ranges with equal loss are merged, so an outcome may change inside one). Null: no lower bound.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.from.oneOf.0","typeLabel":"number"},{"type":"null","description":"Every cut above this value and up to `to` gives the same loss (neighbouring ranges with equal loss are merged, so an outcome may change inside one). Null: no lower bound.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.from.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.from","typeLabel":"number | null"},"to":{"oneOf":[{"type":"number","description":"Null: no upper bound.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.to.oneOf.0","typeLabel":"number"},{"type":"null","description":"Null: no upper bound.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.to.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.to","typeLabel":"number | null"},"loss_per_case":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.loss_per_case","typeLabel":"number"},"fixed":{"type":"integer","minimum":0,"description":"Cases wrong at the current cut that this cut gets right.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.fixed","typeLabel":"integer"},"broken":{"type":"integer","minimum":0,"description":"Cases right at the current cut that this cut gets wrong.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.broken","typeLabel":"integer"},"change":{"type":"number","description":"Loss per case at the best point minus at the current cut: negative is better.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.change","typeLabel":"number"},"fixed_examples":{"type":"array","items":{"type":"string","uniqueKey":"cuts.items.[INDEX].best.fixed_examples.items.[INDEX]","typeLabel":"string"},"description":"A few of its cases, costliest first, by the id each case carries.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.fixed_examples","typeLabel":"string[]"},"broken_examples":{"type":"array","items":{"type":"string","uniqueKey":"cuts.items.[INDEX].best.broken_examples.items.[INDEX]","typeLabel":"string"},"description":"A few of its cases, costliest first, by the id each case carries.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].best.broken_examples","typeLabel":"string[]"}},"required":["at","from","to","loss_per_case","fixed","broken","change","fixed_examples","broken_examples"],"additionalProperties":true,"description":"The lowest loss; among equals, the range holding the current cut, else the one nearest it. In-sample: `cross_validation` says whether it generalizes.","x-moonbounce-sdk-known-fields":true,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].best","typeLabel":"object"},"cross_validation":{"oneOf":[{"type":"object","description":"Cross-validation of choosing the cut by the lowest loss: folds over item groups, stratified by label. Null when, among the cases the cut can move, fewer than 2 item groups are ones the band below gets right, or fewer than 2 the band above gets right: too little evidence on a side to check what moving the cut costs there.","required":["folds","groups","current_loss_per_case","tuned_loss_per_case","fold_cuts","holds"],"x-moonbounce-sdk-known-fields":true,"properties":{"folds":{"type":"integer","minimum":0,"description":"5, or fewer with fewer item groups (then one group per fold: leave one group out).","isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.0.folds","typeLabel":"integer"},"groups":{"type":"integer","minimum":0,"description":"Item groups the folds are made of, each kept in one fold: stored cases grouped by content as list_cases groups them, other items (a dry run's) by identical answers, attribute values and label.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.0.groups","typeLabel":"integer"},"current_loss_per_case":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.0.current_loss_per_case","typeLabel":"number"},"tuned_loss_per_case":{"type":"number","minimum":0,"description":"Each case's loss at the best cut chosen without its fold, averaged over every case.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.0.tuned_loss_per_case","typeLabel":"number"},"fold_cuts":{"type":"array","items":{"type":"number","uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.0.fold_cuts.items.[INDEX]","typeLabel":"number"},"description":"The best cut each fold's training cases chose, by fold.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.0.fold_cuts","typeLabel":"number[]"},"holds":{"type":"boolean","description":"Tuning beats the current cut on cases it did not see: `tuned_loss_per_case` is lower. False: the in-sample best may be noise.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.0.holds","typeLabel":"boolean"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.0","typeLabel":"object"},{"type":"null","description":"Cross-validation of choosing the cut by the lowest loss: folds over item groups, stratified by label. Null when, among the cases the cut can move, fewer than 2 item groups are ones the band below gets right, or fewer than 2 the band above gets right: too little evidence on a side to check what moving the cut costs there.","isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cuts.items.[INDEX].cross_validation","typeLabel":"object | null"}},"required":["at","outcome","below","bounds","moving","current","points","points_total","best","cross_validation"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"cuts.items.[INDEX]","typeLabel":"object"},"description":"One per cut swept, in the aggregation's order; each moves alone.","isRequired":true,"uniqueKey":"cuts","typeLabel":"object[]"}},"required":["environment","decision_id","structure_hash","aggregation","objective","n","excluded","cuts"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"environment":"production","decision_id":"\u003cstring>","structure_hash":"\u003cstring>","aggregation":"\u003cstring>","objective":{"source":"stored","revision":2,"objective_hash":"\u003cstring>","effective_hash":"\u003cstring>","unknown_outcomes":["\u003cstring>"]},"n":1,"excluded":{"unlabeled":1,"failed_transient":1,"outcome_not_in_result":1},"cuts":[{"at":123,"outcome":"\u003cstring>","below":"\u003cstring>","bounds":{"above":123,"below":123},"moving":1,"current":{"loss_per_case":1},"points":[{"at":123,"from":123,"to":123,"loss_per_case":1,"fixed":1,"broken":1}],"points_total":1,"best":{"at":123,"from":123,"to":123,"loss_per_case":1,"fixed":1,"broken":1,"change":123,"fixed_examples":["\u003cstring>"],"broken_examples":["\u003cstring>"]},"cross_validation":{"folds":1,"groups":1,"current_loss_per_case":1,"tuned_loss_per_case":1,"fold_cuts":[123],"holds":true}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"3cc0fe92-3fab-41cb-bd20-72b4d9194bed":{"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"},"e7d1c374-d1cf-4c62-a132-1347ec8b3e67":{"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"},"23d625be-a4b4-4f0e-bd57-88b7670198cc":{"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"},"2bce8224-f8ea-4062-b921-b364e5dede2e":{"description":"Not found, or not in this key's organization and environment","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"},"89bc1139-cf78-4916-8741-c5b96095e732":{"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"},"3fc234bc-211b-4cf4-9bef-58ca8a0d11fb":{"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"},"d67974b5-e899-4b32-951b-ae9d64cc9540":{"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":{"03b53094-9bcf-4803-a74e-523913e0fff0":{"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":{"a693c168-8b0c-4b0e-9c37-1ac5dc48dedc":{"url":"https://api.moonbounce.ai","description":"Production"}},"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":"Sweep a cut over a run's answers - Moonbounce Decisions API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T18:00:00.347Z","originalFileLocation":"api-reference/objective/sweep-a-cut-over-a-runs-answers.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=\"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs\u0026#x27; labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision\u0026#x27;s objective, as loss_report does. Name the aggregation (as near_cuts gives it, or aggregations.) and the cut by its current at; without at, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (points), each kept inside the input\u0026#x27;s range, the best range with what it fixes and breaks against the current cut, and cross_validation: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). holds: false means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by run_ids from evaluate with items or cases, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn\u0026#x27;t bands or isn\u0026#x27;t on the result\u0026#x27;s path is 400 AGGREGATION_INVALID; a cut it doesn\u0026#x27;t have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.\">\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=\"Sweep a cut over a run\u0026#x27;s answers - Moonbounce Decisions API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs\u0026#x27; labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision\u0026#x27;s objective, as loss_report does. Name the aggregation (as near_cuts gives it, or aggregations.) and the cut by its current at; without at, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (points), each kept inside the input\u0026#x27;s range, the best range with what it fixes and breaks against the current cut, and cross_validation: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). holds: false means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by run_ids from evaluate with items or cases, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn\u0026#x27;t bands or isn\u0026#x27;t on the result\u0026#x27;s path is 400 AGGREGATION_INVALID; a cut it doesn\u0026#x27;t have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.\">\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/objective/sweep-a-cut-over-a-runs-answers\">\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=objective\u0026amp;title=Sweep+a+cut+over+a+run%27s+answers\u0026amp;description=Tunes+one+cut+of+a+bands+aggregation+without+asking+an+engine+anything%3A+re-decides+the+runs%27+labeled+items+from+the+answers+and+attribute+values+they+hold+at+ev\u0026amp;theme=e6d1608244ab860cac0ff47e\u0026amp;signature=cc0e6bf1e38debd4ac5a1194ae168c6e12240f785cdbee5c7fd71cf4d7868c94\">\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=\"Sweep a cut over a run\u0026#x27;s answers - Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs\u0026#x27; labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision\u0026#x27;s objective, as loss_report does. Name the aggregation (as near_cuts gives it, or aggregations.) and the cut by its current at; without at, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (points), each kept inside the input\u0026#x27;s range, the best range with what it fixes and breaks against the current cut, and cross_validation: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). holds: false means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by run_ids from evaluate with items or cases, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn\u0026#x27;t bands or isn\u0026#x27;t on the result\u0026#x27;s path is 400 AGGREGATION_INVALID; a cut it doesn\u0026#x27;t have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://moonbounce.mintlify.site/_mintlify/api/og/v2?division=objective\u0026amp;title=Sweep+a+cut+over+a+run%27s+answers\u0026amp;description=Tunes+one+cut+of+a+bands+aggregation+without+asking+an+engine+anything%3A+re-decides+the+runs%27+labeled+items+from+the+answers+and+attribute+values+they+hold+at+ev\u0026amp;theme=e6d1608244ab860cac0ff47e\u0026amp;signature=cc0e6bf1e38debd4ac5a1194ae168c6e12240f785cdbee5c7fd71cf4d7868c94\">\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/objective/sweep-a-cut-over-a-runs-answers\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/objective/sweep-a-cut-over-a-runs-answers.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/objective/sweep-a-cut-over-a-runs-answers#webpage\",\"url\":\"https://docs.moonbounce.ai/api-reference/objective/sweep-a-cut-over-a-runs-answers\",\"name\":\"Sweep a cut over a run's answers\",\"description\":\"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs' labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision's objective, as loss_report does. Name the aggregation (as near_cuts gives it, or aggregations.) and the cut by its current at; without at, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (points), each kept inside the input's range, the best range with what it fixes and breaks against the current cut, and cross_validation: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). holds: false means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by run_ids from evaluate with items or cases, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn't bands or isn't on the result's path is 400 AGGREGATION_INVALID; a cut it doesn't have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.\",\"dateModified\":\"2026-11-06T18:00:00.347Z\",\"isPartOf\":{\"@id\":\"https://docs.moonbounce.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.moonbounce.ai/api-reference/objective/sweep-a-cut-over-a-runs-answers#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.moonbounce.ai/api-reference/objective/sweep-a-cut-over-a-runs-answers#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.moonbounce.ai/api-reference/health/health-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sweep a cut over a run's answers\",\"item\":\"https://docs.moonbounce.ai/api-reference/objective/sweep-a-cut-over-a-runs-answers\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.moonbounce.ai/api-reference/objective/sweep-a-cut-over-a-runs-answers#apireference\",\"headline\":\"Sweep a cut over a run's answers\",\"name\":\"Sweep a cut over a run's answers\",\"description\":\"Tunes one cut of a bands aggregation without asking an engine anything: re-decides the runs' labeled items from the answers and attribute values they hold at every point where moving the cut changes an outcome, and judges each point by the decision's objective, as loss_report does. Name the aggregation (as near_cuts gives it, or aggregations.) and the cut by its current at; without at, each of its cuts is swept alone with the others where they are. The cut moves only between its neighbours. Each cut lists the loss per case over its ranges (points), each kept inside the input's range, the best range with what it fixes and breaks against the current cut, and cross_validation: the best cut chosen again without each fold of item groups (5 folds, stratified by label; fewer with fewer groups) and scored on that fold; null with fewer than 2 item groups on either side of the cut (cases the band below gets right, cases the band above gets right). holds: false means the in-sample best may be noise: keep the cut unless a run of the moved cut is accepted by loss_report. Runs are named by run_ids from evaluate with items or cases, one structure; items are left out as loss_report leaves them out. Spends nothing. An unknown or expired run is 404 RUN_UNKNOWN; an aggregation that isn't bands or isn't on the result's path is 400 AGGREGATION_INVALID; a cut it doesn't have is 400 CUT_UNKNOWN; a result that is a value is 400 OUTCOMES_INVALID; a sweep that would take too long (many items over a large structure) is 422 REQUEST_TOO_LARGE: send fewer runs, or name one cut.\",\"url\":\"https://docs.moonbounce.ai/api-reference/objective/sweep-a-cut-over-a-runs-answers\",\"mainEntityOfPage\":{\"@id\":\"https://docs.moonbounce.ai/api-reference/objective/sweep-a-cut-over-a-runs-answers#webpage\"},\"dateModified\":\"2026-11-06T18:00:00.347Z\",\"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":"structures","pages":[{"title":"Validate and hash a decision structure","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/structures/hash","href":"/api-reference/structures/validate-and-hash-a-decision-structure"},{"title":"List registered structures","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/structures","href":"/api-reference/structures/list-registered-structures"},{"title":"Register a decision structure","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/structures","href":"/api-reference/structures/register-a-decision-structure"},{"title":"Get a registered structure","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/structures/{structure_hash}","href":"/api-reference/structures/get-a-registered-structure"},{"title":"List decisions in this environment","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions","href":"/api-reference/structures/list-decisions-in-this-environment"}]},{"group":"engines","pages":[{"title":"List the engines a decision can run on","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/engines","href":"/api-reference/engines/list-the-engines-a-decision-can-run-on"},{"title":"Get the engine a decision runs on","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/binding","href":"/api-reference/engines/get-the-engine-a-decision-runs-on"},{"title":"Choose the engine a decision runs on","description":"Sets the engine and model a decision runs on in this environment, as a new binding revision. Appends a binding revision for the calling key's environment, with one engine for every question. Evaluations run on it from the next call, and a switch also moves imported examples, previews and suggestions. The weights and cut points in a structure were set against one engine's answers and are not checked against another's, so switch with a test key first and backtest there: each environment has its own binding. 201 with the new revision; 200 and no new revision when the body matches the current one. An engine or model this deployment does not offer is 400 CAPABILITY_UNSUPPORTED. 404 until a structure is registered for the decision in this environment. An Idempotency-Key covers the body as sent, so retry with the same body; it replays even if the engine's configuration changed. Send `model` to pin the model rather than take the default.","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","description":"Judges one version's labeled results under the decision's objective and, with a `base`, compares the two on the same items: the loss report a preview returns. Each mistake's loss is its severity under the objective (every mistake `normal` when none is set), weighted so each expected outcome counts equally however many items it has; `loss_per_case` is their mean. `accepted` (lower loss per case, no new severe mistake on a human-labeled case) and `reasons` say whether the candidate is better. Each side is runs by `run_ids` (from evaluate with `items`, one structure per side) or `results` passed inline with their `structure` or `structure_hash`. Items match by `item_id`; the candidate's labels are used; unlabeled items, outcomes neither version can produce, items the base lacks and retryable failures on either side are left out and counted in `excluded`; a permanent failure counts as a mistake. List a resend's run beside the original: an item's result that didn't fail replaces its failed one. The report lists the worst mistakes, with example ids on every roll-up row. Send `cases` to page through each item's loss: `filter.kind` is `all`, `wrong` (default), `right`, `failed`, `severe`, `changed`, `cell`, `question`, `near_cut` or `missing_criterion`. Runs no engine and spends nothing; the word is loss, not money. An unknown or expired run is 404 RUN_UNKNOWN. A version whose result is a value, not outcomes, is 400 OUTCOMES_INVALID.","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":"Sweep a cut over a run's answers - Moonbounce Decisions API","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-DcUtcwZ_.js","dist-CJ9Oly2E.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-C5EfhVm0.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","AssistantPageLink-Mk6P3qvh.js"]}