---
title: "Update a node pool"
method: PATCH
path: "/lks/clusters/{cluster_id}/nodepools/{id}"
tags: ["LKS"]
---

# Update a node pool

`PATCH /lks/clusters/{cluster_id}/nodepools/{id}`

Scales, renames, upgrades or re-labels a node pool. At least one attribute must be provided.

`labels` and `taints` are declarative replacements, not merges: omit the field to leave it untouched, send the whole map/list to replace it, or send `{}` / `[]` to clear it.

A newer `kubernetes_version` rolls a node-recreating upgrade; it must not be lower than the pool's current patch nor newer than the control-plane patch. `max_pods_per_node` is immutable — a PATCH that carries it is rejected with 422 even if the value is unchanged.

The node pool must be idle: one that is provisioning, updating, scaling, upgrading, paused or deleting rejects the request with 409.

## Path parameters

- `cluster_id` string, required
- `id` string, required

## Request body

- UpdateLksNodePool
  - `data` object, required
    - `type` 'lks_node_pools', required
    - `attributes` object — At least one attribute must be provided. max_pods_per_node is set once, at creation, and is not updatable: a PATCH that carries it is rejected with 422.
      - `name` string
      - `count` integer — must be >= 1
      - `kubernetes_version` string — A newer patch rolls a node-recreating upgrade. Must not be lower than the current patch (422 DOWNGRADE_NOT_ALLOWED) nor newer than the control-plane patch (422 VERSION_SKEW)
      - `labels` object — Declarative replace. Omit to leave labels unchanged; send the whole map to replace it (not a merge); send {} to clear all. Same validation as on create.
      - `taints` LksNodePoolTaint[] — Declarative replace. Omit to leave taints unchanged; send the whole list to replace it; send [] to clear all. Same validation as on create.
        - `key` string, required
        - `value` string, nullable — May be empty; max 63 chars. Absent or null when the taint carries no value.
        - `effect` 'NoSchedule' | 'PreferNoSchedule' | 'NoExecute', required
      - `description` string

## Response `200`

OK

## Other responses

- `403` — Forbidden
- `404` — Not Found
- `409` — Conflict — the node pool is not in an admissible state for this operation
- `422` — Unprocessable Entity
- `502` — Bad Gateway — NetBox is temporarily unavailable

## Changes

- **2026-09-17** `e152782042e7` — 5 info
  - the request property `data/attributes/taints/items/value` became nullable (media type: application/json)
  - the request property `data/attributes/taints/items/value` became nullable (media type: application/vnd.api+json)
  - added the optional property `data/attributes/taints/items/value` to the response with the `200` status
  - added the required property `data/attributes/taints/items/effect` to the response with the `200` status
  - …1 more
- **2026-09-16** `2e0ac09a58ac` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/latitude/apis/latitude-sh-api/changes/lks/clusters/:cluster_id/nodepools/:id/patch.md)

---

[API](https://skmtc.dev/latitude/apis/latitude-sh-api.md) · [All operations](https://skmtc.dev/latitude/apis/latitude-sh-api/llms.txt) · [OpenAPI document](https://skmtc.dev/latitude/apis/latitude-sh-api/revisions/3a64859195ed?raw)
