> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/api-reference/ar/registry-v3-firewall.md).

# Registry V3 Firewall

V3 firewall endpoints

## Add build info

> Adds build info generated by CLI after package installation.

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/build-info":{"post":{"description":"Adds build info generated by CLI after package installation.","operationId":"AddBuildInfoV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"}],"requestBody":{"$ref":"#/components/requestBodies/BuildInfoRequestV3"},"responses":{"201":{"description":"Build info added successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Add build info","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}}},"requestBodies":{"BuildInfoRequestV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildInfoRequestInputV3"}}},"description":"request to add build info"}},"schemas":{"BuildInfoRequestInputV3":{"description":"Request to add build info","properties":{"metadata":{"$ref":"#/components/schemas/BuildInfoMetadataV3"},"packageType":{"$ref":"#/components/schemas/PackageTypeV3"},"pipelineContext":{"$ref":"#/components/schemas/PipelineContextV3"},"registryId":{"description":"UUID of the registry to add build info for","format":"uuid","type":"string"},"rootPackage":{"$ref":"#/components/schemas/RootPackageV3"},"status":{"description":"Status of the evaluation","enum":["PENDING","PROCESSING","SUCCESS","FAILURE"],"type":"string"}},"required":["registryId","packageType","rootPackage","status","metadata"],"type":"object"},"BuildInfoMetadataV3":{"description":"List of dependency graph nodes for the build.","items":{"$ref":"#/components/schemas/BuildInfoNodeV3"},"type":"array"},"BuildInfoNodeV3":{"description":"Node in the build","properties":{"nodeKey":{"description":"package@version","type":"string"},"parentNodeKey":{"description":"Parent node","type":"string"}},"required":["nodeKey"],"type":"object"},"PackageTypeV3":{"description":"Package type. Known values include: DOCKER, MAVEN, PYTHON, GENERIC, HELM, HELM_HTTP, NUGET, NPM, RPM, CARGO, COMPOSER, GO, HUGGINGFACE, CONDA, DART, SWIFT, PUPPET, RUBY, RAW, DEBIAN, CONAN, TERRAFORM, CRAN, WOLFI, ALPINE. This field is extensible; clients must handle unknown values.\n","type":"string"},"PipelineContextV3":{"description":"Pipeline execution context.","properties":{"executionId":{"description":"Execution identifier.","type":"string"},"orgId":{"description":"Organization identifier.","type":"string"},"pipelineId":{"description":"Pipeline identifier.","type":"string"},"projectId":{"description":"Project identifier.","type":"string"},"stageId":{"description":"Stage identifier.","type":"string"},"stepId":{"description":"Step identifier.","type":"string"}},"required":["pipelineId","executionId","orgId","projectId","stageId"],"type":"object"},"RootPackageV3":{"description":"Root package of the build","properties":{"name":{"description":"Name of the root package","type":"string"},"version":{"description":"Version of the root package","type":"string"}},"required":["name","version"],"type":"object"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}}}}
```

## List pipeline build info details

> Returns all pipeline build info details.

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/build-info/pipeline/details":{"get":{"description":"Returns all pipeline build info details.","operationId":"ListPipelineBuildInfoDetailsV3","parameters":[{"$ref":"#/components/parameters/PackageNameFilterParamV3"},{"$ref":"#/components/parameters/VersionFilterParamV3"},{"$ref":"#/components/parameters/RegistryIdFilterParamV3"},{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/OrgIdentifierV3"},{"$ref":"#/components/parameters/ProjectIdentifierV3"},{"$ref":"#/components/parameters/PipelineIdFilterParamV3"},{"$ref":"#/components/parameters/ScanIDQueryParamV3"},{"$ref":"#/components/parameters/PageNumberV3"},{"$ref":"#/components/parameters/PageSizeV3"},{"$ref":"#/components/parameters/ProjectsOptionalListParamV3"},{"$ref":"#/components/parameters/SecurityViolationCategoriesOptionalListParamV3"},{"$ref":"#/components/parameters/PackageTypeListParamV3"},{"$ref":"#/components/parameters/RegistryScopeV3"}],"responses":{"200":{"$ref":"#/components/responses/ListPipelineBuildInfoDetailsResponseV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"List pipeline build info details","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"PackageNameFilterParamV3":{"description":"Filter by package name","in":"query","name":"package_name","schema":{"type":"string"}},"VersionFilterParamV3":{"description":"Filter by version","in":"query","name":"version","schema":{"type":"string"}},"RegistryIdFilterParamV3":{"description":"Filter by registry ID","in":"query","name":"registry_id","schema":{"type":"string"}},"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"OrgIdentifierV3":{"description":"Unique identifier for the organization within the account.\n\nExample: `default` or `engineering_org`\n","in":"query","name":"org_identifier","schema":{"type":"string"}},"ProjectIdentifierV3":{"description":"Unique identifier for the project within the organization.\n\nExample: `my_project` or `frontend_services`\n","in":"query","name":"project_identifier","schema":{"type":"string"}},"PipelineIdFilterParamV3":{"description":"Filter by pipeline identifier","in":"query","name":"pipeline_id","schema":{"type":"string"}},"ScanIDQueryParamV3":{"description":"Scan Identifier","in":"query","name":"scan_id","schema":{"type":"string"}},"PageNumberV3":{"description":"The page number for pagination (0-indexed).\n\nUsed to navigate through large result sets. Combined with `size` parameter\nto control which subset of results to return.\n\nExample: `page=0` returns the first page, `page=1` returns the second page\n","in":"query","name":"page","schema":{"default":0,"format":"int64","type":"integer"}},"PageSizeV3":{"description":"The number of items to return per page.\n\nControls the page size for paginated results. \n\nExample: `size=50` returns up to 50 items per page\n","in":"query","name":"size","schema":{"default":20,"format":"int64","maximum":100,"minimum":1,"type":"integer"}},"ProjectsOptionalListParamV3":{"description":"Filter by projects","in":"query","name":"projects","schema":{"items":{"type":"string"},"type":"array"}},"SecurityViolationCategoriesOptionalListParamV3":{"description":"Filter by categories","in":"query","name":"categories","schema":{"items":{"type":"string"},"type":"array"}},"PackageTypeListParamV3":{"description":"Registry Package Type","in":"query","name":"package_types","schema":{"items":{"type":"string"},"type":"array"}},"RegistryScopeV3":{"description":"**Scope of registries to list**\n* **none** – current space only (default)   * **ancestors** – current space **plus** all parent spaces   * **descendants** – current space **plus** all child spaces  \nIf omitted, `none` is assumed.\n","in":"query","name":"scope","schema":{"enum":["ancestors","descendants","none"],"type":"string"}}},"responses":{"ListPipelineBuildInfoDetailsResponseV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPipelineBuildInfoDetailsResponseBodyV3"}}},"description":"Response containing pipeline build info details"}},"schemas":{"ListPipelineBuildInfoDetailsResponseBodyV3":{"allOf":[{"$ref":"#/components/schemas/PageInfoV3"},{"properties":{"meta":{"$ref":"#/components/schemas/PipelineBuildInfoMetaV3"},"pipelineData":{"description":"Pipeline build info details","items":{"$ref":"#/components/schemas/PipelineBuildInfoDetailV3"},"type":"array"}},"required":["pipelineData","meta"],"type":"object"}]},"PageInfoV3":{"description":"Pagination metadata.\n- `page` selects which page of results to return (0 = first page).\n- `size` controls how many items are returned per page.\n- `hasMore` is true if more results exist after this page.\n","properties":{"hasMore":{"description":"True if more results exist after this page.","type":"boolean"},"page":{"description":"The current page (0-indexed)","format":"int64","type":"integer"},"size":{"description":"Number of items per page","format":"int64","type":"integer"}},"required":["page","size","hasMore"],"type":"object"},"PipelineBuildInfoMetaV3":{"description":"Aggregated metadata for pipeline build info results.","properties":{"totalBlockedDependencies":{"description":"Total number of blocked dependencies.","format":"int64","type":"integer"},"totalBlockedPipelines":{"description":"Total number of blocked pipelines.","format":"int64","type":"integer"}},"type":"object"},"PipelineBuildInfoDetailV3":{"description":"Pipeline build info detail entry.","properties":{"lastExecutionTime":{"description":"Unix timestamp (milliseconds) when the pipeline execution was last executed.","format":"int64","type":"integer"},"orgIdentifier":{"description":"Organization identifier.","type":"string"},"packageType":{"$ref":"#/components/schemas/PackageTypeV3"},"pipelineExecutionIdentifier":{"description":"Pipeline execution identifier.","type":"string"},"pipelineIdentifier":{"description":"Pipeline identifier.","type":"string"},"projectIdentifier":{"description":"Project identifier.","type":"string"},"rootPackageName":{"description":"Name of the root package.","type":"string"},"rootPackageVersion":{"description":"Version of the root package.","type":"string"},"securityViolationCategories":{"description":"Policy failure categories.","items":{"$ref":"#/components/schemas/PolicyFailureDetailCategoryV3"},"type":"array"},"stageIdentifier":{"description":"Stage identifier.","type":"string"},"stepIdentifier":{"description":"Step identifier.","type":"string"},"violations":{"description":"Map of package key to scan ID.","items":{"$ref":"#/components/schemas/PipelineBuildInfoViolationV3"},"type":"array"}},"required":["pipelineIdentifier","orgIdentifier","projectIdentifier","stageIdentifier","stepIdentifier","violations","rootPackageName","rootPackageVersion","packageType","securityViolationCategories"],"type":"object"},"PackageTypeV3":{"description":"Package type. Known values include: DOCKER, MAVEN, PYTHON, GENERIC, HELM, HELM_HTTP, NUGET, NPM, RPM, CARGO, COMPOSER, GO, HUGGINGFACE, CONDA, DART, SWIFT, PUPPET, RUBY, RAW, DEBIAN, CONAN, TERRAFORM, CRAN, WOLFI, ALPINE. This field is extensible; clients must handle unknown values.\n","type":"string"},"PolicyFailureDetailCategoryV3":{"description":"Policy failure detail category.","enum":["Security","License","MaliciousPackage","PackageAge","OssRiskLevel","Unknown"],"type":"string"},"PipelineBuildInfoViolationV3":{"description":"A violation entry mapping a package key to a scan ID.","properties":{"package":{"description":"Package name and version (package@version).","type":"string"},"purl":{"description":"Package URL.","type":"string"},"scanId":{"description":"Scan identifier.","type":"string"},"securityViolationCategories":{"description":"Policy failure categories.","items":{"$ref":"#/components/schemas/PolicyFailureDetailCategoryV3"},"type":"array"},"status":{"description":"Scan status","enum":["BLOCKED","WARN"],"type":"string"}},"required":["package","scanId","status","purl","securityViolationCategories"],"type":"object"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}}}}
```

