Only values / enabled / name / action → tweak (no recompile; audit policy.values_updated).
expression or parameter_spec present → authoring (recompile + revalidate; audit policy.expression_updated). The change_kind field on the response carries the classification.
The update is conditional on the policy’s revision: the caller passes the revision it last read as If-Match, and a concurrent editor who moved the policy on gets 409 policy_conflict instead of silently losing their edit.
An Earnie API key, sent as Authorization: Bearer sk_earnie_.... Create one under Settings > API keys. The key's scopes decide which operations it may call.
The policy revision the caller last read. Required: a policy mutation is never last-write-wins. Omitted → 428 precondition_required; no longer current → 409 policy_conflict.
The bare digest, its quoted form and its weak form all mean the same revision. * is refused with 409 rather than honoured as "any current representation", which would be exactly the unconditional write this exists to prevent. A comma-separated list of entity tags is refused with 400: a policy has one current revision, so offering several is not meaningful here, and saying so beats answering 409 for a request that was not understood.
PATCH semantics. Presence of any of expression / parameter_spec classifies the request as authoring (recompile + revalidate, audit policy.expression_updated). Otherwise the request is a tweak (no recompile, audit policy.values_updated). Omitted fields are left unchanged.
The imperative sentence an AI coding agent reads instead of the CEL (see Policy.agent_rule). A tweak, never authoring: it changes no gating content, so it neither recompiles the expression nor moves the policy revision.
Grouping within a scanner (e.g. licenses, vulnerabilities). Mutable — users can re-categorize a policy from the editor. Treated as a tweak (no recompile, no audit beyond the standard policy.values_updated).
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SCANOSS documentation","colors":{"primary":"#FF6A1A","light":"#FF6A1A","dark":"#FF6A1A"},"logo":{"light":"https://mintcdn.com/scanoss/9UP7eHL2Z_rQPx8l/scanoss-logo-horizontal-positive.svg?fit=max\u0026auto=format\u0026n=9UP7eHL2Z_rQPx8l\u0026q=85\u0026s=686c4487013423ef804e2e83983c76ef","dark":"https://mintcdn.com/scanoss/9UP7eHL2Z_rQPx8l/scanoss-logo-horizontal-negative.svg?fit=max\u0026auto=format\u0026n=9UP7eHL2Z_rQPx8l\u0026q=85\u0026s=03cf2002f3fff2726f8e9b19bb2781ec","href":"https://scanoss.com"},"favicon":"https://mintcdn.com/scanoss/SuvZQ2xWfRUv4OAb/scan-favicon.png?fit=max\u0026auto=format\u0026n=SuvZQ2xWfRUv4OAb\u0026q=85\u0026s=4f02839460dfdc66102d3b028b507df6","appearance":{"default":"system","strict":false},"footer":{"socials":{"x":"https://x.com/SCANOSS_","github":"https://github.com/scanoss","linkedin":"https://es.linkedin.com/company/scanoss"}},"seo":{"indexing":"all"},"fonts":{"heading":{"family":"Space Grotesk","weight":700,"format":"woff2"},"body":{"family":"Space Grotesk","format":"woff2"}},"integrations":{"ga4":{"measurementId":"G-NWY31TXG8Y"}},"banner":{"content":"**Earnie is here** — SCANOSS's major release for AI governance, cryptography, PQC readiness, and open source compliance. [Watch the release demo →](https://youtu.be/MKgIpH4bEQ4?si=wXECS3umWGx11mB7)","dismissible":true},"contextual":{"options":["copy","view","claude","chatgpt","cursor","vscode","mcp"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"scanoss","hasAudioNarration":false,"actualSubdomain":"scanoss","customDomains":["docs.scanoss.com"],"gitSource":{"type":"github","owner":"scanoss","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4b3963ba31227325e8be3","collectionId":"d9114605-ddef-42c8-ac16-d4fe7eeb21bc","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4b3963ba31227325e8be3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4b3c4e7bd3811c8096878","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Earnie","count":161},{"language":"default","tag":"API Reference","count":137},{"language":"default","tag":"Guides","count":87},{"language":"default","tag":"Developer Tools","count":67},{"language":"default","tag":"API reference","count":48},{"language":"default","tag":"v3 endpoints","count":47},{"language":"default","tag":"Scans","count":44},{"language":"default","tag":"scans","count":44},{"language":"default","tag":"Policies","count":22},{"language":"default","tag":"CLI Tools","count":21}]},"assistantConfig":{"enableStarterQuestions":true,"deflection":{"enabled":true,"email":"support@scanoss.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"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":"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}],"starterQuestions":[{"_id":"695fa5b6a879c7d6b0e8a169","deploymentId":"68551e34bde804c6773f4df2","questionText":"Cannot import/export projects?","status":"active","generatedBy":"manual","createdAt":"2026-01-08T12:40:22.697Z","updatedAt":"2026-01-08T12:40:22.697Z","__v":0},{"_id":"695fa5a4a879c7d6b0e8a064","deploymentId":"68551e34bde804c6773f4df2","questionText":"Dependency files not detected during scan?","status":"active","generatedBy":"manual","createdAt":"2026-01-08T12:40:04.675Z","updatedAt":"2026-01-08T12:40:04.675Z","__v":0},{"_id":"695fa566a879c7d6b0e89d1e","deploymentId":"68551e34bde804c6773f4df2","questionText":"How do I configure the SCANOSS API key?","status":"active","generatedBy":"manual","createdAt":"2026-01-08T12:39:02.662Z","updatedAt":"2026-01-08T12:39:02.662Z","__v":0}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"#banner{background-color:#ff6a1a!important;color:#fff!important}html:not(.dark) #assistant-entry,html:not(.dark) #background-color,html:not(.dark) #chat-assistant-sheet,html:not(.dark) #chat-assistant-sheet .bg-background-light,html:not(.dark) #navbar-transition,html:not(.dark) .chat-assistant-floating-input .bg-background-light,html:not(.dark) .chat-assistant-floating-input::before{background-color:#f4f6f9!important}html:not(.dark) h1{color:#081320!important}html:not(.dark) nav a[aria-current=page]{background-color:rgba(8,19,32,.1)!important}html.dark #background-color,html.dark #navbar-transition{background-color:#081320!important}html.dark .prose :where(h1, h2, h3, h4, h5, h6),html.dark .prose :where(p, li, td, th):not(svg *),html.dark h1{color:#fff!important}html.dark nav a[aria-current=page]{background-color:rgba(255,106,26,.15)!important}html.dark #assistant-entry,html.dark #chat-assistant-sheet,html.dark #chat-assistant-sheet .dark\\:bg-background-dark,html.dark .chat-assistant-floating-input .dark\\:bg-background-dark,html.dark .chat-assistant-floating-input::before{background-color:#081320!important}nav#sidebar .sticky.top-0.h-8,span[style*=radial-gradient]{display:none!important}#sidebar #navigation-items{padding-top:2rem}.eyebrow,nav a.text-primary{color:#ff6a1a!important}"}],"page":{"pagePath":"earnie/api-reference/policies/partial-update-of-a-policy","slug":"/earnie/api-reference/policies/partial-update-of-a-policy","pageMetadata":{"title":"Partial update of a policy","description":"Server classifies the request by payload:\n - Only `values` / `enabled` / `name` / `action` → tweak (no recompile; audit `policy.values_updated`).\n - `expression` or `parameter_spec` present → authoring (recompile + revalidate; audit `policy.expression_updated`). The `change_kind` field on the response carries the classification.\n\nThe update is conditional on the policy's `revision`: the caller passes the revision it last read as `If-Match`, and a concurrent editor who moved the policy on gets `409 policy_conflict` instead of silently losing their edit.","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json patch /v1/policies/{id}","href":"/earnie/api-reference/policies/partial-update-of-a-policy","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Server classifies the request by payload:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Only \", _jsx(_components.code, {\n children: \"values\"\n }), \" / \", _jsx(_components.code, {\n children: \"enabled\"\n }), \" / \", _jsx(_components.code, {\n children: \"name\"\n }), \" / \", _jsx(_components.code, {\n children: \"action\"\n }), \" → tweak (no recompile; audit \", _jsx(_components.code, {\n children: \"policy.values_updated\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"expression\"\n }), \" or \", _jsx(_components.code, {\n children: \"parameter_spec\"\n }), \" present → authoring (recompile + revalidate; audit \", _jsx(_components.code, {\n children: \"policy.expression_updated\"\n }), \"). The \", _jsx(_components.code, {\n children: \"change_kind\"\n }), \" field on the response carries the classification.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The update is conditional on the policy’s \", _jsx(_components.code, {\n children: \"revision\"\n }), \": the caller passes the revision it last read as \", _jsx(_components.code, {\n children: \"If-Match\"\n }), \", and a concurrent editor who moved the policy on gets \", _jsx(_components.code, {\n children: \"409 policy_conflict\"\n }), \" instead of silently losing their edit.\"]\n })]\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":"Partial update of a policy","description":"Server classifies the request by payload:\n - Only `values` / `enabled` / `name` / `action` → tweak (no recompile; audit `policy.values_updated`).\n - `expression` or `parameter_spec` present → authoring (recompile + revalidate; audit `policy.expression_updated`). The `change_kind` field on the response carries the classification.\n\nThe update is conditional on the policy's `revision`: the caller passes the revision it last read as `If-Match`, and a concurrent editor who moved the policy on gets `409 policy_conflict` instead of silently losing their edit.","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json patch /v1/policies/{id}","href":"/earnie/api-reference/policies/partial-update-of-a-policy","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"UpdatePolicy","summary":"Partial update of a policy","description":"Server classifies the request by payload:\n - Only `values` / `enabled` / `name` / `action` → tweak (no recompile; audit `policy.values_updated`).\n - `expression` or `parameter_spec` present → authoring (recompile + revalidate; audit `policy.expression_updated`). The `change_kind` field on the response carries the classification.\n\nThe update is conditional on the policy's `revision`: the caller passes the revision it last read as `If-Match`, and a concurrent editor who moved the policy on gets `409 policy_conflict` instead of silently losing their edit.","parameters":["35cc0fe1-23a8-4597-a251-1ba2756aa6e6"],"requestBody":"c7e7044f-b7b7-444f-8cf6-a0cf0dc19be5","responses":{"200":"b0e14c6e-4993-4017-9b08-66c195da51d1","400":"a720d9ba-5ec7-4589-855b-3ee1af829fc8","404":"da605022-b9d4-4c86-94dd-f07752f8cb8f","409":"0f6bcc0d-bea0-41e1-8c74-4939d3791956","422":"1ce1168e-a87a-4f22-9d5f-5bc83a0e969a","428":"64149773-0b66-4fa5-9527-5bfdf16e2779"},"method":"patch","type":"path","servers":["f8d27f6f-eaee-4d17-92d7-472d0c99a6e6"],"security":["f575c495-888c-424b-8584-c24d95ea4ce5"],"path":"/v1/policies/{id}","baseUrlOptions":["https://{tenant}.earnie.dev"],"title":"Partial update of a policy","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"35cc0fe1-23a8-4597-a251-1ba2756aa6e6":{"name":"If-Match","in":"header","required":true,"schema":{"type":"string","isRequired":true,"description":"The policy `revision` the caller last read. Required: a policy mutation is never last-write-wins. Omitted → `428 precondition_required`; no longer current → `409 policy_conflict`.\n\nThe bare digest, its quoted form and its weak form all mean the same revision. `*` is refused with `409` rather than honoured as \"any current representation\", which would be exactly the unconditional write this exists to prevent. A comma-separated list of entity tags is refused with `400`: a policy has one current revision, so offering several is not meaningful here, and saying so beats answering `409` for a request that was not understood.","uniqueKey":"","typeLabel":"string"},"description":"The policy `revision` the caller last read. Required: a policy mutation is never last-write-wins. Omitted → `428 precondition_required`; no longer current → `409 policy_conflict`.\n\nThe bare digest, its quoted form and its weak form all mean the same revision. `*` is refused with `409` rather than honoured as \"any current representation\", which would be exactly the unconditional write this exists to prevent. A comma-separated list of entity tags is refused with `400`: a policy has one current revision, so offering several is not meaningful here, and saying so beats answering `409` for a request that was not understood."},"74d18f4f-af3f-435e-926a-c19d3a1b3a71":{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"","typeLabel":"integer\u003cint64>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"PATCH semantics. Presence of any of `expression` / `parameter_spec` classifies the request as **authoring** (recompile + revalidate, audit `policy.expression_updated`). Otherwise the request is a **tweak** (no recompile, audit `policy.values_updated`). Omitted fields are left unchanged.","properties":{"name":{"oneOf":[{"type":"string","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"agent_rule":{"oneOf":[{"type":"string","description":"The imperative sentence an AI coding agent reads instead of the CEL (see `Policy.agent_rule`). A tweak, never authoring: it changes no gating content, so it neither recompiles the expression nor moves the policy `revision`.","uniqueKey":"agent_rule.oneOf.0","typeLabel":"string"},{"type":"null","description":"The imperative sentence an AI coding agent reads instead of the CEL (see `Policy.agent_rule`). A tweak, never authoring: it changes no gating content, so it neither recompiles the expression nor moves the policy `revision`.","uniqueKey":"agent_rule.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent_rule","typeLabel":"string | null"},"category":{"oneOf":[{"type":"string","description":"Grouping within a scanner (e.g. `licenses`, `vulnerabilities`). Mutable — users can re-categorize a policy from the editor. Treated as a tweak (no recompile, no audit beyond the standard `policy.values_updated`).","uniqueKey":"category.oneOf.0","typeLabel":"string"},{"type":"null","description":"Grouping within a scanner (e.g. `licenses`, `vulnerabilities`). Mutable — users can re-categorize a policy from the editor. Treated as a tweak (no recompile, no audit beyond the standard `policy.values_updated`).","uniqueKey":"category.oneOf.1","typeLabel":"null"}],"uniqueKey":"category","typeLabel":"string | null"},"enabled":{"oneOf":[{"type":"boolean","uniqueKey":"enabled.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"enabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"enabled","typeLabel":"boolean | null"},"action":{"oneOf":[{"type":"string","description":"Enforcement action applied when the policy fires. Verdict mapping: block → block warn → warn require → require","enum":["block","warn","require"],"uniqueKey":"action.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"action.oneOf.1","typeLabel":"null"}],"uniqueKey":"action","typeLabel":"enum\u003cstring> | null"},"values":{"oneOf":[{"type":"object","additionalProperties":true,"uniqueKey":"values.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"uniqueKey":"values.oneOf.1","typeLabel":"null"}],"uniqueKey":"values","typeLabel":"object | null"},"expression":{"oneOf":[{"type":"string","uniqueKey":"expression.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"expression.oneOf.1","typeLabel":"null"}],"uniqueKey":"expression","typeLabel":"string | null"},"parameter_spec":{"oneOf":[{"type":"array","items":{"type":"object","required":["key","label","type"],"properties":{"key":{"type":"string","description":"Semantic identifier (e.g. `min_stars`, `blocked_severities`). Referenced inside the expression as `params.\u003ckey>`.","isRequired":true,"uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].label","typeLabel":"string"},"type":{"type":"string","enum":["string","int","float","bool","enum","enum_set","tag_list"],"description":"Runtime type of a parameter slot. Drives the UI input control and validation hints.","isRequired":true,"uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"options":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX]","typeLabel":"string"},"uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].options.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].options.oneOf.1","typeLabel":"null"}],"uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].options","typeLabel":"string[] | null"},"default":{"description":"Used as the value when `values` leaves this key out, and stored as such. Must itself fit `type` and `options`. A parameter with no `default` must always be given a value.","uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].default","typeLabel":"any"},"constrains":{"oneOf":[{"type":"string","description":"Optional field-catalog `path` this parameter's values should be drawn from (e.g. `license.spdx_id`). Descriptive metadata only — NOT validated against the catalog at save time; consumed by frontend parameter pickers (out of scope for this change) to reuse `GET /fields/{path}/values`.","uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].constrains.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional field-catalog `path` this parameter's values should be drawn from (e.g. `license.spdx_id`). Descriptive metadata only — NOT validated against the catalog at save time; consumed by frontend parameter pickers (out of scope for this change) to reuse `GET /fields/{path}/values`.","uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].constrains.oneOf.1","typeLabel":"null"}],"uniqueKey":"parameter_spec.oneOf.0.items.[INDEX].constrains","typeLabel":"string | null"}},"uniqueKey":"parameter_spec.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"parameter_spec.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","required":["key","label","type"],"properties":{"key":{"type":"string","description":"Semantic identifier (e.g. `min_stars`, `blocked_severities`). Referenced inside the expression as `params.\u003ckey>`."},"label":{"type":"string"},"type":{"type":"string","enum":["string","int","float","bool","enum","enum_set","tag_list"],"description":"Runtime type of a parameter slot. Drives the UI input control and validation hints."},"options":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"default":{"description":"Used as the value when `values` leaves this key out, and stored as such. Must itself fit `type` and `options`. A parameter with no `default` must always be given a value."},"constrains":{"oneOf":[{"type":"string","description":"Optional field-catalog `path` this parameter's values should be drawn from (e.g. `license.spdx_id`). Descriptive metadata only — NOT validated against the catalog at save time; consumed by frontend parameter pickers (out of scope for this change) to reuse `GET /fields/{path}/values`."},{"type":"null","description":"Optional field-catalog `path` this parameter's values should be drawn from (e.g. `license.spdx_id`). Descriptive metadata only — NOT validated against the catalog at save time; consumed by frontend parameter pickers (out of scope for this change) to reuse `GET /fields/{path}/values`."}]}}},"uniqueKey":"parameter_spec.oneOf.1","typeLabel":"null"}],"uniqueKey":"parameter_spec","typeLabel":"object[] | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","description":"\u003cstring>","agent_rule":"\u003cstring>","category":"\u003cstring>","enabled":true,"values":{},"expression":"\u003cstring>","parameter_spec":[{"key":"\u003cstring>","label":"\u003cstring>","options":["\u003cstring>"],"default":"\u003cunknown>","constrains":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"b0e14c6e-4993-4017-9b08-66c195da51d1":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","required":["policy","change_kind"],"properties":{"policy":{"type":"object","required":["id","slug","source","module","category","name","description","agent_rule","agent_rule_stale","enabled","action","expression","parameter_spec","values","revision","created_at","updated_at"],"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"isRequired":true,"uniqueKey":"policy.id","typeLabel":"integer\u003cint64>"},"slug":{"type":"string","description":"Stable, human-readable identifier safe across deploys and migrations. Generated from `name` (kebab-cased) on Create when not supplied; templates ship with deterministic slugs (e.g. `block-copyleft-licenses`). Immutable after creation.","isRequired":true,"uniqueKey":"policy.slug","typeLabel":"string"},"source":{"type":"string","description":"Server-managed origin of the policy. Seeded templates return `seed`; user-authored rows return `custom`.","enum":["seed","custom"],"isRequired":true,"uniqueKey":"policy.source","typeLabel":"enum\u003cstring>"},"module":{"type":"string","description":"Finding domain the policy targets (e.g. `scans`, `crypto`, `crypto_finder`). AI provenance is an xBOM enrichment, not a separate policy domain.","isRequired":true,"uniqueKey":"policy.module","typeLabel":"string"},"category":{"type":"string","description":"Grouping within a scanner (e.g. `licenses`, `vulnerabilities`).","isRequired":true,"uniqueKey":"policy.category","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"policy.name","typeLabel":"string"},"description":{"type":"string","description":"Human-readable explanation of what the policy checks and why.","isRequired":true,"uniqueKey":"policy.description","typeLabel":"string"},"agent_rule":{"type":"string","description":"Keep it to roughly 200 bytes. That is not a stored-length limit — nothing rejects a longer one — it is where the RENDERED sentence is truncated with an ellipsis before it reaches an agent, measured after placeholders are substituted and in bytes rather than characters. A short rule whose `{banned_licenses}` expands to three hundred bytes is truncated too. The cap exists because this text sits in every prompt of every session.\n\nWritten in the second person, one sentence, no CEL: \"Do not add dependencies licensed {banned_licenses}.\"\n\n`{key}` placeholders name `parameter_spec[].key` entries and are substituted with the policy's current `values` at render time, so one sentence stays true after a parameter is tuned. A list value renders as `a, b or c`. A placeholder naming no parameter is rejected on save.\n\nEmpty is allowed and means \"no agent rule\": rendering falls back to `description`, and last to the CEL expression labelled as such, so a policy without one still reaches an agent. Like `description` it is prose and NOT part of the policy `revision` — rewording what an agent reads does not change what the gate does.","isRequired":true,"uniqueKey":"policy.agent_rule","typeLabel":"string"},"agent_rule_stale":{"type":"boolean","readOnly":true,"description":"True when `agent_rule` was written against different rule logic than this policy now carries — its `action`, `expression`, or the set of parameter keys has changed since the sentence was last saved.\n\nAn agent rule is hand-written prose and cannot be derived from CEL, so nothing keeps it true when the expression moves underneath it. This is how the product notices: the sentence still renders (it is usually still mostly right), but the policy is flagged so a human can review it. Saving the agent rule again clears the flag.\n\nParameter VALUES are deliberately excluded: `{key}` placeholders already keep the sentence true across a retune, so a threshold tweak never raises this. False when the policy has no agent rule, and false for a row that predates the stored basis — \"unknown\" must not read as \"stale\".","isRequired":true,"uniqueKey":"policy.agent_rule_stale","typeLabel":"boolean"},"enabled":{"type":"boolean","isRequired":true,"uniqueKey":"policy.enabled","typeLabel":"boolean"},"action":{"type":"string","enum":["block","warn","require"],"description":"Enforcement action applied when the policy fires. Verdict mapping: block → block warn → warn require → require","isRequired":true,"uniqueKey":"policy.action","typeLabel":"enum\u003cstring>"},"expression":{"type":"string","description":"CEL string. Compiled via `cel-go` on save (parse + type check + params.X consistency) and evaluated against findings via `Eval` (see `/preview` for the live-evaluation surface).","isRequired":true,"uniqueKey":"policy.expression","typeLabel":"string"},"parameter_spec":{"type":"array","items":{"type":"object","required":["key","label","type"],"properties":{"key":{"type":"string","description":"Semantic identifier (e.g. `min_stars`, `blocked_severities`). Referenced inside the expression as `params.\u003ckey>`.","isRequired":true,"uniqueKey":"policy.parameter_spec.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"policy.parameter_spec.items.[INDEX].label","typeLabel":"string"},"type":{"type":"string","enum":["string","int","float","bool","enum","enum_set","tag_list"],"description":"Runtime type of a parameter slot. Drives the UI input control and validation hints.","isRequired":true,"uniqueKey":"policy.parameter_spec.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"options":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"policy.parameter_spec.items.[INDEX].options.oneOf.0.items.[INDEX]","typeLabel":"string"},"uniqueKey":"policy.parameter_spec.items.[INDEX].options.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"uniqueKey":"policy.parameter_spec.items.[INDEX].options.oneOf.1","typeLabel":"null"}],"uniqueKey":"policy.parameter_spec.items.[INDEX].options","typeLabel":"string[] | null"},"default":{"description":"Used as the value when `values` leaves this key out, and stored as such. Must itself fit `type` and `options`. A parameter with no `default` must always be given a value.","uniqueKey":"policy.parameter_spec.items.[INDEX].default","typeLabel":"any"},"constrains":{"oneOf":[{"type":"string","description":"Optional field-catalog `path` this parameter's values should be drawn from (e.g. `license.spdx_id`). Descriptive metadata only — NOT validated against the catalog at save time; consumed by frontend parameter pickers (out of scope for this change) to reuse `GET /fields/{path}/values`.","uniqueKey":"policy.parameter_spec.items.[INDEX].constrains.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional field-catalog `path` this parameter's values should be drawn from (e.g. `license.spdx_id`). Descriptive metadata only — NOT validated against the catalog at save time; consumed by frontend parameter pickers (out of scope for this change) to reuse `GET /fields/{path}/values`.","uniqueKey":"policy.parameter_spec.items.[INDEX].constrains.oneOf.1","typeLabel":"null"}],"uniqueKey":"policy.parameter_spec.items.[INDEX].constrains","typeLabel":"string | null"}},"uniqueKey":"policy.parameter_spec.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"policy.parameter_spec","typeLabel":"object[]"},"values":{"type":"object","additionalProperties":true,"description":"Current parameter values keyed by `parameter_spec[].key`. Every declared key needs a value or a `default` in its spec entry, including a parameter the expression only reads behind `has()`; a key left out is stored with its `default`. See `ValuesInvalidError`.","isRequired":true,"uniqueKey":"policy.values","typeLabel":"object"},"revision":{"type":"string","readOnly":true,"description":"The policy's immutable content revision: a `sha256:` digest over the canonical form of the gating content — `action`, `expression`, `parameter_spec`, `values`. It is byte-identical to the `policy_hash` an evaluation records and to the revision a scan's policy snapshot names, so \"which revision produced this verdict\" and \"which revision is live now\" are answered in one vocabulary.\n\nMutations echo it back in `If-Match`. A stale revision is `409 policy_conflict`; a policy edit is never last-write-wins.\n\nIt covers the gating content and nothing else. Renaming a policy or rewriting its description leaves the revision unchanged, because neither changes what the gate does, and `enabled` is carried by presence in a scan's snapshot rather than by the digest.","isRequired":true,"uniqueKey":"policy.revision","typeLabel":"string"},"created_at":{"type":"string","format":"date-time","readOnly":true,"isRequired":true,"uniqueKey":"policy.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","readOnly":true,"isRequired":true,"uniqueKey":"policy.updated_at","typeLabel":"string\u003cdate-time>"},"result_summary":{"type":"object","required":["state","violations_count","affected_files_count","affected_components_count"],"properties":{"state":{"type":"string","enum":["passed","violated","not_evaluated","error"],"isRequired":true,"uniqueKey":"policy.result_summary.state","typeLabel":"enum\u003cstring>"},"violations_count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"policy.result_summary.violations_count","typeLabel":"integer"},"affected_files_count":{"type":"integer","minimum":0,"description":"Distinct non-empty finding locators among current, non-approved violations.","isRequired":true,"uniqueKey":"policy.result_summary.affected_files_count","typeLabel":"integer"},"affected_components_count":{"type":"integer","minimum":0,"description":"Distinct non-empty component identifiers among current, non-approved violations.","isRequired":true,"uniqueKey":"policy.result_summary.affected_components_count","typeLabel":"integer"},"missing_enrichments":{"type":"array","items":{"type":"string","uniqueKey":"policy.result_summary.missing_enrichments.items.[INDEX]","typeLabel":"string"},"description":"Canonical enrichment identifiers required before evaluation can complete.","uniqueKey":"policy.result_summary.missing_enrichments","typeLabel":"string[]"},"error_message":{"type":"string","uniqueKey":"policy.result_summary.error_message","typeLabel":"string"},"last_evaluated_at":{"type":"string","format":"date-time","uniqueKey":"policy.result_summary.last_evaluated_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"policy.result_summary","typeLabel":"object"}},"isRequired":true,"uniqueKey":"policy","typeLabel":"object"},"change_kind":{"type":"string","enum":["tweak","authoring"],"isRequired":true,"uniqueKey":"change_kind","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"policy":{"id":123,"slug":"\u003cstring>","source":"seed","module":"\u003cstring>","category":"\u003cstring>","name":"\u003cstring>","description":"\u003cstring>","agent_rule":"\u003cstring>","agent_rule_stale":true,"enabled":true,"action":"block","expression":"\u003cstring>","parameter_spec":[{"key":"\u003cstring>","label":"\u003cstring>","type":"string","options":["\u003cstring>"],"default":"\u003cunknown>","constrains":"\u003cstring>"}],"values":{},"revision":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","result_summary":{"state":"passed","violations_count":1,"affected_files_count":1,"affected_components_count":1,"missing_enrichments":["\u003cstring>"],"error_message":"\u003cstring>","last_evaluated_at":"2023-11-07T05:31:56Z"}},"change_kind":"tweak"}}},"exampleType":"generated"}},"exampleType":"generated"},"a720d9ba-5ec7-4589-855b-3ee1af829fc8":{"description":"Either a validation error from the authoring path, or `invalid_request` — a request that was not understood. The second shape reaches this operation through a malformed body, an `If-Match` carrying a comma-separated list of entity tags, or that header sent more than once. Distinct from `428` (the header is absent) and `409` (it is understood and out of date).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Returned when `expression` does not parse / does not type-check under `cel-go`. Code is `cel_compile`.","required":["code","message","position"],"properties":{"code":{"type":"string","enum":["cel_compile"],"isRequired":true,"uniqueKey":"oneOf.0.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.message","typeLabel":"string"},"position":{"type":"integer","description":"0-based character offset of the first syntax/type error.","isRequired":true,"uniqueKey":"oneOf.0.position","typeLabel":"integer"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Returned when the expression references `params.X` for a key `X` that has no matching entry in `parameter_spec`. Code is `param_spec_missing`.","required":["code","key"],"properties":{"code":{"type":"string","enum":["param_spec_missing"],"isRequired":true,"uniqueKey":"oneOf.1.code","typeLabel":"enum\u003cstring>"},"key":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.key","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","description":"Returned when `expression` references a `finding.*` selector path (or a comprehension-bound variable's member access) that does not resolve against the field catalog. Code is `unknown_field_path`.","required":["code","path"],"properties":{"code":{"type":"string","enum":["unknown_field_path"],"isRequired":true,"uniqueKey":"oneOf.2.code","typeLabel":"enum\u003cstring>"},"path":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.path","typeLabel":"string"},"suggestion":{"type":"string","description":"Nearest registered path by edit distance, when close enough.","uniqueKey":"oneOf.2.suggestion","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"},{"type":"object","description":"Returned when a policy's `values` do not fit its `parameter_spec`: a key the spec does not declare, a declared key with neither a value nor a `default` (the author must add one or the other), a value or a `default` of the wrong type, a choice outside the parameter's `options`, or a parameter whose `type` is not a `ParameterType`. Checked on create and clone, and on update whenever `values` or `parameter_spec` change. A declared key left out of `values` is stored with its `default`. Code is `values_invalid`.","required":["code","key","message"],"properties":{"code":{"type":"string","enum":["values_invalid"],"isRequired":true,"uniqueKey":"oneOf.3.code","typeLabel":"enum\u003cstring>"},"key":{"type":"string","description":"The parameter key whose value was refused.","isRequired":true,"uniqueKey":"oneOf.3.key","typeLabel":"string"},"message":{"type":"string","description":"Why the value was refused, naming the key.","isRequired":true,"uniqueKey":"oneOf.3.message","typeLabel":"string"}},"uniqueKey":"oneOf.3","typeLabel":"object"},{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"oneOf.4.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.4.message","typeLabel":"string"}},"uniqueKey":"oneOf.4","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"cel_compile","message":"\u003cstring>","position":123}}},"exampleType":"generated"}},"exampleType":"generated"},"da605022-b9d4-4c86-94dd-f07752f8cb8f":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"\u003cstring>","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"0f6bcc0d-bea0-41e1-8c74-4939d3791956":{"description":"`policy_conflict` — the policy has moved on from the `If-Match` revision. Re-read the policy and reapply the change.","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"\u003cstring>","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"1ce1168e-a87a-4f22-9d5f-5bc83a0e969a":{"description":"Unguarded field access, a policy `module` that does not own the referenced fields, or a scanner the organization has not enabled. The last answers with the `no_fixture` shape on purpose: naming the withheld scanner would itself advertise it.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Returned when `expression` reads a field that may be absent on an individual finding without a dominating `has()` guard. The expression compiles and type-checks — only the catalog knows the access is unsafe, which is why this is 422 and not 400. Code is `unguarded_field`.\n\nWithout the guard the access throws at evaluation for exactly the findings the author was gating for, and `\u0026\u0026` cannot absorb it, so the gate fails open instead of matching.","required":["code","message","path","optional","position"],"properties":{"code":{"type":"string","enum":["unguarded_field"],"isRequired":true,"uniqueKey":"oneOf.0.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.message","typeLabel":"string"},"path":{"type":"string","description":"The unguarded field path, e.g. `finding.crypto.key_size`.","isRequired":true,"uniqueKey":"oneOf.0.path","typeLabel":"string"},"optional":{"type":"boolean","description":"True for an intrinsic optional field (all `crypto.*`) — add `has(\u003cpath>)`. False for an enrichment-backed field declaring `requires` — a guard on the carrier is also accepted there.","isRequired":true,"uniqueKey":"oneOf.0.optional","typeLabel":"boolean"},"position":{"type":"integer","description":"0-based column of the offending selector.","isRequired":true,"uniqueKey":"oneOf.0.position","typeLabel":"integer"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Returned when a policy's declared `module` does not own the vocabulary its `expression` reads — a rule over `finding.crypto.*` filed under module `oss`. Code is `module_mismatch`.\n\n`module` is not bookkeeping: it selects the preview fixture corpus, drives entitlement, and is read back to the user as \"Evaluates \u003cmodule> findings\". A mismatch is refused rather than silently corrected, because either half may be the one the caller meant.","required":["code","message","module","expected","path"],"properties":{"code":{"type":"string","enum":["module_mismatch"],"isRequired":true,"uniqueKey":"oneOf.1.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"},"module":{"type":"string","description":"The module the caller declared.","isRequired":true,"uniqueKey":"oneOf.1.module","typeLabel":"string"},"expected":{"type":"string","description":"The module that owns the referenced field.","isRequired":true,"uniqueKey":"oneOf.1.expected","typeLabel":"string"},"path":{"type":"string","description":"One referenced field the declared module does not own.","isRequired":true,"uniqueKey":"oneOf.1.path","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","description":"Returned by `/preview` when no findings fixture is committed for the requested module. Code is `no_fixture`.","required":["code"],"properties":{"code":{"type":"string","enum":["no_fixture"],"isRequired":true,"uniqueKey":"oneOf.2.code","typeLabel":"enum\u003cstring>"},"module":{"type":"string","uniqueKey":"oneOf.2.module","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"unguarded_field","message":"\u003cstring>","path":"\u003cstring>","optional":true,"position":123}}},"exampleType":"generated"}},"exampleType":"generated"},"64149773-0b66-4fa5-9527-5bfdf16e2779":{"description":"`precondition_required` — `If-Match` was not supplied.","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"\u003cstring>","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"f575c495-888c-424b-8584-c24d95ea4ce5":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An Earnie API key, sent as `Authorization: Bearer sk_earnie_...`. Create one under Settings > API keys. The key's scopes decide which operations it may call.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"f8d27f6f-eaee-4d17-92d7-472d0c99a6e6":{"url":"https://{tenant}.earnie.dev","description":"Your Earnie deployment","variables":{"tenant":{"default":"your-company","description":"Your organization's Earnie address, as shown in your browser when you sign in."}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An Earnie API key, sent as `Authorization: Bearer sk_earnie_...`. Create one under Settings > API keys. The key's scopes decide which operations it may call.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An Earnie API key, sent as `Authorization: Bearer sk_earnie_...`. Create one under Settings > API keys. The key's scopes decide which operations it may call.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/earnie/policies-openapi.json"},"subdomain":"scanoss","siteName":"SCANOSS documentation","title":"Partial update of a policy - SCANOSS documentation","navMaps":{"firstHrefInVersion":{"v2":{"href":"/earnie/api-reference/policies/partial-update-of-a-policy","matchLevel":0},"v1":{"href":"/en/latest/introduction/what-is-scanoss","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-10-07T10:42:14.123Z","originalFileLocation":"earnie/api-reference/policies/partial-update-of-a-policy.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=\"Server classifies the request by payload: - Only values / enabled / name / action → tweak (no recompile; audit policy.values_updated). - expression or parameter_spec present → authoring (recompile + revalidate; audit policy.expression_updated). The change_kind field on the response carries the classification. The update is conditional on the policy\u0026#x27;s revision: the caller passes the revision it last read as If-Match, and a concurrent editor who moved the policy on gets 409 policy_conflict instead of silently losing their edit.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SCANOSS documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/scanoss/KZfWE-Zg_gP00ddS/_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/scanoss/KZfWE-Zg_gP00ddS/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/scanoss/KZfWE-Zg_gP00ddS/_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/scanoss/KZfWE-Zg_gP00ddS/_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/scanoss/KZfWE-Zg_gP00ddS/_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/scanoss/KZfWE-Zg_gP00ddS/_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/scanoss/KZfWE-Zg_gP00ddS/_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/scanoss/KZfWE-Zg_gP00ddS/_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/scanoss/KZfWE-Zg_gP00ddS/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Partial update of a policy - SCANOSS documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Server classifies the request by payload: - Only values / enabled / name / action → tweak (no recompile; audit policy.values_updated). - expression or parameter_spec present → authoring (recompile + revalidate; audit policy.expression_updated). The change_kind field on the response carries the classification. The update is conditional on the policy\u0026#x27;s revision: the caller passes the revision it last read as If-Match, and a concurrent editor who moved the policy on gets 409 policy_conflict instead of silently losing their edit.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SCANOSS documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://scanoss.mintlify.app/_mintlify/api/og/v2?division=API+Reference\u0026amp;title=Partial+update+of+a+policy\u0026amp;description=Server+classifies+the+request+by+payload%3A%0A+-+Only+%60values%60+%2F+%60enabled%60+%2F+%60name%60+%2F+%60action%60+%E2%86%92+tweak+%28no+recompile%3B+audit+%60policy.values_updated%60%29.%0A+-+%60expression\u0026amp;theme=e384d94a4a6a8eabee7f937e\u0026amp;signature=a05358a3791a7dc3fd905f17ea1c36079de3ac24ef319c97705441d8175bd050\">\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=\"Partial update of a policy - SCANOSS documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Server classifies the request by payload: - Only values / enabled / name / action → tweak (no recompile; audit policy.values_updated). - expression or parameter_spec present → authoring (recompile + revalidate; audit policy.expression_updated). The change_kind field on the response carries the classification. The update is conditional on the policy\u0026#x27;s revision: the caller passes the revision it last read as If-Match, and a concurrent editor who moved the policy on gets 409 policy_conflict instead of silently losing their edit.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://scanoss.mintlify.app/_mintlify/api/og/v2?division=API+Reference\u0026amp;title=Partial+update+of+a+policy\u0026amp;description=Server+classifies+the+request+by+payload%3A%0A+-+Only+%60values%60+%2F+%60enabled%60+%2F+%60name%60+%2F+%60action%60+%E2%86%92+tweak+%28no+recompile%3B+audit+%60policy.values_updated%60%29.%0A+-+%60expression\u0026amp;theme=e384d94a4a6a8eabee7f937e\u0026amp;signature=a05358a3791a7dc3fd905f17ea1c36079de3ac24ef319c97705441d8175bd050\">\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/scanoss/KZfWE-Zg_gP00ddS/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SCANOSS documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF6A1A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/earnie/api-reference/policies/partial-update-of-a-policy.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.scanoss.com/#organization\",\"name\":\"SCANOSS documentation\",\"url\":\"https://docs.scanoss.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/scanoss/9UP7eHL2Z_rQPx8l/scanoss-logo-horizontal-positive.svg?fit=max\u0026auto=format\u0026n=9UP7eHL2Z_rQPx8l\u0026q=85\u0026s=686c4487013423ef804e2e83983c76ef\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.scanoss.com#website\",\"name\":\"SCANOSS documentation\",\"url\":\"https://docs.scanoss.com\",\"publisher\":{\"@id\":\"https://docs.scanoss.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy#webpage\",\"url\":\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy\",\"name\":\"Partial update of a policy\",\"description\":\"Server classifies the request by payload: - Only values / enabled / name / action → tweak (no recompile; audit policy.values_updated). - expression or parameter_spec present → authoring (recompile + revalidate; audit policy.expression_updated). The change_kind field on the response carries the classification. The update is conditional on the policy's revision: the caller passes the revision it last read as If-Match, and a concurrent editor who moved the policy on gets 409 policy_conflict instead of silently losing their edit.\",\"dateModified\":\"2026-10-07T10:42:14.123Z\",\"isPartOf\":{\"@id\":\"https://docs.scanoss.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.scanoss.com/en/latest/earnie/api/using-the-api\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Policies\",\"item\":\"https://docs.scanoss.com/earnie/api-reference/policies/policies/list-current-policy-verdicts-for-a-finding\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"API Reference\",\"item\":\"https://docs.scanoss.com/earnie/api-reference/policies/list-policies\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Partial update of a policy\",\"item\":\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy#apireference\",\"headline\":\"Partial update of a policy\",\"name\":\"Partial update of a policy\",\"description\":\"Server classifies the request by payload: - Only values / enabled / name / action → tweak (no recompile; audit policy.values_updated). - expression or parameter_spec present → authoring (recompile + revalidate; audit policy.expression_updated). The change_kind field on the response carries the classification. The update is conditional on the policy's revision: the caller passes the revision it last read as If-Match, and a concurrent editor who moved the policy on gets 409 policy_conflict instead of silently losing their edit.\",\"url\":\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy\",\"mainEntityOfPage\":{\"@id\":\"https://docs.scanoss.com/earnie/api-reference/policies/partial-update-of-a-policy#webpage\"},\"dateModified\":\"2026-10-07T10:42:14.123Z\",\"publisher\":{\"@id\":\"https://docs.scanoss.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.scanoss.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SCANOSS documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SCANOSS documentation","nav":{"global":null,"versions":[{"version":"v2","default":true,"tabs":[{"tab":"Earnie","hidden":false,"groups":[{"group":"Get Started","expanded":false,"pages":[{"title":"What Is Earnie?","sidebarTitle":"What Is Earnie?","href":"/en/latest/earnie/introduction"},{"title":"Deployment Options and Data Flow","sidebarTitle":"Deployment and Data Flow","href":"/en/latest/earnie/deployment"},{"group":"Self-Hosting","expanded":false,"pages":[{"title":"Self-Hosting Requirements","sidebarTitle":"Self-Hosting Requirements","href":"/en/latest/earnie/self-hosting/self-hosting-requirements"},{"title":"Installing Earnie","sidebarTitle":"Installing Earnie","href":"/en/latest/earnie/self-hosting/installation"},{"title":"Running Earnie on a Cloud Provider","sidebarTitle":"Cloud Providers","href":"/en/latest/earnie/self-hosting/cloud-providers"},{"title":"Upgrading and Backing Up","sidebarTitle":"Upgrading and Backing Up","href":"/en/latest/earnie/self-hosting/upgrading-and-backups"},{"title":"Releases and Release Notes","sidebarTitle":"Releases","href":"/en/latest/earnie/self-hosting/releases"},{"title":"Outbound Network Calls","sidebarTitle":"Outbound Network Calls","href":"/en/latest/earnie/self-hosting/outbound-network-calls"}]},{"title":"Setting Up Your Workspace","sidebarTitle":"Workspace Setup","href":"/en/latest/earnie/getting-started/workspace-setup"},{"title":"Connecting a Repository","sidebarTitle":"Connecting a Repository","href":"/en/latest/earnie/getting-started/connecting-a-repository"},{"title":"Your First Scan","sidebarTitle":"First Scan","href":"/en/latest/earnie/getting-started/first-scan"}]},{"group":"Development","expanded":false,"pages":[{"title":"Earnie CLI","sidebarTitle":"Earnie CLI","href":"/en/latest/earnie/using-earnie/earnie-cli"},{"group":"Coding Agents (MCP)","expanded":false,"pages":[{"title":"Earnie MCP","sidebarTitle":"Overview","href":"/en/latest/earnie/mcp/overview"},{"title":"Connecting an AI Client","sidebarTitle":"Connecting a Client","href":"/en/latest/earnie/mcp/connecting-a-client"},{"title":"Using Earnie Through MCP","sidebarTitle":"Tools","href":"/en/latest/earnie/mcp/tools"},{"title":"Troubleshooting Earnie MCP","sidebarTitle":"Troubleshooting","href":"/en/latest/earnie/mcp/troubleshooting"}]},{"title":"Self-Checks","sidebarTitle":"Self-Checks","href":"/en/latest/earnie/using-earnie/self-checks"}]},{"group":"Pull Requests \u0026 CI","expanded":false,"pages":[{"title":"When the Gate Blocks a Merge","sidebarTitle":"Merge Gate","href":"/en/latest/earnie/using-earnie/merge-gate"},{"title":"Scan Configuration","sidebarTitle":"Scan Configuration","href":"/en/latest/earnie/using-earnie/scan-configuration"}]},{"group":"Governance","expanded":false,"pages":[{"title":"Reading the Dashboard","sidebarTitle":"Dashboard","href":"/en/latest/earnie/using-earnie/dashboard"},{"title":"Dependencies","sidebarTitle":"Dependencies","href":"/en/latest/earnie/using-earnie/dependencies"},{"title":"Vulnerability Statements (VEX)","sidebarTitle":"Vulnerabilities","href":"/en/latest/earnie/using-earnie/vulnerabilities"},{"title":"Every Algorithm in a Project","sidebarTitle":"Algorithms","href":"/en/latest/earnie/using-earnie/algorithms"},{"title":"Across Every Project","sidebarTitle":"All Projects","href":"/en/latest/earnie/using-earnie/all-projects"},{"title":"Triaging Findings","sidebarTitle":"Triaging Findings","href":"/en/latest/earnie/using-earnie/triaging-findings"},{"title":"Setting Your First Policy","sidebarTitle":"Setting Policies","href":"/en/latest/earnie/using-earnie/setting-policies"},{"title":"Notifications","sidebarTitle":"Notifications","href":"/en/latest/earnie/using-earnie/notifications"},{"title":"Language","sidebarTitle":"Language","href":"/en/latest/earnie/using-earnie/language"},{"group":"Domains","expanded":false,"pages":[{"title":"Cryptography","sidebarTitle":"Cryptography","href":"/en/latest/earnie/domains/cryptography"},{"title":"AI Provenance","sidebarTitle":"AI Provenance","href":"/en/latest/earnie/using-earnie/ai-provenance"}]}]},{"group":"Evidence \u0026 Audit","expanded":false,"pages":[{"title":"Exporting an SBOM","sidebarTitle":"Exporting SBOMs","href":"/en/latest/earnie/evidence/exporting-sboms"},{"title":"Reports","sidebarTitle":"Reports","href":"/en/latest/earnie/evidence/project-reports"},{"title":"Compliance Packages","sidebarTitle":"Compliance Packages","href":"/en/latest/earnie/evidence/compliance-packages"},{"title":"Audit Log","sidebarTitle":"Audit Log","href":"/en/latest/earnie/evidence/audit-log"}]},{"group":"Administration","expanded":false,"pages":[{"title":"Team and Roles","sidebarTitle":"Team \u0026 Roles","href":"/en/latest/earnie/administration/team-and-roles"},{"title":"API Keys","sidebarTitle":"API Keys","href":"/en/latest/earnie/administration/api-keys"}]},{"group":"Migrating","expanded":false,"pages":[{"title":"Migrating from SCANOSS Tools","sidebarTitle":"From SCANOSS Tools","href":"/en/latest/earnie/migrating/from-scanoss-tools"}]},{"group":"API Reference","expanded":false,"pages":[{"title":"Using the API","sidebarTitle":"Using the API","href":"/en/latest/earnie/api/using-the-api"},{"group":"Projects","pages":[{"group":"projects","pages":[{"title":"List projects for the authenticated organisation","deprecated":null,"version":null,"openapi":"/api-reference/earnie/projects-openapi.json get /v1/projects","href":"/earnie/api-reference/projects/projects/list-projects-for-the-authenticated-organisation"},{"title":"Create a new project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/projects-openapi.json post /v1/projects","href":"/earnie/api-reference/projects/projects/create-a-new-project"},{"title":"Get a project by ID","deprecated":null,"version":null,"openapi":"/api-reference/earnie/projects-openapi.json get /v1/projects/{projectId}","href":"/earnie/api-reference/projects/projects/get-a-project-by-id"},{"title":"Update a project's name or description","deprecated":null,"version":null,"openapi":"/api-reference/earnie/projects-openapi.json patch /v1/projects/{projectId}","href":"/earnie/api-reference/projects/projects/update-a-projects-name-or-description"},{"title":"Resolve one accessible project for a customer CLI","deprecated":null,"version":null,"openapi":"/api-reference/earnie/projects-openapi.json get /v1/projects:resolve","href":"/earnie/api-reference/projects/projects/resolve-one-accessible-project-for-a-customer-cli"}]}]},{"group":"Scans","pages":[{"group":"scans","pages":[{"title":"The organization's AI provenance posture across a scope of projects","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/ai/posture","href":"/earnie/api-reference/scans/scans/the-organizations-ai-provenance-posture-across-a-scope-of-projects"},{"title":"The curated rules Earnie assesses crypto findings against","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/crypto/assessment-rules","href":"/earnie/api-reference/scans/scans/the-curated-rules-earnie-assesses-crypto-findings-against"},{"title":"The organization's crypto posture across a scope of projects","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/crypto/posture","href":"/earnie/api-reference/scans/scans/the-organizations-crypto-posture-across-a-scope-of-projects"},{"title":"Get the project's AI scanner settings","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/projects/{projectId}/ai-settings","href":"/earnie/api-reference/scans/scans/get-the-projects-ai-scanner-settings"},{"title":"Replace the project's AI scanner settings","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json put /v1/projects/{projectId}/ai-settings","href":"/earnie/api-reference/scans/scans/replace-the-projects-ai-scanner-settings"},{"title":"Crypto algorithms detected in one project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/projects/{projectId}/crypto-algorithms","href":"/earnie/api-reference/scans/scans/crypto-algorithms-detected-in-one-project"},{"title":"Dependency-internal crypto inventory for one component","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/projects/{projectId}/crypto-inventory","href":"/earnie/api-reference/scans/scans/dependency-internal-crypto-inventory-for-one-component"},{"title":"Declare a model upload, or resume the one in flight","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/projects/{projectId}/model-uploads","href":"/earnie/api-reference/scans/scans/declare-a-model-upload-or-resume-the-one-in-flight"},{"title":"Read an upload and its offset","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/projects/{projectId}/model-uploads/{uploadId}","href":"/earnie/api-reference/scans/scans/read-an-upload-and-its-offset"},{"title":"Send one window of an upload","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json put /v1/projects/{projectId}/model-uploads/{uploadId}","href":"/earnie/api-reference/scans/scans/send-one-window-of-an-upload"},{"title":"Abandon an upload","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json delete /v1/projects/{projectId}/model-uploads/{uploadId}","href":"/earnie/api-reference/scans/scans/abandon-an-upload"},{"title":"List the project's Models and its uploads in flight","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/projects/{projectId}/models","href":"/earnie/api-reference/scans/scans/list-the-projects-models-and-its-uploads-in-flight"},{"title":"Get one Model","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/projects/{projectId}/models/{modelId}","href":"/earnie/api-reference/scans/scans/get-one-model"},{"title":"Delete a Model","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json delete /v1/projects/{projectId}/models/{modelId}","href":"/earnie/api-reference/scans/scans/delete-a-model"},{"title":"List scans","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans","href":"/earnie/api-reference/scans/scans/list-scans"},{"title":"Upload a source archive and start a scan","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/scans","href":"/earnie/api-reference/scans/scans/upload-a-source-archive-and-start-a-scan"},{"title":"Get authoritative project scan summary","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/projects/{projectId}/state","href":"/earnie/api-reference/scans/scans/get-authoritative-project-scan-summary"},{"title":"Project posture rollup for the Audit landing","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/projects/{projectId}/summary","href":"/earnie/api-reference/scans/scans/project-posture-rollup-for-the-audit-landing"},{"title":"Project crypto posture rollup","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/projects/{projectId}/summary/crypto","href":"/earnie/api-reference/scans/scans/project-crypto-posture-rollup"},{"title":"Posture for every project in scope, in one response","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/projects:posture","href":"/earnie/api-reference/scans/scans/posture-for-every-project-in-scope-in-one-response"},{"title":"Get this deployment's upload limits","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/upload-limits","href":"/earnie/api-reference/scans/scans/get-this-deployments-upload-limits"},{"title":"Fetch a single scan by id","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}","href":"/earnie/api-reference/scans/scans/fetch-a-single-scan-by-id"},{"title":"Upload or resume a user-supplied archive object","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json put /v1/scans/{scanId}/archive","href":"/earnie/api-reference/scans/scans/upload-or-resume-a-user-supplied-archive-object"},{"title":"Read the upload offset of an archive object","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json head /v1/scans/{scanId}/archive","href":"/earnie/api-reference/scans/scans/read-the-upload-offset-of-an-archive-object"},{"title":"The Scan's Audit Trail","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/audit","href":"/earnie/api-reference/scans/scans/the-scans-audit-trail"},{"title":"Compare crypto findings with another completed scan","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/crypto/diff","href":"/earnie/api-reference/scans/scans/compare-crypto-findings-with-another-completed-scan"},{"title":"List all files in the scan (flat)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/files","href":"/earnie/api-reference/scans/scans/list-all-files-in-the-scan-flat"},{"title":"Stream a single file's bytes from the retained archive","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/files/content","href":"/earnie/api-reference/scans/scans/stream-a-single-files-bytes-from-the-retained-archive"},{"title":"Keep-set ingest cursor — received and missing paths","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/ingest","href":"/earnie/api-reference/scans/scans/keep-set-ingest-cursor-—-received-and-missing-paths"},{"title":"Stream kept files as a tar","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json put /v1/scans/{scanId}/ingest","href":"/earnie/api-reference/scans/scans/stream-kept-files-as-a-tar"},{"title":"Match metadata + component + licenses for one file","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/matches","href":"/earnie/api-reference/scans/scans/match-metadata-+-component-+-licenses-for-one-file"},{"title":"Proxy the bytes of an OSS file from the SCANOSS file-content service","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/oss-files/content","href":"/earnie/api-reference/scans/scans/proxy-the-bytes-of-an-oss-file-from-the-scanoss-file-content-service"},{"title":"Per-scan rollup for the results-overview dashboard","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/summary","href":"/earnie/api-reference/scans/scans/per-scan-rollup-for-the-results-overview-dashboard"},{"title":"Lazy folder expansion with aggregated state","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/scans/{scanId}/tree","href":"/earnie/api-reference/scans/scans/lazy-folder-expansion-with-aggregated-state"},{"title":"Cancel an in-progress scan","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/scans/{scanId}:cancel","href":"/earnie/api-reference/scans/scans/cancel-an-in-progress-scan"},{"title":"Seal the keep-set archive and start scanning","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/scans/{scanId}:commit-ingest","href":"/earnie/api-reference/scans/scans/seal-the-keep-set-archive-and-start-scanning"},{"title":"Explicitly rerun a scan","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/scans/{scanId}:rerun","href":"/earnie/api-reference/scans/scans/explicitly-rerun-a-scan"},{"title":"Retry a degraded provider publication","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/scans/{scanId}:retry-publication","href":"/earnie/api-reference/scans/scans/retry-a-degraded-provider-publication"},{"title":"Import a foreign SBOM document as a partial-coverage scan","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/scans:import-sbom","href":"/earnie/api-reference/scans/scans/import-a-foreign-sbom-document-as-a-partial-coverage-scan"},{"title":"Create a receiving scan for a resumable archive object","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/scans:plan-archive","href":"/earnie/api-reference/scans/scans/create-a-receiving-scan-for-a-resumable-archive-object"},{"title":"Plan a folder scan — keep engine then 202 receiving","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/scans:plan-folder","href":"/earnie/api-reference/scans/scans/plan-a-folder-scan-—-keep-engine-then-202-receiving"},{"title":"List Self-checks","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/self-checks","href":"/earnie/api-reference/scans/scans/list-self-checks"},{"title":"Run a Self-check over an inline SourceSet","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json post /v1/self-checks","href":"/earnie/api-reference/scans/scans/run-a-self-check-over-an-inline-sourceset"},{"title":"Get one Self-check","deprecated":null,"version":null,"openapi":"/api-reference/earnie/scans-openapi.json get /v1/self-checks/{selfCheckId}","href":"/earnie/api-reference/scans/scans/get-one-self-check"}]}]},{"group":"Findings","pages":[{"group":"audit","pages":[{"title":"List the durable audit-event trail for a subject (e.g. a finding)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/audit/events","href":"/earnie/api-reference/triage/audit/list-the-durable-audit-event-trail-for-a-subject-eg-a-finding"}]},{"group":"findings","pages":[{"title":"List findings with optional filters","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/findings","href":"/earnie/api-reference/triage/findings/list-findings-with-optional-filters"},{"title":"Create a new finding (source=api)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings","href":"/earnie/api-reference/triage/findings/create-a-new-finding-source=api"},{"title":"Bulk-reopen findings by component/path scope","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/actions/bulk-reopen","href":"/earnie/api-reference/triage/findings/bulk-reopen-findings-by-componentpath-scope"},{"title":"Bulk-resolve open OSS findings by component/path scope","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/actions/bulk-resolve","href":"/earnie/api-reference/triage/findings/bulk-resolve-open-oss-findings-by-componentpath-scope"},{"title":"Bulk-resolve open OSS findings across every project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/actions/bulk-resolve-org-wide","href":"/earnie/api-reference/triage/findings/bulk-resolve-open-oss-findings-across-every-project"},{"title":"Count the open findings a bulk-resolve would affect","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/actions/bulk-resolve-preview","href":"/earnie/api-reference/triage/findings/count-the-open-findings-a-bulk-resolve-would-affect"},{"title":"List findings aggregated by component (purl@version)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/findings/components","href":"/earnie/api-reference/triage/findings/list-findings-aggregated-by-component-purl@version"},{"title":"Membership Audit Trail for a component (base purl) selection","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/findings/components/audit-trail","href":"/earnie/api-reference/triage/findings/membership-audit-trail-for-a-component-base-purl-selection"},{"title":"List the filterable facet values a set of findings carries, with counts","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/findings/facets","href":"/earnie/api-reference/triage/findings/list-the-filterable-facet-values-a-set-of-findings-carries-with-counts"},{"title":"List findings aggregated by source file (review queue rows)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/findings/files","href":"/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows"},{"title":"Get a single finding by ID","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/findings/{findingId}","href":"/earnie/api-reference/triage/findings/get-a-single-finding-by-id"},{"title":"Assign a finding to an actor (also serves as defer/reassign)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/{findingId}/actions/assign","href":"/earnie/api-reference/triage/findings/assign-a-finding-to-an-actor-also-serves-as-deferreassign"},{"title":"Create a configuration rule directly from a finding (mark-as-original)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/{findingId}/actions/create-rule","href":"/earnie/api-reference/triage/findings/create-a-configuration-rule-directly-from-a-finding-mark-as-original"},{"title":"Reopen a resolved or assigned finding","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/{findingId}/actions/reopen","href":"/earnie/api-reference/triage/findings/reopen-a-resolved-or-assigned-finding"},{"title":"Resolve a finding with a reason","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/{findingId}/actions/resolve","href":"/earnie/api-reference/triage/findings/resolve-a-finding-with-a-reason"},{"title":"Suppress or unsuppress a finding (orthogonal to triage state)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/findings/{findingId}/actions/suppress","href":"/earnie/api-reference/triage/findings/suppress-or-unsuppress-a-finding-orthogonal-to-triage-state"},{"title":"Stream the dependency's resolved source for a crypto finding","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/findings/{findingId}/crypto-source","href":"/earnie/api-reference/triage/findings/stream-the-dependencys-resolved-source-for-a-crypto-finding"}]},{"group":"resolutions","pages":[{"title":"List resolutions (pending review queue)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/resolutions","href":"/earnie/api-reference/triage/resolutions/list-resolutions-pending-review-queue"},{"title":"Weekly decision throughput for a project, split by actor class","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json get /v1/resolutions/throughput","href":"/earnie/api-reference/triage/resolutions/weekly-decision-throughput-for-a-project-split-by-actor-class"},{"title":"Revert a pending_review resolution","deprecated":null,"version":null,"openapi":"/api-reference/earnie/triage-openapi.json post /v1/resolutions/{resolutionId}/actions/revert","href":"/earnie/api-reference/triage/resolutions/revert-a-pending_review-resolution"}]}]},{"group":"Policies","pages":[{"group":"policies","pages":[{"title":"List current policy verdicts for a finding","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/findings/{findingId}/policy-verdicts","href":"/earnie/api-reference/policies/policies/list-current-policy-verdicts-for-a-finding"},{"title":"List named regulatory policy template sets","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/policies/template-sets","href":"/earnie/api-reference/policies/policies/list-named-regulatory-policy-template-sets"},{"title":"List the projects a policy is attached to","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/policies/{id}/attachments","href":"/earnie/api-reference/policies/policies/list-the-projects-a-policy-is-attached-to"},{"title":"List (and page) policy approval history for a project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/projects/{projectId}/approvals","href":"/earnie/api-reference/policies/policies/list-and-page-policy-approval-history-for-a-project"},{"title":"List policies directly attached to a project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/projects/{projectId}/policies","href":"/earnie/api-reference/policies/policies/list-policies-directly-attached-to-a-project"},{"title":"Attach a policy directly to a project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json put /v1/projects/{projectId}/policies/{policyId}","href":"/earnie/api-reference/policies/policies/attach-a-policy-directly-to-a-project"},{"title":"Clone a policy attached (or attachable) to a project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json post /v1/projects/{projectId}/policies/{policyId}/clone","href":"/earnie/api-reference/policies/policies/clone-a-policy-attached-or-attachable-to-a-project"},{"title":"List immutable evaluation snapshots for an attached policy","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/projects/{projectId}/policies/{policyId}/evaluations","href":"/earnie/api-reference/policies/policies/list-immutable-evaluation-snapshots-for-an-attached-policy"},{"title":"List current findings violating an attached policy","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/projects/{projectId}/policies/{policyId}/violations","href":"/earnie/api-reference/policies/policies/list-current-findings-violating-an-attached-policy"},{"title":"Materialize an arbitrary, operator-chosen list of seeded templates","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json post /v1/projects/{projectId}/policies:from-templates","href":"/earnie/api-reference/policies/policies/materialize-an-arbitrary-operator-chosen-list-of-seeded-templates"},{"title":"Get the project's current policy posture","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/projects/{projectId}/policy-posture","href":"/earnie/api-reference/policies/policies/get-the-projects-current-policy-posture"},{"title":"Enable one named regulatory policy template set","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json post /v1/projects/{projectId}/policy-template-sets/{setSlug}:enable","href":"/earnie/api-reference/policies/policies/enable-one-named-regulatory-policy-template-set"},{"title":"Get the project's append-only posture time series","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/projects/{projectId}/posture-history","href":"/earnie/api-reference/policies/policies/get-the-projects-append-only-posture-time-series"},{"title":"What this scan was gated by","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/scans/{scanId}/policy-verdicts","href":"/earnie/api-reference/policies/policies/what-this-scan-was-gated-by"}]},{"group":"API Reference","pages":[{"title":"List policies","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/policies","href":"/earnie/api-reference/policies/list-policies"},{"title":"Create a policy","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json post /v1/policies","href":"/earnie/api-reference/policies/create-a-policy"},{"title":"Get the field catalog visible to the caller","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/policies/fields","href":"/earnie/api-reference/policies/get-the-field-catalog-visible-to-the-caller"},{"title":"Search values for an endpoint-sourced field","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/policies/fields/{path}/values","href":"/earnie/api-reference/policies/search-values-for-an-endpoint-sourced-field"},{"title":"List seeded policy templates","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/policies/templates","href":"/earnie/api-reference/policies/list-seeded-policy-templates"},{"title":"Read one policy","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json get /v1/policies/{id}","href":"/earnie/api-reference/policies/read-one-policy"},{"title":"Delete a policy","description":"Deleting a policy detaches it from every project it governs, so it is conditional on the policy's `revision` the same way an edit is. Evaluations a past scan was gated by survive the delete — the scan-anchored verdict read does not join `policies`.","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json delete /v1/policies/{id}","href":"/earnie/api-reference/policies/delete-a-policy"},{"title":"Partial update of a policy","deprecated":null,"version":null,"openapi":"/api-reference/earnie/policies-openapi.json patch /v1/policies/{id}","href":"/earnie/api-reference/policies/partial-update-of-a-policy"}]}]},{"group":"SBOM","pages":[{"group":"sbom","pages":[{"title":"List a project's SBOM snapshots (newest first)","description":"Lists only the snapshots the caller may read whole: one with an OSS component section needs `oss` visible, and one that includes crypto needs `crypto` visible. Every by-id route answers a withheld snapshot exactly like one that does not exist (`snapshot_not_found`). The snapshot is kept, and reads again once the scanner is enabled.","deprecated":null,"version":null,"openapi":"/api-reference/earnie/sbom-openapi.json get /v1/sbom/projects/{projectId}/snapshots","href":"/earnie/api-reference/sbom/sbom/list-a-projects-sbom-snapshots-newest-first"},{"title":"Generate an SBOM snapshot from a scan","deprecated":null,"version":null,"openapi":"/api-reference/earnie/sbom-openapi.json post /v1/sbom/scans/{scanId}:generate","href":"/earnie/api-reference/sbom/sbom/generate-an-sbom-snapshot-from-a-scan"},{"title":"Fetch snapshot metadata","deprecated":null,"version":null,"openapi":"/api-reference/earnie/sbom-openapi.json get /v1/sbom/snapshots/{snapshotId}","href":"/earnie/api-reference/sbom/sbom/fetch-snapshot-metadata"},{"title":"Delete a snapshot (metadata + rendered artifacts + inventory)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/sbom-openapi.json delete /v1/sbom/snapshots/{snapshotId}","href":"/earnie/api-reference/sbom/sbom/delete-a-snapshot-metadata-+-rendered-artifacts-+-inventory"},{"title":"Download a rendered SBOM document (original bytes)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/sbom-openapi.json get /v1/sbom/snapshots/{snapshotId}/document","href":"/earnie/api-reference/sbom/sbom/download-a-rendered-sbom-document-original-bytes"},{"title":"Render an existing snapshot into another format","deprecated":null,"version":null,"openapi":"/api-reference/earnie/sbom-openapi.json post /v1/sbom/snapshots/{snapshotId}:render","href":"/earnie/api-reference/sbom/sbom/render-an-existing-snapshot-into-another-format"}]}]},{"group":"Estate Actions","pages":[{"group":"estate","pages":[{"title":"Poll a queued fan-out run","deprecated":null,"version":null,"openapi":"/api-reference/earnie/estate-openapi.json get /v1/estate/actions/{runId}","href":"/earnie/api-reference/estate/estate/poll-a-queued-fan-out-run"},{"title":"Attach a policy to every selected, eligible project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/estate-openapi.json post /v1/estate/projects:apply-policy","href":"/earnie/api-reference/estate/estate/attach-a-policy-to-every-selected-eligible-project"},{"title":"Generate an SBOM snapshot for every selected, eligible project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/estate-openapi.json post /v1/estate/projects:generate-sbom","href":"/earnie/api-reference/estate/estate/generate-an-sbom-snapshot-for-every-selected-eligible-project"},{"title":"Render a notice file for every selected, eligible project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/estate-openapi.json post /v1/estate/projects:render-notice","href":"/earnie/api-reference/estate/estate/render-a-notice-file-for-every-selected-eligible-project"},{"title":"Request a re-scan for every selected, eligible project","deprecated":null,"version":null,"openapi":"/api-reference/earnie/estate-openapi.json post /v1/estate/projects:request-scan","href":"/earnie/api-reference/estate/estate/request-a-re-scan-for-every-selected-eligible-project"}]}]},{"group":"Organization Settings","pages":[{"group":"organization","pages":[{"title":"Get organization profile","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/organization","href":"/earnie/api-reference/platform/organization/get-organization-profile"},{"title":"Get the organization logo","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/organization/branding/logo","href":"/earnie/api-reference/platform/organization/get-the-organization-logo"},{"title":"List the scanners enabled for your organization","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/organization/modules","href":"/earnie/api-reference/platform/organization/list-the-scanners-enabled-for-your-organization"},{"title":"Get the organization's pull-request controls","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/organization/pr-feedback","href":"/earnie/api-reference/platform/organization/get-the-organizations-pull-request-controls"},{"title":"Replace the organization's pull-request controls","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json put /v1/organization/pr-feedback","href":"/earnie/api-reference/platform/organization/replace-the-organizations-pull-request-controls"},{"title":"Get the organization's Scan Configuration","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/organization/scan-configuration","href":"/earnie/api-reference/platform/organization/get-the-organizations-scan-configuration"},{"title":"Replace the organization's Scan Configuration","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json put /v1/organization/scan-configuration","href":"/earnie/api-reference/platform/organization/replace-the-organizations-scan-configuration"},{"title":"Get a project's auto-scan-on-merge setting","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/projects/{projectId}/auto-scan","href":"/earnie/api-reference/platform/organization/get-a-projects-auto-scan-on-merge-setting"},{"title":"Enable or pause a project's auto-scan-on-merge","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json put /v1/projects/{projectId}/auto-scan","href":"/earnie/api-reference/platform/organization/enable-or-pause-a-projects-auto-scan-on-merge"},{"title":"Get a project's pre-commit hook setting","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/projects/{projectId}/hook-settings","href":"/earnie/api-reference/platform/organization/get-a-projects-pre-commit-hook-setting"},{"title":"Set a project's pre-commit hook setting","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json put /v1/projects/{projectId}/hook-settings","href":"/earnie/api-reference/platform/organization/set-a-projects-pre-commit-hook-setting"},{"title":"Get a project's pull-request feedback setting","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/projects/{projectId}/pr-feedback","href":"/earnie/api-reference/platform/organization/get-a-projects-pull-request-feedback-setting"},{"title":"Set a project's pull-request controls","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json put /v1/projects/{projectId}/pr-feedback","href":"/earnie/api-reference/platform/organization/set-a-projects-pull-request-controls"},{"title":"Get a project's Scan Configuration sources","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json get /v1/projects/{projectId}/scan-configuration","href":"/earnie/api-reference/platform/organization/get-a-projects-scan-configuration-sources"},{"title":"Replace a project's Scan Configuration","deprecated":null,"version":null,"openapi":"/api-reference/earnie/platform-openapi.json put /v1/projects/{projectId}/scan-configuration","href":"/earnie/api-reference/platform/organization/replace-a-projects-scan-configuration"}]}]},{"group":"Integrations","pages":[{"group":"integrations","pages":[{"title":"Each connection's recorded health, and their aggregate","deprecated":null,"version":null,"openapi":"/api-reference/earnie/integrations-openapi.json get /v1/integrations/connections","href":"/earnie/api-reference/integrations/integrations/each-connections-recorded-health-and-their-aggregate"},{"title":"GitHub connection status (liveness-checked)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/integrations-openapi.json get /v1/integrations/github","href":"/earnie/api-reference/integrations/integrations/github-connection-status-liveness-checked"},{"title":"List GitLab connections with what their tokens were checked to be","deprecated":null,"version":null,"openapi":"/api-reference/earnie/integrations-openapi.json get /v1/integrations/gitlab/connections","href":"/earnie/api-reference/integrations/integrations/list-gitlab-connections-with-what-their-tokens-were-checked-to-be"},{"title":"List the repositories the connections can access (live)","deprecated":null,"version":null,"openapi":"/api-reference/earnie/integrations-openapi.json get /v1/integrations/repositories","href":"/earnie/api-reference/integrations/integrations/list-the-repositories-the-connections-can-access-live"}]}]},{"group":"Components","pages":[{"group":"API Reference","pages":[{"title":"Search the SCANOSS component knowledgebase","deprecated":null,"version":null,"openapi":"/api-reference/earnie/components-openapi.json get /v1/components","href":"/earnie/api-reference/components/search-the-scanoss-component-knowledgebase"}]}]},{"group":"Audit log","pages":[{"group":"API Reference","pages":[{"title":"List instance-wide audit events","deprecated":null,"version":null,"openapi":"/api-reference/earnie/audit-openapi.json get /v1/audit-log","href":"/earnie/api-reference/audit/list-instance-wide-audit-events"},{"title":"Get one audit event","deprecated":null,"version":null,"openapi":"/api-reference/earnie/audit-openapi.json get /v1/audit-log/{eventId}","href":"/earnie/api-reference/audit/get-one-audit-event"}]}]}]}]},{"tab":"Developer Tools","hidden":false,"pages":[{"title":"Developer Tools","href":"/en/latest/developer-tools/overview"}]}]},{"version":"v1","pages":[{"title":"v1","href":"/en/latest/introduction/what-is-scanoss"}]}]},"title":"Partial update of a policy - SCANOSS documentation","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-m8-xYP3Y.js","dist-1ms6tsT-.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-DMKzROTp.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","AssistantPageLink-Ke9xIMFx.js"]}