> 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 PVC asset.

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

Retrieve the details of a PVC datasource asset by id.

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

## Authentication

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

## Request

### Path parameters

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

### Query parameters

- `usageInfo` (boolean, optional) — Whether the query should include asset usage information as part of the response.
- `complyToProject` (integer, optional) — Include workload creation compliance information of an asset, for a given project, as part of the response. To check compliance, you need to provide both project id and workload type.
- `complyToWorkloadType` (enum, optional) — Include workload creation compliance information of an asset, for a given workload type, as part of the response. To check compliance, you need to provide both project id and workload type.
  - Allowed values: `Workspace`, `Training`, `Distributed`, `Inference`, `DistributedInference`
- `statusInfo` (boolean, optional) — Whether the query should include asset status information as part of the response.
- `complyToReplicaType` (enum, optional) — Include workload creation compliance information of an asset, for a given replica type, as part of the response. To check compliance, you need to provide both project id and workload type. For distributed, replica type should be provided as well.
  - Allowed values: `Worker`, `Master`, `Leader`

## Response

### 200

Request completed successfully.

- `meta` (AssetMeta, required)
- `spec` (PVCAssetSpec, required)
- `usedBy` (AssetUsageInfo, optional) — Details about resources that use the asset.
- `usageTimes` (UsageTimesInfo, optional) — Details about times the asset has been used by workloads, etc.
- `compliance` (ComplianceInfo, optional) — Compliance of an asset with creation of workloads in a given project.
- `status` (AssetClusterStatusInfo, optional)
- `clusterInfo` (ClusterInfo, optional) — Cluster related information of the asset.

## 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.

### PVCAssetSpec

- `path` (string, optional, nullable) — Local path within the workload to which the PVC bucket will be mapped. (mandatory)
- `existingPvc` (boolean, optional, nullable, default: false) — Verify existing PVC. PVC is assumed to exist when set to `true`. If set to `false`, the PVC will be created, if it does not exist. Cannot be set to `true` when `dataSharing` is `true`.
- `claimName` (string, optional, nullable) — Name for the PVC. Allow referencing it across workloads. If not provided, a name based on the workload name and scope will be auto-generated.
- `readOnly` (boolean, optional, nullable, default: false) — Permit only read access to PVC.
- `ephemeral` (boolean, optional, nullable, default: false) — Use `true` to set PVC to ephemeral. If set to `true`, the PVC will be deleted when the workload is stopped. Not supported for inference workloads.
- `claimInfo` (ClaimInfo, optional) — Claim information for the newly created PVC. The information should not be provided when attempting to use existing PVC.
- `dataSharing` (boolean, optional, nullable, default: false) — Use `true` to share the PVC data to all projects under the selected scope. Cannot be set to `true` when `existingPvc` is `true`.

### AssetUsageInfo

Details about resources that use the asset.

- `workspaces` (list of WorkloadRefAndStatus, optional) — workspaces that rely on this asset.
- `trainings` (list of WorkloadRefAndStatus, optional) — trainings that rely on this asset.
- `distributed` (list of WorkloadRefAndStatus, optional) — distributed trainings that rely on this asset.
- `inferences` (list of WorkloadRefAndStatus, optional) — inferences that rely on this asset.
- `templates` (list of AssetRef, optional) — templates that rely on this asset.
- `assets` (AssetsUsageRef, optional) — list of other assets that use this asset. specifically, accessKeys used by s3, and passwords used by git.

### UsageTimesInfo

Details about times the asset has been used by workloads, etc.

- `lastUsedByWorkload` (datetime, optional, nullable) — The time at which the asset were last used by a workload of given type and project. This field requires complyToProject and complyToWorkload types flags of the API, to specify the workload type and project id.

### ComplianceInfo

Compliance of an asset with creation of workloads in a given project.