## Get the list of artifact scan result for a particular scope

> Get the list of artifact scan result for a particular scope

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans":{"get":{"description":"Get the list of artifact scan result for a particular scope","operationId":"GetArtifactScansV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/OrgIdentifierV3"},{"$ref":"#/components/parameters/ProjectIdentifierV3"},{"$ref":"#/components/parameters/PackageTypeListParamV3"},{"$ref":"#/components/parameters/RegistryIdListOptionalParamV3"},{"$ref":"#/components/parameters/PolicySetRefParamV3"},{"$ref":"#/components/parameters/SecurityViolationCategoriesOptionalListParamV3"},{"$ref":"#/components/parameters/ScanIDQueryParamV3"},{"$ref":"#/components/parameters/ScanStatusParamV3"},{"$ref":"#/components/parameters/PageNumberV3"},{"$ref":"#/components/parameters/PageSizeV3"},{"$ref":"#/components/parameters/SortV3"},{"$ref":"#/components/parameters/SearchTermV3"},{"$ref":"#/components/parameters/RegistryScopeV3"}],"responses":{"200":{"$ref":"#/components/responses/ListArtifactScanResponseV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Get the list of artifact scan result for a particular scope","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"OrgIdentifierV3":{"description":"Unique identifier for the organization within the account.\n\nExample: `default` or `engineering_org`\n","in":"query","name":"org_identifier","schema":{"type":"string"}},"ProjectIdentifierV3":{"description":"Unique identifier for the project within the organization.\n\nExample: `my_project` or `frontend_services`\n","in":"query","name":"project_identifier","schema":{"type":"string"}},"PackageTypeListParamV3":{"description":"Registry Package Type","in":"query","name":"package_types","schema":{"items":{"type":"string"},"type":"array"}},"RegistryIdListOptionalParamV3":{"description":"Unique id for the registry.\nNote: This parameter should have one id if package query param is provided\n","in":"query","name":"registry_ids","schema":{"items":{"format":"uuid","type":"string"},"type":"array"}},"PolicySetRefParamV3":{"description":"Unique reference for the opa policy set. Example: `my-policy` or `account.my-policy`","in":"query","name":"policy_set_ref","schema":{"type":"string"}},"SecurityViolationCategoriesOptionalListParamV3":{"description":"Filter by categories","in":"query","name":"categories","schema":{"items":{"type":"string"},"type":"array"}},"ScanIDQueryParamV3":{"description":"Scan Identifier","in":"query","name":"scan_id","schema":{"type":"string"}},"ScanStatusParamV3":{"description":"Filter by scan status of the artifact after OPA policy evaluation.","in":"query","name":"scan_status","schema":{"$ref":"#/components/schemas/ScanStatusV3"}},"PageNumberV3":{"description":"The page number for pagination (0-indexed).\n\nUsed to navigate through large result sets. Combined with `size` parameter\nto control which subset of results to return.\n\nExample: `page=0` returns the first page, `page=1` returns the second page\n","in":"query","name":"page","schema":{"default":0,"format":"int64","type":"integer"}},"PageSizeV3":{"description":"The number of items to return per page.\n\nControls the page size for paginated results. \n\nExample: `size=50` returns up to 50 items per page\n","in":"query","name":"size","schema":{"default":20,"format":"int64","maximum":100,"minimum":1,"type":"integer"}},"SortV3":{"description":"The sort for the results.\nAccepted pattern: `sort_field:sort_order` where sort_field is the field name\nand sort_order is either `asc` or `desc`.\n\nExamples: `name:asc`, `modifiedAt:desc`\n","in":"query","name":"sort","schema":{"type":"string"}},"SearchTermV3":{"description":"Search term for filtering results.\n\nExample: `search_term=prod` might match keys like \"production\", \"prod-env\", etc.\n","in":"query","name":"search_term","schema":{"type":"string"}},"RegistryScopeV3":{"description":"**Scope of registries to list**\n* **none** – current space only (default)   * **ancestors** – current space **plus** all parent spaces   * **descendants** – current space **plus** all child spaces  \nIf omitted, `none` is assumed.\n","in":"query","name":"scope","schema":{"enum":["ancestors","descendants","none"],"type":"string"}}},"schemas":{"ScanStatusV3":{"description":"Status of an artifact scan evaluation.","enum":["ALLOWED","BLOCKED","WARN","UNKNOWN"],"type":"string"},"ArtifactScanV3":{"properties":{"RegistryOrgId":{"description":"Organization identifier","type":"string"},"RegistryProjectId":{"description":"Project identifier","type":"string"},"buildDetails":{"$ref":"#/components/schemas/BuildDetailsV3"},"exemptionStatus":{"$ref":"#/components/schemas/ExemptionStatusV3"},"id":{"type":"string"},"lastEvaluatedAt":{"type":"string"},"lastEvaluatedBy":{"type":"string"},"packageName":{"description":"Package name","type":"string"},"packageType":{"$ref":"#/components/schemas/PackageTypeV3"},"parentRegistryId":{"description":"Parent virtual registry UUID","type":"string"},"parentRegistryName":{"description":"Parent virtual registry name","type":"string"},"parentRegistryOrgId":{"description":"Parent registry organization identifier","type":"string"},"parentRegistryProjectId":{"description":"Parent registry project identifier","type":"string"},"policySets":{"$ref":"#/components/schemas/PolicySetsV3"},"purl":{"description":"Package URL (PURL) identifying the package version","type":"string"},"registryId":{"description":"Registry name","type":"string"},"registryName":{"description":"Registry name","type":"string"},"rootPackages":{"description":"Unique set of root packages (name@version) impacted by this scan","items":{"description":"Root package with name and version (e.g. name@version)","type":"string"},"type":"array","uniqueItems":true},"scanStatus":{"description":"Scan status","enum":["BLOCKED","WARN"],"type":"string"},"securityViolationCategories":{"description":"Security violation categories","items":{"$ref":"#/components/schemas/PolicyFailureDetailCategoryV3"},"type":"array"},"totalAffectedPipelines":{"description":"Total number of affected pipelines","type":"integer"},"version":{"description":"Version","type":"string"},"versionId":{"description":"Version","type":"string"}},"required":["id","packageType","packageName","purl","version","registryName","registryId","parentRegistryId","parentRegistryName","policySets","scanStatus","securityViolationCategories","buildDetails","rootPackages","totalAffectedPipelines"],"type":"object"},"BuildDetailsV3":{"description":"List of build detail entries containing pipeline and package info.\n","items":{"$ref":"#/components/schemas/BuildDetailEntryV3"},"type":"array"},"BuildDetailEntryV3":{"description":"Build detail entry for a single scan.","properties":{"lastExecutionTime":{"description":"Epoch time (seconds) of the latest execution.","format":"int64","type":"integer"},"latestExecutionId":{"description":"Latest execution identifier.","type":"string"},"pipelineId":{"description":"Pipeline identifier.","type":"string"},"rootPackage":{"description":"Root package identifier in name@version format.","type":"string"},"stageId":{"description":"Stage identifier.","type":"string"},"stepId":{"description":"Step identifier.","type":"string"}},"required":["pipelineId","package","latestExecutionId","lastExecutionTime","stageId","rootPackage"],"type":"object"},"ExemptionStatusV3":{"description":"Exemption status for an artifact, showing if an exception exists.","properties":{"createdAt":{"$ref":"#/components/schemas/CreatedAtMsV3"},"expirationAt":{"$ref":"#/components/schemas/CreatedAtMsV3"},"id":{"description":"Firewall exception ID for navigation to the exception detail.","format":"uuid","type":"string"},"status":{"description":"Current status of the exception.","enum":["PENDING","APPROVED","REJECTED","EXPIRED"],"type":"string"}},"required":["id","status","createdAt"],"type":"object"},"CreatedAtMsV3":{"description":"Unix timestamp in milliseconds when the resource was created","format":"int64","nullable":true,"type":"integer"},"PackageTypeV3":{"description":"Package type. Known values include: DOCKER, MAVEN, PYTHON, GENERIC, HELM, HELM_HTTP, NUGET, NPM, RPM, CARGO, COMPOSER, GO, HUGGINGFACE, CONDA, DART, SWIFT, PUPPET, RUBY, RAW, DEBIAN, CONAN, TERRAFORM, CRAN, WOLFI, ALPINE. This field is extensible; clients must handle unknown values.\n","type":"string"},"PolicySetsV3":{"description":"List of opa policy sets.","items":{"properties":{"policySetName":{"description":"Policy Set name","type":"string"},"policySetRef":{"description":"Unique reference for the opa policy set. Example: `my-policy` or `account.my-policy`","type":"string"}},"required":["policySetRef","policySetName"],"type":"object"},"type":"array"},"PolicyFailureDetailCategoryV3":{"description":"Policy failure detail category.","enum":["Security","License","MaliciousPackage","PackageAge","OssRiskLevel","Unknown"],"type":"string"},"ScanMetaV3":{"description":"Metadata about the list artifact scans","properties":{"blockedCount":{"description":"Count of active blocked artifacts","format":"int64","type":"integer"},"totalCount":{"description":"Count of total artifact violations","format":"int64","type":"integer"},"warnCount":{"description":"Count of active Warn artifacts","format":"int64","type":"integer"}},"type":"object"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}},"responses":{"ListArtifactScanResponseV3":{"content":{"application/json":{"schema":{"properties":{"data":{"description":"A list of artifact scans","items":{"$ref":"#/components/schemas/ArtifactScanV3"},"type":"array"},"itemCount":{"description":"The total number of items","format":"int64","type":"integer"},"meta":{"$ref":"#/components/schemas/ScanMetaV3"},"pageCount":{"description":"The total number of pages","format":"int64","type":"integer"},"pageIndex":{"description":"The current page","format":"int64","type":"integer"},"pageSize":{"description":"The number of items per page","type":"integer"}},"required":["pageCount","itemCount","pageSize","pageIndex","data","meta"],"type":"object"}}},"description":"Response containing list of artifact scan"}}}}
```

## Get the details of a artifact scan

> Get the details of a artifact scan

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/{id}/details":{"get":{"description":"Get the details of a artifact scan","operationId":"GetArtifactScanDetailsV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/IdPathParamV3"},{"$ref":"#/components/parameters/PolicySetRefParamV3"}],"responses":{"200":{"$ref":"#/components/responses/ArtifactScanDetailsResponseV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Get the details of a artifact scan","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"IdPathParamV3":{"in":"path","name":"id","required":true,"schema":{"type":"string"}},"PolicySetRefParamV3":{"description":"Unique reference for the opa policy set. Example: `my-policy` or `account.my-policy`","in":"query","name":"policy_set_ref","schema":{"type":"string"}}},"responses":{"ArtifactScanDetailsResponseV3":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/ArtifactScanDetailsV3"}},"type":"object"}}},"description":"Response containing details of artifact scan"}},"schemas":{"ArtifactScanDetailsV3":{"description":"Artifact scans details","properties":{"buildDetails":{"$ref":"#/components/schemas/BuildDetailsV3"},"createdAt":{"type":"string"},"exemptionStatus":{"$ref":"#/components/schemas/ExemptionStatusV3"},"fixVersionDetails":{"$ref":"#/components/schemas/FixVersionDetailsV3"},"id":{"description":"Unique identifier for this artifact scan details","format":"uuid","type":"string"},"lastEvaluatedAt":{"type":"string"},"packageName":{"description":"Package name","type":"string"},"packageType":{"$ref":"#/components/schemas/PackageTypeV3"},"parentRegistryId":{"description":"Parent virtual registry UUID","format":"uuid","type":"string"},"parentRegistryName":{"description":"Parent virtual registry name","type":"string"},"parentRegistryOrgId":{"description":"Parent registry organization identifier","type":"string"},"parentRegistryProjectId":{"description":"Parent registry project identifier","type":"string"},"policySetFailureDetails":{"items":{"$ref":"#/components/schemas/PolicySetFailureDetailV3"},"type":"array"},"purl":{"description":"Package URL (PURL) identifying the package version","type":"string"},"registryId":{"description":"Registry ID","format":"uuid","type":"string"},"registryName":{"description":"Registry name","type":"string"},"registryOrgId":{"description":"Organization identifier of the registry","type":"string"},"registryProjectId":{"description":"Project identifier of the registry","type":"string"},"rootPackages":{"description":"Unique set of root packages (name@version) impacted by this scan","items":{"description":"Root package with name and version (e.g. name@version)","type":"string"},"type":"array","uniqueItems":true},"scanStatus":{"description":"Scan status","enum":["BLOCKED","WARN"],"type":"string"},"version":{"description":"Version","type":"string"},"versionId":{"description":"Version","format":"uuid","type":"string"}},"required":["id","packageType","packageName","version","registryName","registry_id","parentRegistryId","parentRegistryName","policySetFailureDetails","scanStatus","buildDetails","rootPackages","purl"],"type":"object"},"BuildDetailsV3":{"description":"List of build detail entries containing pipeline and package info.\n","items":{"$ref":"#/components/schemas/BuildDetailEntryV3"},"type":"array"},"BuildDetailEntryV3":{"description":"Build detail entry for a single scan.","properties":{"lastExecutionTime":{"description":"Epoch time (seconds) of the latest execution.","format":"int64","type":"integer"},"latestExecutionId":{"description":"Latest execution identifier.","type":"string"},"pipelineId":{"description":"Pipeline identifier.","type":"string"},"rootPackage":{"description":"Root package identifier in name@version format.","type":"string"},"stageId":{"description":"Stage identifier.","type":"string"},"stepId":{"description":"Step identifier.","type":"string"}},"required":["pipelineId","package","latestExecutionId","lastExecutionTime","stageId","rootPackage"],"type":"object"},"ExemptionStatusV3":{"description":"Exemption status for an artifact, showing if an exception exists.","properties":{"createdAt":{"$ref":"#/components/schemas/CreatedAtMsV3"},"expirationAt":{"$ref":"#/components/schemas/CreatedAtMsV3"},"id":{"description":"Firewall exception ID for navigation to the exception detail.","format":"uuid","type":"string"},"status":{"description":"Current status of the exception.","enum":["PENDING","APPROVED","REJECTED","EXPIRED"],"type":"string"}},"required":["id","status","createdAt"],"type":"object"},"CreatedAtMsV3":{"description":"Unix timestamp in milliseconds when the resource was created","format":"int64","nullable":true,"type":"integer"},"FixVersionDetailsV3":{"description":"Fix version Details","properties":{"currentVersion":{"description":"The current version","type":"string"},"fixVersion":{"description":"The fix version","type":"string"},"fixVersionAvailable":{"description":"Fix version available or not","type":"boolean"}},"required":["fixVersionAvailable","currentVersion"],"type":"object"},"PackageTypeV3":{"description":"Package type. Known values include: DOCKER, MAVEN, PYTHON, GENERIC, HELM, HELM_HTTP, NUGET, NPM, RPM, CARGO, COMPOSER, GO, HUGGINGFACE, CONDA, DART, SWIFT, PUPPET, RUBY, RAW, DEBIAN, CONAN, TERRAFORM, CRAN, WOLFI, ALPINE. This field is extensible; clients must handle unknown values.\n","type":"string"},"PolicySetFailureDetailV3":{"description":"Policy set failure detail entry.","properties":{"policyFailureDetails":{"items":{"$ref":"#/components/schemas/PolicyFailureDetailV3"},"type":"array"},"policySetName":{"description":"Policy set name.","type":"string"},"policySetRef":{"description":"Policy set reference.","type":"string"}},"required":["policySetRef","policySetName","policyFailureDetails"],"type":"object"},"PolicyFailureDetailV3":{"description":"Policy failure detail entry.","discriminator":{"mapping":{"License":"#/components/schemas/LicensePolicyFailureDetailConfigV3","MaliciousPackage":"#/components/schemas/MaliciousPackagePolicyFailureDetailConfigV3","OssRiskLevel":"#/components/schemas/OssRiskLevelPolicyFailureDetailConfigV3","PackageAge":"#/components/schemas/PackageAgeViolationPolicyFailureDetailConfigV3","Security":"#/components/schemas/SecurityPolicyFailureDetailConfigV3"},"propertyName":"category"},"oneOf":[{"$ref":"#/components/schemas/SecurityPolicyFailureDetailConfigV3"},{"$ref":"#/components/schemas/LicensePolicyFailureDetailConfigV3"},{"$ref":"#/components/schemas/MaliciousPackagePolicyFailureDetailConfigV3"},{"$ref":"#/components/schemas/PackageAgeViolationPolicyFailureDetailConfigV3"},{"$ref":"#/components/schemas/OssRiskLevelPolicyFailureDetailConfigV3"}],"properties":{"category":{"$ref":"#/components/schemas/PolicyFailureDetailCategoryV3"},"policyName":{"description":"Policy name.","type":"string"},"policyRef":{"description":"Policy Ref.","type":"string"}},"required":["category","policyName","policyRef"],"type":"object"},"SecurityPolicyFailureDetailConfigV3":{"description":"Security-specific failure detail payload.","properties":{"vulnerabilities":{"description":"List of security violations.","items":{"$ref":"#/components/schemas/SecurityPolicyFailureVulnerabilityV3"},"type":"array"}},"required":["vulnerabilities"],"type":"object"},"SecurityPolicyFailureVulnerabilityV3":{"description":"Security violation entry.","properties":{"cveId":{"description":"CVE identifier.","type":"string"},"cvssScore":{"description":"CVSS score.","format":"double","type":"number"},"cvssThreshold":{"description":"CVSS threshold.","format":"double","type":"number"}},"required":["cveId","cvssScore","cvssThreshold"],"type":"object"},"LicensePolicyFailureDetailConfigV3":{"description":"License-specific failure detail payload.","properties":{"allowedLicenses":{"description":"Allowed license list.","items":{"type":"string"},"type":"array"},"blockedLicense":{"description":"Blocked license.","type":"string"}},"required":["allowedLicenses","blockedLicense"],"type":"object"},"MaliciousPackagePolicyFailureDetailConfigV3":{"description":"Malicious package failure detail payload.","properties":{"blockedPackage":{"description":"The blocked package identifier (purl).","type":"string"},"message":{"description":"Human-readable message describing the violation.","type":"string"},"reason":{"description":"The reason the package is blocked.","type":"string"}},"required":["blockedPackage","reason","message"],"type":"object"},"PackageAgeViolationPolicyFailureDetailConfigV3":{"description":"Package age violation failure detail payload.","properties":{"packageAgeThreshold":{"description":"Package age threshold.","type":"string"},"publishedOn":{"description":"Package publish date.","type":"string"}},"required":["publishedOn","packageAgeThreshold"],"type":"object"},"OssRiskLevelPolicyFailureDetailConfigV3":{"description":"OSS risk level-specific failure detail payload.","properties":{"ossRiskLevel":{"description":"oss risk level","type":"string"},"ossRiskScore":{"description":"oss risk level","format":"double","type":"number"}},"required":["ossRiskLevel"],"type":"object"},"PolicyFailureDetailCategoryV3":{"description":"Policy failure detail category.","enum":["Security","License","MaliciousPackage","PackageAge","OssRiskLevel","Unknown"],"type":"string"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}}}}
```

