Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as submissions (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal’s param starts submissions.<i>); the response then lists each one’s result in results. The sources that count toward an evaluation’s consensus, which previews and suggestions learn from, are owner (through this route), reviewers answering through the review routes (the Review app), and imported examples; app_native and app_resolution provide supporting feedback only. Use source: "owner" for your own judgment as the decision’s owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner’s single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use app_native or app_resolution for your app’s own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item’s group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims about an evaluation in the key’s environment, or about an item’s latest primary evaluation, at two levels: expected_answer (what one question’s answer should have been) and expected_outcome or verdict (what the decision should have produced, or approve/reject of the outcome it returned), plus input_broken. Claims are checked against that evaluation (400 with param): an expected_answer names a question of its structure (claims.<i>.question), one per question; an expected_outcome is one of the outcomes the result can produce (claims.<i>.value); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). supersedes must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). owner feedback cannot name an actor (403). Owner feedback, and superseding an owner submission, need the decisions:develop scope (403 INSUFFICIENT_SCOPE); integration sources need decisions:feedback. Read a submission back with GET /v1/feedback/{feedback_id}. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.
POST
/
v1
/
feedback
curl --request POST \ --url https://api.moonbounce.ai/v1/feedback \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "about": { "evaluation_id": "evl_01900000-0000-7000-8000-000000000000" }, "source": "owner", "claims": [ { "kind": "expected_outcome", "value": "review" } ], "reason": "The seller is verified, so this needs a person, not a removal."}'
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.
What the feedback is about. {evaluation_id} is preferred: it names exactly the answer you are judging. {decision_id, item_id} means the item's latest primary evaluation in the key's environment, resolved when the feedback arrives; the response says which one. Verdict claims need evaluation_id.
What you are saying about the evaluation, 1 to 65 claims: expected_answer (at most one per question), expected_outcome or verdict (at most one, and not both), and input_broken.
Required array length: 1 - 65 elements
What one question's answer should have been. It is stored against the question as it was asked (its hash), so a reworded question does not inherit it. Aggregations and attributes take none: aggregations are computed and attributes are facts you supplied.
Who is speaking. Three sources count toward an evaluation's consensus answer, which is what previews and suggestions learn from (on primary and example evaluations whose content is stored): owner through this route, reviewers answering through the review routes (the Review app), and imported examples. The owner outranks reviewers, and reviewers outrank imported examples. app_native and app_resolution provide supporting feedback only. owner: the decision owner's judgment. An expected_outcome or verdict claim decides the consensus; expected_answer claims refine a case that has a consensus and on their own decide nothing. owner folds every person into one: all owner feedback through this route is the decision owner's single voice, whoever sent it, and the latest owner submission with an end-level claim decides, replacing earlier ones. Agreement between people is only kept for reviewers on the review routes, who each get one vote. Use owner for corrections you stand behind. app_native: your app's own feedback about the outcome it acted on, for example a user approved or reverted it. app_resolution: how your own process finally settled the case, for example an appeal. The two weak sources never decide a consensus, but they are not inert. The first feedback a group of near-identical items gets in an environment, from any source other than an import, puts the group in training (an imported example's group is in the example split instead). A native or resolution submission's reason is shown to the suggestion generator alongside a case that other feedback decided. An input_broken claim from any source sets the evaluation aside.
Optional: why the answer was off, in your words. It is context for whoever writes the next change to the decision, so the most useful reason names the question that got it wrong, quotes the words in the content that show it, and states the rule that applies. A sentence is enough.
The id of your own earlier submission on the same evaluation that this one replaces. Only the latest submission in a chain counts; the earlier one stays readable and shows superseded_by.
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.
{"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":"6aed2b7f7f86d585254780fd","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"API reference","count":39},{"language":"default","tag":"Endpoints","count":38},{"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":"Get started","count":3},{"language":"default","tag":"Build a decision","count":3},{"language":"default","tag":"Improve 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":"vite-origin","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/feedback/submit-feedback-on-evaluations-or-items","slug":"/api-reference/feedback/submit-feedback-on-evaluations-or-items","pageMetadata":{"title":"Submit feedback on evaluations or items","description":"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as `submissions` (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal's `param` starts `submissions.\u003ci>`); the response then lists each one's result in `results`. The sources that count toward an evaluation's consensus, which previews and suggestions learn from, are `owner` (through this route), reviewers answering through the review routes (the Review app), and imported examples; `app_native` and `app_resolution` provide supporting feedback only. Use `source: \"owner\"` for your own judgment as the decision's owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner's single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use `app_native` or `app_resolution` for your app's own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item's group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their `input_broken` claims set the evaluation aside. See `source`. Records claims about an evaluation in the key's environment, or about an item's latest primary evaluation, at two levels: `expected_answer` (what one question's answer should have been) and `expected_outcome` or `verdict` (what the decision should have produced, or approve/reject of the outcome it returned), plus `input_broken`. Claims are checked against that evaluation (400 with `param`): an expected_answer names a question of its structure (`claims.\u003ci>.question`), one per question; an expected_outcome is one of the outcomes the result can produce (`claims.\u003ci>.value`); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). `supersedes` must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). `owner` feedback cannot name an `actor` (403). Owner feedback, and superseding an owner submission, need the `decisions:develop` scope (403 INSUFFICIENT_SCOPE); integration sources need `decisions:feedback`. Read a submission back with `GET /v1/feedback/{feedback_id}`. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/feedback","href":"/api-reference/feedback/submit-feedback-on-evaluations-or-items","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: [\"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as \", _jsx(_components.code, {\n children: \"submissions\"\n }), \" (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal’s \", _jsx(_components.code, {\n children: \"param\"\n }), \" starts \", _jsx(_components.code, {\n children: \"submissions.\u003ci>\"\n }), \"); the response then lists each one’s result in \", _jsx(_components.code, {\n children: \"results\"\n }), \". The sources that count toward an evaluation’s consensus, which previews and suggestions learn from, are \", _jsx(_components.code, {\n children: \"owner\"\n }), \" (through this route), reviewers answering through the review routes (the Review app), and imported examples; \", _jsx(_components.code, {\n children: \"app_native\"\n }), \" and \", _jsx(_components.code, {\n children: \"app_resolution\"\n }), \" provide supporting feedback only. Use \", _jsx(_components.code, {\n children: \"source: \\\"owner\\\"\"\n }), \" for your own judgment as the decision’s owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner’s single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use \", _jsx(_components.code, {\n children: \"app_native\"\n }), \" or \", _jsx(_components.code, {\n children: \"app_resolution\"\n }), \" for your app’s own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item’s group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their \", _jsx(_components.code, {\n children: \"input_broken\"\n }), \" claims set the evaluation aside. See \", _jsx(_components.code, {\n children: \"source\"\n }), \". Records claims about an evaluation in the key’s environment, or about an item’s latest primary evaluation, at two levels: \", _jsx(_components.code, {\n children: \"expected_answer\"\n }), \" (what one question’s answer should have been) and \", _jsx(_components.code, {\n children: \"expected_outcome\"\n }), \" or \", _jsx(_components.code, {\n children: \"verdict\"\n }), \" (what the decision should have produced, or approve/reject of the outcome it returned), plus \", _jsx(_components.code, {\n children: \"input_broken\"\n }), \". Claims are checked against that evaluation (400 with \", _jsx(_components.code, {\n children: \"param\"\n }), \"): an expected_answer names a question of its structure (\", _jsx(_components.code, {\n children: \"claims.\u003ci>.question\"\n }), \"), one per question; an expected_outcome is one of the outcomes the result can produce (\", _jsx(_components.code, {\n children: \"claims.\u003ci>.value\"\n }), \"); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). \", _jsx(_components.code, {\n children: \"supersedes\"\n }), \" must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). \", _jsx(_components.code, {\n children: \"owner\"\n }), \" feedback cannot name an \", _jsx(_components.code, {\n children: \"actor\"\n }), \" (403). Owner feedback, and superseding an owner submission, need the \", _jsx(_components.code, {\n children: \"decisions:develop\"\n }), \" scope (403 INSUFFICIENT_SCOPE); integration sources need \", _jsx(_components.code, {\n children: \"decisions:feedback\"\n }), \". Read a submission back with \", _jsx(_components.code, {\n children: \"GET /v1/feedback/{feedback_id}\"\n }), \". A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.\"]\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":"Submit feedback on evaluations or items","description":"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as `submissions` (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal's `param` starts `submissions.\u003ci>`); the response then lists each one's result in `results`. The sources that count toward an evaluation's consensus, which previews and suggestions learn from, are `owner` (through this route), reviewers answering through the review routes (the Review app), and imported examples; `app_native` and `app_resolution` provide supporting feedback only. Use `source: \"owner\"` for your own judgment as the decision's owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner's single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use `app_native` or `app_resolution` for your app's own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item's group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their `input_broken` claims set the evaluation aside. See `source`. Records claims about an evaluation in the key's environment, or about an item's latest primary evaluation, at two levels: `expected_answer` (what one question's answer should have been) and `expected_outcome` or `verdict` (what the decision should have produced, or approve/reject of the outcome it returned), plus `input_broken`. Claims are checked against that evaluation (400 with `param`): an expected_answer names a question of its structure (`claims.\u003ci>.question`), one per question; an expected_outcome is one of the outcomes the result can produce (`claims.\u003ci>.value`); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). `supersedes` must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). `owner` feedback cannot name an `actor` (403). Owner feedback, and superseding an owner submission, need the `decisions:develop` scope (403 INSUFFICIENT_SCOPE); integration sources need `decisions:feedback`. Read a submission back with `GET /v1/feedback/{feedback_id}`. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/feedback","href":"/api-reference/feedback/submit-feedback-on-evaluations-or-items","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"submitFeedback","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"tags":["feedback"],"security":["621df09e-508e-4091-856b-a54a7f00cd23","96ac2b69-7f57-4a42-ad1c-80972bbf1445"],"summary":"Submit feedback on evaluations or items","description":"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as `submissions` (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal's `param` starts `submissions.\u003ci>`); the response then lists each one's result in `results`. The sources that count toward an evaluation's consensus, which previews and suggestions learn from, are `owner` (through this route), reviewers answering through the review routes (the Review app), and imported examples; `app_native` and `app_resolution` provide supporting feedback only. Use `source: \"owner\"` for your own judgment as the decision's owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner's single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use `app_native` or `app_resolution` for your app's own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item's group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their `input_broken` claims set the evaluation aside. See `source`. Records claims about an evaluation in the key's environment, or about an item's latest primary evaluation, at two levels: `expected_answer` (what one question's answer should have been) and `expected_outcome` or `verdict` (what the decision should have produced, or approve/reject of the outcome it returned), plus `input_broken`. Claims are checked against that evaluation (400 with `param`): an expected_answer names a question of its structure (`claims.\u003ci>.question`), one per question; an expected_outcome is one of the outcomes the result can produce (`claims.\u003ci>.value`); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). `supersedes` must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). `owner` feedback cannot name an `actor` (403). Owner feedback, and superseding an owner submission, need the `decisions:develop` scope (403 INSUFFICIENT_SCOPE); integration sources need `decisions:feedback`. Read a submission back with `GET /v1/feedback/{feedback_id}`. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.","parameters":["ca66bcbc-a8e2-434d-9c18-6813609a2065"],"requestBody":"dc7cf93e-805f-4366-9976-3a446545d12d","responses":{"201":"4dfb6808-974e-4841-a19b-b0eed9a66014","400":"e5cacd4c-a2c2-4401-8eee-775bd852757f","401":"31cd4cf7-c1b7-4bab-a761-12907ddc92d1","403":"3b2ce8e8-e866-41b8-8b36-47f3ff014bf4","404":"3d840899-7fe9-4040-8000-9267b66a26b0","409":"e2503366-d45a-41b0-819e-a57a110318c0","410":"041b0d25-8437-420e-9c31-410dba86c1cd","413":"50592751-7dfb-42c7-91a8-9fcc41a9a0ce","422":"1b7961b6-04c8-465b-8f19-fac6638afbe7","429":"5be4642d-e892-4fc6-8904-12824011cb96","503":"821ab345-99b5-4f26-95de-4215f8b026e1"},"method":"post","type":"path","servers":["5199a294-99c0-440b-a171-e6a2ae5671e1"],"path":"/v1/feedback","baseUrlOptions":["https://api.moonbounce.ai"],"title":"Submit feedback on evaluations or items","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ca66bcbc-a8e2-434d-9c18-6813609a2065":{"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":{"owner_outcome":{"title":"owner_outcome","value":{"about":{"evaluation_id":"evl_01900000-0000-7000-8000-000000000000"},"source":"owner","claims":[{"kind":"expected_outcome","value":"review"}],"reason":"The seller is verified, so this needs a person, not a removal."}},"owner_answer":{"title":"owner_answer","value":{"about":{"evaluation_id":"evl_01900000-0000-7000-8000-000000000000"},"source":"owner","claims":[{"kind":"expected_outcome","value":"allow"},{"kind":"expected_answer","question":"counterfeit","value":false}]}},"native_approve":{"title":"native_approve","value":{"about":{"evaluation_id":"evl_01900000-0000-7000-8000-000000000000"},"source":"app_native","claims":[{"kind":"verdict","value":"approve"}]}}},"schema":{"oneOf":[{"type":"object","required":["about","claims","source"],"properties":{"about":{"oneOf":[{"type":"object","description":"What the feedback is about. `{evaluation_id}` is preferred: it names exactly the answer you are judging. `{decision_id, item_id}` means the item's latest primary evaluation in the key's environment, resolved when the feedback arrives; the response says which one. Verdict claims need `evaluation_id`.","required":["evaluation_id"],"properties":{"evaluation_id":{"type":"string","pattern":"^evl_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","description":"The evaluation this judges. Required for verdict claims.","isRequired":true,"uniqueKey":"oneOf.0.about.oneOf.0.evaluation_id","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.0.about.oneOf.0","typeLabel":"object"},{"type":"object","description":"What the feedback is about. `{evaluation_id}` is preferred: it names exactly the answer you are judging. `{decision_id, item_id}` means the item's latest primary evaluation in the key's environment, resolved when the feedback arrives; the response says which one. Verdict claims need `evaluation_id`.","required":["decision_id","item_id"],"properties":{"decision_id":{"type":"string","pattern":"^[a-z][a-z0-9_.-]{0,127}$","isRequired":true,"uniqueKey":"oneOf.0.about.oneOf.1.decision_id","typeLabel":"string"},"item_id":{"type":"string","minLength":1,"maxLength":256,"description":"The item id you sent to evaluate.","isRequired":true,"uniqueKey":"oneOf.0.about.oneOf.1.item_id","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.0.about.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.0.about","typeLabel":"object"},"claims":{"type":"array","items":{"oneOf":[{"type":"object","description":"What one question's answer should have been. It is stored against the question as it was asked (its hash), so a reworded question does not inherit it. Aggregations and attributes take none: aggregations are computed and attributes are facts you supplied.","required":["kind","question","value"],"properties":{"kind":{"type":"string","enum":["expected_answer"],"isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.0.kind","typeLabel":"enum\u003cstring>"},"question":{"type":"string","minLength":1,"maxLength":64,"description":"A question of the evaluation's structure.","isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.0.question","typeLabel":"string"},"value":{"type":"boolean","description":"What the question's answer should have been: true or false for a noul question.","isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.0.value","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"The outcome the decision should have produced. A decision whose result is a value (a number) has no outcome and takes no expected_outcome or verdict.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["expected_outcome"],"isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.1.kind","typeLabel":"enum\u003cstring>"},"value":{"type":"string","minLength":1,"maxLength":200,"description":"One of the outcomes the decision's result can produce.","isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.1.value","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Approve or reject the outcome that was shown. Needs `about.evaluation_id`, and an evaluation whose outcome was shown to someone: primary traffic that decided (status `decided`). An evaluation that abstained has only a fallback outcome, whatever it is called. Not with expected_outcome in one submission.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["verdict"],"isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.2.kind","typeLabel":"enum\u003cstring>"},"value":{"type":"string","enum":["approve","reject"],"description":"approve: the shown outcome was right. reject: it was wrong.","isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.2.value","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"The content could not be judged. The evaluation is kept out of fits and previews.","required":["kind","problem"],"properties":{"kind":{"type":"string","enum":["input_broken"],"isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.3.kind","typeLabel":"enum\u003cstring>"},"problem":{"type":"string","enum":["truncated","wrong_language","bad_extraction","unreadable","other"],"isRequired":true,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.3.problem","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"oneOf.0.claims.items.[INDEX].oneOf.3","typeLabel":"object"}],"uniqueKey":"oneOf.0.claims.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":65,"description":"What you are saying about the evaluation, 1 to 65 claims: expected_answer (at most one per question), expected_outcome or verdict (at most one, and not both), and input_broken.","isRequired":true,"uniqueKey":"oneOf.0.claims","typeLabel":"object[]"},"source":{"type":"string","enum":["app_native","app_resolution","owner"],"description":"Who is speaking. Three sources count toward an evaluation's consensus answer, which is what previews and suggestions learn from (on primary and example evaluations whose content is stored): `owner` through this route, reviewers answering through the review routes (the Review app), and imported examples. The owner outranks reviewers, and reviewers outrank imported examples. `app_native` and `app_resolution` provide supporting feedback only. `owner`: the decision owner's judgment. An expected_outcome or verdict claim decides the consensus; expected_answer claims refine a case that has a consensus and on their own decide nothing. `owner` folds every person into one: all owner feedback through this route is the decision owner's single voice, whoever sent it, and the latest owner submission with an end-level claim decides, replacing earlier ones. Agreement between people is only kept for reviewers on the review routes, who each get one vote. Use `owner` for corrections you stand behind. `app_native`: your app's own feedback about the outcome it acted on, for example a user approved or reverted it. `app_resolution`: how your own process finally settled the case, for example an appeal. The two weak sources never decide a consensus, but they are not inert. The first feedback a group of near-identical items gets in an environment, from any source other than an import, puts the group in training (an imported example's group is in the `example` split instead). A native or resolution submission's reason is shown to the suggestion generator alongside a case that other feedback decided. An `input_broken` claim from any source sets the evaluation aside.","isRequired":true,"uniqueKey":"oneOf.0.source","typeLabel":"enum\u003cstring>"},"actor":{"type":"string","minLength":1,"maxLength":256,"description":"Who in your system this comes from, for example a user or agent id. It is namespaced under your key. Not allowed with source `owner`: the owner is you.","uniqueKey":"oneOf.0.actor","typeLabel":"string"},"reason":{"type":"string","maxLength":4000,"description":"Optional: why the answer was off, in your words. It is context for whoever writes the next change to the decision, so the most useful reason names the question that got it wrong, quotes the words in the content that show it, and states the rule that applies. A sentence is enough.","uniqueKey":"oneOf.0.reason","typeLabel":"string"},"unsure":{"type":"boolean","description":"True when the judge is not confident in these claims.","uniqueKey":"oneOf.0.unsure","typeLabel":"boolean"},"supersedes":{"type":"string","pattern":"^fbk_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","description":"The id of your own earlier submission on the same evaluation that this one replaces. Only the latest submission in a chain counts; the earlier one stays readable and shows `superseded_by`.","uniqueKey":"oneOf.0.supersedes","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["submissions"],"properties":{"submissions":{"type":"array","items":{"type":"object","properties":{"about":{"oneOf":[{"type":"object","description":"What the feedback is about. `{evaluation_id}` is preferred: it names exactly the answer you are judging. `{decision_id, item_id}` means the item's latest primary evaluation in the key's environment, resolved when the feedback arrives; the response says which one. Verdict claims need `evaluation_id`.","required":["evaluation_id"],"properties":{"evaluation_id":{"type":"string","pattern":"^evl_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","description":"The evaluation this judges. Required for verdict claims.","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].about.oneOf.0.evaluation_id","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].about.oneOf.0","typeLabel":"object"},{"type":"object","description":"What the feedback is about. `{evaluation_id}` is preferred: it names exactly the answer you are judging. `{decision_id, item_id}` means the item's latest primary evaluation in the key's environment, resolved when the feedback arrives; the response says which one. Verdict claims need `evaluation_id`.","required":["decision_id","item_id"],"properties":{"decision_id":{"type":"string","pattern":"^[a-z][a-z0-9_.-]{0,127}$","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].about.oneOf.1.decision_id","typeLabel":"string"},"item_id":{"type":"string","minLength":1,"maxLength":256,"description":"The item id you sent to evaluate.","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].about.oneOf.1.item_id","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].about.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].about","typeLabel":"object"},"claims":{"type":"array","items":{"oneOf":[{"type":"object","description":"What one question's answer should have been. It is stored against the question as it was asked (its hash), so a reworded question does not inherit it. Aggregations and attributes take none: aggregations are computed and attributes are facts you supplied.","required":["kind","question","value"],"properties":{"kind":{"type":"string","enum":["expected_answer"],"isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.0.kind","typeLabel":"enum\u003cstring>"},"question":{"type":"string","minLength":1,"maxLength":64,"description":"A question of the evaluation's structure.","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.0.question","typeLabel":"string"},"value":{"type":"boolean","description":"What the question's answer should have been: true or false for a noul question.","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.0.value","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"The outcome the decision should have produced. A decision whose result is a value (a number) has no outcome and takes no expected_outcome or verdict.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["expected_outcome"],"isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.1.kind","typeLabel":"enum\u003cstring>"},"value":{"type":"string","minLength":1,"maxLength":200,"description":"One of the outcomes the decision's result can produce.","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.1.value","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Approve or reject the outcome that was shown. Needs `about.evaluation_id`, and an evaluation whose outcome was shown to someone: primary traffic that decided (status `decided`). An evaluation that abstained has only a fallback outcome, whatever it is called. Not with expected_outcome in one submission.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["verdict"],"isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.2.kind","typeLabel":"enum\u003cstring>"},"value":{"type":"string","enum":["approve","reject"],"description":"approve: the shown outcome was right. reject: it was wrong.","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.2.value","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"The content could not be judged. The evaluation is kept out of fits and previews.","required":["kind","problem"],"properties":{"kind":{"type":"string","enum":["input_broken"],"isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.3.kind","typeLabel":"enum\u003cstring>"},"problem":{"type":"string","enum":["truncated","wrong_language","bad_extraction","unreadable","other"],"isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.3.problem","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX].oneOf.3","typeLabel":"object"}],"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":65,"description":"What you are saying about the evaluation, 1 to 65 claims: expected_answer (at most one per question), expected_outcome or verdict (at most one, and not both), and input_broken.","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].claims","typeLabel":"object[]"},"source":{"type":"string","enum":["app_native","app_resolution","owner"],"description":"Who is speaking. Three sources count toward an evaluation's consensus answer, which is what previews and suggestions learn from (on primary and example evaluations whose content is stored): `owner` through this route, reviewers answering through the review routes (the Review app), and imported examples. The owner outranks reviewers, and reviewers outrank imported examples. `app_native` and `app_resolution` provide supporting feedback only. `owner`: the decision owner's judgment. An expected_outcome or verdict claim decides the consensus; expected_answer claims refine a case that has a consensus and on their own decide nothing. `owner` folds every person into one: all owner feedback through this route is the decision owner's single voice, whoever sent it, and the latest owner submission with an end-level claim decides, replacing earlier ones. Agreement between people is only kept for reviewers on the review routes, who each get one vote. Use `owner` for corrections you stand behind. `app_native`: your app's own feedback about the outcome it acted on, for example a user approved or reverted it. `app_resolution`: how your own process finally settled the case, for example an appeal. The two weak sources never decide a consensus, but they are not inert. The first feedback a group of near-identical items gets in an environment, from any source other than an import, puts the group in training (an imported example's group is in the `example` split instead). A native or resolution submission's reason is shown to the suggestion generator alongside a case that other feedback decided. An `input_broken` claim from any source sets the evaluation aside.","isRequired":true,"uniqueKey":"oneOf.1.submissions.items.[INDEX].source","typeLabel":"enum\u003cstring>"},"actor":{"type":"string","minLength":1,"maxLength":256,"description":"Who in your system this comes from, for example a user or agent id. It is namespaced under your key. Not allowed with source `owner`: the owner is you.","uniqueKey":"oneOf.1.submissions.items.[INDEX].actor","typeLabel":"string"},"reason":{"type":"string","maxLength":4000,"description":"Optional: why the answer was off, in your words. It is context for whoever writes the next change to the decision, so the most useful reason names the question that got it wrong, quotes the words in the content that show it, and states the rule that applies. A sentence is enough.","uniqueKey":"oneOf.1.submissions.items.[INDEX].reason","typeLabel":"string"},"unsure":{"type":"boolean","description":"True when the judge is not confident in these claims.","uniqueKey":"oneOf.1.submissions.items.[INDEX].unsure","typeLabel":"boolean"},"supersedes":{"type":"string","pattern":"^fbk_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","description":"The id of your own earlier submission on the same evaluation that this one replaces. Only the latest submission in a chain counts; the earlier one stays readable and shows `superseded_by`.","uniqueKey":"oneOf.1.submissions.items.[INDEX].supersedes","typeLabel":"string"}},"required":["about","claims","source"],"additionalProperties":false,"uniqueKey":"oneOf.1.submissions.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":200,"description":"1 to 200 submissions, each exactly as one call would send it. All are checked first; then all are stored together, or none.","isRequired":true,"uniqueKey":"oneOf.1.submissions","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"4dfb6808-974e-4841-a19b-b0eed9a66014":{"description":"Recorded","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":{"schema":{"oneOf":[{"type":"object","required":["environment","id","evaluation_id","item_id","claim_count","resolved_from_item"],"x-moonbounce-sdk-known-fields":true,"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":"oneOf.0.environment","typeLabel":"enum\u003cstring>"},"id":{"type":"string","pattern":"^fbk_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","isRequired":true,"uniqueKey":"oneOf.0.id","typeLabel":"string"},"evaluation_id":{"type":"string","pattern":"^evl_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","isRequired":true,"uniqueKey":"oneOf.0.evaluation_id","typeLabel":"string"},"item_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.item_id","typeLabel":"string"},"claim_count":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"oneOf.0.claim_count","typeLabel":"integer"},"resolved_from_item":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.resolved_from_item","typeLabel":"boolean"}},"additionalProperties":true,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["environment","results"],"x-moonbounce-sdk-known-fields":true,"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":"oneOf.1.environment","typeLabel":"enum\u003cstring>"},"results":{"type":"array","items":{"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":"oneOf.1.results.items.[INDEX].environment","typeLabel":"enum\u003cstring>"},"id":{"type":"string","pattern":"^fbk_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].id","typeLabel":"string"},"evaluation_id":{"type":"string","pattern":"^evl_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].evaluation_id","typeLabel":"string"},"item_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].item_id","typeLabel":"string"},"claim_count":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].claim_count","typeLabel":"integer"},"resolved_from_item":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].resolved_from_item","typeLabel":"boolean"}},"required":["environment","id","evaluation_id","item_id","claim_count","resolved_from_item"],"additionalProperties":true,"x-moonbounce-sdk-known-fields":true,"uniqueKey":"oneOf.1.results.items.[INDEX]","typeLabel":"object"},"description":"One per submission, in order.","isRequired":true,"uniqueKey":"oneOf.1.results","typeLabel":"object[]"}},"additionalProperties":true,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"environment":"production","id":"\u003cstring>","evaluation_id":"\u003cstring>","item_id":"\u003cstring>","claim_count":2,"resolved_from_item":true}}},"exampleType":"generated"}},"exampleType":"generated"},"e5cacd4c-a2c2-4401-8eee-775bd852757f":{"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"},"31cd4cf7-c1b7-4bab-a761-12907ddc92d1":{"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"},"3b2ce8e8-e866-41b8-8b36-47f3ff014bf4":{"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"},"3d840899-7fe9-4040-8000-9267b66a26b0":{"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"},"e2503366-d45a-41b0-819e-a57a110318c0":{"description":"Conflict with the current state","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"},"041b0d25-8437-420e-9c31-410dba86c1cd":{"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"},"50592751-7dfb-42c7-91a8-9fcc41a9a0ce":{"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"},"1b7961b6-04c8-465b-8f19-fac6638afbe7":{"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"},"5be4642d-e892-4fc6-8904-12824011cb96":{"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"},"821ab345-99b5-4f26-95de-4215f8b026e1":{"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":{"621df09e-508e-4091-856b-a54a7f00cd23":{"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:feedback"],"schemeName":"bearerAuth"}},"96ac2b69-7f57-4a42-ad1c-80972bbf1445":{"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":{"5199a294-99c0-440b-a171-e6a2ae5671e1":{"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:feedback"],"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"},{"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":"Submit feedback on evaluations or items - Moonbounce Decisions API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T00:56:41.260Z","originalFileLocation":"api-reference/feedback/submit-feedback-on-evaluations-or-items.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=\"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as submissions (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal\u0026#x27;s param starts submissions.); the response then lists each one\u0026#x27;s result in results. The sources that count toward an evaluation\u0026#x27;s consensus, which previews and suggestions learn from, are owner (through this route), reviewers answering through the review routes (the Review app), and imported examples; app_native and app_resolution provide supporting feedback only. Use source: \u0026quot;owner\u0026quot; for your own judgment as the decision\u0026#x27;s owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner\u0026#x27;s single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use app_native or app_resolution for your app\u0026#x27;s own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item\u0026#x27;s group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims about an evaluation in the key\u0026#x27;s environment, or about an item\u0026#x27;s latest primary evaluation, at two levels: expected_answer (what one question\u0026#x27;s answer should have been) and expected_outcome or verdict (what the decision should have produced, or approve/reject of the outcome it returned), plus input_broken. Claims are checked against that evaluation (400 with param): an expected_answer names a question of its structure (claims..question), one per question; an expected_outcome is one of the outcomes the result can produce (claims..value); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). supersedes must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). owner feedback cannot name an actor (403). Owner feedback, and superseding an owner submission, need the decisions:develop scope (403 INSUFFICIENT_SCOPE); integration sources need decisions:feedback. Read a submission back with GET /v1/feedback/{feedback_id}. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.\">\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=\"Submit feedback on evaluations or items - Moonbounce Decisions API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as submissions (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal\u0026#x27;s param starts submissions.); the response then lists each one\u0026#x27;s result in results. The sources that count toward an evaluation\u0026#x27;s consensus, which previews and suggestions learn from, are owner (through this route), reviewers answering through the review routes (the Review app), and imported examples; app_native and app_resolution provide supporting feedback only. Use source: \u0026quot;owner\u0026quot; for your own judgment as the decision\u0026#x27;s owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner\u0026#x27;s single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use app_native or app_resolution for your app\u0026#x27;s own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item\u0026#x27;s group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims about an evaluation in the key\u0026#x27;s environment, or about an item\u0026#x27;s latest primary evaluation, at two levels: expected_answer (what one question\u0026#x27;s answer should have been) and expected_outcome or verdict (what the decision should have produced, or approve/reject of the outcome it returned), plus input_broken. Claims are checked against that evaluation (400 with param): an expected_answer names a question of its structure (claims..question), one per question; an expected_outcome is one of the outcomes the result can produce (claims..value); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). supersedes must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). owner feedback cannot name an actor (403). Owner feedback, and superseding an owner submission, need the decisions:develop scope (403 INSUFFICIENT_SCOPE); integration sources need decisions:feedback. Read a submission back with GET /v1/feedback/{feedback_id}. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.\">\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/feedback/submit-feedback-on-evaluations-or-items\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://moonbounce.mintlify.app/_mintlify/api/og/v2?division=feedback\u0026amp;title=Submit+feedback+on+evaluations+or+items\u0026amp;description=Say+what+the+right+answer+was%3A+the+one+way+a+label+becomes+evidence.+Send+one+submission%2C+or+many+as+%60submissions%60+%28up+to+200%2C+each+exactly+as+one+call+would+se\u0026amp;theme=e6d1608244ab860cac0ff47e\u0026amp;signature=732c575436dcebd353c5e93031e2d3bc467423d495bf0e05806c8e84b1084bb9\">\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=\"Submit feedback on evaluations or items - Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as submissions (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal\u0026#x27;s param starts submissions.); the response then lists each one\u0026#x27;s result in results. The sources that count toward an evaluation\u0026#x27;s consensus, which previews and suggestions learn from, are owner (through this route), reviewers answering through the review routes (the Review app), and imported examples; app_native and app_resolution provide supporting feedback only. Use source: \u0026quot;owner\u0026quot; for your own judgment as the decision\u0026#x27;s owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner\u0026#x27;s single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use app_native or app_resolution for your app\u0026#x27;s own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item\u0026#x27;s group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims about an evaluation in the key\u0026#x27;s environment, or about an item\u0026#x27;s latest primary evaluation, at two levels: expected_answer (what one question\u0026#x27;s answer should have been) and expected_outcome or verdict (what the decision should have produced, or approve/reject of the outcome it returned), plus input_broken. Claims are checked against that evaluation (400 with param): an expected_answer names a question of its structure (claims..question), one per question; an expected_outcome is one of the outcomes the result can produce (claims..value); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). supersedes must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). owner feedback cannot name an actor (403). Owner feedback, and superseding an owner submission, need the decisions:develop scope (403 INSUFFICIENT_SCOPE); integration sources need decisions:feedback. Read a submission back with GET /v1/feedback/{feedback_id}. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://moonbounce.mintlify.app/_mintlify/api/og/v2?division=feedback\u0026amp;title=Submit+feedback+on+evaluations+or+items\u0026amp;description=Say+what+the+right+answer+was%3A+the+one+way+a+label+becomes+evidence.+Send+one+submission%2C+or+many+as+%60submissions%60+%28up+to+200%2C+each+exactly+as+one+call+would+se\u0026amp;theme=e6d1608244ab860cac0ff47e\u0026amp;signature=732c575436dcebd353c5e93031e2d3bc467423d495bf0e05806c8e84b1084bb9\">\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/feedback/submit-feedback-on-evaluations-or-items\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/feedback/submit-feedback-on-evaluations-or-items.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/feedback/submit-feedback-on-evaluations-or-items#webpage\",\"url\":\"https://docs.moonbounce.ai/api-reference/feedback/submit-feedback-on-evaluations-or-items\",\"name\":\"Submit feedback on evaluations or items\",\"description\":\"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as submissions (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal's param starts submissions.); the response then lists each one's result in results. The sources that count toward an evaluation's consensus, which previews and suggestions learn from, are owner (through this route), reviewers answering through the review routes (the Review app), and imported examples; app_native and app_resolution provide supporting feedback only. Use source: \\\"owner\\\" for your own judgment as the decision's owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner's single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use app_native or app_resolution for your app's own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item's group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims about an evaluation in the key's environment, or about an item's latest primary evaluation, at two levels: expected_answer (what one question's answer should have been) and expected_outcome or verdict (what the decision should have produced, or approve/reject of the outcome it returned), plus input_broken. Claims are checked against that evaluation (400 with param): an expected_answer names a question of its structure (claims..question), one per question; an expected_outcome is one of the outcomes the result can produce (claims..value); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). supersedes must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). owner feedback cannot name an actor (403). Owner feedback, and superseding an owner submission, need the decisions:develop scope (403 INSUFFICIENT_SCOPE); integration sources need decisions:feedback. Read a submission back with GET /v1/feedback/{feedback_id}. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.\",\"dateModified\":\"2026-11-06T00:56:41.260Z\",\"isPartOf\":{\"@id\":\"https://docs.moonbounce.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.moonbounce.ai/api-reference/feedback/submit-feedback-on-evaluations-or-items#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.moonbounce.ai/api-reference/feedback/submit-feedback-on-evaluations-or-items#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.moonbounce.ai/api-reference/health/health-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"feedback\",\"item\":\"https://docs.moonbounce.ai/api-reference/feedback/list-a-decisions-labeled-cases\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Submit feedback on evaluations or items\",\"item\":\"https://docs.moonbounce.ai/api-reference/feedback/submit-feedback-on-evaluations-or-items\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.moonbounce.ai/api-reference/feedback/submit-feedback-on-evaluations-or-items#apireference\",\"headline\":\"Submit feedback on evaluations or items\",\"name\":\"Submit feedback on evaluations or items\",\"description\":\"Say what the right answer was: the one way a label becomes evidence. Send one submission, or many as submissions (up to 200, each exactly as one call would send it): every submission is checked first, then all are stored in one transaction, or none are (a refusal's param starts submissions.); the response then lists each one's result in results. The sources that count toward an evaluation's consensus, which previews and suggestions learn from, are owner (through this route), reviewers answering through the review routes (the Review app), and imported examples; app_native and app_resolution provide supporting feedback only. Use source: \\\"owner\\\" for your own judgment as the decision's owner: its expected_outcome or verdict claim decides the consensus; expected_answer claims alone decide nothing. All owner feedback through this route is the decision owner's single voice, whoever sent it (the latest owner submission with an end-level claim decides, replacing earlier ones); agreement between people is only kept for reviewers on the review routes. Use app_native or app_resolution for your app's own feedback (a user approved or reverted the outcome, an appeal settled it): they never decide a consensus, but the first feedback on an item's group, from any source, fixes its split for good, their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims about an evaluation in the key's environment, or about an item's latest primary evaluation, at two levels: expected_answer (what one question's answer should have been) and expected_outcome or verdict (what the decision should have produced, or approve/reject of the outcome it returned), plus input_broken. Claims are checked against that evaluation (400 with param): an expected_answer names a question of its structure (claims..question), one per question; an expected_outcome is one of the outcomes the result can produce (claims..value); at most one end-level claim, never verdict and expected_outcome together; a result that is a value (a number) takes no end-level claim; and verdicts only on primary evaluations that decided an outcome (shown, and not abstained). supersedes must name a submission by the same actor on the same evaluation that nothing has superseded yet (409). owner feedback cannot name an actor (403). Owner feedback, and superseding an owner submission, need the decisions:develop scope (403 INSUFFICIENT_SCOPE); integration sources need decisions:feedback. Read a submission back with GET /v1/feedback/{feedback_id}. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header.\",\"url\":\"https://docs.moonbounce.ai/api-reference/feedback/submit-feedback-on-evaluations-or-items\",\"mainEntityOfPage\":{\"@id\":\"https://docs.moonbounce.ai/api-reference/feedback/submit-feedback-on-evaluations-or-items#webpage\"},\"dateModified\":\"2026-11-06T00:56:41.260Z\",\"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","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":"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","description":"Reads only. The decision's labeled cases in the key's environment, newest label first: the cases a preview replays, one per item group, each with its `evaluation_id`, label (`expected`) and where it came from (`label_source`, `consensus`, `feedback_source`), its split, the version it ran under and what it gave then, the `expected_answer` corrections by question hash, and the reasons people wrote. Evaluations with feedback that are not cases are counted in `excluded`, by reason. Filters: `outcomes` (comma-separated, no spaces, or a JSON array of strings for names that contain a comma; a case whose label is another outcome is excluded as `outcome_not_in_result`, as a preview excludes it). A preview over versions that produce those outcomes replays the newest 500 of that list; it may also keep an evaluation stored before attribute inputs were kept, which this list counts as `attribute_inputs_unavailable`, when its versions leave that attribute's default unchanged. `structure_hash` (the version it ran under) and `since` (inclusive) and `until` (exclusive) on when the evaluation ran choose which evaluations count, before one case per item group is kept, so a case labeled under an older version is listed for that version even when a newer evaluation of the item exists, and `excluded` counts only those evaluations. `label_source` then narrows the cases; `total` counts the cases after every filter. Content is left out unless `include=content`, which caps a page at 50 cases (200 without). Pass next_cursor as cursor, with the same filters, while has_more is true. A case that gets newer feedback while you page moves ahead of the cursor: list again from the start to see relabeled 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","description":"Reads back any feedback submission in the key's environment: one from `POST /v1/feedback`, an imported example's from `POST /v1/decisions/{decision_id}/examples`, or a review answer. `claims` are in the order and shape they were sent, and `claim_count` says how many there are. `resolved_from_item` says the submission named an item and the server picked the evaluation. `superseded_by` is set when a later submission replaced this one; a replaced submission no longer counts. `supersedes` is the one this replaced. `split` is what the item's group is: `example` is an imported example's group (imported with its labels) and `train` is a case with feedback; both are used for fitting. It is null when the item has no group yet. `withdrawn_at` marks a claimless withdrawal of the chain; ancestors never revive. On a spot check, `after_reveal` is false on the reviewer's blind answer and true on a later change of it. `reason_pending` on a superseded submission means its reason was never added before the answer was replaced: read the chain head. `supersedes` and `superseded_by` only ever name a submission on the same evaluation. 404 for an unknown id, another organization's or environment's submission, or one whose evaluation was deleted.","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":"Submit feedback on evaluations or items - Moonbounce Decisions API","buildId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","deploymentId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-B2eHeXx_.js","dist-Dt1IougW.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-DptzKFCt.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-B5zPa4Vr.js","utils-CVjrr8Yd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DTgURWzl.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DxTHtkdZ.js","snippetPresets-Cx47o5Vx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-4Fr6y9N_.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Dq2ElbEk.js","shallow-BfYl9r69.js","getApiPlaygroundDisplay-Ch3xc7i1.js","CodeSnippet-BsBxuJ1v.js","CodeSnippets-CetzeDL8.js","Page-CYZot51e.js","getPastedJson-BxPKFSJx.js","icon-o0J1Ochb.js","MethodPill-Du3usO5m.js","DuplicateIcon-DJypyMzl.js","createIcon-YMA6N8KJ.js","DynamicMarkdown-CWvhfcZc.js","SectionHeading-BdLVaXCd.js","axios-vUo_bRtp.js","Markdown-C4Ez6OeV.js","AssistantPageLink-CZ6Wt2Vb.js"]}