Retrieve a JSON license report for an analysis job you can access. Use the analysis id returned in the HTTP 202 submission response. The synchronous POST /v1/experimental/licenses response has no job ID; a component’s bom_ref cannot be used here.
The job must have been submitted with kind=sbom&format=cyclonedx. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 INCOMPATIBLE_ANALYSIS; choose a compatible job or submit a new one with the required parameters.
Create and follow a job
Use a GitHits Bearer credential for an active account with required terms accepted. In these examples, /path/to/private-auth.conf is your own protected curl configuration containing header = "Authorization: Bearer <token>"; replace the placeholder privately and keep the file outside your repository.
Check for HTTP 202 and read id from job.json. Keep expires_at and the returned links.
Resolve status_url or events_url against the API server URL. Read status or consume the server-sent events until state=succeeded. The presence of result_url alone does not mean the job is ready. On state=failed, inspect the job status’s error code before deciding whether to submit new work; a licenses read also returns 409 ANALYSIS_FAILED with failure_code.
Replace {id} below with the submission response’s id and request the licenses view:
On HTTP 200, licenses.json contains schema_version, inventory and components. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or Accept-based format selection are supported.
Reading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The x-githits-cost value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report.
Interpret the response
Every reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use bom_ref for reported relationships and properties for input paths. licenses gives license choices; observed_licenses gives independent observations. publisher_evidence retains original publisher statements and release/package/repository context. source_evidence retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named properties[].value strings contain extra JSON that you parse separately; the field descriptions identify them.
Null means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read inventory.completeness with the component list. Dependency coverage is in inventory.compositions and the inventory.properties entry named githits:dependency_coverage; parse that entry’s value as JSON. Notices are properties named githits:notice. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report.
Handle errors
Problems use application/problem+json; branch on code and keep X-Request-ID for support.
Status / code
What to do
400 VALIDATION_ERROR / INVALID_SESSION_ID
Remove query parameters or correct the session header/field identified in detail.
401 / 403
Check the credential, account access and required terms; use any provided terms/acceptance links.
404 ANALYSIS_NOT_FOUND
Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it.
409 ANALYSIS_PENDING
Wait for completion through status/events, then retry this GET; do not submit a second job just to wait.
409 ANALYSIS_FAILED
Inspect failure_code and the job status. Correct the input or cause before deliberately creating another analysis.
409 INCOMPATIBLE_ANALYSIS
Use a job created with kind=sbom&format=cyclonedx; the format of an existing job cannot be changed by this GET.
422 LICENSE_REPORT_TOO_LARGE
The JSON report exceeds 16,777,216 bytes. Download the job’s original CycloneDX document through result_url, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit.
429 RATE_LIMITED
Respect Retry-After when provided.
502 UPSTREAM_ERROR
The analysis result could not be read. Keep the job ID and X-Request-ID, and report a persistent failure; do not repeatedly resubmit the same files.
503 / 504
Try reading the same job again later. This does not start another analysis.
Responses must not be cached (Cache-Control: no-store). The report does not certify an installed artifact or complete license coverage.
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.
Analysis id returned in the HTTP 202 JSON response from POST /v1/experimental/lockfile-jobs?kind=sbom&format=cyclonedx. Use a credential that can access that job, such as the credential used to submit it. A component bom_ref is not a job id. Missing, malformed, expired or inaccessible ids return ANALYSIS_NOT_FOUND after authentication.
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.
JSON license inventory with separate license choices, publisher statements and source-file observations, plus input attribution and coverage. It provides evidence for your own evaluation rather than an allow/deny result. Additional fields can appear.
All reported occurrences in their original order, with the selected primary project/source entry first when one exists. Keep repeated names, versions and package URLs separate; use bom_ref and input-path properties for attribution.
Input provenance, inventory coverage and reported dependency relationships. Read these facts alongside the component list; successful analysis can still be partial.
{"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/get-dependency-licenses-for-a-completed-analysis","slug":"/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis","pageMetadata":{"title":"Get dependency licenses for a completed analysis","description":"Retrieve a JSON license report for an analysis job you can access. Use the analysis `id` returned in the HTTP 202 submission response. The synchronous `POST /v1/experimental/licenses` response has no job ID; a component's `bom_ref` cannot be used here.\n\nThe job must have been submitted with `kind=sbom\u0026format=cyclonedx`. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 `INCOMPATIBLE_ANALYSIS`; choose a compatible job or submit a new one with the required parameters.\n\n**Create and follow a job**\n\nUse a GitHits Bearer credential for an active account with required terms accepted. In these examples, `/path/to/private-auth.conf` is your own protected curl configuration containing `header = \"Authorization: Bearer \u003ctoken>\"`; replace the placeholder privately and keep the file outside your 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 job.json \\\n 'https://api.githits.dev/v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx'\n```\n\n1. Check for HTTP 202 and read `id` from `job.json`. Keep `expires_at` and the returned links.\n2. Resolve `status_url` or `events_url` against the API server URL. Read status or consume the server-sent events until `state=succeeded`. The presence of `result_url` alone does not mean the job is ready. On `state=failed`, inspect the job status's `error` code before deciding whether to submit new work; a licenses read also returns 409 `ANALYSIS_FAILED` with `failure_code`.\n3. Replace `{id}` below with the submission response's `id` and request the licenses view:\n\n```sh\ncurl --config /path/to/private-auth.conf \\\n --fail-with-body --silent --show-error \\\n --output licenses.json \\\n 'https://api.githits.dev/v1/experimental/licenses/{id}'\n```\n\nOn HTTP 200, `licenses.json` contains `schema_version`, `inventory` and `components`. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or `Accept`-based format selection are supported.\n\nReading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The `x-githits-cost` value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report.\n\n**Interpret the response**\n\nEvery reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use `bom_ref` for reported relationships and `properties` for input paths. `licenses` gives license choices; `observed_licenses` gives independent observations. `publisher_evidence` retains original publisher statements and release/package/repository context. `source_evidence` retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named `properties[].value` strings contain extra JSON that you parse separately; the field descriptions identify them.\n\nNull means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read `inventory.completeness` with the component list. Dependency coverage is in `inventory.compositions` and the `inventory.properties` entry named `githits:dependency_coverage`; parse that entry's `value` as JSON. Notices are properties named `githits:notice`. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report.\n\n**Handle errors**\n\nProblems use `application/problem+json`; branch on `code` and keep `X-Request-ID` for support.\n\n| Status / code | What to do |\n| --- | --- |\n| 400 `VALIDATION_ERROR` / `INVALID_SESSION_ID` | Remove query parameters or correct the session header/field identified in `detail`. |\n| 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. |\n| 404 `ANALYSIS_NOT_FOUND` | Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it. |\n| 409 `ANALYSIS_PENDING` | Wait for completion through status/events, then retry this GET; do not submit a second job just to wait. |\n| 409 `ANALYSIS_FAILED` | Inspect `failure_code` and the job status. Correct the input or cause before deliberately creating another analysis. |\n| 409 `INCOMPATIBLE_ANALYSIS` | Use a job created with `kind=sbom\u0026format=cyclonedx`; the format of an existing job cannot be changed by this GET. |\n| 422 `LICENSE_REPORT_TOO_LARGE` | The JSON report exceeds 16,777,216 bytes. Download the job's original CycloneDX document through `result_url`, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit. |\n| 429 `RATE_LIMITED` | Respect `Retry-After` when provided. |\n| 502 `UPSTREAM_ERROR` | The analysis result could not be read. Keep the job ID and `X-Request-ID`, and report a persistent failure; do not repeatedly resubmit the same files. |\n| 503 / 504 | Try reading the same job again later. This does not start another analysis. |\n\nResponses must not be cached (`Cache-Control: no-store`). The report does not certify an installed artifact or complete license coverage.\n","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","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 ol: \"ol\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n strong: \"strong\",\n table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\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: [\"Retrieve a JSON license report for an analysis job you can access. Use the analysis \", _jsx(_components.code, {\n children: \"id\"\n }), \" returned in the HTTP 202 submission response. The synchronous \", _jsx(_components.code, {\n children: \"POST /v1/experimental/licenses\"\n }), \" response has no job ID; a component’s \", _jsx(_components.code, {\n children: \"bom_ref\"\n }), \" cannot be used here.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The job must have been submitted with \", _jsx(_components.code, {\n children: \"kind=sbom\u0026format=cyclonedx\"\n }), \". You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 \", _jsx(_components.code, {\n children: \"INCOMPATIBLE_ANALYSIS\"\n }), \"; choose a compatible job or submit a new one with the required parameters.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Create and follow a job\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Use a GitHits Bearer credential for an active account with required terms accepted. In these examples, \", _jsx(_components.code, {\n children: \"/path/to/private-auth.conf\"\n }), \" is your own protected curl configuration containing \", _jsx(_components.code, {\n children: \"header = \\\"Authorization: Bearer \u003ctoken>\\\"\"\n }), \"; replace the placeholder privately and keep the file outside your 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: \" job.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/lockfile-jobs?kind=sbom\u0026format=cyclonedx'\"\n })\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.ol, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Check for HTTP 202 and read \", _jsx(_components.code, {\n children: \"id\"\n }), \" from \", _jsx(_components.code, {\n children: \"job.json\"\n }), \". Keep \", _jsx(_components.code, {\n children: \"expires_at\"\n }), \" and the returned links.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Resolve \", _jsx(_components.code, {\n children: \"status_url\"\n }), \" or \", _jsx(_components.code, {\n children: \"events_url\"\n }), \" against the API server URL. Read status or consume the server-sent events until \", _jsx(_components.code, {\n children: \"state=succeeded\"\n }), \". The presence of \", _jsx(_components.code, {\n children: \"result_url\"\n }), \" alone does not mean the job is ready. On \", _jsx(_components.code, {\n children: \"state=failed\"\n }), \", inspect the job status’s \", _jsx(_components.code, {\n children: \"error\"\n }), \" code before deciding whether to submit new work; a licenses read also returns 409 \", _jsx(_components.code, {\n children: \"ANALYSIS_FAILED\"\n }), \" with \", _jsx(_components.code, {\n children: \"failure_code\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Replace \", _jsx(_components.code, {\n children: \"{id}\"\n }), \" below with the submission response’s \", _jsx(_components.code, {\n children: \"id\"\n }), \" and request the licenses view:\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"4\",\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: \"4\",\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: \" --output\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" licenses.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/licenses/{id}'\"\n })\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"On HTTP 200, \", _jsx(_components.code, {\n children: \"licenses.json\"\n }), \" contains \", _jsx(_components.code, {\n children: \"schema_version\"\n }), \", \", _jsx(_components.code, {\n children: \"inventory\"\n }), \" and \", _jsx(_components.code, {\n children: \"components\"\n }), \". On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or \", _jsx(_components.code, {\n children: \"Accept\"\n }), \"-based format selection are supported.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Reading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The \", _jsx(_components.code, {\n children: \"x-githits-cost\"\n }), \" value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Interpret the response\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Every reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use \", _jsx(_components.code, {\n children: \"bom_ref\"\n }), \" for reported relationships and \", _jsx(_components.code, {\n children: \"properties\"\n }), \" for input paths. \", _jsx(_components.code, {\n children: \"licenses\"\n }), \" gives license choices; \", _jsx(_components.code, {\n children: \"observed_licenses\"\n }), \" gives independent observations. \", _jsx(_components.code, {\n children: \"publisher_evidence\"\n }), \" retains original publisher statements and release/package/repository context. \", _jsx(_components.code, {\n children: \"source_evidence\"\n }), \" retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named \", _jsx(_components.code, {\n children: \"properties[].value\"\n }), \" strings contain extra JSON that you parse separately; the field descriptions identify them.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Null means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read \", _jsx(_components.code, {\n children: \"inventory.completeness\"\n }), \" with the component list. Dependency coverage is in \", _jsx(_components.code, {\n children: \"inventory.compositions\"\n }), \" and the \", _jsx(_components.code, {\n children: \"inventory.properties\"\n }), \" entry named \", _jsx(_components.code, {\n children: \"githits:dependency_coverage\"\n }), \"; parse that entry’s \", _jsx(_components.code, {\n children: \"value\"\n }), \" as JSON. Notices are properties named \", _jsx(_components.code, {\n children: \"githits:notice\"\n }), \". No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Handle errors\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Problems use \", _jsx(_components.code, {\n children: \"application/problem+json\"\n }), \"; branch on \", _jsx(_components.code, {\n children: \"code\"\n }), \" and keep \", _jsx(_components.code, {\n children: \"X-Request-ID\"\n }), \" for support.\"]\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"Status / code\"\n }), _jsx(_components.th, {\n children: \"What to do\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"400 \", _jsx(_components.code, {\n children: \"VALIDATION_ERROR\"\n }), \" / \", _jsx(_components.code, {\n children: \"INVALID_SESSION_ID\"\n })]\n }), _jsxs(_components.td, {\n children: [\"Remove query parameters or correct the session header/field identified in \", _jsx(_components.code, {\n children: \"detail\"\n }), \".\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"401 / 403\"\n }), _jsx(_components.td, {\n children: \"Check the credential, account access and required terms; use any provided terms/acceptance links.\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"404 \", _jsx(_components.code, {\n children: \"ANALYSIS_NOT_FOUND\"\n })]\n }), _jsx(_components.td, {\n children: \"Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it.\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"409 \", _jsx(_components.code, {\n children: \"ANALYSIS_PENDING\"\n })]\n }), _jsx(_components.td, {\n children: \"Wait for completion through status/events, then retry this GET; do not submit a second job just to wait.\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"409 \", _jsx(_components.code, {\n children: \"ANALYSIS_FAILED\"\n })]\n }), _jsxs(_components.td, {\n children: [\"Inspect \", _jsx(_components.code, {\n children: \"failure_code\"\n }), \" and the job status. Correct the input or cause before deliberately creating another analysis.\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"409 \", _jsx(_components.code, {\n children: \"INCOMPATIBLE_ANALYSIS\"\n })]\n }), _jsxs(_components.td, {\n children: [\"Use a job created with \", _jsx(_components.code, {\n children: \"kind=sbom\u0026format=cyclonedx\"\n }), \"; the format of an existing job cannot be changed by this GET.\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"422 \", _jsx(_components.code, {\n children: \"LICENSE_REPORT_TOO_LARGE\"\n })]\n }), _jsxs(_components.td, {\n children: [\"The JSON report exceeds 16,777,216 bytes. Download the job’s original CycloneDX document through \", _jsx(_components.code, {\n children: \"result_url\"\n }), \", or create a smaller analysis if appropriate. Jobs do not raise the report-size limit.\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"429 \", _jsx(_components.code, {\n children: \"RATE_LIMITED\"\n })]\n }), _jsxs(_components.td, {\n children: [\"Respect \", _jsx(_components.code, {\n children: \"Retry-After\"\n }), \" when provided.\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"502 \", _jsx(_components.code, {\n children: \"UPSTREAM_ERROR\"\n })]\n }), _jsxs(_components.td, {\n children: [\"The analysis result could not be read. Keep the job ID and \", _jsx(_components.code, {\n children: \"X-Request-ID\"\n }), \", and report a persistent failure; do not repeatedly resubmit the same files.\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"503 / 504\"\n }), _jsx(_components.td, {\n children: \"Try reading the same job again later. This does not start another analysis.\"\n })]\n })]\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Responses must not be cached (\", _jsx(_components.code, {\n children: \"Cache-Control: no-store\"\n }), \"). The report does not certify an installed artifact or complete license coverage.\"]\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":"Get dependency licenses for a completed analysis","description":"Retrieve a JSON license report for an analysis job you can access. Use the analysis `id` returned in the HTTP 202 submission response. The synchronous `POST /v1/experimental/licenses` response has no job ID; a component's `bom_ref` cannot be used here.\n\nThe job must have been submitted with `kind=sbom\u0026format=cyclonedx`. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 `INCOMPATIBLE_ANALYSIS`; choose a compatible job or submit a new one with the required parameters.\n\n**Create and follow a job**\n\nUse a GitHits Bearer credential for an active account with required terms accepted. In these examples, `/path/to/private-auth.conf` is your own protected curl configuration containing `header = \"Authorization: Bearer \u003ctoken>\"`; replace the placeholder privately and keep the file outside your 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 job.json \\\n 'https://api.githits.dev/v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx'\n```\n\n1. Check for HTTP 202 and read `id` from `job.json`. Keep `expires_at` and the returned links.\n2. Resolve `status_url` or `events_url` against the API server URL. Read status or consume the server-sent events until `state=succeeded`. The presence of `result_url` alone does not mean the job is ready. On `state=failed`, inspect the job status's `error` code before deciding whether to submit new work; a licenses read also returns 409 `ANALYSIS_FAILED` with `failure_code`.\n3. Replace `{id}` below with the submission response's `id` and request the licenses view:\n\n```sh\ncurl --config /path/to/private-auth.conf \\\n --fail-with-body --silent --show-error \\\n --output licenses.json \\\n 'https://api.githits.dev/v1/experimental/licenses/{id}'\n```\n\nOn HTTP 200, `licenses.json` contains `schema_version`, `inventory` and `components`. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or `Accept`-based format selection are supported.\n\nReading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The `x-githits-cost` value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report.\n\n**Interpret the response**\n\nEvery reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use `bom_ref` for reported relationships and `properties` for input paths. `licenses` gives license choices; `observed_licenses` gives independent observations. `publisher_evidence` retains original publisher statements and release/package/repository context. `source_evidence` retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named `properties[].value` strings contain extra JSON that you parse separately; the field descriptions identify them.\n\nNull means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read `inventory.completeness` with the component list. Dependency coverage is in `inventory.compositions` and the `inventory.properties` entry named `githits:dependency_coverage`; parse that entry's `value` as JSON. Notices are properties named `githits:notice`. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report.\n\n**Handle errors**\n\nProblems use `application/problem+json`; branch on `code` and keep `X-Request-ID` for support.\n\n| Status / code | What to do |\n| --- | --- |\n| 400 `VALIDATION_ERROR` / `INVALID_SESSION_ID` | Remove query parameters or correct the session header/field identified in `detail`. |\n| 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. |\n| 404 `ANALYSIS_NOT_FOUND` | Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it. |\n| 409 `ANALYSIS_PENDING` | Wait for completion through status/events, then retry this GET; do not submit a second job just to wait. |\n| 409 `ANALYSIS_FAILED` | Inspect `failure_code` and the job status. Correct the input or cause before deliberately creating another analysis. |\n| 409 `INCOMPATIBLE_ANALYSIS` | Use a job created with `kind=sbom\u0026format=cyclonedx`; the format of an existing job cannot be changed by this GET. |\n| 422 `LICENSE_REPORT_TOO_LARGE` | The JSON report exceeds 16,777,216 bytes. Download the job's original CycloneDX document through `result_url`, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit. |\n| 429 `RATE_LIMITED` | Respect `Retry-After` when provided. |\n| 502 `UPSTREAM_ERROR` | The analysis result could not be read. Keep the job ID and `X-Request-ID`, and report a persistent failure; do not repeatedly resubmit the same files. |\n| 503 / 504 | Try reading the same job again later. This does not start another analysis. |\n\nResponses must not be cached (`Cache-Control: no-store`). The report does not certify an installed artifact or complete license coverage.\n","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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Retrieve a JSON license report for an analysis job you can access. Use the analysis `id` returned in the HTTP 202 submission response. The synchronous `POST /v1/experimental/licenses` response has no job ID; a component's `bom_ref` cannot be used here.\n\nThe job must have been submitted with `kind=sbom\u0026format=cyclonedx`. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 `INCOMPATIBLE_ANALYSIS`; choose a compatible job or submit a new one with the required parameters.\n\n**Create and follow a job**\n\nUse a GitHits Bearer credential for an active account with required terms accepted. In these examples, `/path/to/private-auth.conf` is your own protected curl configuration containing `header = \"Authorization: Bearer \u003ctoken>\"`; replace the placeholder privately and keep the file outside your 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 job.json \\\n 'https://api.githits.dev/v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx'\n```\n\n1. Check for HTTP 202 and read `id` from `job.json`. Keep `expires_at` and the returned links.\n2. Resolve `status_url` or `events_url` against the API server URL. Read status or consume the server-sent events until `state=succeeded`. The presence of `result_url` alone does not mean the job is ready. On `state=failed`, inspect the job status's `error` code before deciding whether to submit new work; a licenses read also returns 409 `ANALYSIS_FAILED` with `failure_code`.\n3. Replace `{id}` below with the submission response's `id` and request the licenses view:\n\n```sh\ncurl --config /path/to/private-auth.conf \\\n --fail-with-body --silent --show-error \\\n --output licenses.json \\\n 'https://api.githits.dev/v1/experimental/licenses/{id}'\n```\n\nOn HTTP 200, `licenses.json` contains `schema_version`, `inventory` and `components`. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or `Accept`-based format selection are supported.\n\nReading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The `x-githits-cost` value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report.\n\n**Interpret the response**\n\nEvery reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use `bom_ref` for reported relationships and `properties` for input paths. `licenses` gives license choices; `observed_licenses` gives independent observations. `publisher_evidence` retains original publisher statements and release/package/repository context. `source_evidence` retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named `properties[].value` strings contain extra JSON that you parse separately; the field descriptions identify them.\n\nNull means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read `inventory.completeness` with the component list. Dependency coverage is in `inventory.compositions` and the `inventory.properties` entry named `githits:dependency_coverage`; parse that entry's `value` as JSON. Notices are properties named `githits:notice`. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report.\n\n**Handle errors**\n\nProblems use `application/problem+json`; branch on `code` and keep `X-Request-ID` for support.\n\n| Status / code | What to do |\n| --- | --- |\n| 400 `VALIDATION_ERROR` / `INVALID_SESSION_ID` | Remove query parameters or correct the session header/field identified in `detail`. |\n| 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. |\n| 404 `ANALYSIS_NOT_FOUND` | Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it. |\n| 409 `ANALYSIS_PENDING` | Wait for completion through status/events, then retry this GET; do not submit a second job just to wait. |\n| 409 `ANALYSIS_FAILED` | Inspect `failure_code` and the job status. Correct the input or cause before deliberately creating another analysis. |\n| 409 `INCOMPATIBLE_ANALYSIS` | Use a job created with `kind=sbom\u0026format=cyclonedx`; the format of an existing job cannot be changed by this GET. |\n| 422 `LICENSE_REPORT_TOO_LARGE` | The JSON report exceeds 16,777,216 bytes. Download the job's original CycloneDX document through `result_url`, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit. |\n| 429 `RATE_LIMITED` | Respect `Retry-After` when provided. |\n| 502 `UPSTREAM_ERROR` | The analysis result could not be read. Keep the job ID and `X-Request-ID`, and report a persistent failure; do not repeatedly resubmit the same files. |\n| 503 / 504 | Try reading the same job again later. This does not start another analysis. |\n\nResponses must not be cached (`Cache-Control: no-store`). The report does not certify an installed artifact or complete license coverage.\n","operationId":"get_dependency_licenses","parameters":["ada8b93e-8fc1-48f3-b069-0bf17a4eb0c4","254cbd7b-9423-48f4-bc28-0837f95f9cc8","b8ab46c8-f69e-4557-9142-b5bbc11a24b5","4cc67479-4428-41a7-9c9c-bcf8ca420083","db96362a-fe8f-4eb9-aa5a-c84f81802e64"],"responses":{"200":"2b738ccc-0bfc-40fa-a5ca-ae2161c3aa09","400":"1fd7842d-07df-42a5-a8f1-0be0870dcae2","401":"3eb5813e-5dff-460f-a65f-f19c1447a403","403":"6de578e8-9489-477e-8cea-a60d3179731d","404":"486b8465-e186-41e0-b712-f9d58364a932","405":"19bb3d34-bb10-4ec2-9535-06812caaa5ad","409":"a163b543-f5fd-4452-8c56-d64416d2ea59","422":"dc428c6d-f2b0-4105-b1a7-2c3d912f51bc","429":"7c66595b-e7e5-4953-9519-2a90b23bca6a","500":"365fc2bf-6c6f-4527-80ae-b76e728913aa","502":"d6a8edb0-af77-4f23-9987-1088c3de25d7","503":"e136d7be-2923-4c65-a62d-3012129ba97d","504":"914f4aa5-c425-4337-940a-ecf924751b54"},"security":["67230a81-9e52-47b9-8d0a-a35030d340d0"],"summary":"Get dependency licenses for a completed analysis","tags":["Experimental"],"x-githits-cost":0,"method":"get","type":"path","servers":["bfb2a79f-febe-439c-ad58-8db4455b87a2"],"path":"/v1/experimental/licenses/{id}","baseUrlOptions":["https://api.githits.dev"],"title":"Get dependency licenses for a completed analysis","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","disableProxy":true},"dependencies":{"parameters":{"ada8b93e-8fc1-48f3-b069-0bf17a4eb0c4":{"description":"Analysis id returned in the HTTP 202 JSON response from POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx. Use a credential that can access that job, such as the credential used to submit it. A component bom_ref is not a job id. Missing, malformed, expired or inaccessible ids return ANALYSIS_NOT_FOUND after authentication.","in":"path","name":"id","required":true,"schema":{"type":"string","isRequired":true,"description":"Analysis id returned in the HTTP 202 JSON response from POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx. Use a credential that can access that job, such as the credential used to submit it. A component bom_ref is not a job id. Missing, malformed, expired or inaccessible ids return ANALYSIS_NOT_FOUND after authentication.","uniqueKey":"","typeLabel":"string"}},"254cbd7b-9423-48f4-bc28-0837f95f9cc8":{"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"}},"b8ab46c8-f69e-4557-9142-b5bbc11a24b5":{"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"}},"4cc67479-4428-41a7-9c9c-bcf8ca420083":{"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"}},"db96362a-fe8f-4eb9-aa5a-c84f81802e64":{"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"}}},"responses":{"2b738ccc-0bfc-40fa-a5ca-ae2161c3aa09":{"content":{"application/json":{"example":{"components":[{"bom_ref":"root","external_references":[],"hashes":[],"licenses":[{"acknowledgement":"declared","expression":"MIT"}],"name":"project","observed_licenses":[],"properties":[{"name":"githits:record_kind","value":"manifest"},{"name":"githits:manifest_path","value":"package.json"}],"publisher_evidence":null,"purl":null,"record_kind":"manifest","scope":null,"source_evidence":null,"type":"library","version":null},{"bom_ref":"a","external_references":[{"hashes":[{"alg":"SHA-256","content":"reference-digest"}],"type":"vcs","url":"https://example.com/source"},{"type":"distribution","url":"https://example.com/artifact.tgz"}],"hashes":[{"alg":"SHA-256","content":"package-digest"}],"licenses":[{"acknowledgement":"declared","expression":"MIT","future_choice":true},{"license":{"name":"Opaque publisher terms"}}],"name":"dependency","observed_licenses":[],"properties":[{"name":"githits:record_kind","value":"locked_package"},{"name":"githits:lockfile_path","value":"one/package-lock.json"},{"name":"githits:license_artifact_verification","value":"not_checked"}],"publisher_evidence":{"capture_status":"present","controlling_index":0,"coverage":"complete","display_value":"MIT","expression":"MIT","observations":[{"interpretation":{"expression":"MIT","interpretation_methods":["spdx_expression"],"issues":[],"status":"expression","syntax":"spdx"},"observation":{"field":"license","relation":"single","scope":"release","source":"npm_registry","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","scope":"excluded","source_evidence":null,"type":"library","version":"1.0.0"},{"bom_ref":"b","external_references":[{"hashes":[{"alg":"SHA-256","content":"reference-digest"}],"type":"vcs","url":"https://example.com/source"},{"type":"distribution","url":"https://example.com/artifact.tgz"}],"hashes":[{"alg":"SHA-256","content":"package-digest"}],"licenses":[{"acknowledgement":"declared","expression":"MIT","future_choice":true},{"license":{"name":"Opaque publisher terms"}}],"name":"dependency","observed_licenses":[],"properties":[{"name":"githits:record_kind","value":"locked_package"},{"name":"githits:lockfile_path","value":"two/package-lock.json"},{"name":"githits:license_artifact_verification","value":"not_checked"}],"publisher_evidence":{"capture_status":"present","controlling_index":0,"coverage":"complete","display_value":"MIT","expression":"MIT","observations":[{"interpretation":{"expression":"MIT","interpretation_methods":["spdx_expression"],"issues":[],"status":"expression","syntax":"spdx"},"observation":{"field":"license","relation":"single","scope":"release","source":"npm_registry","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","scope":"excluded","source_evidence":null,"type":"library","version":"1.0.0"},{"bom_ref":"go","external_references":[],"hashes":[],"licenses":[],"name":"example.com/source","observed_licenses":[{"license":{"name":"Apache-2.0"}},{"license":{"name":"MIT"}}],"properties":[{"name":"githits:record_kind","value":"resolved_package"},{"name":"githits:manifest_path","value":"go.mod"}],"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":"file","external_references":[],"hashes":[],"licenses":[],"name":"local subject","observed_licenses":[],"properties":[],"publisher_evidence":null,"purl":null,"record_kind":null,"scope":null,"source_evidence":null,"type":"file","version":null}],"inventory":{"completeness":"recorded_lockfile_inventory","compositions":[{"aggregate":"unknown","assemblies":["root","a","b","go","file"]}],"dependencies":[{"dependsOn":["a"],"ref":"root"},{"dependsOn":["b"],"ref":"a"}],"properties":[{"name":"githits:completeness","value":"recorded_lockfile_inventory"},{"name":"githits:notice","value":"License metadata and connectivity may be incomplete."},{"name":"githits:resolutions","value":"[{\"path\":\"package.json\",\"status\":\"partial\"}]"}]},"schema_version":1},"schema":{"additionalProperties":true,"description":"JSON license inventory with separate license choices, publisher statements and source-file observations, plus input attribution and coverage. It provides evidence for your own evaluation rather than an allow/deny result. Additional fields can appear.","properties":{"components":{"description":"All reported occurrences in their original order, with the selected primary project/source entry first when one exists. Keep repeated names, versions and package URLs separate; use bom_ref and input-path properties for attribution.","items":{"additionalProperties":true,"description":"One reported project, package, source or file entry. A package can appear more than once, for example in different lockfiles; keep those occurrences separate even when name, version or package URL match.","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":"Source or distribution locations with their declared provenance. A reference may have its own hashes; keep those on that reference rather than moving them to component hashes. The presence of a URL does not prove an installed copy was downloaded or verified.","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[]"},"hashes":{"description":"Checksums recorded for this component or file. They are not recalculated by the report. Keep them separate from hashes on external_references; neither collection proves that your installed copy matches.","items":{"additionalProperties":true,"type":"object","uniqueKey":"components.items.[INDEX].hashes.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"components.items.[INDEX].hashes","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[]"},"properties":{"description":"Additional input/source attribution and metadata as name/value pairs. Match entries by name, retain repetitions and allow unfamiliar names; value can be absent. Paths and status values are plain strings. Known values such as githits:manifest_paths, githits:lockfile_paths and githits:license_raw_statements contain JSON encoded inside a string and need a separate parse if you use them. Publisher/source evidence is already available as objects in publisher_evidence and source_evidence.","items":{"additionalProperties":true,"description":"Extensible standard property. Match by name rather than array position; ignore names your client does not recognize.","examples":[{"name":"githits:record_kind","value":"resolved_package"},{"name":"githits:manifest_paths","value":"[\"app/package.json\"]"}],"properties":{"name":{"description":"Property name. GitHits evidence uses the githits: namespace; other namespaces are also allowed.","type":"string","isRequired":true,"uniqueKey":"components.items.[INDEX].properties.items.[INDEX].name","typeLabel":"string"},"value":{"description":"Optional evidence value, encoded as a string when present. Structured values such as githits:declarations, githits:resolutions, githits:lockfiles, githits:manifest_associations, githits:manifest_paths and githits:lockfile_paths contain JSON; parse those separately when needed. Do not JSON-parse every property: paths and statuses can be plain strings.","type":"string","uniqueKey":"components.items.[INDEX].properties.items.[INDEX].value","typeLabel":"string"}},"required":["name"],"type":"object","uniqueKey":"components.items.[INDEX].properties.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"components.items.[INDEX].properties","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.","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.","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"}},"required":["bom_ref","name","version","purl","type","scope","record_kind","licenses","observed_licenses","publisher_evidence","source_evidence","external_references","hashes","properties"],"type":"object","uniqueKey":"components.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"components","typeLabel":"object[]"},"inventory":{"additionalProperties":true,"description":"Input provenance, inventory coverage and reported dependency relationships. Read these facts alongside the component list; successful analysis can still be partial.","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"},"compositions":{"description":"Coverage declarations for groups of component references, with standard CycloneDX keys such as aggregate and assemblies. They describe inventory/connectivity coverage, not how many licenses are known. Allow unfamiliar fields and aggregate values.","items":{"additionalProperties":true,"type":"object","uniqueKey":"inventory.compositions.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"inventory.compositions","typeLabel":"object[]"},"dependencies":{"description":"Reported dependency relationships, using standard keys such as ref and dependsOn to refer to component bom_ref values. Missing edges or an empty array do not by themselves prove a complete graph or a dependency-free package; read coverage and notices too.","items":{"additionalProperties":true,"type":"object","uniqueKey":"inventory.dependencies.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"inventory.dependencies","typeLabel":"object[]"},"properties":{"description":"Additional facts about uploaded inputs, resolution results and coverage, as name/value pairs. Values for githits:resolutions, githits:declarations, githits:lockfiles, githits:manifest_associations, githits:dependency_coverage, githits:relationships, githits:primary_subject and githits:declaration_agreement contain JSON encoded inside strings: parse those separately when needed. Dependency coverage is reported in githits:dependency_coverage and inventory.compositions. Some values, such as githits:notice and githits:completeness, are plain strings; parse only names you know to contain JSON. Match by name, keep repetitions and allow unfamiliar properties; value can be absent.","items":{"additionalProperties":true,"description":"Extensible standard property. Match by name rather than array position; ignore names your client does not recognize.","examples":[{"name":"githits:record_kind","value":"resolved_package"},{"name":"githits:manifest_paths","value":"[\"app/package.json\"]"}],"properties":{"name":{"description":"Property name. GitHits evidence uses the githits: namespace; other namespaces are also allowed.","type":"string","isRequired":true,"uniqueKey":"inventory.properties.items.[INDEX].name","typeLabel":"string"},"value":{"description":"Optional evidence value, encoded as a string when present. Structured values such as githits:declarations, githits:resolutions, githits:lockfiles, githits:manifest_associations, githits:manifest_paths and githits:lockfile_paths contain JSON; parse those separately when needed. Do not JSON-parse every property: paths and statuses can be plain strings.","type":"string","uniqueKey":"inventory.properties.items.[INDEX].value","typeLabel":"string"}},"required":["name"],"type":"object","uniqueKey":"inventory.properties.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"inventory.properties","typeLabel":"object[]"}},"required":["completeness","properties","compositions","dependencies"],"type":"object","isRequired":true,"uniqueKey":"inventory","typeLabel":"object"},"schema_version":{"description":"Version of this JSON report structure, currently 1.","enum":[1],"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":[],"hashes":[],"licenses":[{"acknowledgement":"declared","expression":"MIT"}],"name":"project","observed_licenses":[],"properties":[{"name":"githits:record_kind","value":"manifest"},{"name":"githits:manifest_path","value":"package.json"}],"publisher_evidence":null,"purl":null,"record_kind":"manifest","scope":null,"source_evidence":null,"type":"library","version":null},{"bom_ref":"a","external_references":[{"hashes":[{"alg":"SHA-256","content":"reference-digest"}],"type":"vcs","url":"https://example.com/source"},{"type":"distribution","url":"https://example.com/artifact.tgz"}],"hashes":[{"alg":"SHA-256","content":"package-digest"}],"licenses":[{"acknowledgement":"declared","expression":"MIT","future_choice":true},{"license":{"name":"Opaque publisher terms"}}],"name":"dependency","observed_licenses":[],"properties":[{"name":"githits:record_kind","value":"locked_package"},{"name":"githits:lockfile_path","value":"one/package-lock.json"},{"name":"githits:license_artifact_verification","value":"not_checked"}],"publisher_evidence":{"capture_status":"present","controlling_index":0,"coverage":"complete","display_value":"MIT","expression":"MIT","observations":[{"interpretation":{"expression":"MIT","interpretation_methods":["spdx_expression"],"issues":[],"status":"expression","syntax":"spdx"},"observation":{"field":"license","relation":"single","scope":"release","source":"npm_registry","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","scope":"excluded","source_evidence":null,"type":"library","version":"1.0.0"},{"bom_ref":"b","external_references":[{"hashes":[{"alg":"SHA-256","content":"reference-digest"}],"type":"vcs","url":"https://example.com/source"},{"type":"distribution","url":"https://example.com/artifact.tgz"}],"hashes":[{"alg":"SHA-256","content":"package-digest"}],"licenses":[{"acknowledgement":"declared","expression":"MIT","future_choice":true},{"license":{"name":"Opaque publisher terms"}}],"name":"dependency","observed_licenses":[],"properties":[{"name":"githits:record_kind","value":"locked_package"},{"name":"githits:lockfile_path","value":"two/package-lock.json"},{"name":"githits:license_artifact_verification","value":"not_checked"}],"publisher_evidence":{"capture_status":"present","controlling_index":0,"coverage":"complete","display_value":"MIT","expression":"MIT","observations":[{"interpretation":{"expression":"MIT","interpretation_methods":["spdx_expression"],"issues":[],"status":"expression","syntax":"spdx"},"observation":{"field":"license","relation":"single","scope":"release","source":"npm_registry","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","scope":"excluded","source_evidence":null,"type":"library","version":"1.0.0"},{"bom_ref":"go","external_references":[],"hashes":[],"licenses":[],"name":"example.com/source","observed_licenses":[{"license":{"name":"Apache-2.0"}},{"license":{"name":"MIT"}}],"properties":[{"name":"githits:record_kind","value":"resolved_package"},{"name":"githits:manifest_path","value":"go.mod"}],"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":"file","external_references":[],"hashes":[],"licenses":[],"name":"local subject","observed_licenses":[],"properties":[],"publisher_evidence":null,"purl":null,"record_kind":null,"scope":null,"source_evidence":null,"type":"file","version":null}],"inventory":{"completeness":"recorded_lockfile_inventory","compositions":[{"aggregate":"unknown","assemblies":["root","a","b","go","file"]}],"dependencies":[{"dependsOn":["a"],"ref":"root"},{"dependsOn":["b"],"ref":"a"}],"properties":[{"name":"githits:completeness","value":"recorded_lockfile_inventory"},{"name":"githits:notice","value":"License metadata and connectivity may be incomplete."},{"name":"githits:resolutions","value":"[{\"path\":\"package.json\",\"status\":\"partial\"}]"}]},"schema_version":1}}},"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"},"1fd7842d-07df-42a5-a8f1-0be0870dcae2":{"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"},"3eb5813e-5dff-460f-a65f-f19c1447a403":{"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"},"6de578e8-9489-477e-8cea-a60d3179731d":{"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"},"486b8465-e186-41e0-b712-f9d58364a932":{"content":{"application/problem+json":{"example":{"code":"ANALYSIS_NOT_FOUND","detail":"The analysis is unavailable.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":404,"title":"Analysis 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":"ANALYSIS_NOT_FOUND","detail":"The analysis is unavailable.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":404,"title":"Analysis request failed","type":"about:blank"}}},"exampleType":"examples"}},"description":"ANALYSIS_NOT_FOUND. Check the submission id and credential. Missing, expired and inaccessible jobs have the same response.","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"},"19bb3d34-bb10-4ec2-9535-06812caaa5ad":{"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: GET, HEAD.","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"},"a163b543-f5fd-4452-8c56-d64416d2ea59":{"content":{"application/problem+json":{"example":{"code":"ANALYSIS_PENDING","detail":"The analysis has not finished.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":409,"title":"Analysis request failed","type":"about:blank"},"schema":{"oneOf":[{"type":"object","description":"The stable problem document returned for an unsuccessful public API request.","required":["code","title","detail","type","status","instance"],"properties":{"code":{"type":"string","description":"The stable uppercase API error code.","enum":["ANALYSIS_PENDING"],"isRequired":true,"uniqueKey":"oneOf.0.code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","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.","enum":["The analysis has not finished."],"isRequired":true,"uniqueKey":"oneOf.0.detail","typeLabel":"enum\u003cstring>"},"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":{"type":"string","description":"A short, stable title for the error.","enum":["Analysis request failed"],"isRequired":true,"uniqueKey":"oneOf.0.title","typeLabel":"enum\u003cstring>"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.type","typeLabel":"string"},"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":["code","title","detail","failure_code","type","status","instance"],"properties":{"code":{"type":"string","description":"The stable uppercase API error code.","enum":["ANALYSIS_FAILED"],"isRequired":true,"uniqueKey":"oneOf.1.code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","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.","enum":["The analysis failed."],"isRequired":true,"uniqueKey":"oneOf.1.detail","typeLabel":"enum\u003cstring>"},"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":{"type":"string","description":"A short, stable title for the error.","enum":["Analysis request failed"],"isRequired":true,"uniqueKey":"oneOf.1.title","typeLabel":"enum\u003cstring>"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"oneOf.1.type","typeLabel":"string"},"failure_code":{"description":"Failure code from the analysis; new codes can appear. Internal diagnostics are not included.","type":"string","isRequired":true,"uniqueKey":"oneOf.1.failure_code","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"},{"type":"object","description":"The stable problem document returned for an unsuccessful public API request.","required":["type","title","status","detail","instance","code"],"properties":{"code":{"type":"string","description":"The stable uppercase API error code.","enum":["INCOMPATIBLE_ANALYSIS"],"isRequired":true,"uniqueKey":"oneOf.2.code","typeLabel":"enum\u003cstring>"},"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.2.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.2.instance","typeLabel":"string"},"status":{"description":"The HTTP status returned with this problem.","format":"int32","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"oneOf.2.status","typeLabel":"integer\u003cint32>"},"title":{"description":"A short, stable title for the error.","type":"string","isRequired":true,"uniqueKey":"oneOf.2.title","typeLabel":"string"},"type":{"description":"The generic RFC 9457 problem type.","type":"string","isRequired":true,"uniqueKey":"oneOf.2.type","typeLabel":"string"},"acceptance_url":{"description":"Link for accepting the required terms, when provided.","type":"string","uniqueKey":"oneOf.2.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.2.retryable","typeLabel":"boolean"},"terms_url":{"description":"Link to the terms that require acceptance, when provided.","type":"string","uniqueKey":"oneOf.2.terms_url","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"ANALYSIS_PENDING","detail":"The analysis has not finished.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":409,"title":"Analysis request failed","type":"about:blank"}}},"exampleType":"examples"}},"description":"ANALYSIS_PENDING, ANALYSIS_FAILED, INCOMPATIBLE_ANALYSIS. For ANALYSIS_PENDING, wait through status/events and retry this GET. For ANALYSIS_FAILED, inspect failure_code before submitting new work. For INCOMPATIBLE_ANALYSIS, use a job created with kind=sbom\u0026format=cyclonedx.","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"},"dc428c6d-f2b0-4105-b1a7-2c3d912f51bc":{"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":{"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":"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. The JSON report is too large. Use the job's result_url to download its original CycloneDX document, or submit a smaller analysis if appropriate.","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"},"7c66595b-e7e5-4953-9519-2a90b23bca6a":{"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"},"365fc2bf-6c6f-4527-80ae-b76e728913aa":{"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":""}}}},"d6a8edb0-af77-4f23-9987-1088c3de25d7":{"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"},"e136d7be-2923-4c65-a62d-3012129ba97d":{"content":{"application/problem+json":{"example":{"code":"ANALYSIS_UNAVAILABLE","detail":"Analysis is temporarily unavailable.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":503,"title":"Analysis 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":"ANALYSIS_UNAVAILABLE","detail":"Analysis is temporarily unavailable.","instance":"4bf92f3577b34da6a3ce929d0e0e4736","status":503,"title":"Analysis request failed","type":"about:blank"}}},"exampleType":"examples"}},"description":"ANALYSIS_UNAVAILABLE, UPSTREAM_UNAVAILABLE. Retry reading the same job later; this does not start another 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"},"914f4aa5-c425-4337-940a-ecf924751b54":{"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. Retry reading the same job later; this does not start 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"}},"security":{"67230a81-9e52-47b9-8d0a-a35030d340d0":{"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":"Get dependency licenses for a completed analysis - GitHits","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T11:15:02.088Z","originalFileLocation":"api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis.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=\"Retrieve a JSON license report for an analysis job you can access. Use the analysis id returned in the HTTP 202 submission response. The synchronous POST /v1/experimental/licenses response has no job ID; a component\u0026#x27;s bom_ref cannot be used here. The job must have been submitted with kind=sbom\u0026amp;format=cyclonedx. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 INCOMPATIBLE_ANALYSIS; choose a compatible job or submit a new one with the required parameters. Create and follow a job Use a GitHits Bearer credential for an active account with required terms accepted. In these examples, /path/to/private-auth.conf is your own protected curl configuration containing header = \u0026quot;Authorization: Bearer \u0026quot;; replace the placeholder privately and keep the file outside your 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 job.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/lockfile-jobs?kind=sbom\u0026amp;format=cyclonedx\u0026#x27; 1. Check for HTTP 202 and read id from job.json. Keep expires_at and the returned links. 2. Resolve status_url or events_url against the API server URL. Read status or consume the server-sent events until state=succeeded. The presence of result_url alone does not mean the job is ready. On state=failed, inspect the job status\u0026#x27;s error code before deciding whether to submit new work; a licenses read also returns 409 ANALYSIS_FAILED with failure_code. 3. Replace {id} below with the submission response\u0026#x27;s id and request the licenses view: sh curl --config /path/to/private-auth.conf \\ --fail-with-body --silent --show-error \\ --output licenses.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/licenses/{id}\u0026#x27; On HTTP 200, licenses.json contains schema_version, inventory and components. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or Accept-based format selection are supported. Reading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The x-githits-cost value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report. Interpret the response Every reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use bom_ref for reported relationships and properties for input paths. licenses gives license choices; observed_licenses gives independent observations. publisher_evidence retains original publisher statements and release/package/repository context. source_evidence retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named properties[].value strings contain extra JSON that you parse separately; the field descriptions identify them. Null means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read inventory.completeness with the component list. Dependency coverage is in inventory.compositions and the inventory.properties entry named githits:dependency_coverage; parse that entry\u0026#x27;s value as JSON. Notices are properties named githits:notice. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report. Handle errors Problems use application/problem+json; branch on code and keep X-Request-ID for support. | Status / code | What to do | | --- | --- | | 400 VALIDATION_ERROR / INVALID_SESSION_ID | Remove query parameters or correct the session header/field identified in detail. | | 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. | | 404 ANALYSIS_NOT_FOUND | Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it. | | 409 ANALYSIS_PENDING | Wait for completion through status/events, then retry this GET; do not submit a second job just to wait. | | 409 ANALYSIS_FAILED | Inspect failure_code and the job status. Correct the input or cause before deliberately creating another analysis. | | 409 INCOMPATIBLE_ANALYSIS | Use a job created with kind=sbom\u0026amp;format=cyclonedx; the format of an existing job cannot be changed by this GET. | | 422 LICENSE_REPORT_TOO_LARGE | The JSON report exceeds 16,777,216 bytes. Download the job\u0026#x27;s original CycloneDX document through result_url, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit. | | 429 RATE_LIMITED | Respect Retry-After when provided. | | 502 UPSTREAM_ERROR | The analysis result could not be read. Keep the job ID and X-Request-ID, and report a persistent failure; do not repeatedly resubmit the same files. | | 503 / 504 | Try reading the same job again later. This does not start another analysis. | Responses must not be cached (Cache-Control: no-store). The report does not certify an installed artifact or complete license coverage.\">\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=\"Get dependency licenses for a completed analysis - GitHits\">\u003cmeta data-mint-head property=\"og:description\" content=\"Retrieve a JSON license report for an analysis job you can access. Use the analysis id returned in the HTTP 202 submission response. The synchronous POST /v1/experimental/licenses response has no job ID; a component\u0026#x27;s bom_ref cannot be used here. The job must have been submitted with kind=sbom\u0026amp;format=cyclonedx. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 INCOMPATIBLE_ANALYSIS; choose a compatible job or submit a new one with the required parameters. Create and follow a job Use a GitHits Bearer credential for an active account with required terms accepted. In these examples, /path/to/private-auth.conf is your own protected curl configuration containing header = \u0026quot;Authorization: Bearer \u0026quot;; replace the placeholder privately and keep the file outside your 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 job.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/lockfile-jobs?kind=sbom\u0026amp;format=cyclonedx\u0026#x27; 1. Check for HTTP 202 and read id from job.json. Keep expires_at and the returned links. 2. Resolve status_url or events_url against the API server URL. Read status or consume the server-sent events until state=succeeded. The presence of result_url alone does not mean the job is ready. On state=failed, inspect the job status\u0026#x27;s error code before deciding whether to submit new work; a licenses read also returns 409 ANALYSIS_FAILED with failure_code. 3. Replace {id} below with the submission response\u0026#x27;s id and request the licenses view: sh curl --config /path/to/private-auth.conf \\ --fail-with-body --silent --show-error \\ --output licenses.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/licenses/{id}\u0026#x27; On HTTP 200, licenses.json contains schema_version, inventory and components. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or Accept-based format selection are supported. Reading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The x-githits-cost value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report. Interpret the response Every reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use bom_ref for reported relationships and properties for input paths. licenses gives license choices; observed_licenses gives independent observations. publisher_evidence retains original publisher statements and release/package/repository context. source_evidence retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named properties[].value strings contain extra JSON that you parse separately; the field descriptions identify them. Null means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read inventory.completeness with the component list. Dependency coverage is in inventory.compositions and the inventory.properties entry named githits:dependency_coverage; parse that entry\u0026#x27;s value as JSON. Notices are properties named githits:notice. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report. Handle errors Problems use application/problem+json; branch on code and keep X-Request-ID for support. | Status / code | What to do | | --- | --- | | 400 VALIDATION_ERROR / INVALID_SESSION_ID | Remove query parameters or correct the session header/field identified in detail. | | 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. | | 404 ANALYSIS_NOT_FOUND | Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it. | | 409 ANALYSIS_PENDING | Wait for completion through status/events, then retry this GET; do not submit a second job just to wait. | | 409 ANALYSIS_FAILED | Inspect failure_code and the job status. Correct the input or cause before deliberately creating another analysis. | | 409 INCOMPATIBLE_ANALYSIS | Use a job created with kind=sbom\u0026amp;format=cyclonedx; the format of an existing job cannot be changed by this GET. | | 422 LICENSE_REPORT_TOO_LARGE | The JSON report exceeds 16,777,216 bytes. Download the job\u0026#x27;s original CycloneDX document through result_url, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit. | | 429 RATE_LIMITED | Respect Retry-After when provided. | | 502 UPSTREAM_ERROR | The analysis result could not be read. Keep the job ID and X-Request-ID, and report a persistent failure; do not repeatedly resubmit the same files. | | 503 / 504 | Try reading the same job again later. This does not start another analysis. | Responses must not be cached (Cache-Control: no-store). The report does not certify an installed artifact or complete license coverage.\">\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/get-dependency-licenses-for-a-completed-analysis\">\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=Get+dependency+licenses+for+a+completed+analysis\u0026amp;description=Retrieve+a+JSON+license+report+for+an+analysis+job+you+can+access.+Use+the+analysis+%60id%60+returned+in+the+HTTP+202+submission+response.+The+synchronous+%60POST+%2Fv1\u0026amp;theme=8041cabad20aa9f8c5227dd8\u0026amp;signature=c27a6c169a4e07ba8a89f72286d9a395d5d253e4ed78415bb3b8a2f8b7a58c20\">\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=\"Get dependency licenses for a completed analysis - GitHits\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Retrieve a JSON license report for an analysis job you can access. Use the analysis id returned in the HTTP 202 submission response. The synchronous POST /v1/experimental/licenses response has no job ID; a component\u0026#x27;s bom_ref cannot be used here. The job must have been submitted with kind=sbom\u0026amp;format=cyclonedx. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 INCOMPATIBLE_ANALYSIS; choose a compatible job or submit a new one with the required parameters. Create and follow a job Use a GitHits Bearer credential for an active account with required terms accepted. In these examples, /path/to/private-auth.conf is your own protected curl configuration containing header = \u0026quot;Authorization: Bearer \u0026quot;; replace the placeholder privately and keep the file outside your 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 job.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/lockfile-jobs?kind=sbom\u0026amp;format=cyclonedx\u0026#x27; 1. Check for HTTP 202 and read id from job.json. Keep expires_at and the returned links. 2. Resolve status_url or events_url against the API server URL. Read status or consume the server-sent events until state=succeeded. The presence of result_url alone does not mean the job is ready. On state=failed, inspect the job status\u0026#x27;s error code before deciding whether to submit new work; a licenses read also returns 409 ANALYSIS_FAILED with failure_code. 3. Replace {id} below with the submission response\u0026#x27;s id and request the licenses view: sh curl --config /path/to/private-auth.conf \\ --fail-with-body --silent --show-error \\ --output licenses.json \\ \u0026#x27;https://api.githits.dev/v1/experimental/licenses/{id}\u0026#x27; On HTTP 200, licenses.json contains schema_version, inventory and components. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or Accept-based format selection are supported. Reading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The x-githits-cost value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report. Interpret the response Every reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use bom_ref for reported relationships and properties for input paths. licenses gives license choices; observed_licenses gives independent observations. publisher_evidence retains original publisher statements and release/package/repository context. source_evidence retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named properties[].value strings contain extra JSON that you parse separately; the field descriptions identify them. Null means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read inventory.completeness with the component list. Dependency coverage is in inventory.compositions and the inventory.properties entry named githits:dependency_coverage; parse that entry\u0026#x27;s value as JSON. Notices are properties named githits:notice. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report. Handle errors Problems use application/problem+json; branch on code and keep X-Request-ID for support. | Status / code | What to do | | --- | --- | | 400 VALIDATION_ERROR / INVALID_SESSION_ID | Remove query parameters or correct the session header/field identified in detail. | | 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. | | 404 ANALYSIS_NOT_FOUND | Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it. | | 409 ANALYSIS_PENDING | Wait for completion through status/events, then retry this GET; do not submit a second job just to wait. | | 409 ANALYSIS_FAILED | Inspect failure_code and the job status. Correct the input or cause before deliberately creating another analysis. | | 409 INCOMPATIBLE_ANALYSIS | Use a job created with kind=sbom\u0026amp;format=cyclonedx; the format of an existing job cannot be changed by this GET. | | 422 LICENSE_REPORT_TOO_LARGE | The JSON report exceeds 16,777,216 bytes. Download the job\u0026#x27;s original CycloneDX document through result_url, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit. | | 429 RATE_LIMITED | Respect Retry-After when provided. | | 502 UPSTREAM_ERROR | The analysis result could not be read. Keep the job ID and X-Request-ID, and report a persistent failure; do not repeatedly resubmit the same files. | | 503 / 504 | Try reading the same job again later. This does not start another analysis. | Responses must not be cached (Cache-Control: no-store). The report does not certify an installed artifact or complete license coverage.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://githits.mintlify.site/_mintlify/api/og/v2?division=Experimental\u0026amp;title=Get+dependency+licenses+for+a+completed+analysis\u0026amp;description=Retrieve+a+JSON+license+report+for+an+analysis+job+you+can+access.+Use+the+analysis+%60id%60+returned+in+the+HTTP+202+submission+response.+The+synchronous+%60POST+%2Fv1\u0026amp;theme=8041cabad20aa9f8c5227dd8\u0026amp;signature=c27a6c169a4e07ba8a89f72286d9a395d5d253e4ed78415bb3b8a2f8b7a58c20\">\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/get-dependency-licenses-for-a-completed-analysis\">\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/get-dependency-licenses-for-a-completed-analysis.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/get-dependency-licenses-for-a-completed-analysis#webpage\",\"url\":\"https://docs.githits.com/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis\",\"name\":\"Get dependency licenses for a completed analysis\",\"description\":\"Retrieve a JSON license report for an analysis job you can access. Use the analysis id returned in the HTTP 202 submission response. The synchronous POST /v1/experimental/licenses response has no job ID; a component's bom_ref cannot be used here. The job must have been submitted with kind=sbom\u0026format=cyclonedx. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 INCOMPATIBLE_ANALYSIS; choose a compatible job or submit a new one with the required parameters. Create and follow a job Use a GitHits Bearer credential for an active account with required terms accepted. In these examples, /path/to/private-auth.conf is your own protected curl configuration containing header = \\\"Authorization: Bearer \\\"; replace the placeholder privately and keep the file outside your 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 job.json \\\\ 'https://api.githits.dev/v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx' 1. Check for HTTP 202 and read id from job.json. Keep expires_at and the returned links. 2. Resolve status_url or events_url against the API server URL. Read status or consume the server-sent events until state=succeeded. The presence of result_url alone does not mean the job is ready. On state=failed, inspect the job status's error code before deciding whether to submit new work; a licenses read also returns 409 ANALYSIS_FAILED with failure_code. 3. Replace {id} below with the submission response's id and request the licenses view: sh curl --config /path/to/private-auth.conf \\\\ --fail-with-body --silent --show-error \\\\ --output licenses.json \\\\ 'https://api.githits.dev/v1/experimental/licenses/{id}' On HTTP 200, licenses.json contains schema_version, inventory and components. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or Accept-based format selection are supported. Reading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The x-githits-cost value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report. Interpret the response Every reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use bom_ref for reported relationships and properties for input paths. licenses gives license choices; observed_licenses gives independent observations. publisher_evidence retains original publisher statements and release/package/repository context. source_evidence retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named properties[].value strings contain extra JSON that you parse separately; the field descriptions identify them. Null means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read inventory.completeness with the component list. Dependency coverage is in inventory.compositions and the inventory.properties entry named githits:dependency_coverage; parse that entry's value as JSON. Notices are properties named githits:notice. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report. Handle errors Problems use application/problem+json; branch on code and keep X-Request-ID for support. | Status / code | What to do | | --- | --- | | 400 VALIDATION_ERROR / INVALID_SESSION_ID | Remove query parameters or correct the session header/field identified in detail. | | 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. | | 404 ANALYSIS_NOT_FOUND | Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it. | | 409 ANALYSIS_PENDING | Wait for completion through status/events, then retry this GET; do not submit a second job just to wait. | | 409 ANALYSIS_FAILED | Inspect failure_code and the job status. Correct the input or cause before deliberately creating another analysis. | | 409 INCOMPATIBLE_ANALYSIS | Use a job created with kind=sbom\u0026format=cyclonedx; the format of an existing job cannot be changed by this GET. | | 422 LICENSE_REPORT_TOO_LARGE | The JSON report exceeds 16,777,216 bytes. Download the job's original CycloneDX document through result_url, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit. | | 429 RATE_LIMITED | Respect Retry-After when provided. | | 502 UPSTREAM_ERROR | The analysis result could not be read. Keep the job ID and X-Request-ID, and report a persistent failure; do not repeatedly resubmit the same files. | | 503 / 504 | Try reading the same job again later. This does not start another analysis. | Responses must not be cached (Cache-Control: no-store). The report does not certify an installed artifact or complete license coverage.\",\"dateModified\":\"2026-11-05T11:15:02.088Z\",\"isPartOf\":{\"@id\":\"https://docs.githits.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis#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\":\"Get dependency licenses for a completed analysis\",\"item\":\"https://docs.githits.com/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis#apireference\",\"headline\":\"Get dependency licenses for a completed analysis\",\"name\":\"Get dependency licenses for a completed analysis\",\"description\":\"Retrieve a JSON license report for an analysis job you can access. Use the analysis id returned in the HTTP 202 submission response. The synchronous POST /v1/experimental/licenses response has no job ID; a component's bom_ref cannot be used here. The job must have been submitted with kind=sbom\u0026format=cyclonedx. You do not need to parse a CycloneDX document to use this JSON report. An audit job or a job using SPDX/text output returns 409 INCOMPATIBLE_ANALYSIS; choose a compatible job or submit a new one with the required parameters. Create and follow a job Use a GitHits Bearer credential for an active account with required terms accepted. In these examples, /path/to/private-auth.conf is your own protected curl configuration containing header = \\\"Authorization: Bearer \\\"; replace the placeholder privately and keep the file outside your 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 job.json \\\\ 'https://api.githits.dev/v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx' 1. Check for HTTP 202 and read id from job.json. Keep expires_at and the returned links. 2. Resolve status_url or events_url against the API server URL. Read status or consume the server-sent events until state=succeeded. The presence of result_url alone does not mean the job is ready. On state=failed, inspect the job status's error code before deciding whether to submit new work; a licenses read also returns 409 ANALYSIS_FAILED with failure_code. 3. Replace {id} below with the submission response's id and request the licenses view: sh curl --config /path/to/private-auth.conf \\\\ --fail-with-body --silent --show-error \\\\ --output licenses.json \\\\ 'https://api.githits.dev/v1/experimental/licenses/{id}' On HTTP 200, licenses.json contains schema_version, inventory and components. On an HTTP error, curl exits unsuccessfully and saves a JSON problem in that file; check the exit status before treating it as a report. No query parameters or Accept-based format selection are supported. Reading this report does not start another analysis or reserve another set of analysis units. Submitting a new job is a new analysis (currently 100 weighted daily units at default policy). The x-githits-cost value for this read is 0. Keep using the same ID for reads until the job expires instead of resubmitting just to retrieve the report. Interpret the response Every reported project, dependency or file/source entry remains separate, including repeated names, versions or package URLs. Use bom_ref for reported relationships and properties for input paths. licenses gives license choices; observed_licenses gives independent observations. publisher_evidence retains original publisher statements and release/package/repository context. source_evidence retains source-file paths, detected licenses and observation/attempt history. Both evidence fields are JSON objects already. Some named properties[].value strings contain extra JSON that you parse separately; the field descriptions identify them. Null means the corresponding information was unavailable. Empty arrays do not prove that no license exists, that all files were checked, or that the dependency graph is complete. Read inventory.completeness with the component list. Dependency coverage is in inventory.compositions and the inventory.properties entry named githits:dependency_coverage; parse that entry's value as JSON. Notices are properties named githits:notice. No chosen license, AND/OR relationship between separate choices, or pass/fail decision is added. New string values and fields can appear; preserve or ignore unfamiliar data instead of rejecting an otherwise usable report. Handle errors Problems use application/problem+json; branch on code and keep X-Request-ID for support. | Status / code | What to do | | --- | --- | | 400 VALIDATION_ERROR / INVALID_SESSION_ID | Remove query parameters or correct the session header/field identified in detail. | | 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. | | 404 ANALYSIS_NOT_FOUND | Check the submission ID and credential. Missing, expired and inaccessible jobs have the same response. A result that is no longer stored requires a new submission if you still need it. | | 409 ANALYSIS_PENDING | Wait for completion through status/events, then retry this GET; do not submit a second job just to wait. | | 409 ANALYSIS_FAILED | Inspect failure_code and the job status. Correct the input or cause before deliberately creating another analysis. | | 409 INCOMPATIBLE_ANALYSIS | Use a job created with kind=sbom\u0026format=cyclonedx; the format of an existing job cannot be changed by this GET. | | 422 LICENSE_REPORT_TOO_LARGE | The JSON report exceeds 16,777,216 bytes. Download the job's original CycloneDX document through result_url, or create a smaller analysis if appropriate. Jobs do not raise the report-size limit. | | 429 RATE_LIMITED | Respect Retry-After when provided. | | 502 UPSTREAM_ERROR | The analysis result could not be read. Keep the job ID and X-Request-ID, and report a persistent failure; do not repeatedly resubmit the same files. | | 503 / 504 | Try reading the same job again later. This does not start another analysis. | Responses must not be cached (Cache-Control: no-store). The report does not certify an installed artifact or complete license coverage.\",\"url\":\"https://docs.githits.com/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis\",\"mainEntityOfPage\":{\"@id\":\"https://docs.githits.com/api-reference/v1/experimental/get-dependency-licenses-for-a-completed-analysis#webpage\"},\"dateModified\":\"2026-11-05T11:15:02.088Z\",\"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","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","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","description":"Create a JSON license report from your project's manifests and lockfiles, including transitive dependencies found during analysis. The report lists projects, packages and source/file entries, their license choices, source observations and coverage. It can contain incomplete results or unknown licenses; HTTP 200 does not mean every dependency or license is known.\n\n**First request**\n\nUse a GitHits Bearer credential for an active account with the required terms accepted. In these examples, `/path/to/private-auth.conf` is your own protected curl configuration containing `header = \"Authorization: Bearer \u003ctoken>\"`; replace the placeholder privately and keep the file outside your repository.\n\nRun from your repository root:\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 licenses.json \\\n 'https://api.githits.dev/v1/experimental/licenses'\n```\n\nRepeat the literal field name `files[]` for each file. For a nested project, preserve the path in both places, for example `files[]=@app/package.json;filename=app/package.json`. This lets related manifests and lockfiles be associated. Let curl set the multipart `Content-Type` and boundary. Only `files[]` parts are accepted: do not send query parameters, `kind`, `format`, repository URLs, archives, base64 data or policy files. `Accept` does not change the response format.\n\nOn HTTP 200, `licenses.json` contains the report itself, with `schema_version`, `inventory` and `components`. On an HTTP error, curl exits unsuccessfully and writes a JSON problem to that file; check the exit status before treating it as a report. Save a successful response: this synchronous operation returns no job ID or retrieval URL. A component's `bom_ref` is not an analysis job ID.\n\n**Inputs and limits**\n\nSupported inputs are the same as **Generate an SBOM** (`POST /v1/experimental/sbom`): for example `Cargo.toml`/`Cargo.lock`, `package.json`/`package-lock.json`, or supported pnpm and Yarn lockfiles. Lockfiles can be uploaded alone; manifests without a compatible lockfile resolve dependencies separately. File contents determine support. `go.sum` and `requirements.txt` are unsupported companion files. One unusable file rejects the whole upload; inspect the problem's `files` entries for its path and status.\n\nSend 1–256 raw UTF-8 files, each at most 5,242,880 bytes. The entire multipart request, including boundaries and headers, must fit within 8,000,000 bytes. Each filename is a repository-relative path of at most 1,024 UTF-8 bytes, without backslashes, control characters, or empty, dot or parent path segments.\n\nThe upload must finish within 30 seconds. After upload, analysis can wait up to 150 seconds for a response. A timeout does not guarantee that processing stopped. Repeating POST creates another analysis; there is no idempotency key or saved result to resume.\n\n**Long-running work and usage**\n\nFor work that may outlast the synchronous request, submit `POST /v1/experimental/lockfile-jobs?kind=sbom\u0026format=cyclonedx` with the same files. Its HTTP 202 JSON response supplies an analysis `id`, plus `status_url`, `events_url`, `result_url` and `expires_at`. Follow status or events until `state=succeeded`, then read `GET /v1/experimental/licenses/{id}` using that analysis ID. The **Get dependency licenses** operation shows the complete workflow.\n\nAt current default policy, creating an analysis reserves 100 weighted units from your daily allowance. Processing failures do not automatically refund that reservation. Reading an existing job's licenses report does not start another analysis or consume another analysis reservation. The `x-githits-cost` value of 1 is provisional operation metadata, not an additional charge. Avoid unconditional POST retries.\n\n**Read the report**\n\nKeep separate component entries even when their names, versions or package URLs match. Use `bom_ref` for reported relationships and `properties` for input-file attribution. `licenses` contains license-choice objects; `observed_licenses` contains separate observations. `publisher_evidence` explains original publisher statements and their context; `source_evidence` explains source-file detections and attempt history. These evidence fields are JSON objects already; do not decode them as JSON strings. Some named `properties[].value` strings contain additional JSON and need a separate parse, as described in the response schemas.\n\nNull identity or evidence fields mean unavailable information. Empty license arrays mean no entries were reported, not that every file was checked or that a package has no license. Read `inventory.completeness` alongside the component list. Dependency coverage is in `inventory.compositions` and the `inventory.properties` entry named `githits:dependency_coverage`; parse that entry's `value` as JSON. Notices are properties named `githits:notice`. No chosen license, relationship between separate choices, or pass/fail decision is inferred. Response keys use `snake_case`; embedded CycloneDX choice, composition, dependency, reference and hash objects retain standard keys such as `dependsOn`.\n\n**Handle errors**\n\nProblems use `application/problem+json`. Branch on `code`, keep `X-Request-ID` for support, and respect `Retry-After` when present.\n\n| Status / code | What to do |\n| --- | --- |\n| 400 `VALIDATION_ERROR` / `INVALID_SESSION_ID` | Correct the field named in `detail`, the upload parts, or the session header. |\n| 401 / 403 | Check the credential, account access and required terms; use any provided terms/acceptance links. |\n| 408 / 413 / 415 | Meet the upload deadline and size/path/count limits; send valid multipart data. |\n| 422 `UNUSABLE_MANIFEST` / `NO_MANIFEST_EVIDENCE` | Correct the reported files or supply a supported manifest/lockfile with package evidence. A file can be rejected after the analysis units were already reserved. |\n| 422 `LICENSE_REPORT_TOO_LARGE` / `SBOM_OUTPUT_TOO_LARGE` | The report or underlying inventory exceeds its output limit. Request a smaller inventory if possible. The JSON report limit is 16,777,216 bytes; using jobs does not raise it. Jobs also let you download the original CycloneDX document through `result_url` when that document is available. |\n| 429 `RATE_LIMITED` | Wait until the supplied `Retry-After` time before trying again. |\n| 502 `UPSTREAM_ERROR` | The analysis result could not be read. Keep `X-Request-ID` and report a persistent failure; repeating POST may create another charged analysis. |\n| 503 | Try again later. If you already have an analysis job, keep its ID and retry reads rather than submitting another job. |\n| 504 `TIMEOUT` | Processing may still have run. Prefer the job workflow for future submissions and do not assume a repeated POST is free. |\n\nResponses must not be cached (`Cache-Control: no-store`).\n","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","description":"Submit uploaded manifests and lockfiles for asynchronous dependency analysis. Authenticate with a GitHits Bearer credential for an active account that has accepted the required terms. Supply kind=sbom or kind=audit either as a query parameter or multipart field; when both are supplied, the multipart field wins. Supply format in either location or both; the multipart field wins, and omission selects cyclonedx for sbom or json for audit. SBOM accepts cyclonedx/spdx/text; audit accepts only json. Crossed effective pairs are rejected before upstream admission. Repeated values within one location and unknown query or multipart fields are rejected. The gateway reports a provisional cost of one unit for submission; at current policy defaults, normal backend job admission reserves 100 weighted daily units once, including audit. The input support, strict whole-upload rejection and shared submission rate/cost policy are described under POST /v1/experimental/sbom, including reservation before parsing and no refund for later failures. Reads, progress, reconnects and backend execution retries are free; a deliberate new submission is newly charged. This endpoint returns HTTP 202 when the job is queued. The existing /v1/experimental/sbom endpoint remains synchronous and returns an HTTP 200 document.","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":"Get dependency licenses for a completed analysis - 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"]}