## Initiate bulk scan evaluation

> Triggers firewall policy evaluation for multiple artifacts

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/bulk-evaluate":{"post":{"description":"Triggers firewall policy evaluation for multiple artifacts","operationId":"InitiateBulkScanEvaluationV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/OrgIdentifierV3"},{"$ref":"#/components/parameters/ProjectIdentifierV3"}],"requestBody":{"$ref":"#/components/requestBodies/BulkScanEvaluationRequestV3"},"responses":{"202":{"$ref":"#/components/responses/BulkScanEvaluationAcceptedV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Initiate bulk scan evaluation","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"OrgIdentifierV3":{"description":"Unique identifier for the organization within the account.\n\nExample: `default` or `engineering_org`\n","in":"query","name":"org_identifier","schema":{"type":"string"}},"ProjectIdentifierV3":{"description":"Unique identifier for the project within the organization.\n\nExample: `my_project` or `frontend_services`\n","in":"query","name":"project_identifier","schema":{"type":"string"}}},"requestBodies":{"BulkScanEvaluationRequestV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkScanEvaluationRequestV3"}}},"description":"Request to initiate bulk scan evaluation"}},"schemas":{"BulkScanEvaluationRequestV3":{"description":"Request to initiate bulk scan evaluation","properties":{"artifacts":{"description":"List of artifacts to evaluate","items":{"$ref":"#/components/schemas/ArtifactScanInputV3"},"maxItems":10000,"minItems":1,"type":"array"},"registryId":{"description":"Registry identifier","format":"uuid","type":"string"}},"required":["registryId","artifacts"],"type":"object"},"ArtifactScanInputV3":{"description":"Artifact to be scanned","properties":{"packageName":{"description":"Name of the package","type":"string"},"version":{"description":"Version of the package","type":"string"}},"required":["packageName","version"],"type":"object"},"BulkScanEvaluationAcceptedDataV3":{"description":"Response data for bulk scan evaluation request","properties":{"evaluationId":{"description":"Unique evaluation ID for tracking the bulk scan evaluation","type":"string"}},"type":"object"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}},"responses":{"BulkScanEvaluationAcceptedV3":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/BulkScanEvaluationAcceptedDataV3"}},"type":"object"}}},"description":"Bulk scan evaluation request accepted for processing"}}}}
```

## Synchronous bulk artifact scan evaluation (no DB write)

> Synchronously evaluates firewall policies for up to 50 artifacts and returns the scan result for each one. No data is written to the database.<br>

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/bulk-evaluate-sync":{"post":{"description":"Synchronously evaluates firewall policies for up to 50 artifacts and returns the scan result for each one. No data is written to the database.\n","operationId":"BulkEvaluateArtifactsV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/OrgIdentifierV3"},{"$ref":"#/components/parameters/ProjectIdentifierV3"}],"requestBody":{"$ref":"#/components/requestBodies/BulkScanEvaluateSyncRequestV3"},"responses":{"200":{"$ref":"#/components/responses/BulkScanEvaluateSyncResponseV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Synchronous bulk artifact scan evaluation (no DB write)","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"OrgIdentifierV3":{"description":"Unique identifier for the organization within the account.\n\nExample: `default` or `engineering_org`\n","in":"query","name":"org_identifier","schema":{"type":"string"}},"ProjectIdentifierV3":{"description":"Unique identifier for the project within the organization.\n\nExample: `my_project` or `frontend_services`\n","in":"query","name":"project_identifier","schema":{"type":"string"}}},"requestBodies":{"BulkScanEvaluateSyncRequestV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkScanEvaluateSyncRequestV3"}}},"description":"Request to synchronously evaluate firewall policies for multiple artifacts"}},"schemas":{"BulkScanEvaluateSyncRequestV3":{"description":"Request body for synchronous bulk artifact scan evaluation. Maximum 50 artifacts per request. No data is written to the database.\n","properties":{"artifacts":{"description":"List of artifacts to evaluate (max 50)","items":{"$ref":"#/components/schemas/ArtifactScanInputV3"},"maxItems":50,"minItems":1,"type":"array"},"registryId":{"description":"Registry identifier","format":"uuid","type":"string"},"skipCache":{"description":"When true, skip the cached scan result and force a fresh OPA evaluation","type":"boolean"}},"required":["registryId","artifacts"],"type":"object"},"ArtifactScanInputV3":{"description":"Artifact to be scanned","properties":{"packageName":{"description":"Name of the package","type":"string"},"version":{"description":"Version of the package","type":"string"}},"required":["packageName","version"],"type":"object"},"ArtifactScanDetailsV3":{"description":"Artifact scans details","properties":{"buildDetails":{"$ref":"#/components/schemas/BuildDetailsV3"},"createdAt":{"type":"string"},"exemptionStatus":{"$ref":"#/components/schemas/ExemptionStatusV3"},"fixVersionDetails":{"$ref":"#/components/schemas/FixVersionDetailsV3"},"id":{"description":"Unique identifier for this artifact scan details","format":"uuid","type":"string"},"lastEvaluatedAt":{"type":"string"},"packageName":{"description":"Package name","type":"string"},"packageType":{"$ref":"#/components/schemas/PackageTypeV3"},"parentRegistryId":{"description":"Parent virtual registry UUID","format":"uuid","type":"string"},"parentRegistryName":{"description":"Parent virtual registry name","type":"string"},"parentRegistryOrgId":{"description":"Parent registry organization identifier","type":"string"},"parentRegistryProjectId":{"description":"Parent registry project identifier","type":"string"},"policySetFailureDetails":{"items":{"$ref":"#/components/schemas/PolicySetFailureDetailV3"},"type":"array"},"purl":{"description":"Package URL (PURL) identifying the package version","type":"string"},"registryId":{"description":"Registry ID","format":"uuid","type":"string"},"registryName":{"description":"Registry name","type":"string"},"registryOrgId":{"description":"Organization identifier of the registry","type":"string"},"registryProjectId":{"description":"Project identifier of the registry","type":"string"},"rootPackages":{"description":"Unique set of root packages (name@version) impacted by this scan","items":{"description":"Root package with name and version (e.g. name@version)","type":"string"},"type":"array","uniqueItems":true},"scanStatus":{"description":"Scan status","enum":["BLOCKED","WARN"],"type":"string"},"version":{"description":"Version","type":"string"},"versionId":{"description":"Version","format":"uuid","type":"string"}},"required":["id","packageType","packageName","version","registryName","registry_id","parentRegistryId","parentRegistryName","policySetFailureDetails","scanStatus","buildDetails","rootPackages","purl"],"type":"object"},"BuildDetailsV3":{"description":"List of build detail entries containing pipeline and package info.\n","items":{"$ref":"#/components/schemas/BuildDetailEntryV3"},"type":"array"},"BuildDetailEntryV3":{"description":"Build detail entry for a single scan.","properties":{"lastExecutionTime":{"description":"Epoch time (seconds) of the latest execution.","format":"int64","type":"integer"},"latestExecutionId":{"description":"Latest execution identifier.","type":"string"},"pipelineId":{"description":"Pipeline identifier.","type":"string"},"rootPackage":{"description":"Root package identifier in name@version format.","type":"string"},"stageId":{"description":"Stage identifier.","type":"string"},"stepId":{"description":"Step identifier.","type":"string"}},"required":["pipelineId","package","latestExecutionId","lastExecutionTime","stageId","rootPackage"],"type":"object"},"ExemptionStatusV3":{"description":"Exemption status for an artifact, showing if an exception exists.","properties":{"createdAt":{"$ref":"#/components/schemas/CreatedAtMsV3"},"expirationAt":{"$ref":"#/components/schemas/CreatedAtMsV3"},"id":{"description":"Firewall exception ID for navigation to the exception detail.","format":"uuid","type":"string"},"status":{"description":"Current status of the exception.","enum":["PENDING","APPROVED","REJECTED","EXPIRED"],"type":"string"}},"required":["id","status","createdAt"],"type":"object"},"CreatedAtMsV3":{"description":"Unix timestamp in milliseconds when the resource was created","format":"int64","nullable":true,"type":"integer"},"FixVersionDetailsV3":{"description":"Fix version Details","properties":{"currentVersion":{"description":"The current version","type":"string"},"fixVersion":{"description":"The fix version","type":"string"},"fixVersionAvailable":{"description":"Fix version available or not","type":"boolean"}},"required":["fixVersionAvailable","currentVersion"],"type":"object"},"PackageTypeV3":{"description":"Package type. Known values include: DOCKER, MAVEN, PYTHON, GENERIC, HELM, HELM_HTTP, NUGET, NPM, RPM, CARGO, COMPOSER, GO, HUGGINGFACE, CONDA, DART, SWIFT, PUPPET, RUBY, RAW, DEBIAN, CONAN, TERRAFORM, CRAN, WOLFI, ALPINE. This field is extensible; clients must handle unknown values.\n","type":"string"},"PolicySetFailureDetailV3":{"description":"Policy set failure detail entry.","properties":{"policyFailureDetails":{"items":{"$ref":"#/components/schemas/PolicyFailureDetailV3"},"type":"array"},"policySetName":{"description":"Policy set name.","type":"string"},"policySetRef":{"description":"Policy set reference.","type":"string"}},"required":["policySetRef","policySetName","policyFailureDetails"],"type":"object"},"PolicyFailureDetailV3":{"description":"Policy failure detail entry.","discriminator":{"mapping":{"License":"#/components/schemas/LicensePolicyFailureDetailConfigV3","MaliciousPackage":"#/components/schemas/MaliciousPackagePolicyFailureDetailConfigV3","OssRiskLevel":"#/components/schemas/OssRiskLevelPolicyFailureDetailConfigV3","PackageAge":"#/components/schemas/PackageAgeViolationPolicyFailureDetailConfigV3","Security":"#/components/schemas/SecurityPolicyFailureDetailConfigV3"},"propertyName":"category"},"oneOf":[{"$ref":"#/components/schemas/SecurityPolicyFailureDetailConfigV3"},{"$ref":"#/components/schemas/LicensePolicyFailureDetailConfigV3"},{"$ref":"#/components/schemas/MaliciousPackagePolicyFailureDetailConfigV3"},{"$ref":"#/components/schemas/PackageAgeViolationPolicyFailureDetailConfigV3"},{"$ref":"#/components/schemas/OssRiskLevelPolicyFailureDetailConfigV3"}],"properties":{"category":{"$ref":"#/components/schemas/PolicyFailureDetailCategoryV3"},"policyName":{"description":"Policy name.","type":"string"},"policyRef":{"description":"Policy Ref.","type":"string"}},"required":["category","policyName","policyRef"],"type":"object"},"SecurityPolicyFailureDetailConfigV3":{"description":"Security-specific failure detail payload.","properties":{"vulnerabilities":{"description":"List of security violations.","items":{"$ref":"#/components/schemas/SecurityPolicyFailureVulnerabilityV3"},"type":"array"}},"required":["vulnerabilities"],"type":"object"},"SecurityPolicyFailureVulnerabilityV3":{"description":"Security violation entry.","properties":{"cveId":{"description":"CVE identifier.","type":"string"},"cvssScore":{"description":"CVSS score.","format":"double","type":"number"},"cvssThreshold":{"description":"CVSS threshold.","format":"double","type":"number"}},"required":["cveId","cvssScore","cvssThreshold"],"type":"object"},"LicensePolicyFailureDetailConfigV3":{"description":"License-specific failure detail payload.","properties":{"allowedLicenses":{"description":"Allowed license list.","items":{"type":"string"},"type":"array"},"blockedLicense":{"description":"Blocked license.","type":"string"}},"required":["allowedLicenses","blockedLicense"],"type":"object"},"MaliciousPackagePolicyFailureDetailConfigV3":{"description":"Malicious package failure detail payload.","properties":{"blockedPackage":{"description":"The blocked package identifier (purl).","type":"string"},"message":{"description":"Human-readable message describing the violation.","type":"string"},"reason":{"description":"The reason the package is blocked.","type":"string"}},"required":["blockedPackage","reason","message"],"type":"object"},"PackageAgeViolationPolicyFailureDetailConfigV3":{"description":"Package age violation failure detail payload.","properties":{"packageAgeThreshold":{"description":"Package age threshold.","type":"string"},"publishedOn":{"description":"Package publish date.","type":"string"}},"required":["publishedOn","packageAgeThreshold"],"type":"object"},"OssRiskLevelPolicyFailureDetailConfigV3":{"description":"OSS risk level-specific failure detail payload.","properties":{"ossRiskLevel":{"description":"oss risk level","type":"string"},"ossRiskScore":{"description":"oss risk level","format":"double","type":"number"}},"required":["ossRiskLevel"],"type":"object"},"PolicyFailureDetailCategoryV3":{"description":"Policy failure detail category.","enum":["Security","License","MaliciousPackage","PackageAge","OssRiskLevel","Unknown"],"type":"string"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}},"responses":{"BulkScanEvaluateSyncResponseV3":{"content":{"application/json":{"schema":{"properties":{"data":{"description":"List of scan details, one per evaluated artifact","items":{"$ref":"#/components/schemas/ArtifactScanDetailsV3"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"Synchronous bulk scan evaluation response"}}}}
```

