> This page is for Self-Hosted, version v3.0 (default).
> For other versions, use one of these documentation indexes:
> - v3.0 (default): https://docs.nvidia.com/run-ai/self-hosted/v3.0/llms.txt
> - v2.26: https://docs.nvidia.com/run-ai/self-hosted/v2.26/llms.txt
> - v2.25: https://docs.nvidia.com/run-ai/self-hosted/v2.25/llms.txt
> - v2.24: https://docs.nvidia.com/run-ai/self-hosted/v2.24/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/run-ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/run-ai/_mcp/server.

# Get a registry.

GET http://localhost:8080/api/v1/asset/registries/{AssetId}

Retrieve a registry asset by id.

Reference: https://docs.nvidia.com/run-ai/self-hosted/reference/rest-api/endpoints/workload-assets/registry/get-registry-by-id

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication

## Request

### Path parameters

- `AssetId` (string, required) — Unique identifier of the asset.

## Response

### 200

Request completed successfully.

- `meta` (AssetMeta, required)
- `spec` (RegistrySpec, required)

## Errors

### 401 Unauthorized Error

Unauthorized

- `code` (integer, required)
- `message` (string, required)
- `details` (string, optional)

### 403 Forbidden Error

Forbidden

- `code` (integer, required)
- `message` (string, required)
- `details` (string, optional)

### 404 Not Found Error

The specified resource was not found

- `code` (integer, required)
- `message` (string, required)
- `details` (string, optional)

### 503 Service Unavailable Error

unexpected error

- `code` (integer, required)
- `message` (string, required)
- `details` (string, optional)

## Types

### AssetMeta

- `name` (string, required) — The name of the asset.
- `scope` (enum, required) — The scope in which an asset can be used. The highest scope, system, is intended for internal purposes only.
  - Allowed values: `system`, `tenant`, `cluster`, `department`, `project`
- `id` (string, required) — Unique identifier of the asset.
- `kind` (enum, required) — The kind of the asset.
  - Allowed values: `compute`, `environment`, `accessKey`, `dockerRegistry`, `password`, `genericSecret`, `registry`, `s3`, `git`, `nfs`, `pvc`, `hostPath`, `workload-template`, `model`, `config-map`, `secret-volume`, `data-volume`, `ngcApiKey`
- `createdBy` (string, required) — The user who created the asset.
- `createdAt` (datetime, required) — The time at which the asset were created
- `updatedBy` (string, required) — The user who updated the asset.
- `updatedAt` (datetime, required) — The time at which the asset has been updated
- `description` (string, optional) — The description of the asset.
- `clusterId` (string, optional) — The id of the cluster.
- `departmentId` (string, optional, nullable) — The id of the department. Must be specified for department scoped assets.
- `projectId` (integer, optional, nullable) — The id of the project. Must be specified for project scoped assets.
- `autoDelete` (boolean, optional, nullable, default: false) — The asset will be deleted automatically. This is intended for internal use.
- `workloadSupportedTypes` (WorkloadSupportedTypes, optional)
- `private` (boolean, optional, nullable, default: false) — The asset will be private to the user who created it. supported only for docker registry and generic secrets
- `tenantId` (integer, optional, nullable) — The id of the tenant.
- `deletedAt` (datetime, optional) — Deletion time of the asset (relevant for assets that sync to the cluster)
- `deletedBy` (string, optional) — The user who deleted the asset
- `projectName` (string, optional, nullable) — The name of the project that the asset is associated with, for project scoped assets.
- `updateCount` (long, optional) — the value of an update counter of a data in the system.

### RegistrySpec

- `url` (string, required) — The registry base url.
- `credentialKind` (enum, required) — The kind of credential used.
  - Allowed values: `password`
- `user` (string, required) — The name of the user.
- `password` (string, required) — The password.

### WorkloadSupportedTypes

- `inference` (boolean, optional, nullable) — Is inference a supported workload type.
- `workspace` (boolean, optional, nullable) — Is workspace a supported workload type.
- `training` (boolean, optional, nullable) — Is training a supported workload type.
- `distributed` (boolean, optional, nullable) — Is distributed a supported workload type.
- `distFramework` (enum, optional, nullable) — The distributed training framework used in the workload. Note: The TF, XGBoost and JAX frameworks are deprecated and will be removed in a future release.
  - Allowed values: `MPI`, `PyTorch`, `TF`, `XGBoost`, `JAX`

## Examples

**Response**

```json
{
  "meta": {
    "name": "my-asset",
    "scope": "tenant",
    "id": "a418ed33-9399-48c0-a890-122cadd13bfd",
    "kind": "s3",
    "createdBy": "test@run.ai",
    "createdAt": "2023-02-23T14:25:36.707685Z",
    "updatedBy": "test@run.ai",
    "updatedAt": "2023-02-23T14:25:36.707685Z",
    "workloadSupportedTypes": {
      "workspace": false,
      "training": false,
      "distributed": true,
      "distFramework": "TF"
    }
  },
  "spec": {
    "url": "https://hub.docker.com/",
    "credentialKind": "password",
    "user": "admin",
    "password": "12345678"
  }
}
```

**SDK Code**

```python
import requests

url = "http://localhost:8080/api/v1/asset/registries/AssetId"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'http://localhost:8080/api/v1/asset/registries/AssetId';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "http://localhost:8080/api/v1/asset/registries/AssetId"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("http://localhost:8080/api/v1/asset/registries/AssetId")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("http://localhost:8080/api/v1/asset/registries/AssetId")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'http://localhost:8080/api/v1/asset/registries/AssetId', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("http://localhost:8080/api/v1/asset/registries/AssetId");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "http://localhost:8080/api/v1/asset/registries/AssetId")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```