Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns schema_version: 2; the existing /v1/experimental/licenses operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts.
First request
Use a Bearer credential for an active account with required terms accepted. /path/to/private-auth.conf below is your own protected curl configuration containing your authorization header, kept outside the repository.
Repeat the literal files[] field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. Accept does not select a report version.
The existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as Generate an SBOM (POST /v1/experimental/sbom).
Check curl’s exit status before treating the output file as a report: errors save an application/problem+json body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped.
Long-running work and evidence inspection
Use the existing POST /v1/experimental/lockfile-jobs?kind=sbom&format=cyclonedx workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read GET /v1/experimental/license-reports/{id}. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis.
Read the compact report
Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected.
licenses contains reported choices; observed_licenses contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred.
publisher_evidence retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. source_evidence retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt.
inputs.manifest_paths and inputs.lockfile_paths are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view.
Optional license_evidence holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in.
Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read inventory.completeness, resolutions, coverage, dependency_coverage, lockfiles and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage.
inventory.declarations preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view.
Null means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit.
Handle errors
Branch on the problem code, retain X-Request-ID, and respect Retry-After. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. LICENSE_REPORT_TOO_LARGE or SBOM_OUTPUT_TOO_LARGE requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use Cache-Control: no-store.
This is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.
Optional caller-defined session ID: one to 64 ASCII letters, digits, underscores or hyphens, preserved exactly. Supply the header at most once. Invalid supplied IDs return 400 INVALID_SESSION_ID; no session is created.
Required string length: 1 - 64
Pattern: ^[A-Za-z0-9_-]{1,64}$
Body
multipart/form-data
Send a multipart upload. The complete request, including multipart headers and boundaries, must fit within 8,000,000 bytes.
Repeat the literal field name files[] once per file, with raw UTF-8 file contents rather than base64. Set each part's filename to the file's path relative to a common repository root, for example app/package.json and app/package-lock.json. Preserve directory structure so manifests can be associated with their lockfiles.
Send 1–256 files, each at most 5,242,880 bytes. Each filename must be at most 1,024 UTF-8 bytes and must be relative, with no empty, dot (.) or parent (..) path segments, backslashes or control characters. Every file must be a supported, readable manifest or lockfile; one unusable file rejects the entire upload.
Required array length: 1 - 256 elements
Response
JSON license report, at most 16,777,216 bytes. Read inventory coverage and component evidence together; a successful response may be partial and does not provide a pass/fail decision.
Compact experimental license evidence, report schema 2. Preserve separate choices/occurrences/context/observations. HTTP 200 is not complete license coverage or a policy verdict. Legacy license endpoints keep schema 1.
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"GitHits","colors":{"primary":"#cc3f8b","light":"#ff72be","dark":"#cc3f8b"},"logo":{"light":"https://mintcdn.com/githits/nEuGn8_ZROo1DncD/images/githits-wordmark.svg?fit=max\u0026auto=format\u0026n=nEuGn8_ZROo1DncD\u0026q=85\u0026s=33b1a4083b1476ad8520731d35d55987","dark":"https://mintcdn.com/githits/nEuGn8_ZROo1DncD/images/githits-wordmark.svg?fit=max\u0026auto=format\u0026n=nEuGn8_ZROo1DncD\u0026q=85\u0026s=33b1a4083b1476ad8520731d35d55987","href":"/"},"favicon":"https://mintcdn.com/githits/Hm40jjPoMZp3cAjh/images/githits-favicon.svg?fit=max\u0026auto=format\u0026n=Hm40jjPoMZp3cAjh\u0026q=85\u0026s=701b144dbf93beea1351b26de5f854f1","api":{"playground":{"proxy":false,"credentials":false}},"appearance":{"default":"dark"},"background":{"color":{"light":"#ffffff","dark":"#13161a"}},"navbar":{"primary":{"type":"github","href":"https://github.com/githits-com/githits-cli"}},"fonts":{"heading":{"family":"Lexend","weight":600},"body":{"family":"Onest"}},"icons":{"library":"lucide"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"githits","hasAudioNarration":false,"actualSubdomain":"githits","customDomains":["docs.githits.com"],"gitSource":{"type":"github","owner":"githits-com","repo":"docs","deployBranch":"main","isPrivate":true,"contentDirectory":"","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec8b8a802fe9fbb765e027","collectionId":"44fa3485-93e2-448f-87f1-8c681d333d9f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec8b8a802fe9fbb765e027"},"feedback":{"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aedaebccc98a9ae37e0bb52","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API","count":34},{"language":"default","tag":"Documentation","count":28},{"language":"default","tag":"v1 reference","count":27},{"language":"default","tag":"Experimental","count":12},{"language":"default","tag":"Agent tools","count":8},{"language":"default","tag":"Get started","count":7},{"language":"default","tag":"Get Started","count":6},{"language":"default","tag":"Scan","count":6},{"language":"default","tag":"Packages","count":5},{"language":"default","tag":"CLI","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":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":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":":root{--githits-primary-200: #ffb8de;--githits-primary-400: #ff72be;--githits-primary-500: #ff4fae;--githits-primary-700: #992f68;--githits-primary-800: #651f45;--githits-neutral-primary: #ffffff;--githits-neutral-secondary: #d5d9df;--githits-neutral-muted: #abb2bf;--githits-neutral-border: #4a4e56;--githits-neutral-background: #21262d;--githits-neutral-surface: #13161a;--githits-text: var(--githits-neutral-border);--githits-heading: var(--githits-neutral-surface);--githits-accent: var(--githits-primary-700);--githits-surface: var(--githits-neutral-primary);--githits-border: var(--githits-neutral-muted);--githits-code-surface: var(--githits-neutral-secondary);--githits-code-text: var(--githits-primary-800);--githits-duration-normal: 200ms;--githits-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1)}html.dark{--githits-text: var(--githits-neutral-secondary);--githits-heading: var(--githits-neutral-primary);--githits-accent: var(--githits-primary-400);--githits-surface: var(--githits-neutral-background);--githits-border: var(--githits-neutral-border);--githits-code-surface: var(--githits-neutral-background);--githits-code-text: var(--githits-primary-200)}html{letter-spacing:0}code,pre{font-family:Consolas, \"SF Mono\", Menlo, Monaco, monospace}#content :not(pre)>code{background:var(--githits-code-surface);color:var(--githits-code-text)}#navbar{border-bottom-color:color-mix(in srgb, var(--githits-primary-500) 18%, transparent)}#navbar a[href=\"/\"]:has(img[src*=\"githits-wordmark\"]){box-sizing:border-box;display:inline-flex;flex:0 0 9.5rem;width:9.5rem;min-width:9.5rem;align-items:center;gap:0.5rem}#navbar a[href=\"/\"]:has(img[src*=\"githits-wordmark\"])::after{content:\"Beta\";display:inline-flex;align-items:center;justify-content:center;min-height:1.5rem;padding:0.25rem 0.5rem;border:1px solid var(--githits-accent);border-radius:0.25rem;color:var(--githits-accent);font-family:inherit;font-size:0.625rem;font-weight:600;line-height:1rem;text-transform:uppercase;white-space:nowrap}#navbar a[href=\"/\"] img[src*=\"githits-wordmark\"]{width:6.5rem;height:1.516rem;aspect-ratio:554 / 129.3;object-fit:contain;vertical-align:middle}@container navbar (max-width: 48rem){#navbar nav[aria-label=\"Main\"]{flex-shrink:0}#navbar nav[aria-label=\"Main\"] a{padding-inline:0.25rem}}.githits-beta-note{display:inline-flex;align-items:center;max-width:100%;margin:0.75rem 0 1.5rem;padding:0.5rem 0.75rem;border:1px solid color-mix(in srgb, var(--githits-accent) 34%, transparent);border-radius:8px;background:color-mix(in srgb, var(--githits-accent) 9%, transparent);color:var(--githits-heading);font-size:0.875rem;font-weight:500;line-height:1.5}.githits-command-toolbar{display:flex;justify-content:flex-end;margin:1.5rem 0 -0.25rem}.githits-command-toggle{display:inline-flex;align-items:center;gap:0.625rem;min-height:2.5rem;padding:0.5rem 0.875rem;border:1px solid var(--githits-border);border-radius:8px;background:var(--githits-surface);color:var(--githits-heading);font-size:0.875rem;font-weight:600;line-height:1;cursor:pointer}.githits-command-toggle::after{content:\"\";width:0.5rem;height:0.5rem;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform var(--githits-duration-normal) var(--githits-ease-in-out)}.githits-command-toggle[aria-expanded=\"true\"]::after{transform:rotate(225deg)}.githits-command-toggle:hover{border-color:var(--githits-accent);color:var(--githits-accent)}.githits-command-toggle:focus-visible,.githits-feature-card:focus-visible{outline:2px solid var(--githits-accent);outline-offset:3px}html[data-current-path=\"/cli/commands\"] #content [data-component-part=\"accordion-title-container\"]{display:flex;flex-direction:column;gap:0.25rem;line-height:1.35}html[data-current-path=\"/cli/commands\"] #content [data-component-part=\"accordion-description\"]{color:var(--githits-text);line-height:1.45}.githits-feature-grid{margin-top:1.25rem}.githits-tool-columns{display:grid;grid-template-columns:repeat(auto-fit, minmax(min(100%, 12.5rem), 1fr));gap:1rem}.githits-feature-grid .githits-feature-card{background:transparent;border:1px solid transparent;box-shadow:none;color:var(--githits-heading)}.githits-feature-grid .githits-feature-card:hover{border-color:var(--githits-accent)}.githits-feature-card::before{content:\"\";display:block;aspect-ratio:16 / 9;box-sizing:border-box;background-color:var(--githits-neutral-surface);background-image:var(--githits-illustration);background-size:contain;background-position:center;background-repeat:no-repeat;border:0;border-radius:8px}.githits-feature-code{--githits-illustration: url(\"/images/githits-code-context.svg\")}.githits-feature-docs{--githits-illustration: url(\"/images/githits-open-source-refresh.svg\")}.githits-feature-packages{--githits-illustration: url(\"/images/githits-reasoning-rank.svg\")}.githits-feature-card [data-component-part=\"card-content\"]{color:var(--githits-text)}@media (prefers-reduced-motion: reduce){.githits-command-toggle::after{transition:none}}"}],"page":{"pagePath":"api-reference/v1/experimental/preview-a-compact-dependency-license-report","slug":"/api-reference/v1/experimental/preview-a-compact-dependency-license-report","pageMetadata":{"title":"Preview a compact dependency-license report","description":"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns `schema_version: 2`; the existing `/v1/experimental/licenses` operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts.\n\n**First request**\n\nUse a Bearer credential for an active account with required terms accepted. `/path/to/private-auth.conf` below is your own protected curl configuration containing your authorization header, kept outside the repository.\n\n```sh\ncurl --config /path/to/private-auth.conf \\\n --fail-with-body --silent --show-error \\\n --form 'files[]=@package.json;filename=package.json' \\\n --form 'files[]=@package-lock.json;filename=package-lock.json' \\\n --output license-report.json \\\n 'https://api.githits.dev/v1/experimental/license-reports'\n```\n\nRepeat the literal `files[]` field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. `Accept` does not select a report version.\n\nThe existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as **Generate an SBOM** (`POST /v1/experimental/sbom`).\n\nCheck curl's exit status before treating the output file as a report: errors save an `application/problem+json` body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped.\n\n**Long-running work and evidence inspection**\n\nUse the existing `POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx` workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read `GET /v1/experimental/license-reports/{id}`. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis.\n\n**Read the compact report**\n\n- Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected.\n- `licenses` contains reported choices; `observed_licenses` contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred.\n- `publisher_evidence` retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. `source_evidence` retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt.\n- `inputs.manifest_paths` and `inputs.lockfile_paths` are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view.\n- Optional `license_evidence` holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in.\n- Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read `inventory.completeness`, `resolutions`, `coverage`, `dependency_coverage`, `lockfiles` and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage.\n- `inventory.declarations` preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view.\n\nNull means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit.\n\n**Handle errors**\n\nBranch on the problem `code`, retain `X-Request-ID`, and respect `Retry-After`. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. `LICENSE_REPORT_TOO_LARGE` or `SBOM_OUTPUT_TOO_LARGE` requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use `Cache-Control: no-store`.\n\nThis is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\n","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/license-reports","href":"/api-reference/v1/experimental/preview-a-compact-dependency-license-report","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n }, {CodeBlock} = _components;\n if (!CodeBlock) _missingMdxReference(\"CodeBlock\", true);\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns \", _jsx(_components.code, {\n children: \"schema_version: 2\"\n }), \"; the existing \", _jsx(_components.code, {\n children: \"/v1/experimental/licenses\"\n }), \" operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"First request\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Use a Bearer credential for an active account with required terms accepted. \", _jsx(_components.code, {\n children: \"/path/to/private-auth.conf\"\n }), \" below is your own protected curl configuration containing your authorization header, kept outside the repository.\"]\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"6\",\n language: \"shellscript\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"shellscript\",\n children: _jsxs(_components.code, {\n language: \"shellscript\",\n numberOfLines: \"6\",\n children: [_jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#953800\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \"curl\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" --config\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" /path/to/private-auth.conf\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D7BA7D\"\n },\n children: \" \\\\\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" --fail-with-body\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" --silent\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" --show-error\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D7BA7D\"\n },\n children: \" \\\\\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" --form\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" 'files[]=@package.json;filename=package.json'\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D7BA7D\"\n },\n children: \" \\\\\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" --form\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" 'files[]=@package-lock.json;filename=package-lock.json'\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D7BA7D\"\n },\n children: \" \\\\\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" --output\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" license-report.json\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D7BA7D\"\n },\n children: \" \\\\\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" 'https://api.githits.dev/v1/experimental/license-reports'\"\n })\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Repeat the literal \", _jsx(_components.code, {\n children: \"files[]\"\n }), \" field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. \", _jsx(_components.code, {\n children: \"Accept\"\n }), \" does not select a report version.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as \", _jsx(_components.strong, {\n children: \"Generate an SBOM\"\n }), \" (\", _jsx(_components.code, {\n children: \"POST /v1/experimental/sbom\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Check curl’s exit status before treating the output file as a report: errors save an \", _jsx(_components.code, {\n children: \"application/problem+json\"\n }), \" body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Long-running work and evidence inspection\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Use the existing \", _jsx(_components.code, {\n children: \"POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx\"\n }), \" workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read \", _jsx(_components.code, {\n children: \"GET /v1/experimental/license-reports/{id}\"\n }), \". This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Read the compact report\"\n })\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"licenses\"\n }), \" contains reported choices; \", _jsx(_components.code, {\n children: \"observed_licenses\"\n }), \" contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"publisher_evidence\"\n }), \" retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. \", _jsx(_components.code, {\n children: \"source_evidence\"\n }), \" retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"inputs.manifest_paths\"\n }), \" and \", _jsx(_components.code, {\n children: \"inputs.lockfile_paths\"\n }), \" are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Optional \", _jsx(_components.code, {\n children: \"license_evidence\"\n }), \" holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read \", _jsx(_components.code, {\n children: \"inventory.completeness\"\n }), \", \", _jsx(_components.code, {\n children: \"resolutions\"\n }), \", \", _jsx(_components.code, {\n children: \"coverage\"\n }), \", \", _jsx(_components.code, {\n children: \"dependency_coverage\"\n }), \", \", _jsx(_components.code, {\n children: \"lockfiles\"\n }), \" and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"inventory.declarations\"\n }), \" preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Null means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit.\"\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Handle errors\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Branch on the problem \", _jsx(_components.code, {\n children: \"code\"\n }), \", retain \", _jsx(_components.code, {\n children: \"X-Request-ID\"\n }), \", and respect \", _jsx(_components.code, {\n children: \"Retry-After\"\n }), \". Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. \", _jsx(_components.code, {\n children: \"LICENSE_REPORT_TOO_LARGE\"\n }), \" or \", _jsx(_components.code, {\n children: \"SBOM_OUTPUT_TOO_LARGE\"\n }), \" requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use \", _jsx(_components.code, {\n children: \"Cache-Control: no-store\"\n }), \".\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"This is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\"\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\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":"Preview a compact dependency-license report","description":"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns `schema_version: 2`; the existing `/v1/experimental/licenses` operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts.\n\n**First request**\n\nUse a Bearer credential for an active account with required terms accepted. `/path/to/private-auth.conf` below is your own protected curl configuration containing your authorization header, kept outside the repository.\n\n```sh\ncurl --config /path/to/private-auth.conf \\\n --fail-with-body --silent --show-error \\\n --form 'files[]=@package.json;filename=package.json' \\\n --form 'files[]=@package-lock.json;filename=package-lock.json' \\\n --output license-report.json \\\n 'https://api.githits.dev/v1/experimental/license-reports'\n```\n\nRepeat the literal `files[]` field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. `Accept` does not select a report version.\n\nThe existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as **Generate an SBOM** (`POST /v1/experimental/sbom`).\n\nCheck curl's exit status before treating the output file as a report: errors save an `application/problem+json` body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped.\n\n**Long-running work and evidence inspection**\n\nUse the existing `POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx` workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read `GET /v1/experimental/license-reports/{id}`. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis.\n\n**Read the compact report**\n\n- Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected.\n- `licenses` contains reported choices; `observed_licenses` contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred.\n- `publisher_evidence` retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. `source_evidence` retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt.\n- `inputs.manifest_paths` and `inputs.lockfile_paths` are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view.\n- Optional `license_evidence` holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in.\n- Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read `inventory.completeness`, `resolutions`, `coverage`, `dependency_coverage`, `lockfiles` and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage.\n- `inventory.declarations` preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view.\n\nNull means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit.\n\n**Handle errors**\n\nBranch on the problem `code`, retain `X-Request-ID`, and respect `Retry-After`. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. `LICENSE_REPORT_TOO_LARGE` or `SBOM_OUTPUT_TOO_LARGE` requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use `Cache-Control: no-store`.\n\nThis is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\n","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/license-reports","href":"/api-reference/v1/experimental/preview-a-compact-dependency-license-report","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns `schema_version: 2`; the existing `/v1/experimental/licenses` operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts.\n\n**First request**\n\nUse a Bearer credential for an active account with required terms accepted. `/path/to/private-auth.conf` below is your own protected curl configuration containing your authorization header, kept outside the repository.\n\n```sh\ncurl --config /path/to/private-auth.conf \\\n --fail-with-body --silent --show-error \\\n --form 'files[]=@package.json;filename=package.json' \\\n --form 'files[]=@package-lock.json;filename=package-lock.json' \\\n --output license-report.json \\\n 'https://api.githits.dev/v1/experimental/license-reports'\n```\n\nRepeat the literal `files[]` field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. `Accept` does not select a report version.\n\nThe existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as **Generate an SBOM** (`POST /v1/experimental/sbom`).\n\nCheck curl's exit status before treating the output file as a report: errors save an `application/problem+json` body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped.\n\n**Long-running work and evidence inspection**\n\nUse the existing `POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx` workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read `GET /v1/experimental/license-reports/{id}`. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis.\n\n**Read the compact report**\n\n- Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected.\n- `licenses` contains reported choices; `observed_licenses` contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred.\n- `publisher_evidence` retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. `source_evidence` retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt.\n- `inputs.manifest_paths` and `inputs.lockfile_paths` are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view.\n- Optional `license_evidence` holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in.\n- Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read `inventory.completeness`, `resolutions`, `coverage`, `dependency_coverage`, `lockfiles` and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage.\n- `inventory.declarations` preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view.\n\nNull means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit.\n\n**Handle errors**\n\nBranch on the problem `code`, retain `X-Request-ID`, and respect `Retry-After`. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. `LICENSE_REPORT_TOO_LARGE` or `SBOM_OUTPUT_TOO_LARGE` requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use `Cache-Control: no-store`.\n\nThis is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\n","operationId":"generate_compact_dependency_licenses","parameters":["9a8c43bc-c565-42b1-8db1-b1c1ba566238","01b9b73f-db8c-4cb1-a1b3-87a5bbc114de","3667088d-876b-4332-8311-d86b18dec5f3","0e635e68-dc24-40fc-a377-243ec259b43a"],"requestBody":"25c0141f-4d74-454b-a0fa-8254722b926f","responses":{"200":"f2714760-9bf5-4cda-84a9-b9ec3bf37e9c","400":"829583cc-9c0e-453c-9b99-163b2e60bfe9","401":"958dfa61-9c4c-4b0a-8305-4e8ebed86c48","403":"20bc755a-2b8f-48cf-a6c9-2ce5815b386c","405":"df212a27-eef4-4086-aab8-69727d6a153d","408":"f9d91e07-aaed-42c7-ab92-fcfd0cad15c5","413":"ad9d41fc-09b9-4da7-8b28-20d53a3b1d98","415":"a30d4f86-7748-407d-b4fc-d015522d74ef","422":"6c52de4b-38ed-42c7-aca8-165bd1f988ac","429":"9b00dd6e-6a0f-4f76-b24f-f195451b89db","500":"5043b05e-0eec-4008-85fd-d26ffd71439f","502":"6cf57a48-e4b5-4cec-a111-f0de10c87652","503":"7aadf0ed-989f-49e2-bcc8-121ef355f458","504":"0e9163d5-2d65-4ba6-868d-37020c7604ea"},"security":["5be2c4cc-423f-474c-b297-06e70ecc6e3e"],"summary":"Preview a compact dependency-license report","tags":["Experimental"],"x-githits-cost":1,"method":"post","type":"path","servers":["bfb2a79f-febe-439c-ad58-8db4455b87a2"],"path":"/v1/experimental/license-reports","baseUrlOptions":["https://api.githits.dev"],"title":"Preview a compact dependency-license report","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","disableProxy":true},"dependencies":{"parameters":{"9a8c43bc-c565-42b1-8db1-b1c1ba566238":{"description":"Optional client attribution: trimmed printable ASCII, at most 80 bytes. Invalid optional values are dropped.","in":"header","name":"X-GitHits-Client-Name","required":false,"schema":{"type":"string","isRequired":false,"description":"Optional client attribution: trimmed printable ASCII, at most 80 bytes. Invalid optional values are dropped.","uniqueKey":"","typeLabel":"string"}},"01b9b73f-db8c-4cb1-a1b3-87a5bbc114de":{"description":"Optional client-version attribution: trimmed printable ASCII, at most 80 bytes. Invalid optional values are dropped.","in":"header","name":"X-GitHits-Client-Version","required":false,"schema":{"type":"string","isRequired":false,"description":"Optional client-version attribution: trimmed printable ASCII, at most 80 bytes. Invalid optional values are dropped.","uniqueKey":"","typeLabel":"string"}},"3667088d-876b-4332-8311-d86b18dec5f3":{"description":"Optional agent attribution: trimmed printable ASCII, at most 160 bytes. Invalid optional values are dropped.","in":"header","name":"X-GitHits-Agent","required":false,"schema":{"type":"string","isRequired":false,"description":"Optional agent attribution: trimmed printable ASCII, at most 160 bytes. Invalid optional values are dropped.","uniqueKey":"","typeLabel":"string"}},"0e635e68-dc24-40fc-a377-243ec259b43a":{"description":"Optional caller-defined session ID: one to 64 ASCII letters, digits, underscores or hyphens, preserved exactly. Supply the header at most once. Invalid supplied IDs return 400 INVALID_SESSION_ID; no session is created.","in":"header","name":"X-GitHits-Session-ID","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9_-]{1,64}$","type":"string","isRequired":false,"description":"Optional caller-defined session ID: one to 64 ASCII letters, digits, underscores or hyphens, preserved exactly. Supply the header at most once. Invalid supplied IDs return 400 INVALID_SESSION_ID; no session is created.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"multipart/form-data":{"encoding":{"files[]":{"contentType":"application/octet-stream"}},"schema":{"additionalProperties":false,"properties":{"files[]":{"description":"Repeat the literal field name files[] once per file, with raw UTF-8 file contents rather than base64. Set each part's filename to the file's path relative to a common repository root, for example app/package.json and app/package-lock.json. Preserve directory structure so manifests can be associated with their lockfiles.\n\nSend 1–256 files, each at most 5,242,880 bytes. Each filename must be at most 1,024 UTF-8 bytes and must be relative, with no empty, dot (.) or parent (..) path segments, backslashes or control characters. Every file must be a supported, readable manifest or lockfile; one unusable file rejects the entire upload.","items":{"format":"binary","type":"string","uniqueKey":"files[].items.[INDEX]","typeLabel":"file"},"maxItems":256,"minItems":1,"type":"array","isRequired":true,"uniqueKey":"files[]","typeLabel":"file[]"}},"required":["files[]"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"files[]":["\u003cstring>"]}}},"exampleType":"generated"}},"description":"Send a multipart upload. The complete request, including multipart headers and boundaries, must fit within 8,000,000 bytes.","required":true,"exampleType":"generated"},"responses":{"f2714760-9bf5-4cda-84a9-b9ec3bf37e9c":{"content":{"application/json":{"example":{"components":[{"bom_ref":"root","external_references":[],"inputs":{"lockfile_paths":["app/package-lock.json"],"manifest_paths":["app/package.json"]},"license_evidence":{"applicability_reason":"uploaded_declaration","artifact_verification":"not_checked","interpretation_methods":["spdx_expression"],"issues":[{"code":"deprecated","identifier":"GPL-2.0"}],"origin_scope":"manifest","raw":"GPL-2.0+","source":"manifest_declared","status":"expression","syntax":"spdx"},"licenses":[{"acknowledgement":"declared","expression":"GPL-2.0+"}],"name":"license-example","observed_licenses":[],"publisher_evidence":null,"purl":null,"record_kind":"manifest","scope":null,"source_evidence":null,"type":"library","version":"1.0.0"},{"bom_ref":"registry","context":{"conditions":{"cpu":["x86_64"],"engines":[],"os":["linux"]},"dev_only":false,"group_conditions":[],"optional":true,"source":{}},"external_references":[{"comment":"{\"basis\":\"package_metadata\"}","type":"vcs","url":"https://example.com/dependency"}],"inputs":{"lockfile_paths":["app/package-lock.json"],"manifest_paths":[]},"license_evidence":{"applicability_reason":"publisher_release_metadata","artifact_verification":"not_checked","source":"registry_declared"},"licenses":[{"acknowledgement":"declared","expression":"MIT"}],"metadata_status":"available","name":"dependency","observed_licenses":[],"publisher_evidence":{"capture_status":"present","controlling_index":0,"coverage":"complete","expression":"MIT","observations":[{"interpretation":{"expression":"MIT","interpretation_methods":["spdx_expression"],"issues":[],"status":"expression","syntax":"spdx"},"observation":{"field":"license","relation":"single","scope":"release","source":"npm_manifest","statements":["MIT"],"status":"present","version":"1.0.0"},"relationship":"controlling"}],"reason":"publisher_release_metadata","status":"expression"},"purl":"pkg:npm/dependency@1.0.0","record_kind":"locked_package","resolution_basis":"lockfile_record","scope":null,"source_evidence":null,"source_kind":"LOCKED_PACKAGE_SOURCE_KIND_REGISTRY","type":"library","version":"1.0.0"},{"bom_ref":"substitution","context":{"conditions":{"cpu":["x86_64"],"engines":[],"os":["linux"]},"dev_only":false,"group_conditions":[],"optional":true,"source":{}},"external_references":[],"inputs":{"lockfile_paths":["php/composer.lock"],"manifest_paths":[]},"license_evidence":{"applicability_reason":"source_substitution","artifact_verification":"not_checked","lookup_basis":"registry_name_version","source":"registry_declared"},"licenses":[],"metadata_status":"available","name":"example/substitution","observed_licenses":[],"publisher_evidence":{"capture_status":"present","controlling_index":0,"coverage":"complete","expression":"MIT","observations":[{"interpretation":{"expression":"MIT","interpretation_methods":["spdx_expression"],"issues":[],"status":"expression","syntax":"spdx"},"observation":{"field":"license","relation":"single","scope":"release","source":"composer_manifest","statements":["MIT"],"status":"present","version":"1.0.0"},"relationship":"controlling"}],"reason":"publisher_release_metadata","status":"expression"},"purl":"pkg:composer/example/substitution@1.0.0","record_kind":"locked_package","resolution_basis":"lockfile_record","scope":null,"source_evidence":null,"source_kind":"LOCKED_PACKAGE_SOURCE_KIND_GIT","source_revision":"0123456789abcdef0123456789abcdef01234567","type":"library","version":"1.0.0"},{"bom_ref":"unavailable","context":{"conditions":{"cpu":["x86_64"],"engines":[],"os":["linux"]},"dev_only":false,"group_conditions":[],"optional":true,"source":{}},"external_references":[],"inputs":{"lockfile_paths":["app/package-lock.json"],"manifest_paths":[]},"licenses":[],"metadata_status":"unavailable","name":"missing-metadata","observed_licenses":[],"publisher_evidence":null,"purl":"pkg:npm/missing-metadata@2.0.0","record_kind":"locked_package","resolution_basis":"lockfile_record","scope":null,"source_evidence":null,"source_kind":"LOCKED_PACKAGE_SOURCE_KIND_REGISTRY","type":"library","version":"2.0.0"},{"bom_ref":"local","context":{"conditions":{"cpu":["x86_64"],"engines":[],"os":["linux"]},"dev_only":false,"group_conditions":[],"optional":true,"source":{}},"external_references":[],"inputs":{"lockfile_paths":["app/package-lock.json"],"manifest_paths":[]},"licenses":[],"metadata_reason":"non_registry_source","metadata_status":"not_eligible","name":"local-dependency","observed_licenses":[],"publisher_evidence":null,"purl":null,"purl_omission_reason":"non_registry_source","record_kind":"locked_package","resolution_basis":"lockfile_record","scope":null,"source_evidence":null,"source_kind":"LOCKED_PACKAGE_SOURCE_KIND_LOCAL","type":"library","version":null},{"bom_ref":"catalog","external_references":[],"inputs":{"lockfile_paths":[],"manifest_paths":["native/vcpkg.json"]},"licenses":[],"metadata_status":"unavailable","name":"catalog-dependency","observed_licenses":[],"publisher_evidence":null,"purl":null,"record_kind":"resolved_package","resolution_basis":"current_public_catalog","resolution_limitation":"vcpkg_baseline_not_applied","scope":null,"source_evidence":null,"type":"library","version":"1.0.0"},{"bom_ref":"go","external_references":[],"inputs":{"lockfile_paths":[],"manifest_paths":["go.mod"]},"licenses":[],"name":"example.com/source","observed_licenses":[{"license":{"name":"Apache-2.0"}},{"license":{"name":"MIT"}}],"publisher_evidence":null,"purl":"pkg:golang/example.com/source@v1.0.0","record_kind":"resolved_package","scope":null,"source_evidence":{"checked_at":"2026-10-22T12:00:00Z","files":[{"detected_licenses":["Apache-2.0"],"path":"LICENSE"},{"detected_licenses":["MIT"],"path":"nested/LICENSE"}],"last_attempt_at":"2026-10-22T12:00:00Z","last_attempt_status":"ambiguous","method":"licensecheck","module":"example.com/source","provider":"pkg_go_dev","status":"ambiguous","url":"https://pkg.go.dev/example.com/source@v1.0.0?tab=licenses","version":"v1.0.0"},"type":"library","version":"v1.0.0"},{"bom_ref":"failed-root","external_references":[],"inputs":{"lockfile_paths":[],"manifest_paths":["unresolved/package.json"]},"licenses":[],"name":"unresolved-project","observed_licenses":[],"publisher_evidence":null,"purl":null,"record_kind":"manifest","scope":null,"source_evidence":null,"type":"library","version":null}],"inventory":{"completeness":"mixed_dependency_inventory","component_type_basis":"library_assumed_from_inventory","coverage":[{"aggregate":"incomplete","assemblies":["root","registry","substitution","unavailable","local","catalog","go","failed-root"]},{"aggregate":"unknown","dependencies":["root","registry","substitution","unavailable","local","catalog","go","failed-root"]}],"declaration_agreement":[{"declaration_path":"app/package.json","declared_scope":"dependencies","locked_versions":["1.0.0"],"matched_versions":[],"name":"dependency","path":"app/package-lock.json","recorded_scopes":["dependencies"],"requested_requirement":"^2.0.0","requirement_status":"recorded","status":"version_mismatch"}],"declarations":[{"declared_requirement":"^2.0.0","declared_scope":"dependencies","manifest_path":"app/package.json","name":"dependency","optional":"false","source_type":"registry"},{"declared_requirement":"^9.0.0","declared_scope":"dependencies","manifest_path":"unresolved/package.json","name":"never-resolved-dependency","optional":"false","source_type":"registry"},{"declared_requirement":"v1.0.0","indirect":"true","manifest_path":"go.mod","name":"example.com/source","source_type":"registry"}],"dependency_coverage":{"catalog":{"reasons":["not_expanded"],"state":"unknown"},"failed-root":{"reasons":["not_expanded"],"state":"unknown"},"go":{"reasons":["not_expanded"],"state":"unknown"},"local":{"reasons":["not_expanded"],"state":"unknown"},"registry":{"reasons":["not_expanded"],"state":"unknown"},"root":{"reasons":["not_expanded"],"state":"unknown"},"substitution":{"reasons":["not_expanded"],"state":"unknown"},"unavailable":{"reasons":["not_expanded"],"state":"unknown"}},"lockfiles":[{"association_diagnostics":[],"association_status":"associated","completeness":"LOCKFILE_COMPLETENESS_PACKAGE_ENTRIES_ONLY","format":"LOCKFILE_FORMAT_NPM_PACKAGE_LOCK","manifest_lock_consistency":"not_checked","manifest_paths":["app/package.json"],"native_format_version":"3","path":"app/package-lock.json","projection_notices":["Target conditions were retained, not evaluated."]}],"manifest_associations":{"app/package.json":["app/package-lock.json"]},"notices":["Recorded inventory, not an exact installed build; artifacts were not inspected."],"primary_subject":{"id":"root"},"resolution_basis":"lockfile_records_and_manifest_resolution","resolutions":[{"diagnostics":[{"reason":"vcpkg_baseline_not_applied"}],"path":"native/vcpkg.json","status":"partial"},{"diagnostics":[{"name":"","reason":"resolution_failed"}],"path":"unresolved/package.json","status":"partial"}]},"schema_version":2},"schema":{"additionalProperties":true,"description":"Compact experimental license evidence, report schema 2. Preserve separate choices/occurrences/context/observations. HTTP 200 is not complete license coverage or a policy verdict. Legacy license endpoints keep schema 1.","properties":{"components":{"description":"Every original occurrence in producer order, with the selected primary subject first when supplied. Do not merge by coordinate.","items":{"additionalProperties":true,"description":"One original occurrence.","properties":{"bom_ref":{"oneOf":[{"description":"Opaque reference for this occurrence, used by inventory relationships. null means no reference was available. Do not merge entries by name, version or package URL.","type":"string","isRequired":true,"uniqueKey":"components.items.[INDEX].bom_ref.oneOf.0","typeLabel":"string"},{"description":"Opaque reference for this occurrence, used by inventory relationships. null means no reference was available. Do not merge entries by name, version or package URL.","type":"null","isRequired":true,"uniqueKey":"components.items.[INDEX].bom_ref.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"components.items.[INDEX].bom_ref","typeLabel":"string | null"},"external_references":{"description":"Original source/license/distribution and other references with non-hash metadata and owner/scope comments. Component and reference digests are omitted in this compact contract. URLs are never fetched and do not prove artifact inspection.","items":{"additionalProperties":true,"type":"object","uniqueKey":"components.items.[INDEX].external_references.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"components.items.[INDEX].external_references","typeLabel":"object[]"},"inputs":{"additionalProperties":true,"description":"Typed original input attribution for this occurrence.","properties":{"lockfile_paths":{"description":"Supplied lockfile paths, preserving producer property order and repetitions.","items":{"type":"string","uniqueKey":"components.items.[INDEX].inputs.lockfile_paths.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"components.items.[INDEX].inputs.lockfile_paths","typeLabel":"string[]"},"manifest_paths":{"description":"Supplied manifest paths, preserving producer property order and repetitions.","items":{"type":"string","uniqueKey":"components.items.[INDEX].inputs.manifest_paths.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"components.items.[INDEX].inputs.manifest_paths","typeLabel":"string[]"}},"required":["manifest_paths","lockfile_paths"],"type":"object","isRequired":true,"uniqueKey":"components.items.[INDEX].inputs","typeLabel":"object"},"licenses":{"description":"Reported license-choice objects, usually containing expression (for example MIT OR Apache-2.0) or license with an id/name, and optional acknowledgement. Keep each choice intact. Separate entries do not imply AND or OR, and an empty array means no choices were reported. These are evidence, not a pass/fail decision.","items":{"additionalProperties":true,"type":"object","uniqueKey":"components.items.[INDEX].licenses.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"components.items.[INDEX].licenses","typeLabel":"object[]"},"name":{"description":"Reported project, package, source or file name. A name alone does not identify a unique package occurrence.","type":"string","isRequired":true,"uniqueKey":"components.items.[INDEX].name","typeLabel":"string"},"observed_licenses":{"description":"Independent license observations, such as licenses identified in source files. Keep these separate from licenses and publisher statements; see source_evidence for file paths and detection status. An empty array means no observations were reported, not that every file was checked.","items":{"additionalProperties":true,"type":"object","uniqueKey":"components.items.[INDEX].observed_licenses.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"components.items.[INDEX].observed_licenses","typeLabel":"object[]"},"publisher_evidence":{"oneOf":[{"additionalProperties":true,"description":"Original publisher license statements and the context needed to interpret them. This is already a JSON object. observations retains statement text, source, scope, field, version, interpretation/issues and relationship. capture_status describes retained statement capture; coverage concerns that statement collection, not your dependency inventory. status/reason/expression describe interpretation. controlling_index identifies the selected observation when one was selected. Package/repository context may not apply to a specific release. null means no publisher evidence object was available, not that the package has no license. Accept unfamiliar statuses and additional fields. The redundant derived display_value hint is omitted; all substantive observations and limitations remain.","type":"object","isRequired":true,"uniqueKey":"components.items.[INDEX].publisher_evidence.oneOf.0","typeLabel":"object"},{"additionalProperties":true,"description":"Original publisher license statements and the context needed to interpret them. This is already a JSON object. observations retains statement text, source, scope, field, version, interpretation/issues and relationship. capture_status describes retained statement capture; coverage concerns that statement collection, not your dependency inventory. status/reason/expression describe interpretation. controlling_index identifies the selected observation when one was selected. Package/repository context may not apply to a specific release. null means no publisher evidence object was available, not that the package has no license. Accept unfamiliar statuses and additional fields. The redundant derived display_value hint is omitted; all substantive observations and limitations remain.","type":"null","isRequired":true,"uniqueKey":"components.items.[INDEX].publisher_evidence.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"components.items.[INDEX].publisher_evidence","typeLabel":"object | null"},"purl":{"oneOf":[{"description":"Package URL (PURL), or null when unavailable. Its presence identifies a package coordinate; it does not verify your installed artifact.","type":"string","isRequired":true,"uniqueKey":"components.items.[INDEX].purl.oneOf.0","typeLabel":"string"},{"description":"Package URL (PURL), or null when unavailable. Its presence identifies a package coordinate; it does not verify your installed artifact.","type":"null","isRequired":true,"uniqueKey":"components.items.[INDEX].purl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"components.items.[INDEX].purl","typeLabel":"string | null"},"record_kind":{"oneOf":[{"description":"Why this entry is included: examples are manifest for an uploaded project, resolved_package for a dependency found by resolution, and locked_package for a lockfile occurrence. null means unspecified. Other values can appear.","type":"string","isRequired":true,"uniqueKey":"components.items.[INDEX].record_kind.oneOf.0","typeLabel":"string"},{"description":"Why this entry is included: examples are manifest for an uploaded project, resolved_package for a dependency found by resolution, and locked_package for a lockfile occurrence. null means unspecified. Other values can appear.","type":"null","isRequired":true,"uniqueKey":"components.items.[INDEX].record_kind.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"components.items.[INDEX].record_kind","typeLabel":"string | null"},"scope":{"oneOf":[{"description":"Reported component scope, for example excluded. null means the scope was not specified. Entries with excluded scope remain in the report.","type":"string","isRequired":true,"uniqueKey":"components.items.[INDEX].scope.oneOf.0","typeLabel":"string"},{"description":"Reported component scope, for example excluded. null means the scope was not specified. Entries with excluded scope remain in the report.","type":"null","isRequired":true,"uniqueKey":"components.items.[INDEX].scope.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"components.items.[INDEX].scope","typeLabel":"string | null"},"source_evidence":{"oneOf":[{"additionalProperties":true,"description":"Source-file license detection details, already a JSON object. provider/method identify the detection service and technique; module/version identify what was examined. files contains path and detected_licenses, including nested license files. checked_at/status describe the available observation; last_attempt_at/last_attempt_status describe the latest attempt, which can fail while an older observation remains. null means no source observation was available. Accept unfamiliar statuses and additional fields; this does not certify an installed artifact.","type":"object","isRequired":true,"uniqueKey":"components.items.[INDEX].source_evidence.oneOf.0","typeLabel":"object"},{"additionalProperties":true,"description":"Source-file license detection details, already a JSON object. provider/method identify the detection service and technique; module/version identify what was examined. files contains path and detected_licenses, including nested license files. checked_at/status describe the available observation; last_attempt_at/last_attempt_status describe the latest attempt, which can fail while an older observation remains. null means no source observation was available. Accept unfamiliar statuses and additional fields; this does not certify an installed artifact.","type":"null","isRequired":true,"uniqueKey":"components.items.[INDEX].source_evidence.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"components.items.[INDEX].source_evidence","typeLabel":"object | null"},"type":{"description":"Component classification, for example library or file. Additional string values can appear; accept unfamiliar classifications.","type":"string","isRequired":true,"uniqueKey":"components.items.[INDEX].type","typeLabel":"string"},"version":{"oneOf":[{"description":"Reported version text, or null when no version was available.","type":"string","isRequired":true,"uniqueKey":"components.items.[INDEX].version.oneOf.0","typeLabel":"string"},{"description":"Reported version text, or null when no version was available.","type":"null","isRequired":true,"uniqueKey":"components.items.[INDEX].version.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"components.items.[INDEX].version","typeLabel":"string | null"},"component_type_basis":{"description":"Original qualification of this occurrence classification, including assumed or generic subject types.","type":"string","uniqueKey":"components.items.[INDEX].component_type_basis","typeLabel":"string"},"context":{"additionalProperties":true,"description":"Original structured occurrence conditions/platform/source context. Conditions are retained, never evaluated; unfamiliar fields and values remain evidence.","type":"object","uniqueKey":"components.items.[INDEX].context","typeLabel":"object"},"license_evidence":{"additionalProperties":true,"description":"Optional independent or legacy license facts, only when supplied.","properties":{"applicability_reason":{"description":"Original producer applicability/conclusion-basis reason, such as source_substitution; no SPDX conclusion or policy verdict is exported.","type":"string","uniqueKey":"components.items.[INDEX].license_evidence.applicability_reason","typeLabel":"string"},"artifact_verification":{"description":"Original verification limitation, such as not_checked; absence never implies verified.","type":"string","uniqueKey":"components.items.[INDEX].license_evidence.artifact_verification","typeLabel":"string"},"interpretation_methods":{"description":"Original open interpretation-method names, without gateway reinterpretation.","items":{"type":"string","uniqueKey":"components.items.[INDEX].license_evidence.interpretation_methods.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"components.items.[INDEX].license_evidence.interpretation_methods","typeLabel":"string[]"},"issues":{"description":"Original interpretation issues, retaining identifiers, offsets and unfamiliar issue shapes.","items":{"oneOf":[{"additionalProperties":true,"type":"null","uniqueKey":"components.items.[INDEX].license_evidence.issues.items.[INDEX].oneOf.0","typeLabel":"null"},{"additionalProperties":true,"type":"boolean","uniqueKey":"components.items.[INDEX].license_evidence.issues.items.[INDEX].oneOf.1","typeLabel":"boolean"},{"additionalProperties":true,"type":"object","uniqueKey":"components.items.[INDEX].license_evidence.issues.items.[INDEX].oneOf.2","typeLabel":"object"},{"additionalProperties":true,"type":"array","uniqueKey":"components.items.[INDEX].license_evidence.issues.items.[INDEX].oneOf.3","typeLabel":"array"},{"additionalProperties":true,"type":"number","uniqueKey":"components.items.[INDEX].license_evidence.issues.items.[INDEX].oneOf.4","typeLabel":"number"},{"additionalProperties":true,"type":"string","uniqueKey":"components.items.[INDEX].license_evidence.issues.items.[INDEX].oneOf.5","typeLabel":"string"}],"uniqueKey":"components.items.[INDEX].license_evidence.issues.items.[INDEX]","typeLabel":"null | boolean | object | array | number | string"},"type":"array","uniqueKey":"components.items.[INDEX].license_evidence.issues","typeLabel":"(null | boolean | object | array | number | string)[]"},"lookup_basis":{"description":"Original lookup basis, such as registry_name_version; not artifact inspection.","type":"string","uniqueKey":"components.items.[INDEX].license_evidence.lookup_basis","typeLabel":"string"},"origin_scope":{"description":"Original manifest/release/package/repository scope of legacy evidence.","type":"string","uniqueKey":"components.items.[INDEX].license_evidence.origin_scope","typeLabel":"string"},"raw":{"description":"Original unnormalized license text when no canonical publisher object is available.","type":"string","uniqueKey":"components.items.[INDEX].license_evidence.raw","typeLabel":"string"},"source":{"description":"Original acquisition channel; registry_declared alone does not establish publisher-release applicability.","type":"string","uniqueKey":"components.items.[INDEX].license_evidence.source","typeLabel":"string"},"status":{"description":"Original open legacy interpretation status, used only without canonical publisher evidence.","type":"string","uniqueKey":"components.items.[INDEX].license_evidence.status","typeLabel":"string"},"syntax":{"description":"Original legacy statement syntax, not a gateway normalization rule.","type":"string","uniqueKey":"components.items.[INDEX].license_evidence.syntax","typeLabel":"string"}},"type":"object","uniqueKey":"components.items.[INDEX].license_evidence","typeLabel":"object"},"metadata_reason":{"description":"Original open reason metadata could not apply, for example non_registry_source or non_public_registry_source.","type":"string","uniqueKey":"components.items.[INDEX].metadata_reason","typeLabel":"string"},"metadata_status":{"description":"Original metadata acquisition status, distinguishing available, unavailable and not_eligible; available does not mean a license is known.","type":"string","uniqueKey":"components.items.[INDEX].metadata_status","typeLabel":"string"},"purl_omission_reason":{"description":"Original reason no usable package URL was supplied; the gateway never fabricates one.","type":"string","uniqueKey":"components.items.[INDEX].purl_omission_reason","typeLabel":"string"},"resolution_basis":{"description":"Original occurrence version-selection basis, for example lockfile_record or current_public_catalog; not an installed-build claim.","type":"string","uniqueKey":"components.items.[INDEX].resolution_basis","typeLabel":"string"},"resolution_limitation":{"description":"Original limitation on occurrence resolution, for example vcpkg_baseline_not_applied.","type":"string","uniqueKey":"components.items.[INDEX].resolution_limitation","typeLabel":"string"},"source_kind":{"description":"Original open source kind, including local/Git/registry distinctions. Local does not establish first-party ownership.","type":"string","uniqueKey":"components.items.[INDEX].source_kind","typeLabel":"string"},"source_locator_omission_reason":{"description":"Original reason the source locator could not be published or used.","type":"string","uniqueKey":"components.items.[INDEX].source_locator_omission_reason","typeLabel":"string"},"source_revision":{"description":"Original recorded source revision. Its presence does not prove that commit or its license was inspected.","type":"string","uniqueKey":"components.items.[INDEX].source_revision","typeLabel":"string"},"source_revision_omission_reason":{"description":"Original reason a source revision was unavailable or withheld.","type":"string","uniqueKey":"components.items.[INDEX].source_revision_omission_reason","typeLabel":"string"},"source_selector":{"description":"Original recorded source selector, preserved without resolving or fetching it.","type":"string","uniqueKey":"components.items.[INDEX].source_selector","typeLabel":"string"},"source_selector_basis":{"description":"Original basis attributing the recorded selector to its input.","type":"string","uniqueKey":"components.items.[INDEX].source_selector_basis","typeLabel":"string"},"source_selector_kind":{"description":"Original open selector kind, such as branch, tag or commit.","type":"string","uniqueKey":"components.items.[INDEX].source_selector_kind","typeLabel":"string"},"source_selector_omission_reason":{"description":"Original reason a selector was unavailable or withheld.","type":"string","uniqueKey":"components.items.[INDEX].source_selector_omission_reason","typeLabel":"string"}},"required":["bom_ref","name","version","purl","type","scope","record_kind","licenses","observed_licenses","publisher_evidence","source_evidence","external_references","inputs"],"type":"object","uniqueKey":"components.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"components","typeLabel":"object[]"},"inventory":{"additionalProperties":true,"description":"Input and coverage context for the component occurrences.","properties":{"completeness":{"oneOf":[{"description":"How the inventory was built, for example recorded_lockfile_inventory, resolved_manifest_inventory, partial_manifest_inventory or mixed_dependency_inventory. null means unreported, and additional values can appear. This does not measure license coverage; HTTP 200 or a component count does not prove completeness.","type":"string","isRequired":true,"uniqueKey":"inventory.completeness.oneOf.0","typeLabel":"string"},{"description":"How the inventory was built, for example recorded_lockfile_inventory, resolved_manifest_inventory, partial_manifest_inventory or mixed_dependency_inventory. null means unreported, and additional values can appear. This does not measure license coverage; HTTP 200 or a component count does not prove completeness.","type":"null","isRequired":true,"uniqueKey":"inventory.completeness.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"inventory.completeness","typeLabel":"string | null"},"coverage":{"description":"Original coverage groups with explicit scope/reference membership, independent of licenses or reported adjacency.","items":{"additionalProperties":true,"description":"One original coverage group.","properties":{"aggregate":{"oneOf":[{"description":"Original open coverage state, for example incomplete or unknown. Accept unfamiliar values.","type":"string","uniqueKey":"inventory.coverage.items.[INDEX].aggregate.oneOf.0","typeLabel":"string"},{"description":"Original open coverage state, for example incomplete or unknown. Accept unfamiliar values.","type":"null","uniqueKey":"inventory.coverage.items.[INDEX].aggregate.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.coverage.items.[INDEX].aggregate","typeLabel":"string | null"},"assemblies":{"description":"Original component occurrence references covered by this group; presence identifies component-inventory scope.","items":{"type":"string","uniqueKey":"inventory.coverage.items.[INDEX].assemblies.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"inventory.coverage.items.[INDEX].assemblies","typeLabel":"string[]"},"dependencies":{"description":"Original references whose outgoing dependency coverage is described; these are not graph edges.","items":{"type":"string","uniqueKey":"inventory.coverage.items.[INDEX].dependencies.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"inventory.coverage.items.[INDEX].dependencies","typeLabel":"string[]"},"services":{"description":"Original service coverage references when supplied; do not reinterpret as components.","items":{"type":"string","uniqueKey":"inventory.coverage.items.[INDEX].services.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"inventory.coverage.items.[INDEX].services","typeLabel":"string[]"}},"type":"object","uniqueKey":"inventory.coverage.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"inventory.coverage","typeLabel":"object[]"},"notices":{"description":"Every supplied inventory notice, in original order; absence is not a completion assertion.","items":{"type":"string","uniqueKey":"inventory.notices.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"inventory.notices","typeLabel":"string[]"},"component_type_basis":{"description":"Original open basis qualifying inventory component classifications, including assumptions.","type":"string","uniqueKey":"inventory.component_type_basis","typeLabel":"string"},"declaration_agreement":{"description":"Named declaration/lock agreement outcomes, preserving gaps without provider proof catalogues or recomputing policy. Empty version lists on a matched outcome do not mean no lock evidence; provider proof remains in schema 1 and the original SBOM.","items":{"additionalProperties":true,"description":"One original agreement summary.","properties":{"declaration_path":{"oneOf":[{"description":"Original declaration path value; vocabulary remains open.","type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].declaration_path.oneOf.0","typeLabel":"string"},{"description":"Original declaration path value; vocabulary remains open.","type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].declaration_path.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].declaration_path","typeLabel":"string | null"},"declared_scope":{"oneOf":[{"description":"Original declared scope value; vocabulary remains open.","type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].declared_scope.oneOf.0","typeLabel":"string"},{"description":"Original declared scope value; vocabulary remains open.","type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].declared_scope.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].declared_scope","typeLabel":"string | null"},"locked_versions":{"description":"Original locked versions, without gateway matching.","items":{"oneOf":[{"type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].locked_versions.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].locked_versions.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].locked_versions.items.[INDEX]","typeLabel":"string | null"},"type":"array","uniqueKey":"inventory.declaration_agreement.items.[INDEX].locked_versions","typeLabel":"(string | null)[]"},"matched_versions":{"description":"Original matched versions, without gateway matching.","items":{"oneOf":[{"type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].matched_versions.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].matched_versions.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].matched_versions.items.[INDEX]","typeLabel":"string | null"},"type":"array","uniqueKey":"inventory.declaration_agreement.items.[INDEX].matched_versions","typeLabel":"(string | null)[]"},"name":{"oneOf":[{"description":"Original name value; vocabulary remains open.","type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"description":"Original name value; vocabulary remains open.","type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].name","typeLabel":"string | null"},"path":{"oneOf":[{"description":"Original path value; vocabulary remains open.","type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].path.oneOf.0","typeLabel":"string"},{"description":"Original path value; vocabulary remains open.","type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].path.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].path","typeLabel":"string | null"},"recorded_scopes":{"description":"Original recorded scopes, without gateway matching.","items":{"type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].recorded_scopes.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"inventory.declaration_agreement.items.[INDEX].recorded_scopes","typeLabel":"string[]"},"requested_requirement":{"oneOf":[{"description":"Original requested requirement value; vocabulary remains open.","type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].requested_requirement.oneOf.0","typeLabel":"string"},{"description":"Original requested requirement value; vocabulary remains open.","type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].requested_requirement.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].requested_requirement","typeLabel":"string | null"},"requirement_status":{"oneOf":[{"description":"Original requirement status value; vocabulary remains open.","type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].requirement_status.oneOf.0","typeLabel":"string"},{"description":"Original requirement status value; vocabulary remains open.","type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].requirement_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].requirement_status","typeLabel":"string | null"},"status":{"oneOf":[{"description":"Original status value; vocabulary remains open.","type":"string","uniqueKey":"inventory.declaration_agreement.items.[INDEX].status.oneOf.0","typeLabel":"string"},{"description":"Original status value; vocabulary remains open.","type":"null","uniqueKey":"inventory.declaration_agreement.items.[INDEX].status.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.declaration_agreement.items.[INDEX].status","typeLabel":"string | null"}},"type":"object","uniqueKey":"inventory.declaration_agreement.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"inventory.declaration_agreement","typeLabel":"object[]"},"declarations":{"description":"Original named direct requests. These can be the only missing dependency names after a wholesale resolver failure; never treat them as resolved package components.","items":{"additionalProperties":true,"description":"Minimal original declaration summary.","properties":{"declared_requirement":{"description":"Original requested range/text, not a selected version. Absence means not recorded or withheld, never an unconstrained requirement.","type":"string","uniqueKey":"inventory.declarations.items.[INDEX].declared_requirement","typeLabel":"string"},"declared_scope":{"description":"Original request scope.","type":"string","uniqueKey":"inventory.declarations.items.[INDEX].declared_scope","typeLabel":"string"},"indirect":{"description":"Original producer indirect flag text; do not coerce absence into false.","type":"string","uniqueKey":"inventory.declarations.items.[INDEX].indirect","typeLabel":"string"},"manifest_path":{"description":"Original declaring input path.","type":"string","uniqueKey":"inventory.declarations.items.[INDEX].manifest_path","typeLabel":"string"},"name":{"description":"Original requested dependency name.","type":"string","uniqueKey":"inventory.declarations.items.[INDEX].name","typeLabel":"string"},"optional":{"description":"Original producer optional flag text; unfamiliar strings are accepted.","type":"string","uniqueKey":"inventory.declarations.items.[INDEX].optional","typeLabel":"string"},"source_type":{"description":"Original source type for the request.","type":"string","uniqueKey":"inventory.declarations.items.[INDEX].source_type","typeLabel":"string"}},"type":"object","uniqueKey":"inventory.declarations.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"inventory.declarations","typeLabel":"object[]"},"dependency_coverage":{"additionalProperties":{"additionalProperties":true,"description":"Original coverage for this reference.","properties":{"reasons":{"description":"Original open reason codes explaining incomplete or unknown coverage.","items":{"type":"string","uniqueKey":"inventory.dependency_coverage.additionalProperties.reasons.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"inventory.dependency_coverage.additionalProperties.reasons","typeLabel":"string[]"},"state":{"oneOf":[{"description":"Open producer coverage state; missing/null/unfamiliar values do not mean complete.","type":"string","uniqueKey":"inventory.dependency_coverage.additionalProperties.state.oneOf.0","typeLabel":"string"},{"description":"Open producer coverage state; missing/null/unfamiliar values do not mean complete.","type":"null","uniqueKey":"inventory.dependency_coverage.additionalProperties.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.dependency_coverage.additionalProperties.state","typeLabel":"string | null"}},"type":"object","uniqueKey":"inventory.dependency_coverage.additionalProperties","typeLabel":"object"},"description":"Original reference-keyed outgoing dependency coverage. Keep unresolved refs and complete/incomplete/unknown entries; a missing owner never implies completeness.","type":"object","uniqueKey":"inventory.dependency_coverage","typeLabel":"object"},"lockfiles":{"description":"Input association/completeness summaries without generic SBOM bookkeeping.","items":{"additionalProperties":true,"description":"One meaningful lockfile input summary.","properties":{"association_diagnostics":{"description":"Original meaningful association diagnostics, including incomplete/ambiguous association.","items":{"additionalProperties":true,"description":"One original association diagnostic.","type":"object","uniqueKey":"inventory.lockfiles.items.[INDEX].association_diagnostics.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"inventory.lockfiles.items.[INDEX].association_diagnostics","typeLabel":"object[]"},"association_status":{"oneOf":[{"description":"Open manifest/lockfile association outcome; association does not prove freshness.","type":"string","uniqueKey":"inventory.lockfiles.items.[INDEX].association_status.oneOf.0","typeLabel":"string"},{"description":"Open manifest/lockfile association outcome; association does not prove freshness.","type":"null","uniqueKey":"inventory.lockfiles.items.[INDEX].association_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.lockfiles.items.[INDEX].association_status","typeLabel":"string | null"},"completeness":{"oneOf":[{"description":"Open recorded-input completeness state; not installed-build or license completeness.","type":"string","uniqueKey":"inventory.lockfiles.items.[INDEX].completeness.oneOf.0","typeLabel":"string"},{"description":"Open recorded-input completeness state; not installed-build or license completeness.","type":"null","uniqueKey":"inventory.lockfiles.items.[INDEX].completeness.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.lockfiles.items.[INDEX].completeness","typeLabel":"string | null"},"format":{"oneOf":[{"description":"Open producer lockfile-format name, not a request selector.","type":"string","uniqueKey":"inventory.lockfiles.items.[INDEX].format.oneOf.0","typeLabel":"string"},{"description":"Open producer lockfile-format name, not a request selector.","type":"null","uniqueKey":"inventory.lockfiles.items.[INDEX].format.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.lockfiles.items.[INDEX].format","typeLabel":"string | null"},"manifest_lock_consistency":{"oneOf":[{"description":"Original consistency state, such as not_checked; no check is invented.","type":"string","uniqueKey":"inventory.lockfiles.items.[INDEX].manifest_lock_consistency.oneOf.0","typeLabel":"string"},{"description":"Original consistency state, such as not_checked; no check is invented.","type":"null","uniqueKey":"inventory.lockfiles.items.[INDEX].manifest_lock_consistency.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.lockfiles.items.[INDEX].manifest_lock_consistency","typeLabel":"string | null"},"manifest_paths":{"description":"Original manifests associated with this input; absence does not establish that none exist.","items":{"type":"string","uniqueKey":"inventory.lockfiles.items.[INDEX].manifest_paths.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"inventory.lockfiles.items.[INDEX].manifest_paths","typeLabel":"string[]"},"native_format_version":{"oneOf":[{"description":"Native format version text, not producer protocol/capture version.","type":"string","uniqueKey":"inventory.lockfiles.items.[INDEX].native_format_version.oneOf.0","typeLabel":"string"},{"description":"Native format version text, not producer protocol/capture version.","type":"null","uniqueKey":"inventory.lockfiles.items.[INDEX].native_format_version.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.lockfiles.items.[INDEX].native_format_version","typeLabel":"string | null"},"path":{"oneOf":[{"description":"Original input lockfile path.","type":"string","uniqueKey":"inventory.lockfiles.items.[INDEX].path.oneOf.0","typeLabel":"string"},{"description":"Original input lockfile path.","type":"null","uniqueKey":"inventory.lockfiles.items.[INDEX].path.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.lockfiles.items.[INDEX].path","typeLabel":"string | null"},"projection_notices":{"description":"Original notices about retained/omitted input evidence and interpretation limits.","items":{"type":"string","uniqueKey":"inventory.lockfiles.items.[INDEX].projection_notices.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"inventory.lockfiles.items.[INDEX].projection_notices","typeLabel":"string[]"}},"type":"object","uniqueKey":"inventory.lockfiles.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"inventory.lockfiles","typeLabel":"object[]"},"manifest_associations":{"additionalProperties":{"description":"Original associated lockfile paths for this manifest.","items":{"type":"string","uniqueKey":"inventory.manifest_associations.additionalProperties.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"inventory.manifest_associations.additionalProperties","typeLabel":"string[]"},"description":"Original manifest-path to lockfile-path associations. These are not a lock freshness check.","type":"object","uniqueKey":"inventory.manifest_associations","typeLabel":"object"},"primary_subject":{"additionalProperties":true,"description":"Original selected primary occurrence reference or absence reason; no project root is fabricated.","type":"object","uniqueKey":"inventory.primary_subject","typeLabel":"object"},"resolution_basis":{"description":"Original open inventory-construction/resolution basis; not an observed installation.","type":"string","uniqueKey":"inventory.resolution_basis","typeLabel":"string"},"resolutions":{"description":"Original resolution outcomes for inputs, including meaningful diagnostics.","items":{"additionalProperties":true,"description":"One input-resolution outcome.","properties":{"diagnostics":{"description":"Original structured resolution diagnostics; values and additions remain open.","items":{"additionalProperties":true,"description":"One original resolution diagnostic; no raw diagnostic is logged.","type":"object","uniqueKey":"inventory.resolutions.items.[INDEX].diagnostics.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"inventory.resolutions.items.[INDEX].diagnostics","typeLabel":"object[]"},"path":{"oneOf":[{"description":"Input path as supplied by the producer, when available.","type":"string","uniqueKey":"inventory.resolutions.items.[INDEX].path.oneOf.0","typeLabel":"string"},{"description":"Input path as supplied by the producer, when available.","type":"null","uniqueKey":"inventory.resolutions.items.[INDEX].path.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.resolutions.items.[INDEX].path","typeLabel":"string | null"},"status":{"oneOf":[{"description":"Open original resolution status; accept unfamiliar values.","type":"string","uniqueKey":"inventory.resolutions.items.[INDEX].status.oneOf.0","typeLabel":"string"},{"description":"Open original resolution status; accept unfamiliar values.","type":"null","uniqueKey":"inventory.resolutions.items.[INDEX].status.oneOf.1","typeLabel":"null"}],"uniqueKey":"inventory.resolutions.items.[INDEX].status","typeLabel":"string | null"}},"type":"object","uniqueKey":"inventory.resolutions.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"inventory.resolutions","typeLabel":"object[]"}},"required":["completeness","notices","coverage"],"type":"object","isRequired":true,"uniqueKey":"inventory","typeLabel":"object"},"schema_version":{"description":"Compact experimental report structure version. Check before decoding; future versions require matching client support.","enum":[2],"type":"integer","isRequired":true,"uniqueKey":"schema_version","typeLabel":"enum\u003cinteger>"}},"required":["schema_version","inventory","components"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"components":[{"bom_ref":"root","external_references":[],"inputs":{"lockfile_paths":["app/package-lock.json"],"manifest_paths":["app/package.json"]},"license_evidence":{"applicability_reason":"uploaded_declaration","artifact_verification":"not_checked","interpretation_methods":["spdx_expression"],"issues":[{"code":"deprecated","identifier":"GPL-2.0"}],"origin_scope":"manifest","raw":"GPL-2.0+","source":"manifest_declared","status":"expression","syntax":"spdx"},"licenses":[{"acknowledgement":"declared","expression":"GPL-2.0+"}],"name":"license-example","observed_licenses":[],"publisher_evidence":null,"purl":null,"record_kind":"manifest","scope":null,"source_evidence":null,"type":"library","version":"1.0.0"},{"bom_ref":"registry","context":{"conditions":{"cpu":["x86_64"],"engines":[],"os":["linux"]},"dev_only":false,"group_conditions":[],"optional":true,"source":{}},"external_references":[{"comment":"{\"basis\":\"package_metadata\"}","type":"vcs","url":"https://example.com/dependency"}],"inputs":{"lockfile_paths":["app/package-lock.json"],"manifest_paths":[]},"license_evidence":{"applicability_reason":"publisher_release_metadata","artifact_verification":"not_checked","source":"registry_declared"},"licenses":[{"acknowledgement":"declared","expression":"MIT"}],"metadata_status":"available","name":"dependency","observed_licenses":[],"publisher_evidence":{"capture_status":"present","controlling_index":0,"coverage":"complete","expression":"MIT","observations":[{"interpretation":{"expression":"MIT","interpretation_methods":["spdx_expression"],"issues":[],"status":"expression","syntax":"spdx"},"observation":{"field":"license","relation":"single","scope":"release","source":"npm_manifest","statements":["MIT"],"status":"present","version":"1.0.0"},"relationship":"controlling"}],"reason":"publisher_release_metadata","status":"expression"},"purl":"pkg:npm/dependency@1.0.0","record_kind":"locked_package","resolution_basis":"lockfile_record","scope":null,"source_evidence":null,"source_kind":"LOCKED_PACKAGE_SOURCE_KIND_REGISTRY","type":"library","version":"1.0.0"},{"bom_ref":"substitution","context":{"conditions":{"cpu":["x86_64"],"engines":[],"os":["linux"]},"dev_only":false,"group_conditions":[],"optional":true,"source":{}},"external_references":[],"inputs":{"lockfile_paths":["php/composer.lock"],"manifest_paths":[]},"license_evidence":{"applicability_reason":"source_substitution","artifact_verification":"not_checked","lookup_basis":"registry_name_version","source":"registry_declared"},"licenses":[],"metadata_status":"available","name":"example/substitution","observed_licenses":[],"publisher_evidence":{"capture_status":"present","controlling_index":0,"coverage":"complete","expression":"MIT","observations":[{"interpretation":{"expression":"MIT","interpretation_methods":["spdx_expression"],"issues":[],"status":"expression","syntax":"spdx"},"observation":{"field":"license","relation":"single","scope":"release","source":"composer_manifest","statements":["MIT"],"status":"present","version":"1.0.0"},"relationship":"controlling"}],"reason":"publisher_release_metadata","status":"expression"},"purl":"pkg:composer/example/substitution@1.0.0","record_kind":"locked_package","resolution_basis":"lockfile_record","scope":null,"source_evidence":null,"source_kind":"LOCKED_PACKAGE_SOURCE_KIND_GIT","source_revision":"0123456789abcdef0123456789abcdef01234567","type":"library","version":"1.0.0"},{"bom_ref":"unavailable","context":{"conditions":{"cpu":["x86_64"],"engines":[],"os":["linux"]},"dev_only":false,"group_conditions":[],"optional":true,"source":{}},"external_references":[],"inputs":{"lockfile_paths":["app/package-lock.json"],"manifest_paths":[]},"licenses":[],"metadata_status":"unavailable","name":"missing-metadata","observed_licenses":[],"publisher_evidence":null,"purl":"pkg:npm/missing-metadata@2.0.0","record_kind":"locked_package","resolution_basis":"lockfile_record","scope":null,"source_evidence":null,"source_kind":"LOCKED_PACKAGE_SOURCE_KIND_REGISTRY","type":"library","version":"2.0.0"},{"bom_ref":"local","context":{"conditions":{"cpu":["x86_64"],"engines":[],"os":["linux"]},"dev_only":false,"group_conditions":[],"optional":true,"source":{}},"external_references":[],"inputs":{"lockfile_paths":["app/package-lock.json"],"manifest_paths":[]},"licenses":[],"metadata_reason":"non_registry_source","metadata_status":"not_eligible","name":"local-dependency","observed_licenses":[],"publisher_evidence":null,"purl":null,"purl_omission_reason":"non_registry_source","record_kind":"locked_package","resolution_basis":"lockfile_record","scope":null,"source_evidence":null,"source_kind":"LOCKED_PACKAGE_SOURCE_KIND_LOCAL","type":"library","version":null},{"bom_ref":"catalog","external_references":[],"inputs":{"lockfile_paths":[],"manifest_paths":["native/vcpkg.json"]},"licenses":[],"metadata_status":"unavailable","name":"catalog-dependency","observed_licenses":[],"publisher_evidence":null,"purl":null,"record_kind":"resolved_package","resolution_basis":"current_public_catalog","resolution_limitation":"vcpkg_baseline_not_applied","scope":null,"source_evidence":null,"type":"library","version":"1.0.0"},{"bom_ref":"go","external_references":[],"inputs":{"lockfile_paths":[],"manifest_paths":["go.mod"]},"licenses":[],"name":"example.com/source","observed_licenses":[{"license":{"name":"Apache-2.0"}},{"license":{"name":"MIT"}}],"publisher_evidence":null,"purl":"pkg:golang/example.com/source@v1.0.0","record_kind":"resolved_package","scope":null,"source_evidence":{"checked_at":"2026-10-22T12:00:00Z","files":[{"detected_licenses":["Apache-2.0"],"path":"LICENSE"},{"detected_licenses":["MIT"],"path":"nested/LICENSE"}],"last_attempt_at":"2026-10-22T12:00:00Z","last_attempt_status":"ambiguous","method":"licensecheck","module":"example.com/source","provider":"pkg_go_dev","status":"ambiguous","url":"https://pkg.go.dev/example.com/source@v1.0.0?tab=licenses","version":"v1.0.0"},"type":"library","version":"v1.0.0"},{"bom_ref":"failed-root","external_references":[],"inputs":{"lockfile_paths":[],"manifest_paths":["unresolved/package.json"]},"licenses":[],"name":"unresolved-project","observed_licenses":[],"publisher_evidence":null,"purl":null,"record_kind":"manifest","scope":null,"source_evidence":null,"type":"library","version":null}],"inventory":{"completeness":"mixed_dependency_inventory","component_type_basis":"library_assumed_from_inventory","coverage":[{"aggregate":"incomplete","assemblies":["root","registry","substitution","unavailable","local","catalog","go","failed-root"]},{"aggregate":"unknown","dependencies":["root","registry","substitution","unavailable","local","catalog","go","failed-root"]}],"declaration_agreement":[{"declaration_path":"app/package.json","declared_scope":"dependencies","locked_versions":["1.0.0"],"matched_versions":[],"name":"dependency","path":"app/package-lock.json","recorded_scopes":["dependencies"],"requested_requirement":"^2.0.0","requirement_status":"recorded","status":"version_mismatch"}],"declarations":[{"declared_requirement":"^2.0.0","declared_scope":"dependencies","manifest_path":"app/package.json","name":"dependency","optional":"false","source_type":"registry"},{"declared_requirement":"^9.0.0","declared_scope":"dependencies","manifest_path":"unresolved/package.json","name":"never-resolved-dependency","optional":"false","source_type":"registry"},{"declared_requirement":"v1.0.0","indirect":"true","manifest_path":"go.mod","name":"example.com/source","source_type":"registry"}],"dependency_coverage":{"catalog":{"reasons":["not_expanded"],"state":"unknown"},"failed-root":{"reasons":["not_expanded"],"state":"unknown"},"go":{"reasons":["not_expanded"],"state":"unknown"},"local":{"reasons":["not_expanded"],"state":"unknown"},"registry":{"reasons":["not_expanded"],"state":"unknown"},"root":{"reasons":["not_expanded"],"state":"unknown"},"substitution":{"reasons":["not_expanded"],"state":"unknown"},"unavailable":{"reasons":["not_expanded"],"state":"unknown"}},"lockfiles":[{"association_diagnostics":[],"association_status":"associated","completeness":"LOCKFILE_COMPLETENESS_PACKAGE_ENTRIES_ONLY","format":"LOCKFILE_FORMAT_NPM_PACKAGE_LOCK","manifest_lock_consistency":"not_checked","manifest_paths":["app/package.json"],"native_format_version":"3","path":"app/package-lock.json","projection_notices":["Target conditions were retained, not evaluated."]}],"manifest_associations":{"app/package.json":["app/package-lock.json"]},"notices":["Recorded inventory, not an exact installed build; artifacts were not inspected."],"primary_subject":{"id":"root"},"resolution_basis":"lockfile_records_and_manifest_resolution","resolutions":[{"diagnostics":[{"reason":"vcpkg_baseline_not_applied"}],"path":"native/vcpkg.json","status":"partial"},{"diagnostics":[{"name":"","reason":"resolution_failed"}],"path":"unresolved/package.json","status":"partial"}]},"schema_version":2}}},"exampleType":"examples"}},"description":"JSON license report, at most 16,777,216 bytes. Read inventory coverage and component evidence together; a successful response may be partial and does not provide a pass/fail decision.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"829583cc-9c0e-453c-9b99-163b2e60bfe9":{"content":{"application/problem+json":{"examples":{"invalid_session_id":{"title":"invalid_session_id","value":{"code":"INVALID_SESSION_ID","detail":"X-GitHits-Session-ID must occur once and match [A-Za-z0-9_-]{1,64}.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":400,"title":"Invalid session ID","type":"about:blank"}},"upstream_validation":{"title":"upstream_validation","value":{"code":"VALIDATION_ERROR","detail":"The request is invalid.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":400,"title":"Validation error","type":"about:blank"}},"validation":{"title":"validation","value":{"code":"VALIDATION_ERROR","detail":"query: contains unknown parameters; use only the documented parameters.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":400,"title":"Validation error","type":"about:blank"}}},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"description":"VALIDATION_ERROR, INVALID_SESSION_ID. Correct the field named in detail or the session header. These operations accept no query parameters. INVALID_SESSION_ID: a supplied session header is invalid or duplicated. VALIDATION_ERROR details identify the first invalid field and a reason when available. Array indices are zero-based; submitted values and unknown keys are not echoed.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"958dfa61-9c4c-4b0a-8305-4e8ebed86c48":{"content":{"application/problem+json":{"example":{"code":"AUTHENTICATION_REQUIRED","detail":"A bearer credential is required.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":401,"title":"Authentication required","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"AUTHENTICATION_REQUIRED","detail":"A bearer credential is required.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":401,"title":"Authentication required","type":"about:blank"}}},"exampleType":"examples"}},"description":"AUTHENTICATION_REQUIRED. Supply a valid Bearer credential.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"WWW-Authenticate":{"description":"Bearer challenge.","schema":{"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"20bc755a-2b8f-48cf-a6c9-2ce5815b386c":{"content":{"application/problem+json":{"example":{"code":"FORBIDDEN","detail":"The caller is not allowed to access this resource.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":403,"title":"Forbidden","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"FORBIDDEN","detail":"The caller is not allowed to access this resource.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":403,"title":"Forbidden","type":"about:blank"}}},"exampleType":"examples"}},"description":"FORBIDDEN, ACCOUNT_INACTIVE, TERMS_ACCEPTANCE_REQUIRED. Check credential access, account eligibility and required terms; follow terms_url or acceptance_url when provided.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"df212a27-eef4-4086-aab8-69727d6a153d":{"content":{"application/problem+json":{"example":{"code":"METHOD_NOT_ALLOWED","detail":"The requested method is not supported for this route.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":405,"title":"Method not allowed","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"METHOD_NOT_ALLOWED","detail":"The requested method is not supported for this route.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":405,"title":"Method not allowed","type":"about:blank"}}},"exampleType":"examples"}},"description":"METHOD_NOT_ALLOWED: the route does not support this HTTP method.","headers":{"Allow":{"description":"Supported methods: POST.","schema":{"type":"string"}},"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"f9d91e07-aaed-42c7-ab92-fcfd0cad15c5":{"content":{"application/problem+json":{"example":{"code":"UPLOAD_TIMEOUT","detail":"The upload did not complete in time.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":408,"title":"SBOM request failed","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"UPLOAD_TIMEOUT","detail":"The upload did not complete in time.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":408,"title":"SBOM request failed","type":"about:blank"}}},"exampleType":"examples"}},"description":"UPLOAD_TIMEOUT. Ensure the upload can finish within 30 seconds.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"ad9d41fc-09b9-4da7-8b28-20d53a3b1d98":{"content":{"application/problem+json":{"example":{"code":"INPUT_TOO_LARGE","detail":"The upload exceeds a file, path, count or body limit.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":413,"title":"SBOM request failed","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"INPUT_TOO_LARGE","detail":"The upload exceeds a file, path, count or body limit.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":413,"title":"SBOM request failed","type":"about:blank"}}},"exampleType":"examples"}},"description":"INPUT_TOO_LARGE. Reduce file count, path length or bytes to the documented upload limits.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"a30d4f86-7748-407d-b4fc-d015522d74ef":{"content":{"application/problem+json":{"example":{"code":"UNSUPPORTED_MEDIA_TYPE","detail":"Use multipart/form-data.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":415,"title":"SBOM request failed","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"UNSUPPORTED_MEDIA_TYPE","detail":"Use multipart/form-data.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":415,"title":"SBOM request failed","type":"about:blank"}}},"exampleType":"examples"}},"description":"UNSUPPORTED_MEDIA_TYPE. Send multipart/form-data and let the HTTP client set its boundary.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"6c52de4b-38ed-42c7-aca8-165bd1f988ac":{"content":{"application/problem+json":{"example":{"code":"LICENSE_REPORT_TOO_LARGE","detail":"The licenses report exceeds the response limit.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":422,"title":"Licenses request failed","type":"about:blank"},"schema":{"oneOf":[{"type":"object","description":"File-specific diagnostics returned only when generation rejects uploaded inputs.","required":["files","type","title","status","detail","instance","code"],"properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"oneOf.0.status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.type","typeLabel":"string"},"files":{"description":"Unusable uploaded files; paths refer only to this request's uploads.","items":{"description":"One rejected uploaded file, without parser diagnostics.","properties":{"path":{"description":"Original repository-relative filename supplied by the caller.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.files.items.[INDEX].path","typeLabel":"string"},"status":{"description":"Why this file could not contribute evidence.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.files.items.[INDEX].status","typeLabel":"string"}},"required":["path","status"],"type":"object","uniqueKey":"oneOf.0.files.items.[INDEX]","typeLabel":"object"},"maxItems":256,"minItems":1,"type":"array","isRequired":true,"uniqueKey":"oneOf.0.files","typeLabel":"object[]"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"oneOf.0.acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"oneOf.0.retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"oneOf.0.terms_url","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"The stable problem document returned for an unsuccessful public API request.","required":["type","title","status","detail","instance","code"],"properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"oneOf.1.code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"oneOf.1.detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"oneOf.1.instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"oneOf.1.status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"oneOf.1.title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"oneOf.1.type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"oneOf.1.acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"oneOf.1.retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"oneOf.1.terms_url","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"LICENSE_REPORT_TOO_LARGE","detail":"The licenses report exceeds the response limit.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":422,"title":"Licenses request failed","type":"about:blank"}}},"exampleType":"examples"}},"description":"LICENSE_REPORT_TOO_LARGE, UNUSABLE_MANIFEST, NO_MANIFEST_EVIDENCE, SBOM_OUTPUT_TOO_LARGE. Correct any files identified by UNUSABLE_MANIFEST or supply supported package evidence. For output-limit errors, request a smaller inventory if possible. Jobs do not increase the 16,777,216-byte JSON report limit.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"9b00dd6e-6a0f-4f76-b24f-f195451b89db":{"content":{"application/problem+json":{"example":{"code":"RATE_LIMITED","detail":"The request was rate limited.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":429,"title":"Rate limited","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"RATE_LIMITED","detail":"The request was rate limited.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":429,"title":"Rate limited","type":"about:blank"}}},"exampleType":"examples"}},"description":"RATE_LIMITED. Respect Retry-After when supplied before trying again. RATE_LIMITED can also mean your shared daily allowance is exhausted. When Retry-After is supplied, wait until that delay or HTTP date before trying again.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Delay in seconds or an HTTP date indicating when to retry, when supplied.","schema":{"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"5043b05e-0eec-4008-85fd-d26ffd71439f":{"description":"A request ID could not be assigned. The response has an empty body and no X-Request-ID or problem object; try again later.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}}},"x-githits-empty-identity-failure":true,"content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"6cf57a48-e4b5-4cec-a111-f0de10c87652":{"content":{"application/problem+json":{"example":{"code":"UPSTREAM_ERROR","detail":"The upstream service failed to provide a response.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":502,"title":"Upstream error","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"UPSTREAM_ERROR","detail":"The upstream service failed to provide a response.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":502,"title":"Upstream error","type":"about:blank"}}},"exampleType":"examples"}},"description":"UPSTREAM_ERROR. The analysis result could not be read. Keep X-Request-ID for support and report a persistent failure; a new submission creates another analysis.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"7aadf0ed-989f-49e2-bcc8-121ef355f458":{"content":{"application/problem+json":{"example":{"code":"SBOM_UNAVAILABLE","detail":"SBOM generation is temporarily unavailable.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":503,"title":"SBOM request failed","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"SBOM_UNAVAILABLE","detail":"SBOM generation is temporarily unavailable.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":503,"title":"SBOM request failed","type":"about:blank"}}},"exampleType":"examples"}},"description":"SBOM_UNAVAILABLE, UPSTREAM_UNAVAILABLE. Try again later if appropriate. A timeout or error does not guarantee processing stopped, and repeating POST may create another charged analysis. QUOTA_UNAVAILABLE: your daily allowance could not be checked. This is temporary; retry the same request later (retryable=true).","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"},"0e9163d5-2d65-4ba6-868d-37020c7604ea":{"content":{"application/problem+json":{"example":{"code":"TIMEOUT","detail":"The upstream request did not complete in time.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":504,"title":"Upstream timeout","type":"about:blank"},"schema":{"description":"The stable problem document returned for an unsuccessful public API request.","properties":{"code":{"description":"The stable uppercase API error code.","type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation. Wording can change; use code and structured fields for program logic. Validation errors identify the first invalid field (including zero-based array indices) and a reason; version errors can include canonical-version guidance.","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"description":"Request ID matching the X-Request-ID response header; include it when seeking support.","type":"string","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"acceptance_url","typeLabel":"string"},"retryable":{"description":"Whether retrying later may help, when supplied. Follow this flag for lookup/provider outcomes and temporary daily-allowance failures; malformed evidence can be nonretryable.","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"terms_url","typeLabel":"string"}},"required":["type","title","status","detail","instance","code"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"TIMEOUT","detail":"The upstream request did not complete in time.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":504,"title":"Upstream timeout","type":"about:blank"}}},"exampleType":"examples"}},"description":"TIMEOUT. Try again later if appropriate. A timeout or error does not guarantee processing stopped, and repeating POST may create another charged analysis.","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Request trace ID for diagnostics; matches problem.instance on failures.","schema":{"type":"string"}}},"exampleType":"examples"}},"security":{"5be2c4cc-423f-474c-b297-06e70ecc6e3e":{"bearer_auth":{"scheme":"bearer","type":"http","scopes":[],"schemeName":"bearer_auth"}}},"servers":{"bfb2a79f-febe-439c-ad58-8db4455b87a2":{"description":"Production","url":"https://api.githits.dev"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"scheme":"bearer","type":"http","scopes":[],"schemeName":"bearer_auth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearer_auth","name":"Authorization"}],"title":"bearer_auth"}]},"originalFileLocation":"https://api.githits.dev/v1/openapi.json"},"subdomain":"githits","siteName":"GitHits","title":"Preview a compact dependency-license report - GitHits","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T11:15:02.039Z","originalFileLocation":"api-reference/v1/experimental/preview-a-compact-dependency-license-report.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=\"dark\"}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=\"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns schema_version: 2; the existing /v1/experimental/licenses operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts. First request Use a Bearer credential for an active account with required terms accepted. /path/to/private-auth.conf below is your own protected curl configuration containing your authorization header, kept outside the repository. sh curl --config /path/to/private-auth.conf \\ --fail-with-body --silent --show-error \\ --form \u0026#x27;files[]=@package.json;filename=package.json\u0026#x27; \\ --form \u0026#x27;files[]=@package-lock.json;filename=package-lock.json\u0026#x27; \\ --output license-report.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/license-reports\u0026#x27; Repeat the literal files[] field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. Accept does not select a report version. The existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as Generate an SBOM (POST /v1/experimental/sbom). Check curl\u0026#x27;s exit status before treating the output file as a report: errors save an application/problem+json body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped. Long-running work and evidence inspection Use the existing POST /v1/experimental/lockfile-jobs?kind=sbom\u0026amp;format=cyclonedx workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read GET /v1/experimental/license-reports/{id}. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis. Read the compact report - Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected. - licenses contains reported choices; observed_licenses contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred. - publisher_evidence retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. source_evidence retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt. - inputs.manifest_paths and inputs.lockfile_paths are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view. - Optional license_evidence holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in. - Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read inventory.completeness, resolutions, coverage, dependency_coverage, lockfiles and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage. - inventory.declarations preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view. Null means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit. Handle errors Branch on the problem code, retain X-Request-ID, and respect Retry-After. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. LICENSE_REPORT_TOO_LARGE or SBOM_OUTPUT_TOO_LARGE requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use Cache-Control: no-store. This is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\">\u003cmeta data-mint-head name=\"application-name\" content=\"GitHits\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/githits/hPN3FB6to_tLCtYP/_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/githits/hPN3FB6to_tLCtYP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/githits/hPN3FB6to_tLCtYP/_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/githits/hPN3FB6to_tLCtYP/_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/githits/hPN3FB6to_tLCtYP/_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/githits/hPN3FB6to_tLCtYP/_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/githits/hPN3FB6to_tLCtYP/_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/githits/hPN3FB6to_tLCtYP/_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/githits/hPN3FB6to_tLCtYP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Preview a compact dependency-license report - GitHits\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns schema_version: 2; the existing /v1/experimental/licenses operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts. First request Use a Bearer credential for an active account with required terms accepted. /path/to/private-auth.conf below is your own protected curl configuration containing your authorization header, kept outside the repository. sh curl --config /path/to/private-auth.conf \\ --fail-with-body --silent --show-error \\ --form \u0026#x27;files[]=@package.json;filename=package.json\u0026#x27; \\ --form \u0026#x27;files[]=@package-lock.json;filename=package-lock.json\u0026#x27; \\ --output license-report.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/license-reports\u0026#x27; Repeat the literal files[] field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. Accept does not select a report version. The existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as Generate an SBOM (POST /v1/experimental/sbom). Check curl\u0026#x27;s exit status before treating the output file as a report: errors save an application/problem+json body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped. Long-running work and evidence inspection Use the existing POST /v1/experimental/lockfile-jobs?kind=sbom\u0026amp;format=cyclonedx workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read GET /v1/experimental/license-reports/{id}. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis. Read the compact report - Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected. - licenses contains reported choices; observed_licenses contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred. - publisher_evidence retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. source_evidence retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt. - inputs.manifest_paths and inputs.lockfile_paths are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view. - Optional license_evidence holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in. - Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read inventory.completeness, resolutions, coverage, dependency_coverage, lockfiles and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage. - inventory.declarations preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view. Null means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit. Handle errors Branch on the problem code, retain X-Request-ID, and respect Retry-After. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. LICENSE_REPORT_TOO_LARGE or SBOM_OUTPUT_TOO_LARGE requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use Cache-Control: no-store. This is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"GitHits\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://githits.mintlify.site/_mintlify/api/og/v2?division=Experimental\u0026amp;title=Preview+a+compact+dependency-license+report\u0026amp;description=Create+a+compact+informational+license+report+from+manifests+and+lockfiles.+This+separate+experimental+operation+returns+%60schema_version%3A+2%60%3B+the+existing+%60%2Fv1%2F\u0026amp;theme=8041cabad20aa9f8c5227dd8\u0026amp;signature=4bb4cfc5f4478bf5edcac4a9ea0d8d2a752ace018a947e84e9d46e74d61af813\">\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=\"Preview a compact dependency-license report - GitHits\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns schema_version: 2; the existing /v1/experimental/licenses operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts. First request Use a Bearer credential for an active account with required terms accepted. /path/to/private-auth.conf below is your own protected curl configuration containing your authorization header, kept outside the repository. sh curl --config /path/to/private-auth.conf \\ --fail-with-body --silent --show-error \\ --form \u0026#x27;files[]=@package.json;filename=package.json\u0026#x27; \\ --form \u0026#x27;files[]=@package-lock.json;filename=package-lock.json\u0026#x27; \\ --output license-report.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/license-reports\u0026#x27; Repeat the literal files[] field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. Accept does not select a report version. The existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as Generate an SBOM (POST /v1/experimental/sbom). Check curl\u0026#x27;s exit status before treating the output file as a report: errors save an application/problem+json body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped. Long-running work and evidence inspection Use the existing POST /v1/experimental/lockfile-jobs?kind=sbom\u0026amp;format=cyclonedx workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read GET /v1/experimental/license-reports/{id}. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis. Read the compact report - Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected. - licenses contains reported choices; observed_licenses contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred. - publisher_evidence retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. source_evidence retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt. - inputs.manifest_paths and inputs.lockfile_paths are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view. - Optional license_evidence holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in. - Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read inventory.completeness, resolutions, coverage, dependency_coverage, lockfiles and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage. - inventory.declarations preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view. Null means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit. Handle errors Branch on the problem code, retain X-Request-ID, and respect Retry-After. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. LICENSE_REPORT_TOO_LARGE or SBOM_OUTPUT_TOO_LARGE requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use Cache-Control: no-store. This is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://githits.mintlify.site/_mintlify/api/og/v2?division=Experimental\u0026amp;title=Preview+a+compact+dependency-license+report\u0026amp;description=Create+a+compact+informational+license+report+from+manifests+and+lockfiles.+This+separate+experimental+operation+returns+%60schema_version%3A+2%60%3B+the+existing+%60%2Fv1%2F\u0026amp;theme=8041cabad20aa9f8c5227dd8\u0026amp;signature=4bb4cfc5f4478bf5edcac4a9ea0d8d2a752ace018a947e84e9d46e74d61af813\">\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/githits/hPN3FB6to_tLCtYP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"GitHits\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#cc3f8b\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/v1/experimental/preview-a-compact-dependency-license-report.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.githits.com/#organization\",\"name\":\"GitHits\",\"url\":\"https://docs.githits.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/githits/nEuGn8_ZROo1DncD/images/githits-wordmark.svg?fit=max\u0026auto=format\u0026n=nEuGn8_ZROo1DncD\u0026q=85\u0026s=33b1a4083b1476ad8520731d35d55987\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.githits.com#website\",\"name\":\"GitHits\",\"url\":\"https://docs.githits.com\",\"publisher\":{\"@id\":\"https://docs.githits.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report#webpage\",\"url\":\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report\",\"name\":\"Preview a compact dependency-license report\",\"description\":\"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns schema_version: 2; the existing /v1/experimental/licenses operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts. First request Use a Bearer credential for an active account with required terms accepted. /path/to/private-auth.conf below is your own protected curl configuration containing your authorization header, kept outside the repository. sh curl --config /path/to/private-auth.conf \\\\ --fail-with-body --silent --show-error \\\\ --form 'files[]=@package.json;filename=package.json' \\\\ --form 'files[]=@package-lock.json;filename=package-lock.json' \\\\ --output license-report.json \\\\ 'https://api.githits.dev/v1/experimental/license-reports' Repeat the literal files[] field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. Accept does not select a report version. The existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as Generate an SBOM (POST /v1/experimental/sbom). Check curl's exit status before treating the output file as a report: errors save an application/problem+json body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped. Long-running work and evidence inspection Use the existing POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read GET /v1/experimental/license-reports/{id}. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis. Read the compact report - Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected. - licenses contains reported choices; observed_licenses contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred. - publisher_evidence retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. source_evidence retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt. - inputs.manifest_paths and inputs.lockfile_paths are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view. - Optional license_evidence holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in. - Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read inventory.completeness, resolutions, coverage, dependency_coverage, lockfiles and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage. - inventory.declarations preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view. Null means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit. Handle errors Branch on the problem code, retain X-Request-ID, and respect Retry-After. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. LICENSE_REPORT_TOO_LARGE or SBOM_OUTPUT_TOO_LARGE requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use Cache-Control: no-store. This is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\",\"dateModified\":\"2026-11-05T11:15:02.039Z\",\"isPartOf\":{\"@id\":\"https://docs.githits.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"v1 reference\",\"item\":\"https://docs.githits.com/api-reference/v1/packages/get-a-package-or-repository-changelog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Experimental\",\"item\":\"https://docs.githits.com/api-reference/v1/experimental/compare-two-exact-source-trees\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Preview a compact dependency-license report\",\"item\":\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report#apireference\",\"headline\":\"Preview a compact dependency-license report\",\"name\":\"Preview a compact dependency-license report\",\"description\":\"Create a compact informational license report from manifests and lockfiles. This separate experimental operation returns schema_version: 2; the existing /v1/experimental/licenses operation continues returning schema 1. The compact report preserves package occurrences, reported choices, publisher context, source observations, input attribution and meaningful gaps, while omitting dependency adjacency, checksums and generic SBOM property containers. It does not evaluate license policy or certify installed artifacts. First request Use a Bearer credential for an active account with required terms accepted. /path/to/private-auth.conf below is your own protected curl configuration containing your authorization header, kept outside the repository. sh curl --config /path/to/private-auth.conf \\\\ --fail-with-body --silent --show-error \\\\ --form 'files[]=@package.json;filename=package.json' \\\\ --form 'files[]=@package-lock.json;filename=package-lock.json' \\\\ --output license-report.json \\\\ 'https://api.githits.dev/v1/experimental/license-reports' Repeat the literal files[] field and preserve each repository-relative filename, including directories. Let curl set the multipart content type and boundary. Only files are accepted: no query parameters, format/kind selectors, repository URLs, archives, base64 data or policy files. Accept does not select a report version. The existing SBOM upload contract applies: 1–256 UTF-8 files, each at most 5,242,880 bytes, a total multipart request of at most 8,000,000 bytes, and relative filenames of at most 1,024 UTF-8 bytes without control characters, backslashes or dot/parent segments. Uploads have a 30-second deadline and synchronous analysis a 150-second budget. Unsupported or unusable files reject the upload. Supported manifest/lockfile families and companion-file restrictions are the same as Generate an SBOM (POST /v1/experimental/sbom). Check curl's exit status before treating the output file as a report: errors save an application/problem+json body there. Successful output is the report itself, without a job ID or retrieval URL. Repeating POST starts another analysis; a timeout does not establish that processing stopped. Long-running work and evidence inspection Use the existing POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx workflow for long-running work or when you need the original SBOM. Follow its status/events until success, then read GET /v1/experimental/license-reports/{id}. This is the same analysis and authorized CycloneDX result, not another generation or a new job kind. Existing job links, retention, authorization, quotas and billing apply. Generation uses the same analysis reservation as SBOM; the provisional operation cost is 1. Reading an existing report has operation cost 0 and starts no new analysis. Read the compact report - Keep separate component entries even when names, versions or PURLs match. Preserve supplied qualifiers/subpaths, source kinds and recorded source selectors/revisions. A local source does not establish first-party ownership, and a recorded revision does not prove that commit was inspected. - licenses contains reported choices; observed_licenses contains separate detections. Neither observations nor repository context substitute for reported choices. No AND/OR relation between separate choices or license alias is inferred. - publisher_evidence retains original statements, interpretation/issues and applicability. Its capture/coverage fields describe evidence limitations, not inventory or license completeness. source_evidence retains detection service/method, module/version/URL, root/nested file paths, observations and latest-attempt history. An older observation can coexist with a failed latest attempt. - inputs.manifest_paths and inputs.lockfile_paths are ordinary JSON string arrays. Purpose-specific structured fields are already decoded JSON: do not parse them as JSON strings. Reference comments retain original owner/scope context; reference and component digests remain available only in the original SBOM/schema-1 view. - Optional license_evidence holds independent acquisition/applicability facts. With canonical publisher evidence, interpretation and statements remain solely with that owner. Without it, manifest/legacy raw text, syntax/status and issues remain available here. No missing fact is filled with an empty or completed stand-in. - Metadata status/reason, resolution basis/limitations and PURL-omission reasons distinguish missing acquisition from ineligible or uncertain identity. Read inventory.completeness, resolutions, coverage, dependency_coverage, lockfiles and notices together. Missing references, unfamiliar states, empty arrays and HTTP 200 never prove complete license or dependency coverage. - inventory.declarations preserves minimal original request names/inputs, including dependencies lost from the package inventory after a whole-manifest resolver failure. Declarations are not resolved package occurrences or graph edges. An absent requirement is unreported or withheld, never an unconstrained range. Agreement summaries retain named outcomes; empty matched-version lists do not prove there was no lock evidence. Detailed provider proofs remain in the original SBOM/schema-1 view. Null means unreported/unavailable information. Empty choices mean no choices were reported, not that no license exists or every file was checked. Accept unfamiliar response strings and additive evidence instead of rejecting otherwise usable data. The report is at most 16,777,216 bytes; over-limit output is rejected without truncation. Jobs do not increase that limit. Handle errors Branch on the problem code, retain X-Request-ID, and respect Retry-After. Correct request/upload problems for 400/408/413/415 and unusable-file 422 responses. Authentication/account/terms errors retain their existing 401/403 contract. LICENSE_REPORT_TOO_LARGE or SBOM_OUTPUT_TOO_LARGE requires a smaller inventory or the original available job result. Keep request identity for persistent 502 errors. Retry reads of an existing job for transient failures instead of unconditionally repeating a charged POST. Responses use Cache-Control: no-store. This is an experimental contract. Stable promotion is a separate acceptance step; it does not remove or reinterpret saved schema-1 reports.\",\"url\":\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report\",\"mainEntityOfPage\":{\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/preview-a-compact-dependency-license-report#webpage\"},\"dateModified\":\"2026-11-05T11:15:02.039Z\",\"publisher\":{\"@id\":\"https://docs.githits.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.githits.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"GitHits\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"GitHits","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API","groups":[{"group":"Get started","pages":[{"title":"GitHits REST API","sidebarTitle":"Overview","href":"/api/overview"},{"title":"API quickstart","href":"/api/quickstart"},{"title":"API authentication","href":"/api/authentication"},{"title":"Requests and responses","href":"/api/requests-and-responses"},{"title":"SBOM, audit and licenses","sidebarTitle":"SBOM, audit and licenses","href":"/api/lockfile-analysis"},{"title":"API errors","href":"/api/errors"},{"title":"API versioning","href":"/api/versioning"}]},{"group":"v1 reference","pages":[{"group":"Packages","pages":[{"title":"Get a package or repository changelog","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/changelog","href":"/api-reference/v1/packages/get-a-package-or-repository-changelog"},{"title":"Review package upgrades","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/package-upgrade-reviews","href":"/api-reference/v1/packages/review-package-upgrades"},{"title":"Inspect a package release","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/packages/{registry}/{name}","href":"/api-reference/v1/packages/inspect-a-package-release"},{"title":"Inspect package dependencies","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/packages/{registry}/{name}/dependencies","href":"/api-reference/v1/packages/inspect-package-dependencies"},{"title":"Inspect package vulnerabilities","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/packages/{registry}/{name}/vulnerabilities","href":"/api-reference/v1/packages/inspect-package-vulnerabilities"}]},{"group":"Code Diff","pages":[{"title":"Compare two exact source trees","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/code/diff","href":"/api-reference/v1/code-diff/compare-two-exact-source-trees"}]},{"group":"Examples","pages":[{"title":"Generate an example from open-source references","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/examples/search","href":"/api-reference/v1/examples/generate-an-example-from-open-source-references"}]},{"group":"Experimental","pages":[{"title":"Compare two exact source trees","description":"Deprecated alias; use POST /v1/code/diff.\n\nCompare source changes between two package versions or two refs in a public repository. The response lists changed files and can include added and deleted line counts and patches.\n\nUse this endpoint to inspect the code behind a release or upgrade. Comparisons cover the whole repository, including when you identify it through a package.\n\n## Selector catalogue\n\nUse the following selectors with the `fields` query parameter to choose which fields the response includes. See [Choose what the response includes](https://docs.githits.com/api/requests-and-responses#choose-what-the-response-includes) for details.\n\n| Selector | Data | Default |\n| --- | --- | --- |\n| `files` | Identity/status fields and content safety; inventory only | No |\n| `files.stats` | Adds nullable additions/deletions; implies `files` and requests stats | No |\n| `files.patch` | Adds nullable patch and omission reason; implies stats and requests patches | Yes |\n\nFailures use a stable problem document. When supplied by the source, optional recovery hints identify the failed `side`, retryability, published versions, and ordered source ref/version alternatives. Missing hints are omitted. Classified user-facing errors use nonempty REST-suitable source guidance as detail; otherwise gateway text is used. Internal diagnostics remain private. Detail wording is not stable; use code and recovery fields. Unsupported package registries or repository providers return 422 `UNSUPPORTED_REGISTRY`; legally blocked repositories return 451 `REPOSITORY_LEGALLY_BLOCKED`. A root inventory failure is a problem response, while qualified partial or failed content remains a successful inventory response.\n\nFor upgrade decisions, combine source changes with dependency, advisory and behavior compatibility evidence. Inventory remains authoritative when patches are truncated, filtered, or unavailable; byte-escaped paths are display identities and cannot be used as exact read tokens.\n","deprecated":true,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/code/diff","href":"/api-reference/v1/experimental/compare-two-exact-source-trees"},{"title":"Preview a compact dependency-license report","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/license-reports","href":"/api-reference/v1/experimental/preview-a-compact-dependency-license-report"},{"title":"Preview a compact report for a completed analysis","description":"Retrieve compact report `schema_version: 2` for an existing authorized CycloneDX SBOM job. Use the analysis ID returned by `POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx`, after its existing status/events indicate success. A component `bom_ref` is not an analysis ID. The synchronous compact POST returns no job ID.\n\n```sh\ncurl --config /path/to/private-auth.conf \\\n --fail-with-body --silent --show-error \\\n --output license-report.json \\\n 'https://api.githits.dev/v1/experimental/license-reports/{id}'\n```\n\n`/path/to/private-auth.conf` is your own protected curl configuration containing your authorization header, kept outside the repository. Use a credential with access to the submitted job, such as the submission credential. Check curl's exit status: failures save a JSON problem rather than a report.\n\nThis read fetches one existing authorized result and projects it; it never resubmits, resolves, enriches or fetches source URLs. Operation cost is 0, with no new analysis reservation. The original job's status/events/result links, representation, owner/expiry gates and retention stay unchanged. No query parameters or `Accept`-based report selection are supported. The legacy `/v1/experimental/licenses/{id}` read remains schema 1, and the original CycloneDX result remains available through the job's `result_url`.\n\n**Interpret the report**\n\nThe compact POST documents the full report semantics. Keep every original occurrence and supplied identity qualifier; `bom_ref` and typed `inputs` retain attribution. Reported choices, publisher statements/context and observed file detections remain distinct. Original source observations and latest-attempt state/time do not certify your installed artifact. Local source does not prove first-party ownership. No license normalization, inferred AND/OR or pass/fail verdict is added.\n\nPurpose-specific fields are already JSON objects/arrays; they replace JSON strings inside generic property containers. `license_evidence` retains independent occurrence limitations and manifest/legacy detail only when it is not a mirror of canonical publisher evidence. Inventory coverage and named declaration gaps are not license completeness. Missing requirements never imply unrestricted selection. Empty matched-version lists do not imply no lock evidence; original provider proofs remain in the schema-1 view/SBOM.\n\nNull, absent facts, empty choices, unfamiliar statuses and unresolved references retain uncertainty. HTTP 200 does not establish that every dependency or license is known. Report output is bounded at 16,777,216 bytes and is never truncated. Dependency adjacency, component/reference digests and generic SBOM/debug properties are omitted from this compact view.\n\n**Handle errors**\n\nProblems use `application/problem+json`; branch on `code`, keep `X-Request-ID`, and honor `Retry-After`.\n\n| Status / code | Meaning and next action |\n| --- | --- |\n| 400 `VALIDATION_ERROR` / `INVALID_SESSION_ID` | Remove query parameters or correct the named field/session header. |\n| 401 / 403 | Check credential, ownership/account eligibility and required terms. |\n| 404 `ANALYSIS_NOT_FOUND` | Check the submission ID and credential. Missing, malformed, expired and inaccessible IDs share this response after authentication. |\n| 409 `ANALYSIS_PENDING` | Wait through existing status/events, then retry the same read. |\n| 409 `ANALYSIS_FAILED` | Inspect the safe open `failure_code` and job status before deliberately submitting new work. |\n| 409 `INCOMPATIBLE_ANALYSIS` | Use a job submitted with `kind=sbom\u0026format=cyclonedx`; audit/SPDX/text jobs are not converted. |\n| 422 `LICENSE_REPORT_TOO_LARGE` | The compact report exceeds its limit. Read the original available job result or request a smaller inventory. |\n| 429 / 502 / 503 / 504 | Respect retry guidance and retain the job/request IDs. Retry the existing read for transient failures instead of creating another analysis. |\n\nResponses use `Cache-Control: no-store`. Stable promotion is a later acceptance step; current schema-1 endpoints and saved reports remain unchanged.\n","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/experimental/license-reports/{id}","href":"/api-reference/v1/experimental/preview-a-compact-report-for-a-completed-analysis"},{"title":"Report dependency licenses from uploaded files","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/licenses","href":"/api-reference/v1/experimental/report-dependency-licenses-from-uploaded-files"},{"title":"Get dependency licenses for a completed analysis","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/experimental/licenses/{id}","href":"/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis"},{"title":"Submit a lockfile analysis job","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/lockfile-jobs","href":"/api-reference/v1/experimental/submit-a-lockfile-analysis-job"},{"title":"Get lockfile analysis status","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/experimental/lockfile-jobs/{id}","href":"/api-reference/v1/experimental/get-lockfile-analysis-status"},{"title":"Stream lockfile analysis progress","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/experimental/lockfile-jobs/{id}/events","href":"/api-reference/v1/experimental/stream-lockfile-analysis-progress"},{"title":"Download a completed lockfile analysis","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/experimental/lockfile-jobs/{id}/result","href":"/api-reference/v1/experimental/download-a-completed-lockfile-analysis"},{"title":"Research a question with cited sources","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/research","href":"/api-reference/v1/experimental/research-a-question-with-cited-sources"},{"title":"Generate an SBOM from uploaded files","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/sbom","href":"/api-reference/v1/experimental/generate-an-sbom-from-uploaded-files"},{"title":"Resolve a target name","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/experimental/targets/resolve","href":"/api-reference/v1/experimental/resolve-a-target-name"}]},{"group":"Feedback","pages":[{"title":"Submit solution or session feedback","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/feedback","href":"/api-reference/v1/feedback/submit-solution-or-session-feedback"}]},{"group":"Grep","pages":[{"title":"Find regex or literal matches across source and documentation","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/grep","href":"/api-reference/v1/grep/find-regex-or-literal-matches-across-source-and-documentation"}]},{"group":"Languages","pages":[{"title":"Search supported programming languages","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/languages","href":"/api-reference/v1/languages/search-supported-programming-languages"}]},{"group":"List","pages":[{"title":"List files and documentation paths","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/list","href":"/api-reference/v1/list/list-files-and-documentation-paths"}]},{"group":"Read","pages":[{"title":"Read documentation or source code","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/read","href":"/api-reference/v1/read/read-documentation-or-source-code"}]},{"group":"Search","pages":[{"title":"Search documentation, code and symbols","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json post /v1/searches","href":"/api-reference/v1/search/search-documentation-code-and-symbols"},{"title":"Get search status and retained results","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/searches/{search_ref}","href":"/api-reference/v1/search/get-search-status-and-retained-results"}]},{"group":"Vulnerabilities","pages":[{"title":"Look up a vulnerability and affected packages","deprecated":null,"version":null,"openapi":"https://api.githits.dev/v1/openapi.json get /v1/vulnerabilities/{id}","href":"/api-reference/v1/vulnerabilities/look-up-a-vulnerability-and-affected-packages"}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/overview"}]}]},"basePath":"","title":"Preview a compact dependency-license report - GitHits","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-CxAy5y67.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}