## Get bulk scan evaluation status

> Returns the status of a bulk scan evaluation

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/bulk-evaluate/{evaluation_id}":{"get":{"description":"Returns the status of a bulk scan evaluation","operationId":"GetBulkScanEvaluationStatusV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/OrgIdentifierV3"},{"$ref":"#/components/parameters/ProjectIdentifierV3"},{"$ref":"#/components/parameters/EvaluationIdParamV3"}],"responses":{"200":{"$ref":"#/components/responses/BulkScanEvaluationStatusResponseV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Get bulk scan evaluation status","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"OrgIdentifierV3":{"description":"Unique identifier for the organization within the account.\n\nExample: `default` or `engineering_org`\n","in":"query","name":"org_identifier","schema":{"type":"string"}},"ProjectIdentifierV3":{"description":"Unique identifier for the project within the organization.\n\nExample: `my_project` or `frontend_services`\n","in":"query","name":"project_identifier","schema":{"type":"string"}},"EvaluationIdParamV3":{"description":"Bulk evaluation identifier","in":"path","name":"evaluation_id","required":true,"schema":{"type":"string"}}},"responses":{"BulkScanEvaluationStatusResponseV3":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/BulkScanEvaluationStatusDataV3"}},"type":"object"}}},"description":"Bulk scan evaluation status response"}},"schemas":{"BulkScanEvaluationStatusDataV3":{"description":"Response data for bulk scan evaluation status","properties":{"error":{"description":"Error message (only present when status is failure)","nullable":true,"type":"string"},"evaluationId":{"description":"The evaluation ID","type":"string"},"scans":{"description":"List of scan results (only present when status is success)","items":{"$ref":"#/components/schemas/BulkScanResultItemV3"},"nullable":true,"type":"array"},"status":{"description":"Status of the evaluation","enum":["PENDING","PROCESSING","SUCCESS","FAILURE"],"type":"string"}},"type":"object"},"BulkScanResultItemV3":{"description":"Individual scan result item","properties":{"packageName":{"description":"Name of the package","type":"string"},"scanId":{"description":"Scan identifier","format":"uuid","type":"string"},"scanStatus":{"$ref":"#/components/schemas/ScanStatusV3"},"version":{"description":"Version of the package","type":"string"}},"type":"object"},"ScanStatusV3":{"description":"Status of an artifact scan evaluation.","enum":["ALLOWED","BLOCKED","WARN","UNKNOWN"],"type":"string"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}}}}
```

## Re-evaluate artifact scan

> Re-evaluate artifact scan

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/evaluate":{"post":{"description":"Re-evaluate artifact scan","operationId":"EvaluateArtifactScanV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"}],"requestBody":{"$ref":"#/components/requestBodies/ArtifactScanEvaluateRequestV3"},"responses":{"202":{"$ref":"#/components/responses/ArtifactScanEvaluateRequestAcceptedV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Re-evaluate artifact scan","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}}},"requestBodies":{"ArtifactScanEvaluateRequestV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArtifactScanEvaluateRequestInputV3"}}},"description":"request to re-evaluate artifact scan"}},"schemas":{"ArtifactScanEvaluateRequestInputV3":{"description":"Input for re-evaluate artifact scan.\nExactly one of scanId or versionId must be provided.\n","properties":{"scanId":{"description":"Scan identifier","type":"string"},"versionId":{"description":"Artifact version identifier","type":"string"}},"type":"object"},"ArtifactScanEvaluateRequestStatusV3":{"description":"Status of the Artifact Scan Evaluate Request","enum":["PENDING","PROCESSING","SUCCESS","FAILED"],"type":"string"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}},"responses":{"ArtifactScanEvaluateRequestAcceptedV3":{"content":{"application/json":{"schema":{"properties":{"data":{"properties":{"status":{"$ref":"#/components/schemas/ArtifactScanEvaluateRequestStatusV3"}},"required":["status"],"type":"object"}},"required":["data"],"type":"object"}}},"description":"Artifact scan evaluate request accepted for processing"}}}}
```

