> 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/registries.md).

# Registries

APIs to create, update, list registries

## Create Registry.

> Create a Registry.

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"APIs to create, update, list registries","name":"Registries"}],"servers":[{"url":"/api"}],"paths":{"/v1/registry":{"post":{"description":"Create a Registry.","operationId":"CreateRegistry","parameters":[{"$ref":"#/components/parameters/requiredSpaceRefQueryParam"}],"requestBody":{"$ref":"#/components/requestBodies/RegistryRequest"},"responses":{"201":{"$ref":"#/components/responses/RegistryResponse"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalServerError"}},"summary":"Create Registry.","tags":["Registries"]}}},"components":{"parameters":{"requiredSpaceRefQueryParam":{"description":"Reference to the scope in which the registry exists (required for registry creation).\n\nFormat depends on the scope:\n\n- **Account-level**: `account_id/+`\n- **Organization-level**: `account_id/org/+`\n- **Project-level**: `account_id/org/project/+`\n\nThe `/+` suffix is used internally to route scoped requests.\nIt must be included **exactly as shown** in the URL.\n","in":"query","name":"space_ref","required":true,"schema":{"type":"string"}}},"requestBodies":{"RegistryRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryRequest"}}},"description":"request for create and update registry"}},"schemas":{"RegistryRequest":{"properties":{"allowedPattern":{"items":{"type":"string"},"type":"array"},"blockedPattern":{"items":{"type":"string"},"type":"array"},"cleanupPolicy":{"items":{"$ref":"#/components/schemas/CleanupPolicy"},"type":"array"},"config":{"$ref":"#/components/schemas/RegistryConfig"},"description":{"type":"string"},"identifier":{"type":"string"},"isPublic":{"type":"boolean"},"labels":{"items":{"type":"string"},"type":"array"},"packageType":{"$ref":"#/components/schemas/PackageType"},"parentRef":{"description":"Reference to the scope in which the registry exists.\n\nFormat depends on the scope:\n\n- **Account-level**: `account_id`\n- **Organization-level**: `account_id/org_id`\n- **Project-level**: `account_id/org_id/project_id`\n","type":"string"},"policyRefs":{"items":{"type":"string"},"type":"array"},"scanners":{"items":{"$ref":"#/components/schemas/Scanner"},"type":"array"}},"required":["identifier","type","packageType","isPublic","parentRef"],"type":"object"},"CleanupPolicy":{"description":"Cleanup Policy for Harness Artifact Registries","properties":{"expireDays":{"type":"integer"},"name":{"type":"string"},"packagePrefix":{"items":{"type":"string"},"type":"array"},"versionPrefix":{"items":{"type":"string"},"type":"array"}},"type":"object"},"RegistryConfig":{"description":"SubConfig specific for Virtual or Upstream Registry","discriminator":{"mapping":{"UPSTREAM":"#/components/schemas/UpstreamConfig","VIRTUAL":"#/components/schemas/VirtualConfig"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/VirtualConfig"},{"$ref":"#/components/schemas/UpstreamConfig"}],"properties":{"type":{"$ref":"#/components/schemas/RegistryType"}},"required":["type"],"type":"object"},"VirtualConfig":{"description":"Configuration for Harness Virtual Artifact Registries","properties":{"debianConfig":{"$ref":"#/components/schemas/DebianConfig"},"upstreamProxies":{"items":{"type":"string"},"type":"array"}},"type":"object"},"DebianConfig":{"description":"Debian-specific configuration, applicable only when packageType is DEBIAN.","properties":{"optionalIndexCompressionFormats":{"description":"Optional additional compression formats to generate for index/metadata files.","items":{"enum":[".xz"],"type":"string"},"type":"array"},"remoteIndexedArchitectures":{"default":["amd64","i386","arm64"],"description":"Architectures to index when building metadata from linked remote (upstream) registries.","items":{"type":"string"},"type":"array"}},"type":"object"},"UpstreamConfig":{"description":"Configuration for Harness Artifact UpstreamProxies","properties":{"auth":{"oneOf":[{"$ref":"#/components/schemas/UserPassword"},{"$ref":"#/components/schemas/Anonymous"},{"$ref":"#/components/schemas/AccessKeySecretKey"}]},"authType":{"$ref":"#/components/schemas/AuthType"},"firewallMode":{"$ref":"#/components/schemas/UpstreamProxyConfigFirewallMode"},"metadataCacheTTL":{"description":"Time-to-live in seconds for cached metadata.\n","format":"int64","maximum":604800,"minimum":0,"type":"integer"},"negativeCacheTTL":{"description":"Time-to-live in seconds for cached NOT_FOUND entries.\n","format":"int64","maximum":604800,"minimum":0,"type":"integer"},"remoteUrlSuffix":{"description":"Optional path suffix appended to the remote URL for this registry. For Python upstreams, this allows overriding the default `/simple` path used for PyPI-compatible indexes. Leading and trailing slashes are not required and will be normalized.\n","type":"string"},"source":{"enum":["Dockerhub","Custom","AwsEcr","MavenCentral","PyPi","NpmJs","NugetOrg","Crates","RubyGems","GoProxy","HuggingFace","Anaconda","Pubdev","Packagist","PuppetForge","HelmChartRepo","ConanCenter","TerraformRegistry","CRAN","Wolfi","Alpine"],"type":"string"},"url":{"type":"string"}},"required":["authType"],"type":"object"},"UserPassword":{"properties":{"secretIdentifier":{"type":"string"},"secretSpaceId":{"format":"int64","type":"integer"},"secretSpacePath":{"type":"string"},"userName":{"type":"string"}},"required":["userName"]},"Anonymous":{},"AccessKeySecretKey":{"properties":{"accessKey":{"type":"string"},"accessKeySecretIdentifier":{"type":"string"},"accessKeySecretSpaceId":{"format":"int64","type":"integer"},"accessKeySecretSpacePath":{"type":"string"},"secretKeyIdentifier":{"type":"string"},"secretKeySpaceId":{"format":"int64","type":"integer"},"secretKeySpacePath":{"type":"string"}},"required":["secretKeyIdentifier"]},"AuthType":{"description":"Authentication type","enum":["UserPassword","AccessKeySecretKey","Anonymous"],"type":"string"},"UpstreamProxyConfigFirewallMode":{"description":"Firewall mode applied to an upstream proxy.","enum":["ALLOW","ENABLED","QUARANTINE"],"type":"string"},"RegistryType":{"description":"refers to type of registry i.e virtual or upstream","discriminator":{"propertyName":"type"},"enum":["VIRTUAL","UPSTREAM"],"type":"string"},"PackageType":{"description":"refers to package","enum":["DOCKER","MAVEN","PYTHON","GENERIC","HELM","NUGET","NPM","RPM","CARGO","COMPOSER","GO","HUGGINGFACE","CONDA","DART","SWIFT","PUPPET","RUBY","CRAN","WOLFI","ALPINE","RAW","HELM_HTTP","DEBIAN","CONAN","TERRAFORM"],"type":"string"},"Scanner":{"description":"Scanner for Harness Artifact Registries","properties":{"name":{"enum":["AQUA_TRIVY","GRYPE"],"type":"string"}},"type":"object"},"Registry":{"description":"Harness Artifact Registry","properties":{"allowedPattern":{"items":{"type":"string"},"type":"array"},"blockedPattern":{"items":{"type":"string"},"type":"array"},"cleanupPolicy":{"items":{"$ref":"#/components/schemas/CleanupPolicy"},"type":"array"},"config":{"$ref":"#/components/schemas/RegistryConfig"},"createdAt":{"type":"string"},"deletedAt":{"description":"Timestamp in milliseconds when the registry was soft-deleted. Null if not deleted.","type":"string"},"description":{"type":"string"},"identifier":{"type":"string"},"isPublic":{"type":"boolean"},"labels":{"items":{"type":"string"},"type":"array"},"modifiedAt":{"type":"string"},"packageType":{"$ref":"#/components/schemas/PackageType"},"policyRefs":{"items":{"type":"string"},"type":"array"},"scanners":{"items":{"$ref":"#/components/schemas/Scanner"},"type":"array"},"url":{"type":"string"},"uuid":{"type":"string"}},"required":["name","identifier","type","url","packageType","isPublic","uuid"],"type":"object"},"Status":{"description":"Request processing status indicator","enum":["SUCCESS","FAILURE","ERROR"],"type":"string"},"Error":{"description":"Standard error response with code, message and optional details","properties":{"code":{"description":"The HTTP error code","type":"string"},"details":{"description":"Additional context and details about the error.\nMay include field-specific validation errors or debugging information.\n","type":"object"},"message":{"description":"Human-readable error message explaining what went wrong","type":"string"}},"required":["code","message"],"type":"object"}},"responses":{"RegistryResponse":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Registry"},"status":{"$ref":"#/components/schemas/Status"}},"required":["status","data"],"type":"object"}}},"description":"response for create, get and update registry"},"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request was invalid or malformed"},"Unauthenticated":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed or missing credentials"},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Access denied due to insufficient permissions"},"InternalServerError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"An unexpected server error occurred"}}}}
```

## Returns Registry Details

> Returns Registry Details in the account for the given key

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"APIs to create, update, list registries","name":"Registries"}],"servers":[{"url":"/api"}],"paths":{"/v1/registry/{registry_ref}":{"get":{"description":"Returns Registry Details in the account for the given key","operationId":"GetRegistry","parameters":[{"$ref":"#/components/parameters/registryRefPathParam"}],"responses":{"200":{"$ref":"#/components/responses/RegistryResponse"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}},"summary":"Returns Registry Details","tags":["Registries"]}}},"components":{"parameters":{"registryRefPathParam":{"description":"Reference to the scope in which the registry exists.\n\nFormat depends on the scope:\n\n- **Account-level**: `account_id/registry_name/+`\n- **Organization-level**: `account_id/org_id/registry_name/+`\n- **Project-level**: `account_id/org_id/project_id/registry_name/+`\n\nThe `/+` suffix is used internally to route scoped requests.\nIt must be included **exactly as shown** in the URL.\n","in":"path","name":"registry_ref","required":true,"schema":{"type":"string"}}},"responses":{"RegistryResponse":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Registry"},"status":{"$ref":"#/components/schemas/Status"}},"required":["status","data"],"type":"object"}}},"description":"response for create, get and update registry"},"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request was invalid or malformed"},"Unauthenticated":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed or missing credentials"},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Access denied due to insufficient permissions"},"NotFound":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The requested resource was not found"},"InternalServerError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"An unexpected server error occurred"}},"schemas":{"Registry":{"description":"Harness Artifact Registry","properties":{"allowedPattern":{"items":{"type":"string"},"type":"array"},"blockedPattern":{"items":{"type":"string"},"type":"array"},"cleanupPolicy":{"items":{"$ref":"#/components/schemas/CleanupPolicy"},"type":"array"},"config":{"$ref":"#/components/schemas/RegistryConfig"},"createdAt":{"type":"string"},"deletedAt":{"description":"Timestamp in milliseconds when the registry was soft-deleted. Null if not deleted.","type":"string"},"description":{"type":"string"},"identifier":{"type":"string"},"isPublic":{"type":"boolean"},"labels":{"items":{"type":"string"},"type":"array"},"modifiedAt":{"type":"string"},"packageType":{"$ref":"#/components/schemas/PackageType"},"policyRefs":{"items":{"type":"string"},"type":"array"},"scanners":{"items":{"$ref":"#/components/schemas/Scanner"},"type":"array"},"url":{"type":"string"},"uuid":{"type":"string"}},"required":["name","identifier","type","url","packageType","isPublic","uuid"],"type":"object"},"CleanupPolicy":{"description":"Cleanup Policy for Harness Artifact Registries","properties":{"expireDays":{"type":"integer"},"name":{"type":"string"},"packagePrefix":{"items":{"type":"string"},"type":"array"},"versionPrefix":{"items":{"type":"string"},"type":"array"}},"type":"object"},"RegistryConfig":{"description":"SubConfig specific for Virtual or Upstream Registry","discriminator":{"mapping":{"UPSTREAM":"#/components/schemas/UpstreamConfig","VIRTUAL":"#/components/schemas/VirtualConfig"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/VirtualConfig"},{"$ref":"#/components/schemas/UpstreamConfig"}],"properties":{"type":{"$ref":"#/components/schemas/RegistryType"}},"required":["type"],"type":"object"},"VirtualConfig":{"description":"Configuration for Harness Virtual Artifact Registries","properties":{"debianConfig":{"$ref":"#/components/schemas/DebianConfig"},"upstreamProxies":{"items":{"type":"string"},"type":"array"}},"type":"object"},"DebianConfig":{"description":"Debian-specific configuration, applicable only when packageType is DEBIAN.","properties":{"optionalIndexCompressionFormats":{"description":"Optional additional compression formats to generate for index/metadata files.","items":{"enum":[".xz"],"type":"string"},"type":"array"},"remoteIndexedArchitectures":{"default":["amd64","i386","arm64"],"description":"Architectures to index when building metadata from linked remote (upstream) registries.","items":{"type":"string"},"type":"array"}},"type":"object"},"UpstreamConfig":{"description":"Configuration for Harness Artifact UpstreamProxies","properties":{"auth":{"oneOf":[{"$ref":"#/components/schemas/UserPassword"},{"$ref":"#/components/schemas/Anonymous"},{"$ref":"#/components/schemas/AccessKeySecretKey"}]},"authType":{"$ref":"#/components/schemas/AuthType"},"firewallMode":{"$ref":"#/components/schemas/UpstreamProxyConfigFirewallMode"},"metadataCacheTTL":{"description":"Time-to-live in seconds for cached metadata.\n","format":"int64","maximum":604800,"minimum":0,"type":"integer"},"negativeCacheTTL":{"description":"Time-to-live in seconds for cached NOT_FOUND entries.\n","format":"int64","maximum":604800,"minimum":0,"type":"integer"},"remoteUrlSuffix":{"description":"Optional path suffix appended to the remote URL for this registry. For Python upstreams, this allows overriding the default `/simple` path used for PyPI-compatible indexes. Leading and trailing slashes are not required and will be normalized.\n","type":"string"},"source":{"enum":["Dockerhub","Custom","AwsEcr","MavenCentral","PyPi","NpmJs","NugetOrg","Crates","RubyGems","GoProxy","HuggingFace","Anaconda","Pubdev","Packagist","PuppetForge","HelmChartRepo","ConanCenter","TerraformRegistry","CRAN","Wolfi","Alpine"],"type":"string"},"url":{"type":"string"}},"required":["authType"],"type":"object"},"UserPassword":{"properties":{"secretIdentifier":{"type":"string"},"secretSpaceId":{"format":"int64","type":"integer"},"secretSpacePath":{"type":"string"},"userName":{"type":"string"}},"required":["userName"]},"Anonymous":{},"AccessKeySecretKey":{"properties":{"accessKey":{"type":"string"},"accessKeySecretIdentifier":{"type":"string"},"accessKeySecretSpaceId":{"format":"int64","type":"integer"},"accessKeySecretSpacePath":{"type":"string"},"secretKeyIdentifier":{"type":"string"},"secretKeySpaceId":{"format":"int64","type":"integer"},"secretKeySpacePath":{"type":"string"}},"required":["secretKeyIdentifier"]},"AuthType":{"description":"Authentication type","enum":["UserPassword","AccessKeySecretKey","Anonymous"],"type":"string"},"UpstreamProxyConfigFirewallMode":{"description":"Firewall mode applied to an upstream proxy.","enum":["ALLOW","ENABLED","QUARANTINE"],"type":"string"},"RegistryType":{"description":"refers to type of registry i.e virtual or upstream","discriminator":{"propertyName":"type"},"enum":["VIRTUAL","UPSTREAM"],"type":"string"},"PackageType":{"description":"refers to package","enum":["DOCKER","MAVEN","PYTHON","GENERIC","HELM","NUGET","NPM","RPM","CARGO","COMPOSER","GO","HUGGINGFACE","CONDA","DART","SWIFT","PUPPET","RUBY","CRAN","WOLFI","ALPINE","RAW","HELM_HTTP","DEBIAN","CONAN","TERRAFORM"],"type":"string"},"Scanner":{"description":"Scanner for Harness Artifact Registries","properties":{"name":{"enum":["AQUA_TRIVY","GRYPE"],"type":"string"}},"type":"object"},"Status":{"description":"Request processing status indicator","enum":["SUCCESS","FAILURE","ERROR"],"type":"string"},"Error":{"description":"Standard error response with code, message and optional details","properties":{"code":{"description":"The HTTP error code","type":"string"},"details":{"description":"Additional context and details about the error.\nMay include field-specific validation errors or debugging information.\n","type":"object"},"message":{"description":"Human-readable error message explaining what went wrong","type":"string"}},"required":["code","message"],"type":"object"}}}}
```

## Updates a Registry

> Updates a Registry in the account for the given key

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"APIs to create, update, list registries","name":"Registries"}],"servers":[{"url":"/api"}],"paths":{"/v1/registry/{registry_ref}":{"put":{"description":"Updates a Registry in the account for the given key","operationId":"ModifyRegistry","parameters":[{"$ref":"#/components/parameters/registryRefPathParam"}],"requestBody":{"$ref":"#/components/requestBodies/RegistryRequest"},"responses":{"200":{"$ref":"#/components/responses/RegistryResponse"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}},"summary":"Updates a Registry","tags":["Registries"]}}},"components":{"parameters":{"registryRefPathParam":{"description":"Reference to the scope in which the registry exists.\n\nFormat depends on the scope:\n\n- **Account-level**: `account_id/registry_name/+`\n- **Organization-level**: `account_id/org_id/registry_name/+`\n- **Project-level**: `account_id/org_id/project_id/registry_name/+`\n\nThe `/+` suffix is used internally to route scoped requests.\nIt must be included **exactly as shown** in the URL.\n","in":"path","name":"registry_ref","required":true,"schema":{"type":"string"}}},"requestBodies":{"RegistryRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryRequest"}}},"description":"request for create and update registry"}},"schemas":{"RegistryRequest":{"properties":{"allowedPattern":{"items":{"type":"string"},"type":"array"},"blockedPattern":{"items":{"type":"string"},"type":"array"},"cleanupPolicy":{"items":{"$ref":"#/components/schemas/CleanupPolicy"},"type":"array"},"config":{"$ref":"#/components/schemas/RegistryConfig"},"description":{"type":"string"},"identifier":{"type":"string"},"isPublic":{"type":"boolean"},"labels":{"items":{"type":"string"},"type":"array"},"packageType":{"$ref":"#/components/schemas/PackageType"},"parentRef":{"description":"Reference to the scope in which the registry exists.\n\nFormat depends on the scope:\n\n- **Account-level**: `account_id`\n- **Organization-level**: `account_id/org_id`\n- **Project-level**: `account_id/org_id/project_id`\n","type":"string"},"policyRefs":{"items":{"type":"string"},"type":"array"},"scanners":{"items":{"$ref":"#/components/schemas/Scanner"},"type":"array"}},"required":["identifier","type","packageType","isPublic","parentRef"],"type":"object"},"CleanupPolicy":{"description":"Cleanup Policy for Harness Artifact Registries","properties":{"expireDays":{"type":"integer"},"name":{"type":"string"},"packagePrefix":{"items":{"type":"string"},"type":"array"},"versionPrefix":{"items":{"type":"string"},"type":"array"}},"type":"object"},"RegistryConfig":{"description":"SubConfig specific for Virtual or Upstream Registry","discriminator":{"mapping":{"UPSTREAM":"#/components/schemas/UpstreamConfig","VIRTUAL":"#/components/schemas/VirtualConfig"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/VirtualConfig"},{"$ref":"#/components/schemas/UpstreamConfig"}],"properties":{"type":{"$ref":"#/components/schemas/RegistryType"}},"required":["type"],"type":"object"},"VirtualConfig":{"description":"Configuration for Harness Virtual Artifact Registries","properties":{"debianConfig":{"$ref":"#/components/schemas/DebianConfig"},"upstreamProxies":{"items":{"type":"string"},"type":"array"}},"type":"object"},"DebianConfig":{"description":"Debian-specific configuration, applicable only when packageType is DEBIAN.","properties":{"optionalIndexCompressionFormats":{"description":"Optional additional compression formats to generate for index/metadata files.","items":{"enum":[".xz"],"type":"string"},"type":"array"},"remoteIndexedArchitectures":{"default":["amd64","i386","arm64"],"description":"Architectures to index when building metadata from linked remote (upstream) registries.","items":{"type":"string"},"type":"array"}},"type":"object"},"UpstreamConfig":{"description":"Configuration for Harness Artifact UpstreamProxies","properties":{"auth":{"oneOf":[{"$ref":"#/components/schemas/UserPassword"},{"$ref":"#/components/schemas/Anonymous"},{"$ref":"#/components/schemas/AccessKeySecretKey"}]},"authType":{"$ref":"#/components/schemas/AuthType"},"firewallMode":{"$ref":"#/components/schemas/UpstreamProxyConfigFirewallMode"},"metadataCacheTTL":{"description":"Time-to-live in seconds for cached metadata.\n","format":"int64","maximum":604800,"minimum":0,"type":"integer"},"negativeCacheTTL":{"description":"Time-to-live in seconds for cached NOT_FOUND entries.\n","format":"int64","maximum":604800,"minimum":0,"type":"integer"},"remoteUrlSuffix":{"description":"Optional path suffix appended to the remote URL for this registry. For Python upstreams, this allows overriding the default `/simple` path used for PyPI-compatible indexes. Leading and trailing slashes are not required and will be normalized.\n","type":"string"},"source":{"enum":["Dockerhub","Custom","AwsEcr","MavenCentral","PyPi","NpmJs","NugetOrg","Crates","RubyGems","GoProxy","HuggingFace","Anaconda","Pubdev","Packagist","PuppetForge","HelmChartRepo","ConanCenter","TerraformRegistry","CRAN","Wolfi","Alpine"],"type":"string"},"url":{"type":"string"}},"required":["authType"],"type":"object"},"UserPassword":{"properties":{"secretIdentifier":{"type":"string"},"secretSpaceId":{"format":"int64","type":"integer"},"secretSpacePath":{"type":"string"},"userName":{"type":"string"}},"required":["userName"]},"Anonymous":{},"AccessKeySecretKey":{"properties":{"accessKey":{"type":"string"},"accessKeySecretIdentifier":{"type":"string"},"accessKeySecretSpaceId":{"format":"int64","type":"integer"},"accessKeySecretSpacePath":{"type":"string"},"secretKeyIdentifier":{"type":"string"},"secretKeySpaceId":{"format":"int64","type":"integer"},"secretKeySpacePath":{"type":"string"}},"required":["secretKeyIdentifier"]},"AuthType":{"description":"Authentication type","enum":["UserPassword","AccessKeySecretKey","Anonymous"],"type":"string"},"UpstreamProxyConfigFirewallMode":{"description":"Firewall mode applied to an upstream proxy.","enum":["ALLOW","ENABLED","QUARANTINE"],"type":"string"},"RegistryType":{"description":"refers to type of registry i.e virtual or upstream","discriminator":{"propertyName":"type"},"enum":["VIRTUAL","UPSTREAM"],"type":"string"},"PackageType":{"description":"refers to package","enum":["DOCKER","MAVEN","PYTHON","GENERIC","HELM","NUGET","NPM","RPM","CARGO","COMPOSER","GO","HUGGINGFACE","CONDA","DART","SWIFT","PUPPET","RUBY","CRAN","WOLFI","ALPINE","RAW","HELM_HTTP","DEBIAN","CONAN","TERRAFORM"],"type":"string"},"Scanner":{"description":"Scanner for Harness Artifact Registries","properties":{"name":{"enum":["AQUA_TRIVY","GRYPE"],"type":"string"}},"type":"object"},"Registry":{"description":"Harness Artifact Registry","properties":{"allowedPattern":{"items":{"type":"string"},"type":"array"},"blockedPattern":{"items":{"type":"string"},"type":"array"},"cleanupPolicy":{"items":{"$ref":"#/components/schemas/CleanupPolicy"},"type":"array"},"config":{"$ref":"#/components/schemas/RegistryConfig"},"createdAt":{"type":"string"},"deletedAt":{"description":"Timestamp in milliseconds when the registry was soft-deleted. Null if not deleted.","type":"string"},"description":{"type":"string"},"identifier":{"type":"string"},"isPublic":{"type":"boolean"},"labels":{"items":{"type":"string"},"type":"array"},"modifiedAt":{"type":"string"},"packageType":{"$ref":"#/components/schemas/PackageType"},"policyRefs":{"items":{"type":"string"},"type":"array"},"scanners":{"items":{"$ref":"#/components/schemas/Scanner"},"type":"array"},"url":{"type":"string"},"uuid":{"type":"string"}},"required":["name","identifier","type","url","packageType","isPublic","uuid"],"type":"object"},"Status":{"description":"Request processing status indicator","enum":["SUCCESS","FAILURE","ERROR"],"type":"string"},"Error":{"description":"Standard error response with code, message and optional details","properties":{"code":{"description":"The HTTP error code","type":"string"},"details":{"description":"Additional context and details about the error.\nMay include field-specific validation errors or debugging information.\n","type":"object"},"message":{"description":"Human-readable error message explaining what went wrong","type":"string"}},"required":["code","message"],"type":"object"}},"responses":{"RegistryResponse":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/Registry"},"status":{"$ref":"#/components/schemas/Status"}},"required":["status","data"],"type":"object"}}},"description":"response for create, get and update registry"},"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request was invalid or malformed"},"Unauthenticated":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed or missing credentials"},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Access denied due to insufficient permissions"},"NotFound":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The requested resource was not found"},"InternalServerError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"An unexpected server error occurred"}}}}
```

## Delete a Registry

> Delete a Registry in the account for the given key

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"APIs to create, update, list registries","name":"Registries"}],"servers":[{"url":"/api"}],"paths":{"/v1/registry/{registry_ref}":{"delete":{"description":"Delete a Registry in the account for the given key","operationId":"DeleteRegistry","parameters":[{"$ref":"#/components/parameters/registryRefPathParam"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}},"summary":"Delete a Registry","tags":["Registries"]}}},"components":{"parameters":{"registryRefPathParam":{"description":"Reference to the scope in which the registry exists.\n\nFormat depends on the scope:\n\n- **Account-level**: `account_id/registry_name/+`\n- **Organization-level**: `account_id/org_id/registry_name/+`\n- **Project-level**: `account_id/org_id/project_id/registry_name/+`\n\nThe `/+` suffix is used internally to route scoped requests.\nIt must be included **exactly as shown** in the URL.\n","in":"path","name":"registry_ref","required":true,"schema":{"type":"string"}}},"responses":{"Success":{"content":{"application/json":{"schema":{"properties":{"status":{"$ref":"#/components/schemas/Status"}},"required":["status"],"type":"object"}}},"description":"Generic success response"},"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request was invalid or malformed"},"Unauthenticated":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed or missing credentials"},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Access denied due to insufficient permissions"},"NotFound":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The requested resource was not found"},"InternalServerError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"An unexpected server error occurred"}},"schemas":{"Status":{"description":"Request processing status indicator","enum":["SUCCESS","FAILURE","ERROR"],"type":"string"},"Error":{"description":"Standard error response with code, message and optional details","properties":{"code":{"description":"The HTTP error code","type":"string"},"details":{"description":"Additional context and details about the error.\nMay include field-specific validation errors or debugging information.\n","type":"object"},"message":{"description":"Human-readable error message explaining what went wrong","type":"string"}},"required":["code","message"],"type":"object"}}}}
```

## List Artifacts for Registry

> Lists all the Artifacts for Registry

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"APIs to create, update, list registries","name":"Registries"}],"servers":[{"url":"/api"}],"paths":{"/v1/registry/{registry_ref}/artifacts":{"get":{"description":"Lists all the Artifacts for Registry","operationId":"GetAllArtifactsByRegistry","parameters":[{"$ref":"#/components/parameters/registryRefPathParam"},{"$ref":"#/components/parameters/LabelsParam"},{"$ref":"#/components/parameters/pageNumber"},{"$ref":"#/components/parameters/pageSize"},{"$ref":"#/components/parameters/sortOrder"},{"$ref":"#/components/parameters/sortField"},{"$ref":"#/components/parameters/searchTerm"},{"$ref":"#/components/parameters/artifactTypeParam"}],"responses":{"200":{"$ref":"#/components/responses/ListRegistryArtifactResponse"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}},"summary":"List Artifacts for Registry","tags":["Registries"]}}},"components":{"parameters":{"registryRefPathParam":{"description":"Reference to the scope in which the registry exists.\n\nFormat depends on the scope:\n\n- **Account-level**: `account_id/registry_name/+`\n- **Organization-level**: `account_id/org_id/registry_name/+`\n- **Project-level**: `account_id/org_id/project_id/registry_name/+`\n\nThe `/+` suffix is used internally to route scoped requests.\nIt must be included **exactly as shown** in the URL.\n","in":"path","name":"registry_ref","required":true,"schema":{"type":"string"}},"LabelsParam":{"description":"Label.","in":"query","name":"label","schema":{"items":{"type":"string"},"type":"array"}},"pageNumber":{"description":"Current page number","in":"query","name":"page","schema":{"default":1,"format":"int64","type":"integer"}},"pageSize":{"description":"Number of items per page","in":"query","name":"size","schema":{"default":20,"format":"int64","type":"integer"}},"sortOrder":{"description":"sortOrder","in":"query","name":"sort_order","schema":{"type":"string"}},"sortField":{"description":"sortField","in":"query","name":"sort_field","schema":{"type":"string"}},"searchTerm":{"description":"search Term.","in":"query","name":"search_term","schema":{"type":"string"}},"artifactTypeParam":{"description":"artifact type.","in":"query","name":"artifact_type","schema":{"enum":["model","dataset","module","provider"],"type":"string"}}},"responses":{"ListRegistryArtifactResponse":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/ListRegistryArtifact"},"status":{"$ref":"#/components/schemas/Status"}},"required":["status","data"],"type":"object"}}},"description":"response for list artifact"},"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request was invalid or malformed"},"Unauthenticated":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed or missing credentials"},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Access denied due to insufficient permissions"},"NotFound":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The requested resource was not found"},"InternalServerError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"An unexpected server error occurred"}},"schemas":{"ListRegistryArtifact":{"description":"A list of Artifacts","properties":{"artifacts":{"description":"A list of Artifact","items":{"$ref":"#/components/schemas/RegistryArtifactMetadata"},"type":"array"},"itemCount":{"description":"The total number of items","format":"int64","type":"integer"},"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":["artifacts"],"type":"object"},"RegistryArtifactMetadata":{"description":"Artifact Metadata","properties":{"artifactType":{"$ref":"#/components/schemas/ArtifactType"},"deletedAt":{"description":"Timestamp in milliseconds when the registry was soft-deleted","type":"string"},"downloadsCount":{"format":"int64","type":"integer"},"isPublic":{"type":"boolean"},"isQuarantined":{"type":"boolean"},"labels":{"items":{"type":"string"},"type":"array"},"lastModified":{"type":"string"},"latestVersion":{"type":"string"},"name":{"type":"string"},"packageType":{"$ref":"#/components/schemas/PackageType"},"registryIdentifier":{"type":"string"},"registryPath":{"type":"string"},"registryUUID":{"type":"string"},"uuid":{"type":"string"}},"required":["name","registryIdentifier","latestVersion","registryPath","packageType","isPublic","uuid","registryUUID"],"type":"object"},"ArtifactType":{"description":"refers to artifact type","enum":["model","dataset","module","provider"],"type":"string"},"PackageType":{"description":"refers to package","enum":["DOCKER","MAVEN","PYTHON","GENERIC","HELM","NUGET","NPM","RPM","CARGO","COMPOSER","GO","HUGGINGFACE","CONDA","DART","SWIFT","PUPPET","RUBY","CRAN","WOLFI","ALPINE","RAW","HELM_HTTP","DEBIAN","CONAN","TERRAFORM"],"type":"string"},"Status":{"description":"Request processing status indicator","enum":["SUCCESS","FAILURE","ERROR"],"type":"string"},"Error":{"description":"Standard error response with code, message and optional details","properties":{"code":{"description":"The HTTP error code","type":"string"},"details":{"description":"Additional context and details about the error.\nMay include field-specific validation errors or debugging information.\n","type":"object"},"message":{"description":"Human-readable error message explaining what went wrong","type":"string"}},"required":["code","message"],"type":"object"}}}}
```

## Returns CLI Client Setup Details

> Returns CLI Client Setup Details based on package type

```json
{"openapi":"3.0.0","info":{"title":"Harness Artifact Registry API","version":"1.0.0"},"tags":[{"description":"APIs to create, update, list registries","name":"Registries"}],"servers":[{"url":"/api"}],"paths":{"/v1/registry/{registry_ref}/client-setup-details":{"get":{"description":"Returns CLI Client Setup Details based on package type","operationId":"GetClientSetupDetails","parameters":[{"$ref":"#/components/parameters/registryRefPathParam"},{"$ref":"#/components/parameters/artifactParam"},{"$ref":"#/components/parameters/versionParam"},{"$ref":"#/components/parameters/artifactTypeParam"}],"responses":{"200":{"$ref":"#/components/responses/ClientSetupDetailsResponse"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}},"summary":"Returns CLI Client Setup Details","tags":["Registries"]}}},"components":{"parameters":{"registryRefPathParam":{"description":"Reference to the scope in which the registry exists.\n\nFormat depends on the scope:\n\n- **Account-level**: `account_id/registry_name/+`\n- **Organization-level**: `account_id/org_id/registry_name/+`\n- **Project-level**: `account_id/org_id/project_id/registry_name/+`\n\nThe `/+` suffix is used internally to route scoped requests.\nIt must be included **exactly as shown** in the URL.\n","in":"path","name":"registry_ref","required":true,"schema":{"type":"string"}},"artifactParam":{"description":"Artifat","in":"query","name":"artifact","schema":{"type":"string"}},"versionParam":{"description":"Version","in":"query","name":"version","schema":{"type":"string"}},"artifactTypeParam":{"description":"artifact type.","in":"query","name":"artifact_type","schema":{"enum":["model","dataset","module","provider"],"type":"string"}}},"responses":{"ClientSetupDetailsResponse":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/ClientSetupDetails"},"status":{"$ref":"#/components/schemas/Status"}},"required":["status","data"],"type":"object"}}},"description":"response for client setup details"},"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request was invalid or malformed"},"Unauthenticated":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed or missing credentials"},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Access denied due to insufficient permissions"},"NotFound":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The requested resource was not found"},"InternalServerError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"An unexpected server error occurred"}},"schemas":{"ClientSetupDetails":{"description":"Client Setup Details","properties":{"mainHeader":{"type":"string"},"secHeader":{"type":"string"},"sections":{"items":{"$ref":"#/components/schemas/ClientSetupSection"},"type":"array"}},"required":["mainHeader","secHeader","sections"],"type":"object"},"ClientSetupSection":{"description":"Client Setup Section","discriminator":{"mapping":{"INLINE":"#/components/schemas/ClientSetupStepConfig","TABS":"#/components/schemas/TabSetupStepConfig"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/ClientSetupStepConfig"},{"$ref":"#/components/schemas/TabSetupStepConfig"}],"properties":{"header":{"type":"string"},"secHeader":{"type":"string"},"type":{"$ref":"#/components/schemas/SectionType"}},"required":["type"],"type":"object"},"ClientSetupStepConfig":{"description":"Client Setup Step","properties":{"steps":{"items":{"$ref":"#/components/schemas/ClientSetupStep"},"type":"array"}},"type":"object"},"ClientSetupStep":{"description":"Client Setup Step","properties":{"commands":{"items":{"$ref":"#/components/schemas/ClientSetupStepCommand"},"type":"array"},"header":{"type":"string"},"type":{"$ref":"#/components/schemas/ClientSetupStepType"}},"type":"object"},"ClientSetupStepCommand":{"description":"Client Setup Step Command","properties":{"label":{"type":"string"},"value":{"type":"string"}},"type":"object"},"ClientSetupStepType":{"description":"ClientSetupStepType type","enum":["Static","GenerateToken"],"type":"string"},"TabSetupStepConfig":{"description":"Tab Setup step config","properties":{"tabs":{"items":{"$ref":"#/components/schemas/TabSetupStep"},"type":"array"}},"type":"object"},"TabSetupStep":{"description":"Tab Setup step","properties":{"header":{"type":"string"},"sections":{"items":{"$ref":"#/components/schemas/ClientSetupSection"},"type":"array"}},"type":"object"},"SectionType":{"description":"refers to client setup section type","discriminator":{"propertyName":"type"},"enum":["INLINE","TABS"],"type":"string"},"Status":{"description":"Request processing status indicator","enum":["SUCCESS","FAILURE","ERROR"],"type":"string"},"Error":{"description":"Standard error response with code, message and optional details","properties":{"code":{"description":"The HTTP error code","type":"string"},"details":{"description":"Additional context and details about the error.\nMay include field-specific validation errors or debugging information.\n","type":"object"},"message":{"description":"Human-readable error message explaining what went wrong","type":"string"}},"required":["code","message"],"type":"object"}}}}
```
