> ## Documentation Index
> Fetch the complete documentation index at: https://artie.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a Managed Kafka cluster

> Changes a cluster's name, allowlist, broker storage, storage autoscaling, instance type, broker count, or tiered storage. Send only the fields to change. Every field is checked before anything is saved, so an invalid field leaves the cluster unchanged. A field already at the requested value is left as it is, so retrying after an earlier field was saved still applies the rest. allowedCIDRs, storageGiB, instanceType, brokers, and tieredStorage are then applied one after another, in that order; name and storageAutoscale are saved first and don't apply to the host. Name also works on a BYOC cluster. Returns 409 while a previous change is still being applied. Company admins only.



## OpenAPI

````yaml https://raw.githubusercontent.com/artie-labs/artie-api-spec/refs/heads/master/openapi.yaml post /kafka-clusters/{uuid}
openapi: 3.1.0
info:
  description: External API endpoints for Artie
  title: Artie API
  version: v1.0.200
servers:
  - url: https://api.artie.com
security:
  - ApiKey: []
paths:
  /kafka-clusters/{uuid}:
    post:
      tags:
        - Kafka clusters
      summary: Update a Managed Kafka cluster
      description: >-
        Changes a cluster's name, allowlist, broker storage, storage
        autoscaling, instance type, broker count, or tiered storage. Send only
        the fields to change. Every field is checked before anything is saved,
        so an invalid field leaves the cluster unchanged. A field already at the
        requested value is left as it is, so retrying after an earlier field was
        saved still applies the rest. allowedCIDRs, storageGiB, instanceType,
        brokers, and tieredStorage are then applied one after another, in that
        order; name and storageAutoscale are saved first and don't apply to the
        host. Name also works on a BYOC cluster. Returns 409 while a previous
        change is still being applied. Company admins only.
      operationId: kafka_cluster_update
      parameters:
        - in: path
          name: uuid
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RouterUpdateKafkaClusterRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayloadsKafkaCluster'
          description: OK
        '400':
          description: Bad Request
        '404':
          description: Not Found
        '409':
          description: Conflict
        '429':
          description: Too Many Requests
        '500':
          description: Internal Server Error
        '503':
          description: Service Unavailable