## List firewall exceptions

> List firewall exceptions with optional filters

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/exceptions":{"get":{"description":"List firewall exceptions with optional filters","operationId":"ListFirewallExceptionsV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/OrgIdentifierV3"},{"$ref":"#/components/parameters/ProjectIdentifierV3"},{"$ref":"#/components/parameters/FirewallExceptionStatusFilterParamV3"},{"$ref":"#/components/parameters/PackageNameFilterParamV3"},{"$ref":"#/components/parameters/VersionFilterParamV3"},{"$ref":"#/components/parameters/PackageTypeListParamV3"},{"$ref":"#/components/parameters/RegistryIdListOptionalParamV3"},{"$ref":"#/components/parameters/ExceptionIdFilterParamV3"},{"$ref":"#/components/parameters/SearchTermV3"},{"$ref":"#/components/parameters/PageNumberV3"},{"$ref":"#/components/parameters/PageSizeV3"},{"$ref":"#/components/parameters/SortV3"}],"responses":{"200":{"$ref":"#/components/responses/ListFirewallExceptionResponseV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"List firewall exceptions","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"OrgIdentifierV3":{"description":"Unique identifier for the organization within the account.\n\nExample: `default` or `engineering_org`\n","in":"query","name":"org_identifier","schema":{"type":"string"}},"ProjectIdentifierV3":{"description":"Unique identifier for the project within the organization.\n\nExample: `my_project` or `frontend_services`\n","in":"query","name":"project_identifier","schema":{"type":"string"}},"FirewallExceptionStatusFilterParamV3":{"description":"Filter by firewall exception status","in":"query","name":"status","schema":{"$ref":"#/components/schemas/FirewallExceptionStatusV3"}},"PackageNameFilterParamV3":{"description":"Filter by package name","in":"query","name":"package_name","schema":{"type":"string"}},"VersionFilterParamV3":{"description":"Filter by version","in":"query","name":"version","schema":{"type":"string"}},"PackageTypeListParamV3":{"description":"Registry Package Type","in":"query","name":"package_types","schema":{"items":{"type":"string"},"type":"array"}},"RegistryIdListOptionalParamV3":{"description":"Unique id for the registry.\nNote: This parameter should have one id if package query param is provided\n","in":"query","name":"registry_ids","schema":{"items":{"format":"uuid","type":"string"},"type":"array"}},"ExceptionIdFilterParamV3":{"description":"Filter by firewall exception ID","in":"query","name":"exception_id","schema":{"type":"string"}},"SearchTermV3":{"description":"Search term for filtering results.\n\nExample: `search_term=prod` might match keys like \"production\", \"prod-env\", etc.\n","in":"query","name":"search_term","schema":{"type":"string"}},"PageNumberV3":{"description":"The page number for pagination (0-indexed).\n\nUsed to navigate through large result sets. Combined with `size` parameter\nto control which subset of results to return.\n\nExample: `page=0` returns the first page, `page=1` returns the second page\n","in":"query","name":"page","schema":{"default":0,"format":"int64","type":"integer"}},"PageSizeV3":{"description":"The number of items to return per page.\n\nControls the page size for paginated results. \n\nExample: `size=50` returns up to 50 items per page\n","in":"query","name":"size","schema":{"default":20,"format":"int64","maximum":100,"minimum":1,"type":"integer"}},"SortV3":{"description":"The sort for the results.\nAccepted pattern: `sort_field:sort_order` where sort_field is the field name\nand sort_order is either `asc` or `desc`.\n\nExamples: `name:asc`, `modifiedAt:desc`\n","in":"query","name":"sort","schema":{"type":"string"}}},"schemas":{"FirewallExceptionStatusV3":{"description":"Status of the firewall exception","enum":["PENDING","APPROVED","REJECTED","EXPIRED"],"type":"string"},"ListFirewallExceptionsResponseBodyV3":{"allOf":[{"$ref":"#/components/schemas/PageInfoV3"},{"properties":{"items":{"items":{"$ref":"#/components/schemas/FirewallExceptionResponseV3"},"type":"array"},"meta":{"$ref":"#/components/schemas/FirewallExceptionMetaV3"}},"required":["items"],"type":"object"}]},"PageInfoV3":{"description":"Pagination metadata.\n- `page` selects which page of results to return (0 = first page).\n- `size` controls how many items are returned per page.\n- `hasMore` is true if more results exist after this page.\n","properties":{"hasMore":{"description":"True if more results exist after this page.","type":"boolean"},"page":{"description":"The current page (0-indexed)","format":"int64","type":"integer"},"size":{"description":"Number of items per page","format":"int64","type":"integer"}},"required":["page","size","hasMore"],"type":"object"},"FirewallExceptionResponseV3":{"description":"Firewall exception details","properties":{"businessJustification":{"description":"Business justification for the exception","type":"string"},"createdAt":{"description":"Unix timestamp (milliseconds) when created","format":"int64","type":"integer"},"createdBy":{"$ref":"#/components/schemas/UserInfoV3"},"exceptionId":{"description":"Unique identifier for the exception","format":"uuid","type":"string"},"expirationAt":{"description":"Unix timestamp (milliseconds) when the exception expires. Computed at approval time.","format":"int64","nullable":true,"type":"integer"},"expireAfter":{"description":"Number of days after approval when the exception expires","format":"int32","nullable":true,"type":"integer"},"notes":{"description":"Note from approver (if approved/rejected)","nullable":true,"type":"string"},"packageName":{"description":"Name of the package","type":"string"},"packageType":{"description":"type of the package","type":"string"},"registryId":{"description":"Registry identifier","type":"string"},"registryName":{"description":"Name of the registry","type":"string"},"remediationPlan":{"description":"Plan for remediation","nullable":true,"type":"string"},"status":{"$ref":"#/components/schemas/FirewallExceptionStatusV3"},"statusChangedAt":{"description":"Unix timestamp (milliseconds) when status was changed","format":"int64","nullable":true,"type":"integer"},"statusChangedBy":{"$ref":"#/components/schemas/UserInfoV3"},"updatedAt":{"description":"Unix timestamp (milliseconds) when last updated","format":"int64","type":"integer"},"updatedBy":{"$ref":"#/components/schemas/UserInfoV3"},"versionId":{"description":"Version identifier","nullable":true,"type":"string"},"versionList":{"description":"List of versions covered by exception","items":{"type":"string"},"type":"array"},"versionScanMap":{"additionalProperties":{"type":"string"},"description":"Map of version string to scan ID","nullable":true,"type":"object"}},"required":["exceptionId","registryId","packageName","packageType","versionList","businessJustification","status","createdAt","createdBy","updatedAt","updatedBy"],"type":"object"},"UserInfoV3":{"description":"Structured user information for a principal","properties":{"display_name":{"description":"Human-readable display name","type":"string"},"email":{"description":"Email address","type":"string"},"type":{"description":"Principal type (user, service, service_account)","type":"string"},"uid":{"description":"Principal unique identifier (username)","type":"string"}},"type":"object"},"FirewallExceptionMetaV3":{"description":"Metadata counts for firewall exceptions","properties":{"approvedCount":{"description":"Number of exceptions with APPROVED status (non-expired)","format":"int64","type":"integer"},"expiredCount":{"description":"Number of approved exceptions that have expired","format":"int64","type":"integer"},"pendingCount":{"description":"Number of exceptions with PENDING status","format":"int64","type":"integer"},"rejectedCount":{"description":"Number of exceptions with REJECTED status","format":"int64","type":"integer"},"totalCount":{"description":"Total number of exceptions","format":"int64","type":"integer"}},"required":["totalCount","pendingCount","approvedCount","rejectedCount","expiredCount"],"type":"object"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}},"responses":{"ListFirewallExceptionResponseV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListFirewallExceptionsResponseBodyV3"}}},"description":"Response containing list of firewall exceptions"}}}}
```

## Create a firewall exception

> Create a firewall exception for an artifact

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/exceptions":{"post":{"description":"Create a firewall exception for an artifact","operationId":"CreateFirewallExceptionV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"}],"requestBody":{"$ref":"#/components/requestBodies/FirewallExceptionCreateRequestV3"},"responses":{"201":{"$ref":"#/components/responses/FirewallExceptionCreatedV3"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Duplicate exception."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Create a firewall exception","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}}},"requestBodies":{"FirewallExceptionCreateRequestV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallExceptionCreateRequestV3"}}},"description":"Request to create a firewall exception"}},"schemas":{"FirewallExceptionCreateRequestV3":{"description":"Request to create a firewall exception","properties":{"businessJustification":{"description":"Business justification for the exception","type":"string"},"expireAfter":{"description":"Number of days after approval when the exception expires. Null means never expires.","format":"int32","nullable":true,"type":"integer"},"packageName":{"description":"Name of the package","type":"string"},"registryId":{"description":"UUID of the registry","format":"uuid","type":"string"},"remediationPlan":{"description":"Plan for remediation (optional)","nullable":true,"type":"string"},"versionList":{"description":"List of versions to except. Empty array means all versions.","items":{"type":"string"},"type":"array"}},"required":["registryId","packageName","businessJustification"],"type":"object"},"FirewallExceptionResponseV3":{"description":"Firewall exception details","properties":{"businessJustification":{"description":"Business justification for the exception","type":"string"},"createdAt":{"description":"Unix timestamp (milliseconds) when created","format":"int64","type":"integer"},"createdBy":{"$ref":"#/components/schemas/UserInfoV3"},"exceptionId":{"description":"Unique identifier for the exception","format":"uuid","type":"string"},"expirationAt":{"description":"Unix timestamp (milliseconds) when the exception expires. Computed at approval time.","format":"int64","nullable":true,"type":"integer"},"expireAfter":{"description":"Number of days after approval when the exception expires","format":"int32","nullable":true,"type":"integer"},"notes":{"description":"Note from approver (if approved/rejected)","nullable":true,"type":"string"},"packageName":{"description":"Name of the package","type":"string"},"packageType":{"description":"type of the package","type":"string"},"registryId":{"description":"Registry identifier","type":"string"},"registryName":{"description":"Name of the registry","type":"string"},"remediationPlan":{"description":"Plan for remediation","nullable":true,"type":"string"},"status":{"$ref":"#/components/schemas/FirewallExceptionStatusV3"},"statusChangedAt":{"description":"Unix timestamp (milliseconds) when status was changed","format":"int64","nullable":true,"type":"integer"},"statusChangedBy":{"$ref":"#/components/schemas/UserInfoV3"},"updatedAt":{"description":"Unix timestamp (milliseconds) when last updated","format":"int64","type":"integer"},"updatedBy":{"$ref":"#/components/schemas/UserInfoV3"},"versionId":{"description":"Version identifier","nullable":true,"type":"string"},"versionList":{"description":"List of versions covered by exception","items":{"type":"string"},"type":"array"},"versionScanMap":{"additionalProperties":{"type":"string"},"description":"Map of version string to scan ID","nullable":true,"type":"object"}},"required":["exceptionId","registryId","packageName","packageType","versionList","businessJustification","status","createdAt","createdBy","updatedAt","updatedBy"],"type":"object"},"UserInfoV3":{"description":"Structured user information for a principal","properties":{"display_name":{"description":"Human-readable display name","type":"string"},"email":{"description":"Email address","type":"string"},"type":{"description":"Principal type (user, service, service_account)","type":"string"},"uid":{"description":"Principal unique identifier (username)","type":"string"}},"type":"object"},"FirewallExceptionStatusV3":{"description":"Status of the firewall exception","enum":["PENDING","APPROVED","REJECTED","EXPIRED"],"type":"string"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}},"responses":{"FirewallExceptionCreatedV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallExceptionResponseV3"}}},"description":"Firewall exception created successfully"}}}}
```

