Cast AI Node Pools API
Provides an API to manage Karpenter NodePools
Provides an API to manage Karpenter NodePools
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/kimchi:kimchi-nodepoolsapi-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:
title: Kent Node Pools API
version: 0.0.1
description: Provides an API to manage Karpenter NodePools
servers:
- url: https://api.cast.ai/
description: US endpoint
- url: https://api.eu.cast.ai/
description: EU endpoint
security:
- BearerAuth: []
- ApiKeyAuth: []
tags:
- name: NodePoolsAPI
description: Provides an API to manage Karpenter NodePools
paths:
/kent/v1alpha/organizations/{organizationId}/clusters/{clusterId}/node-pools:
get:
tags:
- NodePoolsAPI
summary: Lists NodePools
description: add listnodepools rpc
operationId: NodePoolsAPI_ListNodePools
parameters:
- name: organizationId
in: path
description: The ID of the Organization.
required: true
schema:
type: string
- name: clusterId
in: path
description: The cluster to be registered.
required: true
schema:
type: string
- name: page.limit
in: query
description: Defines the number of items that should be returned
schema:
type: string
- name: page.cursor
in: query
description: "Cursor that defines token indicating where to start the next page.\n Empty value indicates to start from beginning of the dataset."
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListNodePoolsResponse'
default:
description: Default error response
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
/kent/v1alpha/organizations/{organizationId}/clusters/{clusterId}/node-pools/{name}:
put:
tags:
- NodePoolsAPI
summary: Updates a NodePool
description: Updates an existing NodePool.
operationId: NodePoolsAPI_UpdateNodePool
parameters:
- name: organizationId
in: path
description: The ID of the Organization.
required: true
schema:
type: string
- name: clusterId
in: path
description: The ID of the cluster whose NodePool is being updated.
required: true
schema:
type: string
- name: name
in: path
description: The name of the NodePool being updated.
required: true
schema:
type: string
- name: expectedResourceVersion
in: query
description: The resourceVersion observed by the UI on the prior read.
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NodePool'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateNodePoolResponse'
default:
description: Default error response
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
components:
schemas:
Status:
type: object
properties:
code:
type: integer
description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
format: int32
message:
type: string
description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
details:
type: array
items:
$ref: '#/components/schemas/GoogleProtobufAny'
description: A list of messages that carry the error details. There is a common set of message types for APIs to use.
description: 'The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).'
GoogleProtobufAny:
type: object
properties:
'@type':
type: string
description: The type of the serialized message.
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
NodeClaimTemplateSpec:
type: object
properties:
taints:
type: array
items:
$ref: '#/components/schemas/Taint'
description: Taints will be applied to the NodeClaim's node.
startupTaints:
type: array
items:
$ref: '#/components/schemas/Taint'
description: StartupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically
requirements:
type: array
items:
$ref: '#/components/schemas/Requirement'
description: Requirements are layered with GetLabels and applied to every node.
nodeClassRef:
allOf:
- $ref: '#/components/schemas/NodeClassRef'
description: NodeClassRef is a reference to an object that defines provider specific configuration
terminationGracePeriod:
pattern: ^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$
type: string
description: "TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated.\n JSON format: protojson Duration (seconds with \"s\" suffix, e.g. \"172800s\"). No CRD\n default: when absent, karpenter waits indefinitely for pods to drain (absent is a\n persistent state). \"Never\" is not a valid value for this field."
expireAfter:
type: string
description: "ExpireAfter is the duration the controller will wait before terminating a node.\n Pass-through string in the k8s format: Go duration (\"720h\", \"2592000s\") or \"Never\"\n for no expiry. When the key is absent on an update, the k8s API server materializes\n the CRD default \"720h\". List emits the Go-normalized form (e.g. \"720h0m0s\") or \"Never\"."
description: NodeClaimTemplateSpec describes the desired state of the NodeClaim in the NodePool
Taint:
type: object
properties:
key:
type: string
description: Key is the identifier for the taint.
value:
type: string
description: Value is the string value of the taint.
effect:
type: string
description: Effect is the effect of the taint.
description: A Kubernetes taint.
NodePool:
type: object
properties:
id:
type: string
description: ID is the unique identifier of the NodePool.
apiVersion:
type: string
description: APIVersion defines the versioned schema of this representation of an object.
kind:
type: string
description: Kind is a string value representing the REST resource this object represents.
metadata:
allOf:
- $ref: '#/components/schemas/Metadata'
description: "Metadata contains the standard object metadata.\n Deprecated: use canonical_metadata and the top-level resource_version\n instead. Retained (and still populated) for backward compatibility."
spec:
allOf:
- $ref: '#/components/schemas/NodePoolSpec'
description: Spec is the specification of the desired behavior of the NodePool.
status:
allOf:
- $ref: '#/components/schemas/NodePoolStatus'
description: Status represents information about the status of a NodePool.
resourceVersion:
type: string
description: "ResourceVersion is the Kubernetes resourceVersion of this NodePool as\n served by the API server. Read it from the List response and pass it as\n expected_resource_version on UpdateNodePool for optimistic concurrency.\n It is a top-level field (not part of metadata) because it is the API's\n concurrency token rather than descriptive metadata, matching\n expected_resource_version / applied_resource_version on the update\n contract. On update requests the value sent here is ignored."
canonicalMetadata:
allOf:
- $ref: '#/components/schemas/ObjectMetadata'
description: "CanonicalMetadata is the standard object metadata. Replaces the\n deprecated metadata field."
description: Karpenter NodePool definition
ListNodePoolsResponse:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/NodePool'
description: The list of NodePools.
nextPageCursor:
type: string
description: The cursor to the next page.
description: Response message for listing NodePools.
Requirement:
type: object
properties:
key:
type: string
description: 'key: The label key for the requirement (e.g., "kubernetes.io/arch").'
operator:
type: string
description: 'operator: The operator for matching (e.g., "In", "NotIn", "Exists", "DoesNotExist").'
values:
type: array
items:
type: string
description: 'values: The list of acceptable values for the requirement (e.g., ["amd64"], ["arm64"]).'
description: 'Requirement: A requirement constraint for pod scheduling (typically architecture).'
NodePoolStatus:
type: object
properties:
resources:
type: object
additionalProperties:
type: string
description: Resources is the list of resources that have been provisioned.
nodeClassObservedGeneration:
type: string
description: NodeClassObservedGeneration represents the observed nodeClass generation for referenced nodeClass.
conditions:
type: array
items:
$ref: '#/components/schemas/Condition'
description: Conditions contains signals for health and readiness
description: NodePoolStatus defines the observed state of NodePool
Condition:
type: object
properties:
lastTransitionTime:
type: string
description: 'last_transition_time: The last time the condition transitioned from one status to another (RFC3339 format).'
format: date-time
status:
type: string
description: 'status: The status of the condition ("True", "False", or "Unknown").'
type:
type: string
description: 'type: The type of condition (e.g., "Ready", "SubnetsReady", "SecurityGroupsReady", "AMIsReady").'
message:
type: string
description: 'message: A human-readable message indicating details about the transition.'
reason:
type: string
description: 'reason: A programmatic identifier indicating the reason for the condition''s last transition.'
description: 'Condition: Represents the state of a particular aspect of the EC2NodeClass resource.'
ObjectMetadata:
type: object
properties:
name:
type: string
description: "name: The unique name of the resource. Cluster-scoped for the karpenter\n CRDs using this message."
namespace:
type: string
description: "namespace: The namespace for namespaced resources. Always empty for\n the cluster-scoped karpenter CRDs; kept for ObjectMeta fidelity."
labels:
type: object
additionalProperties:
type: string
description: 'labels: Key-value pairs used for organizing and selecting resources.'
annotations:
type: object
additionalProperties:
type: string
description: 'annotations: Additional metadata for tools and libraries.'
description: "ObjectMetadata is the canonical, shared object metadata for the karpenter\n CRD resources exposed by the Kent API (NodePool, EC2NodeClass,\n AKSNodeClass). It replaces the per-API Metadata/ObjectMeta messages,\n which are deprecated and retained only for backward compatibility until\n consumers migrate to the canonical_metadata field.\n\n resourceVersion is deliberately NOT part of this message: it is the API's\n concurrency token rather than descriptive metadata, and lives as the\n top-level resource_version field on each CRD message (paired with\n expected_resource_version / applied_resource_version on the update\n contract)."
Budget:
type: object
properties:
reasons:
type: array
items:
type: string
description: Reasons is a list of disruption methods that this budget applies to.
nodes:
type: string
description: Nodes dictates the maximum number of NodeClaims owned by this NodePool that can be terminating at once.
schedule:
type: string
description: Schedule specifies when a budget begins being active, following the upstream cronjob syntax
duration:
type: string
description: Duration determines how long a Budget is active since each Schedule hit.
description: Budget defines when Karpenter will restrict the number of Node Claims that can be terminating simultaneously.
Disruption:
type: object
properties:
consolidateAfter:
type: string
description: "ConsolidateAfter is the duration the controller will wait before attempting to\n terminate nodes that are underutilized, or \"Never\" to disable consolidation.\n Required by the karpenter CRD whenever spec.disruption is present: no default\n materializes, and an absent value is a validation error."
consolidationPolicy:
type: string
description: ConsolidationPolicy describes which nodes Karpenter can disrupt through its consolidation algorithm
budgets:
type: array
items:
$ref: '#/components/schemas/Budget'
description: Budgets is a list of Budgets.
description: Disruption contains the parameters that relate to Karpenter's disruption logic
NodeClaimTemplate:
type: object
properties:
metadata:
allOf:
- $ref: '#/components/schemas/Metadata'
description: Standard object metadata.
spec:
allOf:
- $ref: '#/components/schemas/NodeClaimTemplateSpec'
description: Spec is the specification of the desired behavior of the NodeClaim.
description: NodeClaimTemplate is a template of possibilities for the provisioning logic to launch a NodeClaim with.
NodeClassRef:
type: object
properties:
kind:
type: string
description: Kind of the referent;
name:
type: string
description: Name of the referent;
group:
type: string
description: Group API version of the referent
description: A reference to an object that defines provider specific configuration
Metadata:
type: object
properties:
name:
type: string
description: Name must be unique within a namespace. NodeOverlays are cluster-scoped.
labels:
type: object
additionalProperties:
type: string
description: Labels are key/value pairs that can be used to organize and categorize objects.
annotations:
type: object
additionalProperties:
type: string
description: Annotations are unstructured key/value pairs that can be used by external tooling.
createTime:
type: string
description: CreationTimestamp is when this NodeOverlay was created.
format: date-time
description: Standard object metadata.
NodePoolSpec:
type: object
properties:
template:
allOf:
- $ref: '#/components/schemas/NodeClaimTemplate'
description: Template contains the template of possibilities for the provisioning logic to launch a NodeClaim with.
disruption:
allOf:
- $ref: '#/components/schemas/Disruption'
description: Disruption contains the parameters that relate to Karpenter's disruption logic
limits:
type: object
additionalProperties:
type: string
description: Limits define a set of bounds for provisioning capacity.
weight:
type: integer
description: Weight is the priority given to the nodepool during scheduling
format: int32
description: NodePoolSpec is the top level nodepool specificatio
UpdateNodePoolResponse:
type: object
properties:
nodePool:
allOf:
- $ref: '#/components/schemas/NodePool'
description: The updated NodePool.
appliedResourceVersion:
type: string
description: The new resourceVersion after the write.
description: Response message for updating a NodePool.
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
x-provenance:
method: searched
source: https://docs.cast.ai/reference
harvested: '2026-10-20'
tool: harvest-readme-openapi.py
note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
assembled_from:
- https://docs.cast.ai/reference/awsdataproxyapi_getdata.md
- https://docs.cast.ai/reference/azuredataproxyapi_getdata.md
- https://docs.cast.ai/reference/clustersapi_onboardclusterscript-1.md
- https://docs.cast.ai/reference/featuresapi_configurefeature.md
- https://docs.cast.ai/reference/featuresapi_getclusterfeatureinstallscript.md
- https://docs.cast.ai/reference/featuresapi_getclusterinstallscript.md
- https://docs.cast.ai/reference/featuresapi_getfeature.md
- https://docs.cast.ai/reference/featuresapi_getinstallscript.md
- https://docs.cast.ai/reference/featuresapi_getorganizationfeatureinstallscript.md
- https://docs.cast.ai/reference/featuresapi_getorganizationinstallscript.md
- https://docs.cast.ai/reference/featuresapi_getoverview.md
- https://docs.cast.ai/reference/featuresapi_getsummary.md
- https://docs.cast.ai/reference/featuresapi_listfeaturecompatibilities.md
- https://docs.cast.ai/reference/featuresapi_listfeatureconfigs.md
- https://docs.cast.ai/reference/featuresapi_listfeatures.md
- https://docs.cast.ai/reference/kentrollerapi_creatediagnosticreport.md
- https://docs.cast.ai/reference/kentrollerapi_getdiagnosticreport.md
- https://docs.cast.ai/reference/kentrollerapi_listdiagnosticreports.md
- https://docs.cast.ai/reference/machinelearningapi_predictspotinterruption.md
- https://docs.cast.ai/reference/nodeclassesapi_listaksnodeclasses.md
- https://docs.cast.ai/reference/nodeclassesapi_listec2nodeclasses.md
- https://docs.cast.ai/reference/nodeclassesapi_listnodeclasses.md
- https://docs.cast.ai/reference/nodeclassesapi_updateaksnodeclass.md
- https://docs.cast.ai/reference/nodeclassesapi_updateec2nodeclass.md
- https://docs.cast.ai/reference/nodeclassesapi_updatenodeclass.md
- https://docs.cast.ai/reference/nodeoverlaysapi_getnodeoverlay.md
- https://docs.cast.ai/reference/nodeoverlaysapi_listnodeoverlays.md
- https://docs.cast.ai/reference/nodepoolsapi_listnodepools.md
- https://docs.cast.ai/reference/nodepoolsapi_updatenodepool.md
- https://docs.cast.ai/reference/nodesapi_deletenode.md
- https://docs.cast.ai/reference/nodesapi_drainnode.md
- https://docs.cast.ai/reference/nodesapi_interruptnode.md
- https://docs.cast.ai/reference/operationsapi_getoperation-3.md
- https://docs.cast.ai/reference/opspilotreadapi_getresource.md
- https://docs.cast.ai/reference/opspilotreadapi_listresources.md
- https://docs.cast.ai/reference/rebalancingapi_cancelrebalancingplan.md
- https://docs.cast.ai/reference/rebalancingapi_createrebalancingplan.md
- https://docs.cast.ai/reference/rebalancingapi_executerebalancingplan.md
- https://docs.cast.ai/reference/rebalancingapi_getrebalancingconstraints.md
- https://docs.cast.ai/reference/rebalancingapi_getrebalancingplan.md
- https://docs.cast.ai/reference/rebalancingapi_listrebalancingplans.md
- https://docs.cast.ai/reference/rebalancingapi_listworkloads.md
- https://docs.cast.ai/reference/scheduledrebalancingapi_createrebalancingschedule-1.md
- https://docs.cast.ai/reference/scheduledrebalancingapi_deleterebalancingschedule-1.md
- https://docs.cast.ai/reference/scheduledrebalancingapi_getrebalancingschedule-1.md
- https://docs.cast.ai/reference/scheduledrebalancingapi_listrebalancingschedules-1.md
- https://docs.cast.ai/reference/scheduledrebalancingapi_togglerebalancingschedule.md
- https://docs.cast.ai/reference/scheduledrebalancingapi_updaterebalancingschedule-1.md
- https://docs.cast.ai/reference/statusapi_getkentstatus.md
merge:
pages: 49
deduped: 542
conflicts_kept_first: 0