components:
  schemas:
    RouterUpdateKafkaClusterRequest:
      properties:
        allowedCIDRs:
          description: >-
            Client IPv4 ranges allowed to reach the cluster. Replaces the
            current list. Empty allows any IP; clients still need the password.
            No broker restarts.
          items:
            type: string
          type: array
        brokers:
          description: >-
            New number of brokers. Brokers can only be added. The count the
            cluster already has is left as it is. Existing partitions stay where
            they are; new topics use every broker.
          maximum: 30
          minimum: 3
          type:
            - 'null'
            - integer
        instanceType:
          $ref: '#/components/schemas/PayloadsKafkaInstanceType'
          description: >-
            EC2 instance type for every broker. The brokers restart one at a
            time onto new machines. The type they already run is left as it is.
        name:
          description: >-
            The cluster's name, as customers see it. Also works on a cluster on
            the company's BYOC data plane. The bootstrap address and Kubernetes
            objects keep the name it was created with.
          maxLength: 100
          minLength: 3
          type:
            - 'null'
            - string
        storageAutoscale:
          $ref: '#/components/schemas/PayloadsKafkaClusterStorageAutoscale'
          description: >-
            How Artie grows the brokers' disks before they fill. Takes effect on
            the next autoscale run; nothing is applied to the cluster.
        storageGiB:
          description: >-
            New disk per broker in GiB: 50 or 80, or any size from 100 to 1024
            (1 TiB). A larger size grows the disks online; the size the brokers
            already have is left as it is. AWS limits how often a disk can
            change, so storage grows at most 3 times in 24 hours (429
            otherwise).
          maximum: 1024
          minimum: 50
          type:
            - 'null'
            - integer
        tieredStorage:
          $ref: '#/components/schemas/RouterUpdateKafkaClusterTieredStorageRequest'
          description: >-
            Whether every topic is tiered, days on disk, and disk cap per
            partition. New days on disk or a new cap applies to the running
            brokers without a restart.
      type: object
    PayloadsKafkaCluster:
      properties:
        cloud:
          type: string
        createdAt:
          format: date-time
          type: string
        dataKeptUntil:
          description: >-
            When a deleted Managed Kafka cluster's data is deleted for good. It
            can be restored until then. Only set while status is deleted.
          format: date-time
          type: string
        deployStage:
          $ref: '#/components/schemas/EnumsKafkaDeployStage'
          description: >-
            The step a Managed Kafka cluster's deploy is on. Only set while
            status is deploying, or failed, where it is the step the deploy
            stopped at.
        disableTLS:
          type: boolean
        externalBootstrapURL:
          type: string
        isManaged:
          description: >-
            Whether this is a Managed Kafka cluster that Artie runs for the
            company.
          type: boolean
        localRetentionBytes:
          description: >-
            Disk cap per partition: the most broker disk each partition of the
            cluster's tiered topics keeps, in bytes (log.local.retention.bytes).
            Missing when there is no cap.
          type:
            - 'null'
            - integer
        localRetentionMS:
          description: >-
            Days on disk: how long the cluster's tiered topics keep data on
            broker disks, in ms (log.local.retention.ms). Missing on clusters
            made before it, whose brokers use Kafka's default.
          type:
            - 'null'
            - integer
        managed:
          $ref: '#/components/schemas/PayloadsKafkaClusterManaged'
          description: >-
            A Managed Kafka cluster's configuration. Only set when isManaged,
            and only by Get a Kafka cluster.
        name:
          type: string
        region:
          type: string
        shuttingDown:
          description: >-
            Whether a deleted Managed Kafka cluster is still being taken down.
            It can't be restored until that finishes. Only set in the clusters
            list.
          type: boolean
        status:
          $ref: '#/components/schemas/EnumsKafkaStatus'
        statusMessage:
          description: >-
            Why the last deploy of a Managed Kafka cluster failed. Only set
            while status is failed.
          type: string
        storageAutoscale:
          $ref: '#/components/schemas/PayloadsKafkaClusterStorageAutoscale'
          description: >-
            A Managed Kafka cluster's storage autoscaling. Only set when
            isManaged.
        tierAllTopics:
          description: >-
            Whether Artie turns tiered storage on for every topic of a Managed
            Kafka cluster that doesn't choose otherwise.
          type: boolean
        tieredStorageAvailable:
          description: >-
            Whether tiered storage is available on this cluster. Artie turns it
            on once the cluster's brokers have tiered storage.
          type: boolean
        tieredStorageSyncedAt:
          description: >-
            When the sync last made a Managed Kafka cluster's topics match the
            tiered storage choice for each. Missing until its first run.
          format: date-time
          type: string
        updatedAt:
          description: >-
            When the cluster row last changed. A deploying cluster can be
            retried 20 minutes after this.
          format: date-time
          type: string
        usesScram:
          type: boolean
        uuid:
          format: uuid
          type: string
      required:
        - uuid
        - name
        - createdAt
        - updatedAt
        - status
        - externalBootstrapURL
        - usesScram
        - disableTLS
        - cloud
        - region
        - tieredStorageAvailable
        - isManaged
        - tierAllTopics
      type: object
    PayloadsKafkaInstanceType:
      enum:
        - m8g.2xlarge
        - m8g.4xlarge
        - m8g.xlarge
        - m8i.2xlarge
        - m8i.4xlarge
        - m8i.xlarge
        - r8g.2xlarge
        - r8g.large
        - r8g.xlarge
        - r8i.2xlarge
        - r8i.large
        - r8i.xlarge
      type: string
    PayloadsKafkaClusterStorageAutoscale:
      properties:
        bumpAtPercent:
          description: >-
            How full, in %, a broker's disk gets before every broker's disk
            grows. At most 99. Defaults to 65.
          maximum: 99
          minimum: 1
          type: integer
        enabled:
          description: Whether Artie grows the brokers' disks before they fill.
          type: boolean
        maxGiB:
          description: >-
            The most disk per broker, in GiB, a grow goes to. Missing is no
            limit.
          minimum: 1
          type: integer
        targetPercent:
          description: >-
            How full, in %, the fullest broker's disk is after a grow. Less than
            bumpAtPercent. Defaults to 55.
          maximum: 98
          minimum: 1
          type: integer
      required:
        - enabled
        - bumpAtPercent
        - targetPercent
      type: object
    RouterUpdateKafkaClusterTieredStorageRequest:
      properties:
        localRetentionBytes:
          description: >-
            Disk cap per partition: the most broker disk each partition of a
            tiered topic keeps, in bytes, at least 1073741824 (1 GiB). Null is
            no cap.
          minimum: 1073741824
          type:
            - 'null'
            - integer
        localRetentionMS:
          description: >-
            Days on disk: how long tiered topics keep data on broker disks, in
            ms, from 86400000 (one day) to 1209600000 (14 days).
          format: int64
          maximum: 1209600000
          minimum: 86400000
          type: integer
        tierAllTopics:
          description: >-
            Whether every topic is tiered. It wins over each topic's own choice:
            turning it on turns tiered storage on for every topic, and turning
            it off pauses every topic tiered through Artie (one tiered outside
            Artie, e.g. with the CLI, is left alone). A paused topic keeps new
            messages on broker disks while what's already in remote storage
            stays readable until retention expires it.
          type: boolean
      required:
        - tierAllTopics
        - localRetentionMS
      type: object
    EnumsKafkaDeployStage:
      enum:
        - applying_custom_resources
        - issuing_tls_certificate
        - provisioning_broker_nodes
        - starting_kafka_brokers
        - creating_load_balancer
      type: string
    PayloadsKafkaClusterManaged:
      properties:
        allowedCIDRs:
          description: >-
            Client IP ranges allowed to reach the cluster. Empty when any IP can
            connect.
          items:
            type: string
          type: array
        brokers:
          type: integer
        instanceType:
          type: string
        kafkaVersion:
          type: string
        pendingChange:
          $ref: '#/components/schemas/PayloadsKafkaClusterChange'
          description: >-
            The cluster's latest change that isn't applied yet. Missing once
            every change is applied, and while the cluster isn't active.
        storageGiB:
          description: Disk per broker in GiB.
          type: integer
      required:
        - brokers
        - instanceType
        - storageGiB
        - allowedCIDRs
        - kafkaVersion
      type: object
    EnumsKafkaStatus:
      enum:
        - draft
        - active
        - deploying
        - failed
        - deleted
      type: string
    PayloadsKafkaClusterChange:
      properties:
        field:
          description: >-
            The setting the change is to. The other fields already show its new
            value.
          enum:
            - allowedCIDRs
            - storageGiB
            - brokers
            - instanceType
            - tieredStorage
          type: string
        startedAt:
          description: When the change was saved.
          format: date-time
          type: string
        state:
          description: >-
            Applying until the apply's time limit after the save has passed (15
            minutes plus a broker roll per broker, plus 5 minutes), then failed:
            the apply failed or was lost. Saving the same value again retries
            it.
          enum:
            - applying
            - failed
          type: string
        summary:
          description: >-
            What the change does, as the Activity feed says it, such as "Grew
            broker storage from 50 GiB to 80 GiB".
          type: string
      required:
        - state
        - field
        - summary
        - startedAt
      type: object
  securitySchemes:
    ApiKey:
      description: API key passed as a Bearer token in the Authorization header.
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.