## Update a firewall exception

> Update a firewall exception. Only allowed when status is PENDING.

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/exceptions/{id}":{"put":{"description":"Update a firewall exception. Only allowed when status is PENDING.","operationId":"UpdateFirewallExceptionV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/IdPathParamV3"}],"requestBody":{"$ref":"#/components/requestBodies/FirewallExceptionUpdateRequestV3"},"responses":{"200":{"$ref":"#/components/responses/FirewallExceptionUpdatedV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Update a firewall exception","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"IdPathParamV3":{"in":"path","name":"id","required":true,"schema":{"type":"string"}}},"requestBodies":{"FirewallExceptionUpdateRequestV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallExceptionUpdateRequestV3"}}},"description":"Request to update a firewall exception (only when status is PENDING)"}},"schemas":{"FirewallExceptionUpdateRequestV3":{"description":"Request to update a firewall exception. Only allowed when status is PENDING.","properties":{"businessJustification":{"description":"Updated business justification for the exception","type":"string"},"expireAfter":{"description":"Number of days after approval when the exception expires. Null means never expires.","format":"int32","nullable":true,"type":"integer"},"remediationPlan":{"description":"Updated plan for remediation","nullable":true,"type":"string"},"versionList":{"description":"Updated list of versions to except. Empty array means all versions.","items":{"type":"string"},"type":"array"}},"type":"object"},"FirewallExceptionResponseV3":{"description":"Firewall exception details","properties":{"businessJustification":{"description":"Business justification for the exception","type":"string"},"createdAt":{"description":"Unix timestamp (milliseconds) when created","format":"int64","type":"integer"},"createdBy":{"$ref":"#/components/schemas/UserInfoV3"},"exceptionId":{"description":"Unique identifier for the exception","format":"uuid","type":"string"},"expirationAt":{"description":"Unix timestamp (milliseconds) when the exception expires. Computed at approval time.","format":"int64","nullable":true,"type":"integer"},"expireAfter":{"description":"Number of days after approval when the exception expires","format":"int32","nullable":true,"type":"integer"},"notes":{"description":"Note from approver (if approved/rejected)","nullable":true,"type":"string"},"packageName":{"description":"Name of the package","type":"string"},"packageType":{"description":"type of the package","type":"string"},"registryId":{"description":"Registry identifier","type":"string"},"registryName":{"description":"Name of the registry","type":"string"},"remediationPlan":{"description":"Plan for remediation","nullable":true,"type":"string"},"status":{"$ref":"#/components/schemas/FirewallExceptionStatusV3"},"statusChangedAt":{"description":"Unix timestamp (milliseconds) when status was changed","format":"int64","nullable":true,"type":"integer"},"statusChangedBy":{"$ref":"#/components/schemas/UserInfoV3"},"updatedAt":{"description":"Unix timestamp (milliseconds) when last updated","format":"int64","type":"integer"},"updatedBy":{"$ref":"#/components/schemas/UserInfoV3"},"versionId":{"description":"Version identifier","nullable":true,"type":"string"},"versionList":{"description":"List of versions covered by exception","items":{"type":"string"},"type":"array"},"versionScanMap":{"additionalProperties":{"type":"string"},"description":"Map of version string to scan ID","nullable":true,"type":"object"}},"required":["exceptionId","registryId","packageName","packageType","versionList","businessJustification","status","createdAt","createdBy","updatedAt","updatedBy"],"type":"object"},"UserInfoV3":{"description":"Structured user information for a principal","properties":{"display_name":{"description":"Human-readable display name","type":"string"},"email":{"description":"Email address","type":"string"},"type":{"description":"Principal type (user, service, service_account)","type":"string"},"uid":{"description":"Principal unique identifier (username)","type":"string"}},"type":"object"},"FirewallExceptionStatusV3":{"description":"Status of the firewall exception","enum":["PENDING","APPROVED","REJECTED","EXPIRED"],"type":"string"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}},"responses":{"FirewallExceptionUpdatedV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallExceptionResponseV3"}}},"description":"Firewall exception updated successfully"}}}}
```

## Delete a firewall exception

> Delete a firewall exception by ID

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/exceptions/{id}":{"delete":{"description":"Delete a firewall exception by ID","operationId":"DeleteFirewallExceptionV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/IdPathParamV3"}],"responses":{"204":{"description":"Firewall exception deleted successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Delete a firewall exception","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"IdPathParamV3":{"in":"path","name":"id","required":true,"schema":{"type":"string"}}},"schemas":{"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}}}}
```

