NVIDIA Run:ai NodePools API

Node pools assist in managing heterogeneous resources effectively. A node pool is a set of nodes grouped into a bucket of resources using a predefined (for example, GPU-Type) or administrator-defined label (for example, key & value). For more information, see [Node Pools](https://run-ai-docs.nvidia.com/saas/platform-management/aiinitiatives/resources/node-pools/#introduction).

OpenAPI Specification

runai-nodepools-api-openapi.yml Raw ↑
openapi: 3.0.3
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 NodePools 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: NodePools
  description: "Node pools assist in managing heterogeneous resources effectively. \nA node pool is a set of nodes grouped into a bucket of resources using a predefined (for example, GPU-Type) or \nadministrator-defined label (for example, key & value). \nFor more information, see [Node Pools](https://run-ai-docs.nvidia.com/saas/platform-management/aiinitiatives/resources/node-pools/#introduction).\n"
paths:
  /api/v1/clusters/{clusterUuid}/nodepools/{nodepoolName}/metrics:
    get:
      summary: Get the node pool metrics data.
      description: Retrieve the node pool metrics data by Universally Unique Identifier (UUID).
      operationId: get_nodepool_metrics
      tags:
      - NodePools
      parameters:
      - $ref: '#/components/parameters/ClusterUuid'
      - $ref: '#/components/parameters/NodepoolPath'
      - $ref: '#/components/parameters/StartRequired'
      - $ref: '#/components/parameters/EndRequired'
      - $ref: '#/components/parameters/NumberOfSamples'
      - $ref: '#/components/parameters/MetricsType'
      responses:
        '200':
          description: Executed successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetricsResponse'
            text/csv: {}
        '207':
          description: Partial success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetricsResponse'
        '400':
          $ref: '#/components/responses/400BadRequest'
        '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/node-pools:
    post:
      summary: Create nodepool
      operationId: create_nodepool
      description: Create nodepool
      tags:
      - NodePools
      requestBody:
        description: Nodepool to create.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NodepoolCreateFields'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Nodepool'
        '400':
          $ref: '#/components/responses/400BadRequest'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
    get:
      summary: Get nodepools
      operationId: get_nodepools
      description: Get nodepools
      tags:
      - NodePools
      parameters:
      - $ref: '#/components/parameters/NodepoolsFilterBy'
      - $ref: '#/components/parameters/NodepoolsSortBy'
      - $ref: '#/components/parameters/SortOrder'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: ok
          content:
            application/json:
              schema:
                type: object
                properties:
                  nodepools:
                    type: array
                    items:
                      $ref: '#/components/schemas/Nodepool'
        '400':
          $ref: '#/components/responses/400BadRequest'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
  /api/v1/node-pools/count:
    get:
      summary: Count nodepools
      operationId: count_nodepools
      description: Count nodepools
      tags:
      - NodePools
      parameters:
      - $ref: '#/components/parameters/NodepoolsFilterBy'
      responses:
        '200':
          description: ok
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    format: int64
                required:
                - count
        '400':
          $ref: '#/components/responses/400BadRequest'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
  /api/v1/node-pools/{nodepoolId}:
    delete:
      summary: Delete nodepool
      operationId: delete_nodepool
      description: Delete nodepool
      tags:
      - NodePools
      parameters:
      - $ref: '#/components/parameters/NodepoolId'
      responses:
        '202':
          $ref: '#/components/responses/202Accepted'
        '204':
          $ref: '#/components/responses/204NoContent'
        '400':
          $ref: '#/components/responses/400BadRequest'
        '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'
    put:
      summary: Update nodepool
      operationId: update_nodepool
      description: Update nodepool
      tags:
      - NodePools
      parameters:
      - $ref: '#/components/parameters/NodepoolId'
      requestBody:
        description: Nodepool to update.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NodepoolUpdateFields'
      responses:
        '200':
          description: Updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Nodepool'
        '400':
          $ref: '#/components/responses/400BadRequest'
        '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'
    patch:
      summary: Patch nodepool fields
      operationId: patch_nodepool
      description: Update only specific fields of a nodepool
      tags:
      - NodePools
      parameters:
      - $ref: '#/components/parameters/NodepoolId'
      requestBody:
        description: Fields to update.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NodepoolUpdateFields'
      responses:
        '200':
          description: Updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Nodepool'
        '400':
          $ref: '#/components/responses/400BadRequest'
        '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'
    get:
      summary: Get nodepool
      operationId: get_nodepool
      description: Get nodepool
      tags:
      - NodePools
      parameters:
      - $ref: '#/components/parameters/NodepoolId'
      responses:
        '200':
          description: Requested nodepool
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Nodepool'
        '400':
          $ref: '#/components/responses/400BadRequest'
        '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/{clusterId}/node-pools:
    get:
      tags:
      - NodePools
      summary: Get the cluster's Node Pools.
      description: Retrieve all the node pools with details from the cluster by Universally Unique Identifier (UUID). Deprecated, please use /api/v1/node-pools instead.
      deprecated: true
      operationId: getNodePools
      parameters:
      - name: clusterId
        in: path
        description: Unique identifier of the cluster
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Node pools returned successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NodePool1'
        '403':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      tags:
      - NodePools
      summary: Create a Node Pool.
      description: Use to create a node pool in a cluster by Universally Unique Identifier (UUID). Deprecated, please use /api/v1/node-pools instead.
      deprecated: true
      operationId: createNodePool
      parameters:
      - name: clusterId
        in: path
        description: Unique identifier of the cluster
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NodePoolCreateRequest'
      responses:
        '201':
          description: Created
        '400':
          $ref: '#/components/responses/BadRequest'
        '409':
          $ref: '#/components/responses/Conflict'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/k8s/clusters/{clusterId}/node-pools/{id}/labels:
    put:
      tags:
      - NodePools
      summary: Update labels of a Node Pool.
      description: Use to update the labels of a node pool. Deprecated, please use PATCH /api/v1/node-pools/{id} instead.
      deprecated: true
      operationId: updateNodePoolLabels
      parameters:
      - name: clusterId
        in: path
        description: Unique identifier of the cluster
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
      - in: path
        name: id
        schema:
          type: integer
        required: true
        description: The unique id identifying the Node Pool.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NodePoolLabelsRequest'
        required: true
      responses:
        '202':
          description: Node Pool update accepted.
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '503':
          $ref: '#/components/responses/serviceUnavailable'
  /v1/k8s/clusters/{clusterId}/node-pools/{id}:
    delete:
      tags:
      - NodePools
      summary: Delete a Node Pool by id.§
      description: Use to delete a node pool by Universally Unique Identifier (UUID). Deprecated, please use /api/v1/node-pools/{id} instead.
      deprecated: true
      operationId: deleteNodePool
      parameters:
      - name: clusterId
        in: path
        description: Unique identifier of the cluster
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
      - in: path
        name: id
        schema:
          type: integer
        required: true
        description: The unique id identifying the Node Pool.
      responses:
        '202':
          description: Node Pool deletion accepted
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '503':
          $ref: '#/components/responses/serviceUnavailable'
    put:
      tags:
      - NodePools
      summary: Update a Node Pool.
      description: Use to update the details of a node pool by Universally Unique Identifier (UUID). Deprecated, please use PATCH /api/v1/node-pools/{id} instead.
      deprecated: true
      operationId: updateNodePool
      parameters:
      - name: clusterId
        in: path
        description: Unique identifier of the cluster
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
      - in: path
        name: id
        schema:
          type: integer
        required: true
        description: The unique id identifying the Node Pool.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateNodePoolRequest'
        required: true
      responses:
        '202':
          description: Node Pool update accepted.
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '503':
          $ref: '#/components/responses/serviceUnavailable'
components:
  schemas:
    NodepoolSortFilterFields:
      type: string
      enum:
      - name
      - phase
      - clusterId
      - createdAt
      - updatedAt
      - networkTopologyName
      - gpuNetworkAccelerationDetection
      - gpuNetworkAccelerationDetected
      - gpuNetworkAccelerationLabelKey
      - swapEnabled
      - nodeLevelSchedulerEnabled
    HttpResponse:
      required:
      - code
      - message
      properties:
        code:
          type: integer
          minimum: 100
          maximum: 599
        message:
          type: string
    SchedulingConfiguration:
      type: object
      nullable: true
      properties:
        placementStrategy:
          description: Scheduling strategy per resource
          properties:
            cpu:
              $ref: '#/components/schemas/PlacementStrategy'
            gpu:
              $ref: '#/components/schemas/PlacementStrategy'
        minGuaranteedRuntime:
          description: Minimum duration (e.g., 5d8h40m) that a preemptible workload is guaranteed to run once scheduled and bound to a node. During this period, it is considered non-preemptible even if a higher-priority workload becomes eligible. Defaults to 0 (immediate preemption allowed).
          type: string
          example: 5d8h40m
          nullable: true
          pattern: ^(0|[+]?((\d+(\.\d+)?)(ns|us|µs|μs|ms|s|m|h|d|w))+$)
    NetworkTopologyNameOptional:
      type: string
      nullable: true
      description: Name of the network topology
      maxLength: 63
      minLength: 1
      pattern: ^[a-z]([a-z0-9-]*[a-z0-9])?$
      example: default-topology
    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
    NodePool1:
      allOf:
      - $ref: '#/components/schemas/NodePoolCreateRequest'
      - properties:
          id:
            type: number
            description: Node Pool unique id
            readOnly: true
            example: 5
          clusterId:
            type: string
            format: uuid
            description: Node Pool cluster id
            example: 71f69d83-ba66-4822-adf5-55ce55efd210
          createdAt:
            type: string
            description: Node Pool creation time
            format: date-time
            example: '2021-12-14T16:04:15.099Z'
          updatedAt:
            type: string
            description: Node Pool update time
            format: date-time
            example: '2021-12-14T16:04:15.099Z'
          deletedAt:
            type: string
            description: Node Pool delete time
            format: date-time
            example: '2021-12-14T16:04:15.099Z'
          status:
            type: string
            enum:
            - Creating
            - Updating
            - Deleting
            - Empty
            - Unschedulable
            - Ready
            - Deleted
            description: Node Pool status
            example: Creating
          statusMessage:
            type: string
            description: Node Pool status details
            example: all nodes are down
          nodes:
            type: string
            description: List of Nodes that are assigned to this nodepool - as json string
            example:
            - node-a
            - node-b
          createdBy:
            type: string
            description: Node Pool creator
            example: user@run.ai
          updatedBy:
            type: string
            description: Node Pool updater
            example: user@run.ai
          isDefault:
            type: boolean
            description: Is the Node Pool the default Node Pool for all nodes not assigned to any other Node Pool
            example: false
    PlacementStrategy:
      type: string
      enum:
      - spread
      - binpack
      example: spread
      nullable: true
    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
    Error1:
      required:
      - code
      - message
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
    UpdateNodePoolRequest:
      properties:
        labelKey:
          type: string
          description: key of node label for pool
          example: node-type
        labelValue:
          type: string
          description: value of node label for pool
          example: type-x
        overProvisioningRatio:
          type: integer
          example: 1
          default: 1
        placementStrategy:
          $ref: '#/components/schemas/PlacementStrategy1'
    MetricsResponse:
      type: object
      required:
      - measurements
      properties:
        measurements:
          type: array
          items:
            $ref: '#/components/schemas/MeasurementResponse'
    NodepoolCalculatedFields:
      type: object
      required:
      - id
      - tenantId
      - clusterName
      - createdBy
      - createdAt
      - updatedBy
      - updatedAt
      - isDefault
      properties:
        id:
          type: string
          description: The NodePool id
          readOnly: true
          example: 5
        tenantId:
          description: The id of the tenant.
          type: integer
          example: 1
          format: int32
        clusterName:
          type: string
          example: prod-cluster
        createdBy:
          type: string
          example: user@lab.com
        createdAt:
          type: string
          format: date-time
        updatedBy:
          type: string
          example: user@lab.com
        updatedAt:
          type: string
          format: date-time
        deletedBy:
          type: string
          example: user@lab.com
        deletedAt:
          type: string
          nullable: true
          format: date-time
        isDefault:
          type: boolean
          description: Is the Node Pool is the cluster default
          example: false
    NodepoolUpdateFields:
      type: object
      properties:
        labelKey:
          type: string
          description: Label key for associated nodes to the Node Pool (with value as in labelValue)
          example: node-type
          minLength: 1
          nullable: true
        labelValue:
          type: string
          description: Label value for associated nodes to the Node Pool (with key as in labelKey)
          example: type-x
          minLength: 1
          nullable: true
        overProvisioningRatio:
          type: integer
          example: 1
          minimum: 1
          maximum: 5
          default: 1
          nullable: true
          deprecated: true
        placementStrategy:
          deprecated: true
          description: scheduling strategy per resource
          properties:
            cpu:
              $ref: '#/components/schemas/PlacementStrategy'
            gpu:
              $ref: '#/components/schemas/PlacementStrategy'
        gpuNetworkAccelerationLabelKey:
          description: Label key by which to determine GPUNetworkAccelerationDetection nodes
          type: string
          nullable: true
        gpuNetworkAccelerationDetection:
          $ref: '#/components/schemas/NodepoolGPUNetworkAccelerationDetection'
        gpuResourceOptimization:
          $ref: '#/components/schemas/GPUResourceOptimization'
        schedulingConfiguration:
          $ref: '#/components/schemas/SchedulingConfiguration'
        networkTopologyId:
          $ref: '#/components/schemas/NetworkTopologyIdOptional'
    NodepoolConditionDetails:
      type: object
      required:
      - type
      - reason
      properties:
        type:
          type: string
          description: Type of Nodepool condition.
        reason:
          type: string
          description: (brief) reason for the condition's last transition.
          example: TopologyMismatch
        message:
          type: string
          description: Human readable message indicating details about last transition.
          example: Network Topology labels mismatch
        status:
          type: string
          description: The status of the condition, can be True or False
          enum:
          - 'True'
          - 'False'
        nodes:
          type: array
          description: Names of the nodes related to the nodepool condition
          items:
            type: string
          example:
          - node1
          - node2
      x-schema-name: NodepoolConditionDetails
    NetworkTopologyIdOptional:
      type: string
      format: uuid
      nullable: true
      description: The unique identifier for the network topology
      example: 123e4567-e89b-12d3-a456-426614174000
    PlacementStrategy1:
      properties:
        cpu:
          type: string
          enum:
          - spread
          - binpack
          description: scheduling strategy for cpu
          example: spread
        gpu:
          type: string
          enum:
          - spread
          - binpack
          description: scheduling strategy for gpu
          example: binpack
    NodepoolGPUNetworkAccelerationDetection:
      type: string
      enum:
      - Use
      - DontUse
      - Auto
      nullable: true
      default: Auto
      description: GPUNetworkAccelerationDetection is a strategy to use for GPU Network Acceleration detection
    NodePoolLabelsRequest:
      properties:
        labelKey:
          type: string
          description: key of node label for pool
          example: node-type
        labelValue:
          type: string
          description: value of node label for pool
          example: type-x
    NodepoolSyncUpdateFields:
      type: object
      properties:
        labelKey:
          type: string
          description: Label key for associated nodes to the Node Pool (with value as in labelValue)
          example: node-type
          minLength: 1
          nullable: true
        labelValue:
          type: string
          description: Label value for associated nodes to the Node Pool (with key as in labelKey)
          example: type-x
          minLength: 1
          nullable: true
        overProvisioningRatio:
          type: integer
          example: 1
          minimum: 1
          maximum: 5
          default: 1
          nullable: true
          deprecated: true
        placementStrategy:
          description: scheduling strategy per resource
          deprecated: true
          properties:
            cpu:
              $ref: '#/components/schemas/PlacementStrategy'
            gpu:
              $ref: '#/components/schemas/PlacementStrategy'
        gpuNetworkAccelerationLabelKey:
          description: Label key by which to determine GPUNetworkAccelerationDetection nodes
          type: string
        gpuNetworkAccelerationDetection:
          $ref: '#/components/schemas/NodepoolGPUNetworkAccelerationDetection'
        gpuResourceOptimization:
          $ref: '#/components/schemas/GPUResourceOptimization'
        schedulingConfiguration:
          $ref: '#/components/schemas/SchedulingConfiguration'
    NodepoolCreateResponseFields:
      type: object
      required:
      - name
      - labelKey
      - labelValue
      - clusterId
      properties:
        name:
          type: string
          example: v100
          minLength: 1
        labelKey:
          type: string
          description: Label key for associated nodes to the Node Pool (with value as in labelValue)
          example: node-type
          minLength: 1
        labelValue:
          type: string
          description: Label value for associated nodes to the Node Pool (with key as in labelKey)
          example: type-x
          minLength: 1
        clusterId:
          type: string
          format: uuid
          example: d73a738f-fab3-430a-8fa3-5241493d7128
        overProvisioningRatio:
          type: integer
          example: 1
          minimum: 1
          maximum: 5
          default: 1
          nullable: true
          deprecated: true
        placementStrategy:
          deprecated: true
          description: scheduling strategy per resource
          properties:
            cpu:
              $ref: '#/components/schemas/PlacementStrategy'
            gpu:
              $ref: '#/components/schemas/PlacementStrategy'
        gpuNetworkAccelerationLabelKey:
          description: Label key by which to determine GPUNetworkAccelerationDetection nodes
          type: string
        gpuNetworkAccelerationDetection:
          $ref: '#/components/schemas/NodepoolGPUNetworkAccelerationDetection'
        networkTopologyName:
          $ref: '#/components/schemas/NetworkTopologyNameOptional'
        networkTopologyId:
          $ref: '#/components/schemas/NetworkTopologyIdOptional'
        gpuResourceOptimization:
          $ref: '#/components/schemas/GPUResourceOptimization'
        schedulingConfiguration:
          $ref: '#/components/schemas/SchedulingConfiguration'
    NodePoolCreateRequest:
      properties:
        name:
          type: string
          description: Node Pool Name
          example: node-pool-a
        overProvisioningRatio:
          type: integer
          example: 1
          default: 1
        labelKey:
          type: string
          description: Label key for associated nodes to the Node Pool (with value as in labelValue)
          example: node-type
        labelValue:
          type: string
          description: Label value for associated nodes to the Node Pool (with key as in labelKey)
          example: type-x
        placementStrategy:
          $ref: '#/components/schemas/PlacementStrategy1'
    NodepoolCreateFields:
      type: object
      required:
      - name
      - labelKey
      - labelValue
      - clusterId
      properties:
        name:
          type: string
          example: v100
          minLength: 1
        labelKey:
          type: string
          description: Label key for associated nodes to the Node Pool (with value as in labelValue)
          example: node-type
          minLength: 1
        labelValue:
          type: string
          description: Label value for associated nodes to the Node Pool (with key as in labelKey)
          example: type-x
          minLength: 1
        clusterId:
          type: string
          format: uuid
          example: d73a738f-fab3-430a-8fa3-5241493d7128
        overProvisioningRatio:
          type: integer
          example: 1
          minimum: 1
          maximum: 5
          default: 1
          nullable: true
          deprecated: true
        placementStrategy:
          deprecated: true
          description: scheduling strategy per resource
          properties:
            cpu:
              $ref: '#/components/schemas/PlacementStrategy'
            gpu:
              $ref: '#/components/schemas/PlacementStrategy'
        gpuNetworkAccelerationLabelKey:
          description: Label key by which to determine GPUNetworkAccelerationDetection nodes
          type: string
          nullable: true
        gpuNetworkAccelerationDetection:
          $ref: '#/components/schemas/NodepoolGPUNetworkAccelerationDetection'
        gpuResourceOptimization:
          $ref: '#/components/schemas/GPUResourceOptimization'
        schedulingConfiguration:
          $ref: '#/components/schemas/SchedulingConfiguration'
        networkTopologyId:
          $ref: '#/components/schemas/NetworkTopologyIdOptional'
    NodepoolPhase:
      type: string
      enum:
      - Creating
      - Updating
      - Deleting
      - Empty
      - Unschedulable
      - Ready
      - Deleted
      description: Phase of Node Pool
    NodepoolSyncFields:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          example: v100
        phase:
          $ref: '#/components/schemas/NodepoolPhase'
        phaseMessage:
          type: string
          description: Message for status of Node Pool
          example: all nodes are down
        status:
          allOf:
          - $ref: '#/components/schemas/NodepoolSyncUpdateFields'
          - type: object
            properties:
              conditions:
                type: array
                items:
                  $ref: '#/components/schemas/NodepoolCon

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/runai/refs/heads/main/openapi/runai-nodepools-api-openapi.yml