- `imposed` (boolean, optional) — Whether the asset is imposed on created workloads by the administrator.
- `compliance` (boolean, optional) — Whether the asset info complies with creation of workloads in the project.
- `reason` (list of ComplianceInfoReason, optional) — For asset that does not comply, specify one or more reason why.

### AssetClusterStatusInfo

- `status` (enum, optional)
  - Allowed values: `Creating`, `Deleting`, `Failed`, `Deletion failed`, `Issues found`, `No issues found`, `No status`, `Updating`
- `issues` (list of AssetClusterStatusIssue, optional)
- `message` (string, optional)
- `url` (string, optional)

### ClusterInfo

Cluster related information of the asset.

- `resources` (list of ClusterResourceInfo, optional)

### 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`

### ClaimInfo

Claim information for the newly created PVC. The information should not be provided when attempting to use existing PVC.

- `size` (string, optional) — Requested size for the PVC. Mandatory when existingPvc is false. Recommended sizes: TB/GB/MB/TIB/GIB/MIB
- `storageClass` (string, optional, nullable) — Storage class name to associate with the PVC. This parameter may be omitted if there is a single storage class in the system, or you are using the default storage class. For more information, see [Storage class](https://kubernetes.io/docs/concepts/storage/storage-classes).
- `accessModes` (PvcAccessModes, optional) — Default access mode(s) applied to newly created PVCs unless explicitly overridden.
- `volumeMode` (enum, optional) — Default volume mode for the PVC. Choose between Filesystem (default) or Block.
  - Allowed values: `Filesystem`, `Block`
- `addedAttrValues` (list of PvcAddedAttrValue, optional) — an optional array of key-values pairs that are written as annotations on the created PVC. the allowed attributes are determined according to the storage class configuration (see k8s-objects-tracker for further info).

### WorkloadRefAndStatus

Id, name and status of a workspace or training

- `id` (string, required) — A unique ID of the workload.
- `name` (string, required) — The name of the workload.
- `status` (string, optional) — The status of the workspace or training.

### AssetRef

Reference information about an asset.

- `id` (string, required) — Unique identifier of the asset.
- `name` (string, required) — The name of the asset.

### AssetsUsageRef

Reference information about usage of assets by other assets, for example datasources that uses credentials.

- `environment` (EnvironmentAssetRef, optional, nullable) — environment asset.
- `environments` (list of AssetRef, optional)
- `compute` (AssetsUsageRefCompute, optional)
- `computes` (list of AssetRef, optional)
- `datasources` (list of AssetDatasourceRef, optional)

### ComplianceInfoReason

An issue preventing the use of a template or asset for creating workloads in a given project.

- `details` (string, required) — Explanation of the issue.
- `field` (string, optional, nullable) — For policy related issues, includes a json path to the field in the policy for which the issue applies.
- `rule` (enum, optional) — Indicates which validation rule (e.g., min, max, step, options, required, canEdit, canAdd) conflicted with policy restrictions, causing the asset or template to be rejected.
  - Allowed values: `min`, `max`, `step`, `options`, `required`, `canEdit`, `canAdd`, `locked`, `blocked`

### AssetClusterStatusIssue

- `scopeId` (string, required) — The id of the cluster, department or project, depending on the scope type.
- `scopeType` (enum, required)
  - Allowed values: `system`, `tenant`, `cluster`, `department`, `project`
- `issue` (enum, required)
  - Allowed values: `ReplicationError`, `LostPhase`, `NotCreated`

### ClusterResourceInfo

- `name` (string, optional, nullable) — The name of the resource created for the asset in the cluster.

### PvcAccessModes

Default access mode(s) applied to newly created PVCs unless explicitly overridden.

- `readWriteOnce` (boolean, optional, nullable, default: true) — Mount the volume as read/write by a single node.
- `readOnlyMany` (boolean, optional, nullable, default: false) — Mount the volume as read-only by many nodes.
- `readWriteMany` (boolean, optional, nullable, default: false) — Mount the volume as read/write by many nodes.

### PvcAddedAttrValue

- `key` (string, required)
- `value` (string, optional)

### EnvironmentAssetRef

Reference information about environment asset.

- `id` (string, required) — Unique identifier of the asset.
- `name` (string, required) — The name of the asset.
- `toolTypes` (list of enum, optional, nullable) — the type of tools as defined in the connections of the environment asset.
  - Allowed values: `jupyter-notebook`, `pycharm`, `visual-studio-code`, `tensorboard`, `rstudio`, `mlflow`, `custom`, `wandb`, `matlab`, `comet`, `chatbot-ui`

### AssetsUsageRefCompute

- `id` (string, required) — Unique identifier of the asset.
- `name` (string, required) — The name of the asset.

### AssetDatasourceRef

Reference information about a datasource asset.

- `id` (string, required) — Unique identifier of the asset.
- `name` (string, required) — The name 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`
- `overrides` (DataSourceOverrides, optional) — specific fields to override in the data source.

### DataSourceOverrides

specific fields to override in the data source.

- `containerPath` (string, optional, nullable)

## 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": {
    "path": "/container/my-claim",
    "existingPvc": false,
    "claimName": "my-claim",
    "readOnly": false,
    "ephemeral": false,
    "claimInfo": {
      "size": "1G",
      "storageClass": "my-storage-class",
      "accessModes": {
        "readWriteOnce": true,
        "readOnlyMany": false,
        "readWriteMany": false
      },
      "volumeMode": "Filesystem",
      "addedAttrValues": [
        {
          "key": "dnsname",
          "value": "my.dns.com"
        }
      ]
    },
    "dataSharing": false
  },
  "usedBy": {
    "workspaces": [
      {
        "id": "string",
        "name": "my-workload-name",
        "status": "string"
      }
    ],
    "trainings": [
      {
        "id": "string",
        "name": "my-workload-name",
        "status": "string"
      }
    ],
    "distributed": [
      {
        "id": "string",
        "name": "my-workload-name",
        "status": "string"
      }
    ],
    "inferences": [
      {
        "id": "string",
        "name": "my-workload-name",
        "status": "string"
      }
    ],
    "templates": [
      {
        "id": "string",
        "name": "my-asset"
      }
    ],
    "assets": {
      "environment": {
        "id": "string",
        "name": "my-asset",
        "toolTypes": [
          "jupyter-notebook"
        ]
      },
      "environments": [
        {
          "id": "string",
          "name": "my-asset"
        }
      ],
      "compute": {
        "id": "string",
        "name": "my-asset"
      },
      "computes": [
        {
          "id": "string",
          "name": "my-asset"
        }
      ],
      "datasources": [
        {
          "id": "string",
          "name": "my-asset",
          "kind": "compute",
          "overrides": {
            "containerPath": "/container/directory"
          }
        }
      ]
    }
  },
  "usageTimes": {
    "lastUsedByWorkload": "2024-01-15T09:30:00Z"
  },
  "compliance": {
    "imposed": true,
    "compliance": true,
    "reason": [
      {
        "details": "string",
        "field": "string",
        "rule": "min"
      }
    ]
  },
  "status": {
    "status": "Creating",
    "issues": [
      {
        "scopeId": "string",
        "scopeType": "system",
        "issue": "ReplicationError"
      }
    ],
    "message": "string",
    "url": "string"
  },
  "clusterInfo": {
    "resources": [
      {
        "name": "password-credential-1"
      }
    ]
  }
}
```

**SDK Code**

```python
import requests

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

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

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

print(response.json())
```

```javascript
const url = 'http://localhost:8080/api/v1/asset/datasource/pvc/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/datasource/pvc/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/datasource/pvc/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/datasource/pvc/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/datasource/pvc/AssetId', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("http://localhost:8080/api/v1/asset/datasource/pvc/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/datasource/pvc/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()
```