Say what the right answer was. 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 seed examples; app_native and app_resolution provide supporting feedback only. Use source: "owner" for your own judgment as the decision’s owner: its outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key’s environment, or about an item’s latest primary evaluation. Claims are checked against that evaluation (400 with param): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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": "outcome", "value": "review" } ], "reason": "The seller is verified, so this needs a person, not a rejection."}'
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. At most one outcome, one target and one verdict claim, and one claim per feature; an outcome and a target must not contradict each other.
Required array length: 1 - 65 elements
Whether the target statement is true. Only for specs that declare a target.
Who is speaking. Three sources count toward an evaluation's consensus answer, which is what previews and suggestions learn from (on primary and seed evaluations whose content is stored): owner through this route, reviewers answering through the review routes (the Review app), and seed examples. The owner outranks reviewers, and reviewers outrank seeds. app_native and app_resolution provide supporting feedback only. owner: the decision owner's judgment. An outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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, fixes the group's split for good: an owner's or reviewer's first feedback holds out 30% of groups to test suggestions, while a native or resolution first touch puts the group in training, so a native verdict sent before your own review means that item can never be held out. 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.
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":"#4f46e5"},"banner":{"content":"Looking for the Clavata policy and labeling API? Those docs are at [docs.clavata.ai](https://docs.clavata.ai). You are on the docs for the Moonbounce decisions platform.","dismissible":true,"type":"info"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"moonbounce","hasAudioNarration":false,"actualSubdomain":"moonbounce","customDomains":[],"gitSource":{"type":"github","owner":"clavataai","repo":"decisions-platform","deployBranch":"main","contentDirectory":"docs/site","isPrivate":true,"mountPath":"","label":"","_id":"6ae8f7a905e268646b31d443"},"chroma":{"latestBuiltDeploymentHistoryId":"6ae8f896f8277f19c7cc79c9","collectionId":"f756780d-07b6-4802-bb88-e6a9d392f388","liveDeploymentHistoryId":"6ae8f896f8277f19c7cc79c9","schemaVersion":"v3"},"entitlements":{},"buildId":"6ae8f896f8277f19c7cc79c9","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API reference","count":34},{"language":"default","tag":"Endpoints","count":33},{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"review","count":9},{"language":"default","tag":"suggestions","count":6},{"language":"default","tag":"specs","count":5},{"language":"default","tag":"Improve a decision","count":4},{"language":"default","tag":"feedback","count":4},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"engines","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/feedback/submit-feedback-on-an-evaluation-or-item","slug":"/api-reference/feedback/submit-feedback-on-an-evaluation-or-item","pageMetadata":{"title":"Submit feedback on an evaluation or item","description":"Say what the right answer was. 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 seed examples; `app_native` and `app_resolution` provide supporting feedback only. Use `source: \"owner\"` for your own judgment as the decision's owner: its outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their `input_broken` claims set the evaluation aside. See `source`. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key's environment, or about an item's latest primary evaluation. Claims are checked against that evaluation (400 with `param`): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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-an-evaluation-or-item","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 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 seed 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 outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), 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 (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key’s environment, or about an item’s latest primary evaluation. Claims are checked against that evaluation (400 with \", _jsx(_components.code, {\n children: \"param\"\n }), \"): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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 an evaluation or item","description":"Say what the right answer was. 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 seed examples; `app_native` and `app_resolution` provide supporting feedback only. Use `source: \"owner\"` for your own judgment as the decision's owner: its outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their `input_broken` claims set the evaluation aside. See `source`. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key's environment, or about an item's latest primary evaluation. Claims are checked against that evaluation (400 with `param`): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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-an-evaluation-or-item","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"submitFeedback","tags":["feedback"],"security":["29b63b25-4269-4baa-9a47-4adce5785d65","c90d3e59-dfc3-4c22-a8e1-fa9bc132b44c"],"summary":"Submit feedback on an evaluation or item","description":"Say what the right answer was. 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 seed examples; `app_native` and `app_resolution` provide supporting feedback only. Use `source: \"owner\"` for your own judgment as the decision's owner: its outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their `input_broken` claims set the evaluation aside. See `source`. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key's environment, or about an item's latest primary evaluation. Claims are checked against that evaluation (400 with `param`): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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":["4628e902-4e59-48fa-8e57-ea641426c1e9"],"requestBody":"811c6779-f24b-4691-b978-604d8f5a83fe","responses":{"201":"7c138e60-4394-4d47-9bbc-afd4afc6f766","400":"9d9526e3-13ed-4aea-b45c-89a0771719df","401":"9d7a75b5-c087-4b03-9f71-fe975d76def0","403":"d0ea3ebc-becd-411b-8af0-1c5975a30d8c","404":"992ba6eb-2f3b-4142-b63e-4073351c75c9","409":"ef93534b-03ce-4dfd-85f8-aedf8348a452","410":"e04c2044-e539-4157-9b9f-d6177d954734","422":"67818c9e-4346-408a-9f67-38a0139318ce","429":"c97d02e2-1687-4527-8766-4140608ec727","503":"de1a578a-ac7a-409f-a53a-fb7c71ffea77"},"method":"post","type":"path","servers":["9e61324b-4cc4-430d-a8d9-fa0221e50db5"],"path":"/v1/feedback","baseUrlOptions":["https://api.moonbounce.ai"],"title":"Submit feedback on an evaluation or item","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"4628e902-4e59-48fa-8e57-ea641426c1e9":{"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":"outcome","value":"review"}],"reason":"The seller is verified, so this needs a person, not a rejection."}},"owner_feature":{"title":"owner_feature","value":{"about":{"evaluation_id":"evl_01900000-0000-7000-8000-000000000000"},"source":"owner","claims":[{"kind":"outcome","value":"approve"},{"kind":"feature","feature":"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":{"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":"about.oneOf.0.evaluation_id","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"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":"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":"about.oneOf.1.item_id","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"about.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"about","typeLabel":"object"},"claims":{"type":"array","items":{"oneOf":[{"type":"object","description":"Whether the target statement is true. Only for specs that declare a target.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["target"],"isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.0.kind","typeLabel":"enum\u003cstring>"},"value":{"type":"boolean","description":"Whether the spec's target statement is true of this item.","isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.0.value","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"claims.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"The outcome this item should have had. On a cut score, the lowest outcome also says the target is false and the highest says it is true; middle outcomes say nothing about the target.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["outcome"],"isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.1.kind","typeLabel":"enum\u003cstring>"},"value":{"type":"string","minLength":1,"maxLength":64,"description":"The right outcome: one of this evaluation's outcomes (`below` or a cut's outcome); an `abstain` name counts only where it reuses one of them.","isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.1.value","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"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 (it has a score). An evaluation that abstained has only a fallback outcome, whatever it is called.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["verdict"],"isRequired":true,"uniqueKey":"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":"claims.items.[INDEX].oneOf.2.value","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"claims.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"The expected answer of one boolean feature. It is stored against that feature's prompt as it was judged, so a reworded prompt does not inherit it.","required":["kind","feature","value"],"properties":{"kind":{"type":"string","enum":["feature"],"isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.3.kind","typeLabel":"enum\u003cstring>"},"feature":{"type":"string","minLength":1,"maxLength":64,"description":"A boolean feature of the evaluation's spec.","isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.3.feature","typeLabel":"string"},"value":{"type":"boolean","description":"What the feature's answer should have been.","isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.3.value","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"claims.items.[INDEX].oneOf.3","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":"claims.items.[INDEX].oneOf.4.kind","typeLabel":"enum\u003cstring>"},"problem":{"type":"string","enum":["truncated","wrong_language","bad_extraction","unreadable","other"],"isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.4.problem","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"claims.items.[INDEX].oneOf.4","typeLabel":"object"},{"type":"object","description":"What your app did with the outcome. Observed behavior, not a statement of what is true.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["action"],"isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.5.kind","typeLabel":"enum\u003cstring>"},"value":{"type":"string","minLength":1,"maxLength":128,"description":"What your app did, in your own words (for example `auto_approved`).","isRequired":true,"uniqueKey":"claims.items.[INDEX].oneOf.5.value","typeLabel":"string"},"logic_version":{"type":"string","maxLength":128,"description":"Which version of your own logic acted.","uniqueKey":"claims.items.[INDEX].oneOf.5.logic_version","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"claims.items.[INDEX].oneOf.5","typeLabel":"object"}],"uniqueKey":"claims.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":65,"description":"What you are saying about the evaluation, 1 to 65 claims. At most one outcome, one target and one verdict claim, and one claim per feature; an outcome and a target must not contradict each other.","isRequired":true,"uniqueKey":"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 seed evaluations whose content is stored): `owner` through this route, reviewers answering through the review routes (the Review app), and seed examples. The owner outranks reviewers, and reviewers outrank seeds. `app_native` and `app_resolution` provide supporting feedback only. `owner`: the decision owner's judgment. An outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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, fixes the group's split for good: an owner's or reviewer's first feedback holds out 30% of groups to test suggestions, while a native or resolution first touch puts the group in training, so a native verdict sent before your own review means that item can never be held out. 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":"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":"actor","typeLabel":"string"},"reason":{"type":"string","maxLength":4000,"description":"Why, in your words. Optional.","uniqueKey":"reason","typeLabel":"string"},"unsure":{"type":"boolean","description":"True when the judge is not confident in these claims.","uniqueKey":"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":"supersedes","typeLabel":"string"}},"required":["about","claims","source"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"7c138e60-4394-4d47-9bbc-afd4afc6f766":{"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":{"type":"object","properties":{"environment":{"type":"string","enum":["production","test"],"description":"The environment of the key that made the call: `production` or `test`. Evaluations, feedback, reviews and suggestions are separate per environment; registered structures are shared.","isRequired":true,"uniqueKey":"environment","typeLabel":"enum\u003cstring>"},"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":"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":"evaluation_id","typeLabel":"string"},"item_id":{"type":"string","isRequired":true,"uniqueKey":"item_id","typeLabel":"string"},"claims":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"claims","typeLabel":"integer"},"resolved_from_item":{"type":"boolean","isRequired":true,"uniqueKey":"resolved_from_item","typeLabel":"boolean"}},"required":["environment","id","evaluation_id","item_id","claims","resolved_from_item"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"environment":"production","id":"\u003cstring>","evaluation_id":"\u003cstring>","item_id":"\u003cstring>","claims":2,"resolved_from_item":true}}},"exampleType":"generated"}},"exampleType":"generated"},"9d9526e3-13ed-4aea-b45c-89a0771719df":{"description":"Invalid request: `param` names the field at fault when one applies","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission_denied","not_found","conflict","rate_limited","engine_failed","unavailable","internal"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"For people; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Set where a caller can act on it, one of the reasons in the ErrorReason schema. New reasons may be added: treat an unknown one by the status and `type`.","uniqueKey":"error.reason","typeLabel":"string"},"param":{"type":"string","description":"The request field at fault, as a dotted path (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"9d7a75b5-c087-4b03-9f71-fe975d76def0":{"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 (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"d0ea3ebc-becd-411b-8af0-1c5975a30d8c":{"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 (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"992ba6eb-2f3b-4142-b63e-4073351c75c9":{"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 (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ef93534b-03ce-4dfd-85f8-aedf8348a452":{"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 (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"e04c2044-e539-4157-9b9f-d6177d954734":{"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 (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"67818c9e-4346-408a-9f67-38a0139318ce":{"description":"The request is well formed but cannot be processed (for example reason IDEMPOTENCY_KEY_REUSED)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","permission_denied","not_found","conflict","rate_limited","engine_failed","unavailable","internal"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"For people; don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","pattern":"^[A-Z][A-Z0-9_]+$","description":"Set where a caller can act on it, one of the reasons in the ErrorReason schema. New reasons may be added: treat an unknown one by the status and `type`.","uniqueKey":"error.reason","typeLabel":"string"},"param":{"type":"string","description":"The request field at fault, as a dotted path (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"c97d02e2-1687-4527-8766-4140608ec727":{"description":"RATE_LIMITED: retry after Retry-After seconds; QUOTA_EXCEEDED: details.reset_at gives the daily reset time (no Retry-After), or details.too_large asks for a smaller request","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 (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"de1a578a-ac7a-409f-a53a-fb7c71ffea77":{"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 (`subject.0.text`, `claims.1.value`).","uniqueKey":"error.param","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"error.details.additionalProperties","typeLabel":"any"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["type","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","reason":"\u003cstring>","param":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"29b63b25-4269-4baa-9a47-4adce5785d65":{"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"}},"c90d3e59-dfc3-4c22-a8e1-fa9bc132b44c":{"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":{"9e61324b-4cc4-430d-a8d9-fa0221e50db5":{"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 an evaluation or item - Moonbounce Decisions API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T20:55:03.944Z","originalFileLocation":"api-reference/feedback/submit-feedback-on-an-evaluation-or-item.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 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 seed 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 outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key\u0026#x27;s environment, or about an item\u0026#x27;s latest primary evaluation. Claims are checked against that evaluation (400 with param): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Submit feedback on an evaluation or item - Moonbounce Decisions API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Say what the right answer was. 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 seed 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 outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key\u0026#x27;s environment, or about an item\u0026#x27;s latest primary evaluation. Claims are checked against that evaluation (400 with param): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item\">\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+an+evaluation+or+item\u0026amp;description=Say+what+the+right+answer+was.+The+sources+that+count+toward+an+evaluation%27s+consensus%2C+which+previews+and+suggestions+learn+from%2C+are+%60owner%60+%28through+this+rou\u0026amp;theme=6d67371419b6cc4f4d7d2b27\u0026amp;signature=50bafad9b4245f879d42a662b262c355e3fe43a64a7d8eb2a5554038c43f4b54\">\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 an evaluation or item - Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Say what the right answer was. 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 seed 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 outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key\u0026#x27;s environment, or about an item\u0026#x27;s latest primary evaluation. Claims are checked against that evaluation (400 with param): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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+an+evaluation+or+item\u0026amp;description=Say+what+the+right+answer+was.+The+sources+that+count+toward+an+evaluation%27s+consensus%2C+which+previews+and+suggestions+learn+from%2C+are+%60owner%60+%28through+this+rou\u0026amp;theme=6d67371419b6cc4f4d7d2b27\u0026amp;signature=50bafad9b4245f879d42a662b262c355e3fe43a64a7d8eb2a5554038c43f4b54\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/moonbounce/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Moonbounce Decisions API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item\">\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-an-evaluation-or-item.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://moonbounce.mintlify.app/#organization\",\"name\":\"Moonbounce Decisions API\",\"url\":\"https://moonbounce.mintlify.app\"},{\"@type\":\"WebSite\",\"@id\":\"https://moonbounce.mintlify.app#website\",\"name\":\"Moonbounce Decisions API\",\"url\":\"https://moonbounce.mintlify.app\",\"publisher\":{\"@id\":\"https://moonbounce.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item#webpage\",\"url\":\"https://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item\",\"name\":\"Submit feedback on an evaluation or item\",\"description\":\"Say what the right answer was. 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 seed examples; app_native and app_resolution provide supporting feedback only. Use source: \\\"owner\\\" for your own judgment as the decision's owner: its outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key's environment, or about an item's latest primary evaluation. Claims are checked against that evaluation (400 with param): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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-02T20:55:03.944Z\",\"isPartOf\":{\"@id\":\"https://moonbounce.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://moonbounce.mintlify.app/api-reference/health/health-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Submit feedback on an evaluation or item\",\"item\":\"https://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item#apireference\",\"headline\":\"Submit feedback on an evaluation or item\",\"name\":\"Submit feedback on an evaluation or item\",\"description\":\"Say what the right answer was. 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 seed examples; app_native and app_resolution provide supporting feedback only. Use source: \\\"owner\\\" for your own judgment as the decision's owner: its outcome, target or verdict claim decides the consensus; feature 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 outcome, target or verdict 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 (native feedback sent before your review keeps that item out of the holdout), their reasons can reach the suggestion generator, and their input_broken claims set the evaluation aside. See source. Records claims (target, outcome, verdict, feature, input_broken, action) about an evaluation in the key's environment, or about an item's latest primary evaluation. Claims are checked against that evaluation (400 with param): at most one outcome, target and verdict claim and one claim per feature, an outcome and target that agree, 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://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item\",\"mainEntityOfPage\":{\"@id\":\"https://moonbounce.mintlify.app/api-reference/feedback/submit-feedback-on-an-evaluation-or-item#webpage\"},\"dateModified\":\"2026-11-02T20:55:03.944Z\",\"publisher\":{\"@id\":\"https://moonbounce.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://moonbounce.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Moonbounce Decisions API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Moonbounce Decisions API","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"API reference overview","href":"/reference/overview"}]},{"group":"Endpoints","pages":[{"group":"health","pages":[{"title":"Health check","deprecated":null,"version":null,"openapi":"/openapi.json get /health","href":"/api-reference/health/health-check"}]},{"group":"specs","pages":[{"title":"Hash a decision spec","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/specs/hash","href":"/api-reference/specs/hash-a-decision-spec"},{"title":"List registered structures","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/structures","href":"/api-reference/specs/list-registered-structures"},{"title":"Register a spec structure","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/structures","href":"/api-reference/specs/register-a-spec-structure"},{"title":"Get a registered structure and its spec","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/structures/{structure}","href":"/api-reference/specs/get-a-registered-structure-and-its-spec"},{"title":"List decisions in this environment","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions","href":"/api-reference/specs/list-decisions-in-this-environment"}]},{"group":"engines","pages":[{"title":"List the engines a decision can run on","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/engines","href":"/api-reference/engines/list-the-engines-a-decision-can-run-on"},{"title":"Get the engine a decision runs on","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/binding","href":"/api-reference/engines/get-the-engine-a-decision-runs-on"},{"title":"Choose the engine a decision runs on","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/binding/revisions","href":"/api-reference/engines/choose-the-engine-a-decision-runs-on"}]},{"group":"evaluate","pages":[{"title":"Evaluate an item against a decision","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/evaluate","href":"/api-reference/evaluate/evaluate-an-item-against-a-decision"},{"title":"Get a past evaluation","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/evaluations/{evaluation_id}","href":"/api-reference/evaluate/get-a-past-evaluation"},{"title":"List a decision's evaluations","description":"Reads only. Lists evaluations in the key's organization and environment, newest first, without content. Use getEvaluation for the stored subject. Deleted evaluations are omitted. since is inclusive and until is exclusive. Pass next_cursor as cursor while has_more is true.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/evaluations","href":"/api-reference/evaluate/list-a-decisions-evaluations"}]},{"group":"feedback","pages":[{"title":"Submit feedback on an evaluation or item","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/feedback","href":"/api-reference/feedback/submit-feedback-on-an-evaluation-or-item"},{"title":"Get a feedback submission as stored","description":"Reads back any feedback submission in the key's environment: one from `POST /v1/feedback`, a seed example's from `POST /v1/decisions/{decision_id}/seeds`, 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 the side of the training line the item's group is on: `seed` is a starting example, `train` is used for fitting, `holdout` is kept back to test suggestions and never shown to a suggestion generator, and `burned` is a holdout group whose cases were shown in a preview, that was merged with a near-duplicate group, or whose content was later imported as a seed example; it counts as training from then on. It is null when the item has no group yet. Held-out feedback is kept back to test suggestions, so even its author reads only that it was recorded and how many claims it holds: while the group is `holdout` (or the content's text belongs to a held-out group), `withheld` is `holdout` and `claims`, `reason`, `reason_pending` and `unsure` are left out; they come back once the group is burned. A submission whose item has no split yet is withheld the same way, as `unassigned`. `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; it is left out while `withheld` is set. `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":"Seed a decision with labeled examples","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/seeds","href":"/api-reference/feedback/seed-a-decision-with-labeled-examples"}]},{"group":"review","pages":[{"title":"List review items","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/review/items","href":"/api-reference/review/list-review-items"},{"title":"Get a review item","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/review/items/{item_id}","href":"/api-reference/review/get-a-review-item"},{"title":"Get the structure and weights a review item was decided with","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/review/items/{item_id}/configuration","href":"/api-reference/review/get-the-structure-and-weights-a-review-item-was-decided-with"},{"title":"Mark a review item as shown","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/shown","href":"/api-reference/review/mark-a-review-item-as-shown"},{"title":"Submit a review","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/submit","href":"/api-reference/review/submit-a-review"},{"title":"Withdraw a review answer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/withdraw","href":"/api-reference/review/withdraw-a-review-answer"},{"title":"Change your own earlier review answer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/change","href":"/api-reference/review/change-your-own-earlier-review-answer"},{"title":"Skip a review item","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/skip","href":"/api-reference/review/skip-a-review-item"},{"title":"Add the reason for a blind disagreement","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/review/items/{item_id}/reason","href":"/api-reference/review/add-the-reason-for-a-blind-disagreement"}]},{"group":"suggestions","pages":[{"title":"List suggestions for a decision","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/suggestions","href":"/api-reference/suggestions/list-suggestions-for-a-decision"},{"title":"Generate a suggestion on demand","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/suggestions","href":"/api-reference/suggestions/generate-a-suggestion-on-demand"},{"title":"Get a suggestion","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/suggestions/{suggestion_id}","href":"/api-reference/suggestions/get-a-suggestion"},{"title":"Mark a suggestion pulled or rejected","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/suggestions/{suggestion_id}/status","href":"/api-reference/suggestions/mark-a-suggestion-pulled-or-rejected"},{"title":"Preview a spec change against past feedback","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/decisions/{decision_id}/previews","href":"/api-reference/suggestions/preview-a-spec-change-against-past-feedback"},{"title":"Get the improvement loop's status","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/loop","href":"/api-reference/suggestions/get-the-improvement-loops-status"}]},{"group":"usage","pages":[{"title":"Engine and model cost for a decision, per evaluation and in total","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/decisions/{decision_id}/usage","href":"/api-reference/usage/engine-and-model-cost-for-a-decision-per-evaluation-and-in-total"}]},{"group":"keys","pages":[{"title":"Identify the calling key or sign-in","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/whoami","href":"/api-reference/keys/identify-the-calling-key-or-sign-in"}]}]}]}]},"basePath":"","title":"Submit feedback on an evaluation or item - Moonbounce Decisions API","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-DHaG7hr_.js","dist-DKZWslLH.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-BIWXJmsZ.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","AssistantPageLink-UDqbR6xh.js"]}