NVIDIA Run:ai Clusters API
Use these endpoints to create, manage and delete NVIDIA Run:ai Kubernetes clusters.
Use these endpoints to create, manage and delete NVIDIA Run:ai Kubernetes clusters.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/runai-clusters-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
version: latest
description: '# Introduction
The NVIDIA Run:ai Control-Plane API reference is a guide that provides an easy-to-use programming interface for adding various tasks to your application, including workload submission, resource management, and administrative operations.
NVIDIA Run:ai APIs are accessed using *bearer tokens*. To obtain a token, you need to create a **Service account** through the NVIDIA Run:ai user interface.
To create a service account, in your UI, go to Access → Service Accounts (for organization-level service accounts) or User settings → Access Keys (for user access keys), and create a new one.
After you have created a new service account, you will need to assign it access rules.
To assign access rules to the service account, see [Create access rules](https://run-ai-docs.nvidia.com/saas/infrastructure-setup/authentication/accessrules#create-or-delete-rules).
Make sure you assign the correct rules to your service account. Use the [Roles](https://run-ai-docs.nvidia.com/saas/infrastructure-setup/authentication/roles) to assign the correct access rules.
To get your access token, follow the instructions in [Request a token](https://run-ai-docs.nvidia.com/saas/reference/api/rest-auth/#request-an-api-token).
'
title: NVIDIA Run:ai Access Keys Clusters API
x-logo:
url: https://api.redocly.com/registry/raw/runai-xq8/saas/latest/public/runai-logo-api.png
altText: NVIDIA Run:ai
href: https://run.ai
license:
name: NVIDIA Run:ai
url: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-software-license-agreement/
servers:
- url: https://app.run.ai
security:
- bearerAuth: []
tags:
- name: Clusters
description: Use these endpoints to create, manage and delete NVIDIA Run:ai Kubernetes clusters.
paths:
/api/v1/clusters:
get:
summary: Get a list of clusters.
description: Retrieve a list of clusters with details.
operationId: get_clusters
tags:
- Clusters
parameters:
- $ref: '#/components/parameters/QueryVerbosity'
- $ref: '#/components/parameters/QueryIncludeRequestedForDelete'
responses:
'200':
description: Executed successfully.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/DisplayedCluster'
'401':
$ref: '#/components/responses/401Unauthorized'
'403':
$ref: '#/components/responses/403Forbidden'
'404':
$ref: '#/components/responses/404NotFound'
'500':
$ref: '#/components/responses/500InternalServerError'
'503':
$ref: '#/components/responses/503ServiceUnavailable'
post:
summary: Create a cluster.
description: Use to create a Kubernetes cluster.
operationId: create_cluster
tags:
- Clusters
requestBody:
description: The cluster to create.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClusterCreationRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/DisplayedCluster'
'401':
$ref: '#/components/responses/401Unauthorized'
'403':
$ref: '#/components/responses/403Forbidden'
'404':
$ref: '#/components/responses/404NotFound'
'500':
$ref: '#/components/responses/500InternalServerError'
'503':
$ref: '#/components/responses/503ServiceUnavailable'
/api/v1/clusters/{clusterUuid}:
get:
summary: Get cluster by id.
description: Retrieve cluster details by Universally Unique Identifier (UUID).
operationId: get_cluster_by_uuid
tags:
- Clusters
parameters:
- $ref: '#/components/parameters/ClusterUuid'
- $ref: '#/components/parameters/QueryVerbosity'
responses:
'200':
description: Executed successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/DisplayedCluster'
'401':
$ref: '#/components/responses/401Unauthorized'
'403':
$ref: '#/components/responses/403Forbidden'
'404':
$ref: '#/components/responses/404NotFound'
'500':
$ref: '#/components/responses/500InternalServerError'
'503':
$ref: '#/components/responses/503ServiceUnavailable'
delete:
summary: Delete a cluster by id.
description: "Use to delete a cluster by Universally Unique Identifier (UUID). \nWill return 202 for success if this api was called on a cluster that its version is >=2.20, \nand force query param is false or not provided.\nWill return 204 for success if force query param is true, or if cluster is in a version < 2.20\n"
operationId: delete_cluster
tags:
- Clusters
parameters:
- $ref: '#/components/parameters/ClusterUuid'
- $ref: '#/components/parameters/QueryForceDelete'
responses:
'202':
$ref: '#/components/responses/202Accepted'
'204':
$ref: '#/components/responses/204NoContent'
'401':
$ref: '#/components/responses/401Unauthorized'
'403':
$ref: '#/components/responses/403Forbidden'
'500':
$ref: '#/components/responses/500InternalServerError'
'503':
$ref: '#/components/responses/503ServiceUnavailable'
put:
summary: Update a cluster by id.
description: Use to update the details of a Kubernetes cluster by Universally Unique Identifier (UUID).
operationId: updateCluster
tags:
- Clusters
parameters:
- $ref: '#/components/parameters/ClusterUuid'
requestBody:
description: The cluster details to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClusterUpdateRequest'
responses:
'204':
$ref: '#/components/responses/204NoContent'
'400':
$ref: '#/components/responses/400BadRequest'
'401':
$ref: '#/components/responses/401Unauthorized'
'403':
$ref: '#/components/responses/403Forbidden'
'500':
$ref: '#/components/responses/500InternalServerError'
'503':
$ref: '#/components/responses/503ServiceUnavailable'
/api/v1/clusters/{clusterUuid}/metrics:
get:
summary: Get the cluster metrics data.
description: Retrieve the metrics data for a Kubernetes cluster by Universally Unique Identifier (UUID).
operationId: get_cluster_metrics
tags:
- Clusters
parameters:
- $ref: '#/components/parameters/ClusterUuid'
- $ref: '#/components/parameters/StartRequired'
- $ref: '#/components/parameters/EndRequired'
- $ref: '#/components/parameters/NumberOfSamples'
- $ref: '#/components/parameters/MetricsType'
- $ref: '#/components/parameters/ClusterMetricsGroupBy'
- $ref: '#/components/parameters/FilterByNodepoolName'
responses:
'200':
description: Executed successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/GroupedMetricsResponse'
text/csv: {}
'207':
description: Partial success.
content:
application/json:
schema:
$ref: '#/components/schemas/GroupedMetricsResponse'
'400':
$ref: '#/components/responses/400BadRequest'
'401':
$ref: '#/components/responses/401Unauthorized'
'403':
$ref: '#/components/responses/403Forbidden'
'404':
$ref: '#/components/responses/404NotFound'
'422':
$ref: '#/components/responses/422UnprocessableEntity'
'500':
$ref: '#/components/responses/500InternalServerError'
'503':
$ref: '#/components/responses/503ServiceUnavailable'
/api/v1/clusters/{clusterUuid}/cluster-install-info:
get:
summary: Retrieve the installation instructions of a cluster by ID.
description: "Use to retrieve installation instruction for a cluster by Universally Unique Identifier (UUID). \nSupports clusters version 2.15 or above.\n"
operationId: get_cluster_install_info_by_uuid
tags:
- Clusters
parameters:
- $ref: '#/components/parameters/ClusterUuid'
- $ref: '#/components/parameters/ClusterVersion'
- $ref: '#/components/parameters/ClusterRemoteURL'
responses:
'200':
description: Executed successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/ClusterInstallationInfoResponse'
'401':
$ref: '#/components/responses/401Unauthorized'
'403':
$ref: '#/components/responses/403Forbidden'
'404':
$ref: '#/components/responses/404NotFound'
'500':
$ref: '#/components/responses/500InternalServerError'
'503':
$ref: '#/components/responses/503ServiceUnavailable'
/v1/k8s/clusters/{cluster_uuid}/installfile:
get:
tags:
- Clusters
summary: Get cluster installation file by id.
description: "Retrieve the installation values file of a cluster by Retrieve the installation values file of a given cluster by ID. \nSupports clusters 2.13 and lower.\n"
operationId: getInstallFile
parameters:
- name: cluster_uuid
in: path
required: true
description: Unique identifier of the cluster.
schema:
type: string
format: uuid
- in: query
name: cloud
description: Cloud type identifier.
schema:
type: string
enum:
- gke
- aws
- aks
- op
- airgapped
- openshift
- in: query
name: clusterip
description: Comma-separated list of IP addresses that provide access to the cluster.
schema:
type: string
- in: query
name: format
description: Format of the output file.
schema:
type: string
enum:
- json
- yaml
default: yaml
responses:
'200':
$ref: '#/components/responses/OK'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v1/k8s/clusters/{clusterUuid}/metrics:
get:
tags:
- Clusters
summary: Get cluster metrics.
operationId: getClusterMetrics
deprecated: true
description: Get current cluster metrics. If time range query parameters supplied, then historical data will be returned as well. Deprecated - please use api/v1/clusters/{clusterUuid}/metrics
parameters:
- $ref: '#/components/parameters/ClusterUuid'
- $ref: '#/components/parameters/Start'
- $ref: '#/components/parameters/End'
- $ref: '#/components/parameters/NumberOfSamples'
- $ref: '#/components/parameters/NodepoolName'
responses:
'200':
description: A Clusters metrics
content:
application/json:
schema:
$ref: '#/components/schemas/cluster'
'401':
$ref: '#/components/responses/401Unauthorized'
'403':
$ref: '#/components/responses/403Forbidden'
'404':
$ref: '#/components/responses/404NotFound'
'500':
$ref: '#/components/responses/500InternalServerError'
'503':
$ref: '#/components/responses/503ServiceUnavailable'
components:
responses:
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
OK:
description: OK
content:
application/json:
schema:
type: string
format: text
400BadRequest:
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 400
message: Required parameter is missing
403Forbidden:
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 403
message: You do not have sufficient permissions.
202Accepted:
description: Accepted.
content:
application/json:
schema:
$ref: '#/components/schemas/HttpResponse'
example:
code: 202
message: Request has been accepted.
503ServiceUnavailable:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 503
message: Please try again in few minutes.
422UnprocessableEntity:
description: Unprocessable entity - The request was well-formed but contains semantic errors.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 422
message: Validation failed - Invalid workload configuration
401Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 401
message: Issuer is not familiar.
500InternalServerError:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 500
message: Something went wrong.
NotFound:
description: The specified resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error1'
404NotFound:
description: The specified resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 404
message: Resource id not found.
204NoContent:
description: No Content.
schemas:
GroupedMeasurementResponse:
type: object
required:
- type
- values
properties:
type:
type: string
description: specifies what data returned
example: ALLOCATED_GPU
labels:
type:
- object
- 'null'
description: labels of the metric measurement
example: '{''gpu'': ''3''}'
additionalProperties:
type: string
values:
type:
- array
- 'null'
items:
type: object
required:
- value
- timestamp
properties:
value:
type: string
example: '85'
timestamp:
type:
- string
- 'null'
format: date-time
example: '2023-06-06 12:09:18.211'
groups:
type: array
description: Group information for this measurement
items:
$ref: '#/components/schemas/GroupedMeasurementGroup'
ClusterUpdateRequest:
type: object
required:
- name
properties:
name:
type: string
ClusterReportedConfig:
description: Holds cluster configuration values.
type:
- object
- 'null'
properties:
workloadOwnershipProtection:
type:
- boolean
- 'null'
description: indicates if the cluster workload ownership protection is enabled
example: false
subdomainEnabled:
type:
- boolean
- 'null'
description: indicates if the cluster subdomain is enabled
example: false
ingressClass:
type:
- string
- 'null'
description: the ingress class that is configured for the cluster
example: nginx
ClusterId:
description: The id of the cluster.
type: string
format: uuid
example: 71f69d83-ba66-4822-adf5-55ce55efd210
ClusterInstallationInfoResponse:
type: object
required:
- installationStr
- repositoryName
- chartRepoURL
- clientSecret
properties:
installationStr:
type: string
repositoryName:
type: string
chartRepoURL:
type: string
clientSecret:
type: string
example:
installationStr: helm update --update repo/runai-cluster -n runai --set cluster.url=test_cluster
repositoryName: runai
chartRepoURL: https://runai.jfrog.io/artifactory/charts
clientSecret: ABC333DDD
GroupedMeasurementGroup:
type: object
required:
- key
- value
properties:
key:
type: string
example: Nodepool
description: The grouping key
value:
type: string
example: gpu-pool-1
description: The grouping value
DepartmentName:
type: string
example: default
ClusterDisplayedStatus:
type:
- object
- 'null'
description: The cluster's displayed status.
allOf:
- $ref: '#/components/schemas/ClusterReportedStatus'
- type: object
properties:
state:
$ref: '#/components/schemas/ClusterState'
ClusterName:
type: string
example: cluster-a
ResourcesDataOvertime:
allOf:
- $ref: '#/components/schemas/ResourcesData'
- type: object
required:
- timestamp
properties:
timestamp:
type: string
format: date-time
example: '2023-06-06T12:09:18.211Z'
TenantId:
description: The id of the tenant.
type: integer
format: int32
example: 1001
ClusterState:
type: string
description: The cluster's state.
enum:
- WaitingToConnect
- Connected
- Disconnected
- MissingPrerequisites
- ServiceIssues
- Unknown
cluster:
type: object
required:
- metadata
- current
properties:
metadata:
type: object
required:
- clusterId
- clusterName
properties:
clusterId:
$ref: '#/components/schemas/ClusterId'
clusterName:
$ref: '#/components/schemas/ClusterName'
current:
type: object
description: Current reported metrics data. resources holds data that is summed up to the cluster level and projectResources explains the division of it to projects
required:
- resources
- projectResources
properties:
resources:
type: array
items:
allOf:
- $ref: '#/components/schemas/ResourcesData'
- type: object
required:
- nodepoolName
properties:
nodepoolName:
$ref: '#/components/schemas/NodepoolName'
projectResources:
type: array
items:
allOf:
- $ref: '#/components/schemas/ResourcesData'
- type: object
required:
- projectName
- departmentName
- nodepoolName
properties:
projectName:
$ref: '#/components/schemas/ProjectName1'
departmentName:
$ref: '#/components/schemas/DepartmentName'
nodepoolName:
$ref: '#/components/schemas/nodepoolName'
timeRange:
$ref: '#/components/schemas/TimeRange'
DisplayedCluster:
type: object
required:
- uuid
- tenantId
- name
- createdAt
properties:
uuid:
type: string
format: uuid
tenantId:
$ref: '#/components/schemas/TenantId'
name:
type: string
createdAt:
type: string
format: date-time
domain:
type:
- string
- 'null'
version:
type:
- string
- 'null'
status:
$ref: '#/components/schemas/ClusterDisplayedStatus'
updatedAt:
type:
- string
- 'null'
format: date-time
deletedAt:
type:
- string
- 'null'
format: date-time
lastLiveness:
type:
- string
- 'null'
format: date-time
deleteRequestedAt:
description: the timestamp value of when the cluster deletion request was received
type:
- string
- 'null'
format: date-time
example:
uuid: A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
name: example
tenantId: 1001
domain: my.company.com
status: {}
createdAt: '2020-01-01T00:00:00Z'
updatedAt: '2020-01-02T00:00:00Z'
lastLiveness: '2020-01-02T00:00:00Z'
version: 2.15.0
ProjectName1:
type: string
example: project-a
Error1:
required:
- code
- message
properties:
code:
type: integer
format: int32
message:
type: string
ClusterReportedStatus:
type: object
description: the cluster status reported by the cluster
properties:
conditions:
items:
description: Condition contains details for one aspect of the current state of this API Resource
properties:
lastTransitionTime:
description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
format: date-time
type: string
message:
description: message is a human readable message indicating details about the transition. This may be an empty string.
maxLength: 32768
type: string
observedGeneration:
description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
format: int64
minimum: 0
type: integer
reason:
description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
description: status of the condition, one of True, False, Unknown.
enum:
- 'True'
- 'False'
- Unknown
type: string
type:
description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
maxLength: 316
type: string
required:
- lastTransitionTime
- message
- reason
- status
- type
type: object
type: array
operands:
additionalProperties:
description: Status specifies the status of an operand. And operand manages resources, some of which are not immediately available and need their status monitored, such as Deployments, Daemonsets, Ingressess etc. Some resources are immediately available and should not be monitored once accepted by the cluster, such as Services, ConfigMaps, Secrets etc. If all resources of an operand are ready, a Status with Ready set to 'true' and a nil 'Reasons' slice should be returned, otherwise, a Status with 'Reasons' slice containig the reason why the Operand is not ready (Deployment pods are not ready for example.)
properties:
lastTransitionTime:
description: LastTransitionTime specifies the last time the operand readiness changed
format: date-time
type: string
ready:
description: Ready specifies if the operand is ready or not
type: boolean
reasons:
description: Reasons specifies the reasons why the operand is not ready
items:
type: string
type: array
unreadyThresholdCrossed:
description: UnreadyThresholdCrossed specifies if the operand has been unready for longer than the threshold
type: boolean
required:
- ready
type: object
description: OperandStatuses specifies the status of the managed operands
type: object
platform:
type:
- object
- 'null'
properties:
type:
type:
- string
- 'null'
enum:
- vanilla
- openshift
- rke
- gke
- aks
- eks
description: the cluster platform type
kubeVersion:
type:
- string
- 'null'
description: the cluster kubernetes version
config:
$ref: '#/components/schemas/ClusterReportedConfig'
dependencies:
$ref: '#/components/schemas/ClusterDependenciesStatus'
TimeRange:
type: object
description: Overtime metrics data. Returned only if both start and end query parameters are set.
required:
- resources
properties:
resources:
type: array
items:
$ref: '#/components/schemas/ResourcesDataOvertime'
NodepoolName:
type: string
example: nodepoola
GroupedMetricsResponse:
type: object
required:
- measurements
properties:
measurements:
type: array
items:
$ref: '#/components/schemas/GroupedMeasurementResponse'
ClusterDependenciesStatus:
type: object
required:
- required
- optional
properties:
required:
type: object
additionalProperties:
$ref: '#/components/schemas/ClusterDependencyStatus'
optional:
type: object
additionalProperties:
$ref: '#/components/schemas/ClusterDependencyStatus'
ClusterCreationRequest:
type: object
required:
- name
properties:
name:
type: string
domain:
type: string
version:
type: string
ResourceData:
type: object
description: quota equals to the given resources and allocated equal to the real count of used resources
required:
- quota
- allocated
properties:
quota:
type: number
example: 3
allocated:
type: number
example: 2.5
utilization:
type: number
example: 0.765
nodepoolName:
type: string
example: nodepoola
Error:
required:
- code
- message
properties:
code:
type: integer
minimum: 100
maximum: 599
message:
type: string
details:
type: string
example:
code: 400
message: Bad request - Resource should have a name
ClusterDependencyStatus:
type: object
required:
- available
properties:
available:
type: boolean
description: whether the dependency is available
reason:
type: string
description: the reason for the dependency status
components:
type: object
additionalProperties:
$ref: '#/components/schemas/ClusterDependencyStatus'
HttpResponse:
required:
- code
- message
properties:
code:
type: integer
minimum: 100
maximum: 599
message:
type: string
MetricsType:
type: string
description: specifies what data to request
enum:
- TOTAL_GPU_NODES
- GPU_UTILIZATION
- GPU_UTILIZATION_DISTRIBUTION
- GPU_MEMORY_UTILIZATION
- CPU_UTILIZATION
- CPU_MEMORY_UTILIZATION
- TOTAL_GPU
- GPU_QUOTA
- ALLOCATED_GPU
- UNALLOCATED_GPU
- AVG_WORKLOAD_WAIT_TIME
- WORKLOADS_COUNT
ResourcesData:
type: object
required:
- numberOfPendingWorkloads
- gpu
- cpu
- memory
properties:
numberOfPendingWorkloads:
type: integer
example: 1
gpu:
description: GPU resources in fractions. 0.7 = 70% of a gpu
$ref: '#/components/schemas/ResourceData'
cpu:
description: CPU resources in millicpus. 1000 = 1 cpu
$ref: '#/components/schemas/ResourceData'
memory:
description: Memory resources in megabytes. 1 = 10^6 (1000*1000)
$ref: '#/components/schemas/ResourceData'
parameters:
ClusterRemoteURL:
name: remoteClusterUrl
in: query
required: false
description: The remote URL of the runai cluster
schema:
type: string
example: https://cluster.runai
ClusterMetricsGroupBy:
name: groupBy
in: query
description: 'Labels to group the returned metrics data by. Grouping availability depends on the selected metric type. Supported values: "category" (workload category) or "node pool".
'
explode: false
required: false
schema:
type: string
enum:
- Category
- Nodepool
- Project
- Department
example: Category
ClusterVersion:
name: version
in: query
required: true
description: The cluster version to install
schema:
type: string
example: 2.16
NumberOfSamples:
name: numberOfSamples
in: query
description: The number of samples to take in the specified time range.
required: false
schema:
type: integer
example: 20
maximum: 1000
minimum: 0
default: 20
Start:
name: start
in: query
description: Start of time range to fetch data from in UTC format.
required: false
schema:
type: string
format: date-time
example: '2023-06-06 12:09:18.211'
ClusterUuid:
name: clusterUuid
in: path
required: true
description: The Universally Unique Identifier (UUID) of the cluster.
schema:
type: string
format: uuid
minLength: 1
example: 9f55255e-11ed-47c7-acef-fc4054768dbc
MetricsType:
name: metricType
in: query
required: true
description: specifies what data to request
explode: false
schema:
type: array
it
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/runai/refs/heads/main/openapi/runai-clusters-api-openapi.yml