## Update status of a firewall exception

> Update the status of a firewall exception (approve or reject)

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/exceptions/{id}/status":{"put":{"description":"Update the status of a firewall exception (approve or reject)","operationId":"UpdateStatusFirewallExceptionV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/IdPathParamV3"}],"requestBody":{"$ref":"#/components/requestBodies/FirewallExceptionApprovalRequestV3"},"responses":{"200":{"$ref":"#/components/responses/FirewallExceptionApprovedV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"Update status of a firewall exception","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"IdPathParamV3":{"in":"path","name":"id","required":true,"schema":{"type":"string"}}},"requestBodies":{"FirewallExceptionApprovalRequestV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallExceptionApprovalRequestV3"}}},"description":"Request to approve or reject a firewall exception"}},"schemas":{"FirewallExceptionApprovalRequestV3":{"description":"Request to approve or reject a firewall exception","properties":{"notes":{"description":"Note from approver explaining the decision","nullable":true,"type":"string"},"status":{"$ref":"#/components/schemas/FirewallExceptionStatusV3"}},"required":["status"],"type":"object"},"FirewallExceptionStatusV3":{"description":"Status of the firewall exception","enum":["PENDING","APPROVED","REJECTED","EXPIRED"],"type":"string"},"FirewallExceptionResponseV3":{"description":"Firewall exception details","properties":{"businessJustification":{"description":"Business justification for the exception","type":"string"},"createdAt":{"description":"Unix timestamp (milliseconds) when created","format":"int64","type":"integer"},"createdBy":{"$ref":"#/components/schemas/UserInfoV3"},"exceptionId":{"description":"Unique identifier for the exception","format":"uuid","type":"string"},"expirationAt":{"description":"Unix timestamp (milliseconds) when the exception expires. Computed at approval time.","format":"int64","nullable":true,"type":"integer"},"expireAfter":{"description":"Number of days after approval when the exception expires","format":"int32","nullable":true,"type":"integer"},"notes":{"description":"Note from approver (if approved/rejected)","nullable":true,"type":"string"},"packageName":{"description":"Name of the package","type":"string"},"packageType":{"description":"type of the package","type":"string"},"registryId":{"description":"Registry identifier","type":"string"},"registryName":{"description":"Name of the registry","type":"string"},"remediationPlan":{"description":"Plan for remediation","nullable":true,"type":"string"},"status":{"$ref":"#/components/schemas/FirewallExceptionStatusV3"},"statusChangedAt":{"description":"Unix timestamp (milliseconds) when status was changed","format":"int64","nullable":true,"type":"integer"},"statusChangedBy":{"$ref":"#/components/schemas/UserInfoV3"},"updatedAt":{"description":"Unix timestamp (milliseconds) when last updated","format":"int64","type":"integer"},"updatedBy":{"$ref":"#/components/schemas/UserInfoV3"},"versionId":{"description":"Version identifier","nullable":true,"type":"string"},"versionList":{"description":"List of versions covered by exception","items":{"type":"string"},"type":"array"},"versionScanMap":{"additionalProperties":{"type":"string"},"description":"Map of version string to scan ID","nullable":true,"type":"object"}},"required":["exceptionId","registryId","packageName","packageType","versionList","businessJustification","status","createdAt","createdBy","updatedAt","updatedBy"],"type":"object"},"UserInfoV3":{"description":"Structured user information for a principal","properties":{"display_name":{"description":"Human-readable display name","type":"string"},"email":{"description":"Email address","type":"string"},"type":{"description":"Principal type (user, service, service_account)","type":"string"},"uid":{"description":"Principal unique identifier (username)","type":"string"}},"type":"object"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}},"responses":{"FirewallExceptionApprovedV3":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallExceptionResponseV3"}}},"description":"Firewall exception status updated successfully"}}}}
```

## List versions for firewall exceptions

> List versions for a specific package in a registry, for use when creating firewall exceptions

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"V3 firewall endpoints","name":"Registry V3 - Firewall"}],"servers":[{"url":"/api"}],"paths":{"/v3/scans/versions":{"get":{"description":"List versions for a specific package in a registry, for use when creating firewall exceptions","operationId":"ListFirewallExceptionVersionsV3","parameters":[{"$ref":"#/components/parameters/AccountIdentifierV3"},{"$ref":"#/components/parameters/RegistryIdFilterParamV3"},{"$ref":"#/components/parameters/PackageNameFilterParamV3"},{"$ref":"#/components/parameters/PageNumberV3"},{"$ref":"#/components/parameters/PageSizeV3"}],"responses":{"200":{"$ref":"#/components/responses/ListFirewallExceptionVersionsResponseV3"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorV3"}}},"description":"Error response."}},"summary":"List versions for firewall exceptions","tags":["Registry V3 - Firewall"]}}},"components":{"parameters":{"AccountIdentifierV3":{"description":"Unique identifier for the Harness account.\n","in":"query","name":"account_identifier","required":true,"schema":{"type":"string"}},"RegistryIdFilterParamV3":{"description":"Filter by registry ID","in":"query","name":"registry_id","schema":{"type":"string"}},"PackageNameFilterParamV3":{"description":"Filter by package name","in":"query","name":"package_name","schema":{"type":"string"}},"PageNumberV3":{"description":"The page number for pagination (0-indexed).\n\nUsed to navigate through large result sets. Combined with `size` parameter\nto control which subset of results to return.\n\nExample: `page=0` returns the first page, `page=1` returns the second page\n","in":"query","name":"page","schema":{"default":0,"format":"int64","type":"integer"}},"PageSizeV3":{"description":"The number of items to return per page.\n\nControls the page size for paginated results. \n\nExample: `size=50` returns up to 50 items per page\n","in":"query","name":"size","schema":{"default":20,"format":"int64","maximum":100,"minimum":1,"type":"integer"}}},"responses":{"ListFirewallExceptionVersionsResponseV3":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PageInfoV3"},{"properties":{"items":{"description":"A list of versions","items":{"type":"string"},"type":"array"}},"required":["items"],"type":"object"}]}}},"description":"Response containing list of versions for firewall exceptions"}},"schemas":{"PageInfoV3":{"description":"Pagination metadata.\n- `page` selects which page of results to return (0 = first page).\n- `size` controls how many items are returned per page.\n- `hasMore` is true if more results exist after this page.\n","properties":{"hasMore":{"description":"True if more results exist after this page.","type":"boolean"},"page":{"description":"The current page (0-indexed)","format":"int64","type":"integer"},"size":{"description":"Number of items per page","format":"int64","type":"integer"}},"required":["page","size","hasMore"],"type":"object"},"ErrorV3":{"description":"An error response","properties":{"error":{"$ref":"#/components/schemas/ApiErrorsV3"}},"required":["error"],"type":"object"},"ApiErrorsV3":{"properties":{"code":{"description":"For some errors that could be handled programmatically, a short string indicating the [error code](https://docs.stripe.com/error-codes) reported.","maxLength":5000,"type":"string"},"message":{"description":"A human-readable message providing more details about the error. These messages can be shown to users.","maxLength":40000,"type":"string"},"param":{"description":"If the error is parameter-specific, the parameter related to the error. For example, we can use this to display a message near the correct form field.","maxLength":5000,"type":"string"},"type":{"description":"The type of error returned.","enum":["INVALID_REQUEST_ERROR","AUTHENTICATION_ERROR","PERMISSION_ERROR","API_ERROR"],"type":"string"}},"required":["type"],"title":"APIErrors","type":"object"}}}}
```
