List findings aggregated by source file (review queue rows)
Each item is one source file — the review workspace’s Findings queue grouping unit — rolling up every finding that resolves to that file’s path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file’s findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. counts is computed over the SAME filtered population as items, before the bucket split, so one request renders both the “N to review” and “M resolved” section headers.
GET
/
v1
/
findings
/
files
List findings aggregated by source file (review queue rows)
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.
Same semantics as GET /v1/findings' scan_id: filters to findings last reconciled by this scan run (last_scan_run_id) — or, when a ScanFileScoper is wired, restricts to that scan's file snapshot instead of the volatile last_scan_run_id column.
Free-text SUBSEQUENCE search — every character of the query must appear, in order and case-insensitively, somewhere across a candidate finding's path, purl, basename, and title. This is the server-side equivalent of the review workspace's client-side fuzzy matcher, not a substring search.
Restricts aggregation to findings whose normalized family is in this set (oss also covers the underlying deps/provenance domains). A finding whose domain normalizes to none of these still counts toward its row's total/resolved but is excluded when this facet is active. Empty/absent = no family constraint.
Restricts aggregation to findings whose derived match type is in this set. Only oss-diff evidence carries a match type ("file" for a whole-file match, "snippet" otherwise); a finding with none is EXCLUDED whenever this facet is active. Empty/absent = no constraint.
Restricts WHICH FINDINGS are aggregated — a facet applied before grouping — by their state-only bucket (resolved or superseded_by_rule reads as "resolved", everything else as "open"). Deliberately NOT suppressed-aware, unlike the row-level resolved count and the bucket split below: a suppressed-but- open finding still matches finding_state=open even though it counts as resolved on its file's row. Empty/absent = no constraint.
Restricts aggregation to the findings matching the selection, as family and match_type do: a file appears when at least one of its findings matches, and its counts cover the matching findings. ANDed with family, match_type and finding_state. The same <path>:<value> vocabulary and validation as GET /v1/findings' facet: values of one path are OR-ed, paths are AND-ed, and an unrecognised or non-entitled path is rejected with 400. Like the rest of this endpoint, it never aggregates dependency-sourced crypto findings, which have no local file, so a selection that GET /v1/findings and GET /v1/findings/facets count over dependency crypto matches fewer findings here.
Selects the queue SECTION after aggregation: open = files with at least one undecided finding; resolved = files where every aggregated finding is decided (state resolved/superseded_by_rule, OR suppressed — see FileQueueItem.resolved). Absent = both sections, no split.
Row order. match_desc (default) sorts by the strongest oss-diff match percent across each row's findings, descending, with path as the stability tiebreaker — the queue's display order, left unchanged by this endpoint's cursor params. path_asc sorts strictly by path — used by the keyboard ⇧j/⇧k "next/previous file with open work" jump, which must walk files in path order regardless of match strength (an earlier implementation that walked match order produced "the random folder jumps bug"). Unknown values fall back to match_desc.
Returns only rows whose path is strictly greater than this cursor. Paired with order=path_asc and limit=1, yields the row immediately following the cursor — the ⇧j "next file" keyboard jump, as one O(1) request instead of loading every page. Applies after the same filters and bucket as the rest of the query. There is no wraparound: past the last file, the response is empty.
Returns only rows whose path is strictly less than this cursor, and forces the result to be ordered by path DESCENDING regardless of the order param — "immediately preceding" only has a stable meaning in path order, so a caller combining this with order=match_desc still gets a path-ordered answer. Paired with limit=1, yields the row immediately preceding the cursor — the ⇧k "previous file" jump. There is no wraparound: before the first file, the response is empty.
Rows matching the filters IN THE SELECTED BUCKET — the paging total. Equals counts.files_total when bucket is absent, counts.files_open when bucket=open, counts.files_resolved when bucket=resolved. Deliberately IGNORES after_path/before_path: it is the size of the bucket, not the number of rows remaining past the cursor. The cursor params exist for the single-row keyboard jump, which reads items and never pages, so computing a post-cursor remainder would cost an extra aggregation for a number no caller wants. A future caller that pages FROM a cursor must not read this field as "rows left".
Authoritative, filter-aware totals computed over the SAME population items aggregates, before the bucket split — so a single GET /v1/findings/files request can render both the "N to review" and "M resolved" section headers regardless of which bucket was requested.
Show child attributes
{"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":"6ae4b3c4e7bd3811c8096878","collectionId":"831dc21a-9225-4084-b126-901b3d6341ce","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4b3c4e7bd3811c8096878"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4b3c4e7bd3811c8096878","clientVersion":"0.0.4039","searchFilterCounts":[{"language":"default","tag":"Earnie","count":163},{"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":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows","slug":"/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows","pageMetadata":{"title":"List findings aggregated by source file (review queue rows)","description":"Each item is one source file — the review workspace's Findings queue grouping unit — rolling up every finding that resolves to that file's path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file's findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. `counts` is computed over the SAME filtered population as `items`, before the `bucket` split, so one request renders both the \"N to review\" and \"M resolved\" section headers.","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","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Each item is one source file — the review workspace’s Findings queue grouping unit — rolling up every finding that resolves to that file’s path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file’s findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. \", _jsx(_components.code, {\n children: \"counts\"\n }), \" is computed over the SAME filtered population as \", _jsx(_components.code, {\n children: \"items\"\n }), \", before the \", _jsx(_components.code, {\n children: \"bucket\"\n }), \" split, so one request renders both the “N to review” and “M resolved” section headers.\"]\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":"List findings aggregated by source file (review queue rows)","description":"Each item is one source file — the review workspace's Findings queue grouping unit — rolling up every finding that resolves to that file's path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file's findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. `counts` is computed over the SAME filtered population as `items`, before the `bucket` split, so one request renders both the \"N to review\" and \"M resolved\" section headers.","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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"GetV1FindingsFiles","summary":"List findings aggregated by source file (review queue rows)","description":"Each item is one source file — the review workspace's Findings queue grouping unit — rolling up every finding that resolves to that file's path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file's findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. `counts` is computed over the SAME filtered population as `items`, before the `bucket` split, so one request renders both the \"N to review\" and \"M resolved\" section headers.","tags":["findings"],"parameters":["239572a0-2683-4e9b-8878-e289d330d067","28efbc0c-59e8-4579-917b-2dc9065d4aac","d6efa86f-0816-4958-a169-9017627900a8","c669f1cc-e761-4b8d-8143-62151199931c","f88fdc7f-4f6d-41ec-abee-8171fcf0efd8","45859ab4-90e9-4a98-881b-4a25933c32bd","16875d5d-7507-4ce2-a6a4-869f5fe90186","84c81266-3e7b-4024-9f29-d67401862a3e","671665cd-4ee4-4702-b729-e8d5155f1a1e","3ac7b615-90b2-413d-a4ca-e39f9cee15e7","c18912c5-f176-45f6-a130-c5aad6b1eeb8","a05df3aa-5a11-4450-b5e4-2b9874b8e98c","caf9a6f4-eadf-46a1-98db-6e17896b1685"],"responses":{"200":"d3d7ce12-5767-4edc-8fad-2eea54310a3b","400":"c07109e2-c83e-46de-9de4-f7af1374bfae","401":"ba25a094-000b-4fa7-a7fe-4475466c34af","403":"5eb0561b-9ea6-427c-989c-e63456901a1d","500":"7f18bd11-58c8-43e6-94c0-7a3db55cf4f2"},"method":"get","type":"path","servers":["4d816cad-ef08-4835-941f-5a852e437ef9"],"security":["c8d1323b-1149-4c60-81d6-3e183ff9fead"],"path":"/v1/findings/files","baseUrlOptions":["https://{tenant}.earnie.dev"],"title":"List findings aggregated by source file (review queue rows)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"239572a0-2683-4e9b-8878-e289d330d067":{"name":"project_id","in":"query","required":true,"description":"Project to aggregate findings for.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Project to aggregate findings for.","uniqueKey":"","typeLabel":"string\u003cuuid>"}},"28efbc0c-59e8-4579-917b-2dc9065d4aac":{"name":"scan_id","in":"query","required":false,"description":"Same semantics as GET /v1/findings' scan_id: filters to findings last reconciled by this scan run (last_scan_run_id) — or, when a ScanFileScoper is wired, restricts to that scan's file snapshot instead of the volatile last_scan_run_id column.","schema":{"type":"string","format":"uuid","isRequired":false,"description":"Same semantics as GET /v1/findings' scan_id: filters to findings last reconciled by this scan run (last_scan_run_id) — or, when a ScanFileScoper is wired, restricts to that scan's file snapshot instead of the volatile last_scan_run_id column.","uniqueKey":"","typeLabel":"string\u003cuuid>"}},"d6efa86f-0816-4958-a169-9017627900a8":{"name":"q","in":"query","required":false,"description":"Free-text SUBSEQUENCE search — every character of the query must appear, in order and case-insensitively, somewhere across a candidate finding's path, purl, basename, and title. This is the server-side equivalent of the review workspace's client-side fuzzy matcher, not a substring search.","schema":{"type":"string","isRequired":false,"description":"Free-text SUBSEQUENCE search — every character of the query must appear, in order and case-insensitively, somewhere across a candidate finding's path, purl, basename, and title. This is the server-side equivalent of the review workspace's client-side fuzzy matcher, not a substring search.","uniqueKey":"","typeLabel":"string"}},"c669f1cc-e761-4b8d-8143-62151199931c":{"name":"family","in":"query","required":false,"style":"form","explode":true,"description":"Restricts aggregation to findings whose normalized family is in this set (oss also covers the underlying deps/provenance domains). A finding whose domain normalizes to none of these still counts toward its row's total/resolved but is excluded when this facet is active. Empty/absent = no family constraint.","schema":{"type":"array","items":{"type":"string","enum":["oss","crypto","ai"],"uniqueKey":"items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":false,"description":"Restricts aggregation to findings whose normalized family is in this set (oss also covers the underlying deps/provenance domains). A finding whose domain normalizes to none of these still counts toward its row's total/resolved but is excluded when this facet is active. Empty/absent = no family constraint.","uniqueKey":"","typeLabel":"enum\u003cstring>[]"}},"f88fdc7f-4f6d-41ec-abee-8171fcf0efd8":{"name":"match_type","in":"query","required":false,"style":"form","explode":true,"description":"Restricts aggregation to findings whose derived match type is in this set. Only oss-diff evidence carries a match type (\"file\" for a whole-file match, \"snippet\" otherwise); a finding with none is EXCLUDED whenever this facet is active. Empty/absent = no constraint.","schema":{"type":"array","items":{"type":"string","enum":["file","snippet"],"uniqueKey":"items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":false,"description":"Restricts aggregation to findings whose derived match type is in this set. Only oss-diff evidence carries a match type (\"file\" for a whole-file match, \"snippet\" otherwise); a finding with none is EXCLUDED whenever this facet is active. Empty/absent = no constraint.","uniqueKey":"","typeLabel":"enum\u003cstring>[]"}},"45859ab4-90e9-4a98-881b-4a25933c32bd":{"name":"finding_state","in":"query","required":false,"style":"form","explode":true,"description":"Restricts WHICH FINDINGS are aggregated — a facet applied before grouping — by their state-only bucket (resolved or superseded_by_rule reads as \"resolved\", everything else as \"open\"). Deliberately NOT suppressed-aware, unlike the row-level `resolved` count and the `bucket` split below: a suppressed-but- open finding still matches finding_state=open even though it counts as resolved on its file's row. Empty/absent = no constraint.","schema":{"type":"array","items":{"type":"string","enum":["open","resolved"],"uniqueKey":"items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":false,"description":"Restricts WHICH FINDINGS are aggregated — a facet applied before grouping — by their state-only bucket (resolved or superseded_by_rule reads as \"resolved\", everything else as \"open\"). Deliberately NOT suppressed-aware, unlike the row-level `resolved` count and the `bucket` split below: a suppressed-but- open finding still matches finding_state=open even though it counts as resolved on its file's row. Empty/absent = no constraint.","uniqueKey":"","typeLabel":"enum\u003cstring>[]"}},"16875d5d-7507-4ce2-a6a4-869f5fe90186":{"name":"facet","in":"query","required":false,"description":"Restricts aggregation to the findings matching the selection, as `family` and `match_type` do: a file appears when at least one of its findings matches, and its counts cover the matching findings. ANDed with `family`, `match_type` and `finding_state`. The same `\u003cpath>:\u003cvalue>` vocabulary and validation as GET /v1/findings' `facet`: values of one path are OR-ed, paths are AND-ed, and an unrecognised or non-entitled path is rejected with 400. Like the rest of this endpoint, it never aggregates dependency-sourced crypto findings, which have no local file, so a selection that GET /v1/findings and GET /v1/findings/facets count over dependency crypto matches fewer findings here.","schema":{"type":"array","items":{"type":"string","uniqueKey":"items.[INDEX]","typeLabel":"string"},"isRequired":false,"description":"Restricts aggregation to the findings matching the selection, as `family` and `match_type` do: a file appears when at least one of its findings matches, and its counts cover the matching findings. ANDed with `family`, `match_type` and `finding_state`. The same `\u003cpath>:\u003cvalue>` vocabulary and validation as GET /v1/findings' `facet`: values of one path are OR-ed, paths are AND-ed, and an unrecognised or non-entitled path is rejected with 400. Like the rest of this endpoint, it never aggregates dependency-sourced crypto findings, which have no local file, so a selection that GET /v1/findings and GET /v1/findings/facets count over dependency crypto matches fewer findings here.","uniqueKey":"","typeLabel":"string[]"},"style":"form","explode":true},"84c81266-3e7b-4024-9f29-d67401862a3e":{"name":"bucket","in":"query","required":false,"description":"Selects the queue SECTION after aggregation: open = files with at least one undecided finding; resolved = files where every aggregated finding is decided (state resolved/superseded_by_rule, OR suppressed — see FileQueueItem.resolved). Absent = both sections, no split.","schema":{"type":"string","enum":["open","resolved"],"isRequired":false,"description":"Selects the queue SECTION after aggregation: open = files with at least one undecided finding; resolved = files where every aggregated finding is decided (state resolved/superseded_by_rule, OR suppressed — see FileQueueItem.resolved). Absent = both sections, no split.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"671665cd-4ee4-4702-b729-e8d5155f1a1e":{"name":"order","in":"query","required":false,"description":"Row order. match_desc (default) sorts by the strongest oss-diff match percent across each row's findings, descending, with path as the stability tiebreaker — the queue's display order, left unchanged by this endpoint's cursor params. path_asc sorts strictly by path — used by the keyboard ⇧j/⇧k \"next/previous file with open work\" jump, which must walk files in path order regardless of match strength (an earlier implementation that walked match order produced \"the random folder jumps bug\"). Unknown values fall back to match_desc.","schema":{"type":"string","enum":["match_desc","path_asc"],"default":"match_desc","isRequired":false,"description":"Row order. match_desc (default) sorts by the strongest oss-diff match percent across each row's findings, descending, with path as the stability tiebreaker — the queue's display order, left unchanged by this endpoint's cursor params. path_asc sorts strictly by path — used by the keyboard ⇧j/⇧k \"next/previous file with open work\" jump, which must walk files in path order regardless of match strength (an earlier implementation that walked match order produced \"the random folder jumps bug\"). Unknown values fall back to match_desc.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"3ac7b615-90b2-413d-a4ca-e39f9cee15e7":{"name":"after_path","in":"query","required":false,"description":"Returns only rows whose path is strictly greater than this cursor. Paired with order=path_asc and limit=1, yields the row immediately following the cursor — the ⇧j \"next file\" keyboard jump, as one O(1) request instead of loading every page. Applies after the same filters and bucket as the rest of the query. There is no wraparound: past the last file, the response is empty.","schema":{"type":"string","isRequired":false,"description":"Returns only rows whose path is strictly greater than this cursor. Paired with order=path_asc and limit=1, yields the row immediately following the cursor — the ⇧j \"next file\" keyboard jump, as one O(1) request instead of loading every page. Applies after the same filters and bucket as the rest of the query. There is no wraparound: past the last file, the response is empty.","uniqueKey":"","typeLabel":"string"}},"c18912c5-f176-45f6-a130-c5aad6b1eeb8":{"name":"before_path","in":"query","required":false,"description":"Returns only rows whose path is strictly less than this cursor, and forces the result to be ordered by path DESCENDING regardless of the order param — \"immediately preceding\" only has a stable meaning in path order, so a caller combining this with order=match_desc still gets a path-ordered answer. Paired with limit=1, yields the row immediately preceding the cursor — the ⇧k \"previous file\" jump. There is no wraparound: before the first file, the response is empty.","schema":{"type":"string","isRequired":false,"description":"Returns only rows whose path is strictly less than this cursor, and forces the result to be ordered by path DESCENDING regardless of the order param — \"immediately preceding\" only has a stable meaning in path order, so a caller combining this with order=match_desc still gets a path-ordered answer. Paired with limit=1, yields the row immediately preceding the cursor — the ⇧k \"previous file\" jump. There is no wraparound: before the first file, the response is empty.","uniqueKey":"","typeLabel":"string"}},"a05df3aa-5a11-4450-b5e4-2b9874b8e98c":{"name":"limit","in":"query","required":false,"description":"Rows per page. Out-of-range values fall back to the default of 50.","schema":{"type":"integer","default":50,"minimum":1,"maximum":200,"isRequired":false,"description":"Rows per page. Out-of-range values fall back to the default of 50.","uniqueKey":"","typeLabel":"integer"}},"caf9a6f4-eadf-46a1-98db-6e17896b1685":{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"isRequired":false,"uniqueKey":"","typeLabel":"integer"}}},"responses":{"d3d7ce12-5767-4edc-8fad-2eea54310a3b":{"description":"Paginated, filter-aware list of file-aggregated queue rows","content":{"application/json":{"schema":{"type":"object","required":["items","total","limit","offset","counts"],"properties":{"items":{"type":"array","items":{"type":"object","description":"Aggregated file row returned by GET /v1/findings/files — one row per source file, the review workspace Findings queue's grouping unit.","required":["path","total","resolved","families","finding_ids"],"properties":{"path":{"type":"string","description":"The grouping key: for oss-diff evidence, COALESCE(evidence->>'local_file', location_path); otherwise location_path; falling back to the finding's title when that resolves to empty (mirrors groupByFile's `findingPath(f) || f.title`).","isRequired":true,"uniqueKey":"\\items.items.[INDEX].path","typeLabel":"string"},"total":{"type":"integer","description":"Number of findings aggregated into this row, after the facet filters.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].total","typeLabel":"integer"},"resolved":{"type":"integer","description":"Of `total`, how many are decided: state resolved or superseded_by_rule, OR suppressed (a \"mark original\" finding needs no further review even while its raw state stays open — findingView.ts#findingIsResolved). A row belongs to the `bucket=resolved` section iff resolved == total.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].resolved","typeLabel":"integer"},"families":{"type":"array","items":{"type":"object","description":"A finding whose domain does not normalize to oss/crypto/ai contributes to its row's total/resolved counts but produces no tag here.","required":["domain","count","all_resolved"],"properties":{"domain":{"type":"string","enum":["oss","crypto","ai"],"description":"Normalized family (oss also covers the deps/provenance domains).","isRequired":true,"uniqueKey":"\\items.items.[INDEX].families.items.[INDEX].domain","typeLabel":"enum\u003cstring>"},"count":{"type":"integer","description":"Number of this family's findings aggregated into the row.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].families.items.[INDEX].count","typeLabel":"integer"},"all_resolved":{"type":"boolean","description":"True when every one of this family's findings in the row is decided (state resolved/superseded_by_rule, or suppressed) — drives the family glyph's dimmed state.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].families.items.[INDEX].all_resolved","typeLabel":"boolean"}},"uniqueKey":"\\items.items.[INDEX].families.items.[INDEX]","typeLabel":"object"},"description":"One entry per distinct normalized family present in the row.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].families","typeLabel":"object[]"},"finding_ids":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].finding_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"A bounded, deterministically ordered (by id) sample of at most 50 of the row's finding IDs. This feeds per-row policy-verdict badges, which only need \"does this file have any\", not the complete set — it is NOT the authoritative finding list for the file (opening a file fetches its findings directly by path).","isRequired":true,"uniqueKey":"\\items.items.[INDEX].finding_ids","typeLabel":"string\u003cuuid>[]"},"top_match":{"oneOf":[{"type":"number","description":"Strongest oss-diff match percent across the row's findings; null when none carry one. Rows with no match percent sort as though it were 0 under the default order.","uniqueKey":"\\items.items.[INDEX].top_match.oneOf.0","typeLabel":"number"},{"type":"null","description":"Strongest oss-diff match percent across the row's findings; null when none carry one. Rows with no match percent sort as though it were 0 under the default order.","uniqueKey":"\\items.items.[INDEX].top_match.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].top_match","typeLabel":"number | null"}},"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"\\items","typeLabel":"object[]"},"total":{"type":"integer","description":"Rows matching the filters IN THE SELECTED BUCKET — the paging total. Equals counts.files_total when bucket is absent, counts.files_open when bucket=open, counts.files_resolved when bucket=resolved. Deliberately IGNORES after_path/before_path: it is the size of the bucket, not the number of rows remaining past the cursor. The cursor params exist for the single-row keyboard jump, which reads `items` and never pages, so computing a post-cursor remainder would cost an extra aggregation for a number no caller wants. A future caller that pages FROM a cursor must not read this field as \"rows left\".","isRequired":true,"uniqueKey":"total","typeLabel":"integer"},"limit":{"type":"integer","isRequired":true,"uniqueKey":"limit","typeLabel":"integer"},"offset":{"type":"integer","isRequired":true,"uniqueKey":"offset","typeLabel":"integer"},"counts":{"type":"object","description":"Authoritative, filter-aware totals computed over the SAME population `items` aggregates, before the `bucket` split — so a single GET /v1/findings/files request can render both the \"N to review\" and \"M resolved\" section headers regardless of which bucket was requested.","required":["files_total","files_open","files_resolved","findings_total","findings_resolved"],"properties":{"files_total":{"type":"integer","description":"Total files matching the query's filters (both sections combined).","isRequired":true,"uniqueKey":"counts.files_total","typeLabel":"integer"},"files_open":{"type":"integer","description":"Of files_total, how many have at least one undecided finding.","isRequired":true,"uniqueKey":"counts.files_open","typeLabel":"integer"},"files_resolved":{"type":"integer","description":"Of files_total, how many have every aggregated finding decided.","isRequired":true,"uniqueKey":"counts.files_resolved","typeLabel":"integer"},"findings_total":{"type":"integer","description":"Total findings aggregated across every matching file.","isRequired":true,"uniqueKey":"counts.findings_total","typeLabel":"integer"},"findings_resolved":{"type":"integer","description":"Of findings_total, how many are decided.","isRequired":true,"uniqueKey":"counts.findings_resolved","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"counts","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"items":[{"path":"\u003cstring>","total":123,"resolved":123,"families":[{"domain":"oss","count":123,"all_resolved":true}],"finding_ids":["3c90c3cc-0d44-4b50-8888-8dd25736052a"],"top_match":123}],"total":123,"limit":123,"offset":123,"counts":{"files_total":123,"files_open":123,"files_resolved":123,"findings_total":123,"findings_resolved":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"c07109e2-c83e-46de-9de4-f7af1374bfae":{"description":"Invalid query parameters","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"},"ba25a094-000b-4fa7-a7fe-4475466c34af":{"description":"Not authenticated","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"},"5eb0561b-9ea6-427c-989c-e63456901a1d":{"description":"Insufficient permissions (findings:read required)","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"},"7f18bd11-58c8-43e6-94c0-7a3db55cf4f2":{"description":"Internal server error","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":{"c8d1323b-1149-4c60-81d6-3e183ff9fead":{"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":{"4d816cad-ef08-4835-941f-5a852e437ef9":{"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/triage-openapi.json"},"subdomain":"scanoss","siteName":"SCANOSS documentation","title":"List findings aggregated by source file (review queue rows) - SCANOSS documentation","navMaps":{"firstHrefInVersion":{"v2":{"href":"/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows","matchLevel":0},"v1":{"href":"/en/latest/introduction/what-is-scanoss","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-10-07T10:42:13.759Z","originalFileLocation":"earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows.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=\"Each item is one source file — the review workspace\u0026#x27;s Findings queue grouping unit — rolling up every finding that resolves to that file\u0026#x27;s path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file\u0026#x27;s findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. counts is computed over the SAME filtered population as items, before the bucket split, so one request renders both the \u0026quot;N to review\u0026quot; and \u0026quot;M resolved\u0026quot; section headers.\">\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=\"List findings aggregated by source file (review queue rows) - SCANOSS documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Each item is one source file — the review workspace\u0026#x27;s Findings queue grouping unit — rolling up every finding that resolves to that file\u0026#x27;s path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file\u0026#x27;s findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. counts is computed over the SAME filtered population as items, before the bucket split, so one request renders both the \u0026quot;N to review\u0026quot; and \u0026quot;M resolved\u0026quot; section headers.\">\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/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows\">\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=findings\u0026amp;title=List+findings+aggregated+by+source+file+%28review+queue+rows%29\u0026amp;description=Each+item+is+one+source+file+%E2%80%94+the+review+workspace%27s+Findings+queue+grouping+unit+%E2%80%94+rolling+up+every+finding+that+resolves+to+that+file%27s+path+after+the+facet+\u0026amp;theme=e384d94a4a6a8eabee7f937e\u0026amp;signature=a92e688835d8222fb78f4f40983f2930c021f2cb30fa83464739a100e8ea5356\">\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=\"List findings aggregated by source file (review queue rows) - SCANOSS documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Each item is one source file — the review workspace\u0026#x27;s Findings queue grouping unit — rolling up every finding that resolves to that file\u0026#x27;s path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file\u0026#x27;s findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. counts is computed over the SAME filtered population as items, before the bucket split, so one request renders both the \u0026quot;N to review\u0026quot; and \u0026quot;M resolved\u0026quot; section headers.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://scanoss.mintlify.app/_mintlify/api/og/v2?division=findings\u0026amp;title=List+findings+aggregated+by+source+file+%28review+queue+rows%29\u0026amp;description=Each+item+is+one+source+file+%E2%80%94+the+review+workspace%27s+Findings+queue+grouping+unit+%E2%80%94+rolling+up+every+finding+that+resolves+to+that+file%27s+path+after+the+facet+\u0026amp;theme=e384d94a4a6a8eabee7f937e\u0026amp;signature=a92e688835d8222fb78f4f40983f2930c021f2cb30fa83464739a100e8ea5356\">\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/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows\">\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/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows.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/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows#webpage\",\"url\":\"https://docs.scanoss.com/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows\",\"name\":\"List findings aggregated by source file (review queue rows)\",\"description\":\"Each item is one source file — the review workspace's Findings queue grouping unit — rolling up every finding that resolves to that file's path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file's findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. counts is computed over the SAME filtered population as items, before the bucket split, so one request renders both the \\\"N to review\\\" and \\\"M resolved\\\" section headers.\",\"dateModified\":\"2026-10-07T10:42:13.759Z\",\"isPartOf\":{\"@id\":\"https://docs.scanoss.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.scanoss.com/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.scanoss.com/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows#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\":\"Findings\",\"item\":\"https://docs.scanoss.com/earnie/api-reference/triage/audit/list-the-durable-audit-event-trail-for-a-subject-eg-a-finding\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"findings\",\"item\":\"https://docs.scanoss.com/earnie/api-reference/triage/findings/list-findings-with-optional-filters\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"List findings aggregated by source file (review queue rows)\",\"item\":\"https://docs.scanoss.com/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.scanoss.com/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows#apireference\",\"headline\":\"List findings aggregated by source file (review queue rows)\",\"name\":\"List findings aggregated by source file (review queue rows)\",\"description\":\"Each item is one source file — the review workspace's Findings queue grouping unit — rolling up every finding that resolves to that file's path after the facet filters below. This replaces the client-side groupByFile rollup, which required eagerly fetching the full findings array: past a few thousand findings that retained hundreds of MiB of browser heap and silently truncated. A file's findings can never straddle a page boundary, so paging the raw finding list cannot back this view — the aggregation has to happen in SQL. counts is computed over the SAME filtered population as items, before the bucket split, so one request renders both the \\\"N to review\\\" and \\\"M resolved\\\" section headers.\",\"url\":\"https://docs.scanoss.com/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows\",\"mainEntityOfPage\":{\"@id\":\"https://docs.scanoss.com/earnie/api-reference/triage/findings/list-findings-aggregated-by-source-file-review-queue-rows#webpage\"},\"dateModified\":\"2026-10-07T10:42:13.759Z\",\"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","description":"One GROUP BY over the derived facet index, not one query per value. This is the surface that makes a filter panel correct at estate scale: the review workspace filters a client-side array capped at 5,000 findings while printing the server's true total beside it, so on a real project the filter narrows a truncated set and the count describes a different one. Counts are computed over the population the SAME narrowing parameters would return from GET /v1/findings, so a value's count is exactly how many findings selecting it would show. The `facet` selection is applied disjunctively: a path's values are counted over the population narrowed by every OTHER selected path, never by its own. Selecting one licence therefore leaves the other licences' counts where they were, so the dropdown still offers the values that widen the selection, while every other path narrows to the selection.","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","description":null,"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","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)","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"}]}]},"basePath":"","title":"List findings aggregated by source file (review queue rows) - SCANOSS documentation","buildId":"dpl_77Hw7ZuAABM8E3WMbYAf2ohQCr3v","deploymentId":"dpl_77Hw7ZuAABM8E3WMbYAf2ohQCr3v","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-Br4Fx2_Z.js","dist-ptfS1uB_.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-rIpTdK8h.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-CVpqyvFO.js","utils-vpweLD0v.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BIOodqb0.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B1LM3qmu.js","snippetPresets-C5xK0GtN.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CCsxLnQl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C2-WKG22.js","shallow-SdoLUC-q.js","getApiPlaygroundDisplay-BnI8L2hB.js","CodeSnippet-D5M8NCHI.js","CodeSnippets-CXRO8Uom.js","Page-CN9QbZiA.js","getPastedJson-CrfHEdRt.js","icon-Cr8AyUnW.js","MethodPill-J_Cs0kNw.js","DuplicateIcon-DrMboxGw.js","createIcon-B4CIWVbU.js","DynamicMarkdown-D9cdbgj9.js","SectionHeading-BO4CouT0.js","axios-vUo_bRtp.js","Markdown-L1m1-PSi.js","AssistantPageLink-D31Sm3f9.js"]}