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

# Create a ngc-api-key.

POST http://localhost:8080/api/v1/asset/credentials/ngc-api-key
Content-Type: application/json

Use to create a ngc-api-key asset.

Reference: https://docs.nvidia.com/run-ai/self-hosted/reference/rest-api/endpoints/workload-assets/credentials/create-ngc-api-key

## Authentication

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

## Request

### Body (application/json)

This endpoint expects a NgcApiKeyCreationRequest.

- `meta` (AssetCreationRequest, required)
- `spec` (NgcApiKeyCreationSpec, required)

## Response

### 202

Request accepted successfully.

- `meta` (AssetMeta, required)
- `spec` (NgcApiKeySpec, required)
- `usedBy` (AssetUsageInfo, optional) — Details about resources that use the asset.
- `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

### 400 Bad Request Error

Bad request.

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

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

### 409 Conflict Error

The specified resource already exists

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

### AssetCreationRequest

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

### NgcApiKeyCreationSpec

- `ngc_api_key` (string, optional) — The NGC API key value.

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

### NgcApiKeySpec

- `keyId` (integer, required) — id of the encryption key which has been used to encrypt an asset's data.
- `ngc_api_key` (string, optional) — The NGC API key value.

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

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

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

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

**Request**

```json
{
  "meta": {
    "name": "my-asset",
    "scope": "tenant",
    "workloadSupportedTypes": {
      "inference": false,
      "workspace": false,
      "training": false,
      "distributed": true,
      "distFramework": "TF"
    }
  }
}
```

**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": {
    "keyId": 1,
    "ngc_api_key": "string"
  },
  "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"
          }
        }
      ]
    }
  },
  "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/credentials/ngc-api-key"

payload = { "meta": {
        "name": "my-asset",
        "scope": "tenant",
        "workloadSupportedTypes": {
            "inference": False,
            "workspace": False,
            "training": False,
            "distributed": True,
            "distFramework": "TF"
        }
    } }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'http://localhost:8080/api/v1/asset/credentials/ngc-api-key';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"meta":{"name":"my-asset","scope":"tenant","workloadSupportedTypes":{"inference":false,"workspace":false,"training":false,"distributed":true,"distFramework":"TF"}}}'
};

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"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "http://localhost:8080/api/v1/asset/credentials/ngc-api-key"

	payload := strings.NewReader("{\n  \"meta\": {\n    \"name\": \"my-asset\",\n    \"scope\": \"tenant\",\n    \"workloadSupportedTypes\": {\n      \"inference\": false,\n      \"workspace\": false,\n      \"training\": false,\n      \"distributed\": true,\n      \"distFramework\": \"TF\"\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	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/credentials/ngc-api-key")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meta\": {\n    \"name\": \"my-asset\",\n    \"scope\": \"tenant\",\n    \"workloadSupportedTypes\": {\n      \"inference\": false,\n      \"workspace\": false,\n      \"training\": false,\n      \"distributed\": true,\n      \"distFramework\": \"TF\"\n    }\n  }\n}"

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.post("http://localhost:8080/api/v1/asset/credentials/ngc-api-key")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meta\": {\n    \"name\": \"my-asset\",\n    \"scope\": \"tenant\",\n    \"workloadSupportedTypes\": {\n      \"inference\": false,\n      \"workspace\": false,\n      \"training\": false,\n      \"distributed\": true,\n      \"distFramework\": \"TF\"\n    }\n  }\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'http://localhost:8080/api/v1/asset/credentials/ngc-api-key', [
  'body' => '{
  "meta": {
    "name": "my-asset",
    "scope": "tenant",
    "workloadSupportedTypes": {
      "inference": false,
      "workspace": false,
      "training": false,
      "distributed": true,
      "distFramework": "TF"
    }
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("http://localhost:8080/api/v1/asset/credentials/ngc-api-key");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meta\": {\n    \"name\": \"my-asset\",\n    \"scope\": \"tenant\",\n    \"workloadSupportedTypes\": {\n      \"inference\": false,\n      \"workspace\": false,\n      \"training\": false,\n      \"distributed\": true,\n      \"distFramework\": \"TF\"\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["meta": [
    "name": "my-asset",
    "scope": "tenant",
    "workloadSupportedTypes": [
      "inference": false,
      "workspace": false,
      "training": false,
      "distributed": true,
      "distFramework": "TF"
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "http://localhost:8080/api/v1/asset/credentials/ngc-api-key")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```