---
title: "Create a new control plane"
method: POST
path: "/v1/mesh/control-planes"
tags: ["Mesh"]
---

# Create a new control plane

`POST /v1/mesh/control-planes`

Create a new control plane

## Request body

- CreateMeshControlPlaneRequest — a payload to create a control plane
  - `name` string, required — The name of the control plane.
  - `description` string
  - `features` MeshControlPlaneFeature[]
    - `type` 'MeshCreation' | 'HostnameGeneratorCreation', required
    - `hostnameGeneratorCreation` MeshControlPlaneFeatureHostnameGenerationCreation
      - `enabled` boolean, required
    - `meshCreation` MeshControlPlaneFeatureMeshCreation
      - `enabled` boolean, required
  - `labels` MeshControlPlaneLabels, nullable — Labels to facilitate tagged search on control planes. Keys must be of length 1-63 characters.
  - `version` string — The version of the control plane. Setting it propagates the change to the global control plane, and is the only way to move a control plane between versions.

## Response `201`

A response to creating a control plane.

- MeshControlPlane — a control plane
  - `id` string, uuid, required — ID of the control plane.
  - `name` string, required — The name of the control plane.
  - `description` string
  - `labels` MeshControlPlaneLabels, nullable — Labels to facilitate tagged search on control planes. Keys must be of length 1-63 characters.
  - `features` MeshControlPlaneFeature[]
    - `type` 'MeshCreation' | 'HostnameGeneratorCreation', required
    - `hostnameGeneratorCreation` MeshControlPlaneFeatureHostnameGenerationCreation
      - `enabled` boolean, required
    - `meshCreation` MeshControlPlaneFeatureMeshCreation
      - `enabled` boolean, required
  - `version` string — The version of the control plane. Setting it propagates the change to the global control plane, and is the only way to move a control plane between versions.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400` — Validation Error
- `401` — Unauthorized Error
- `403` — Permission denied

## Changes

- **2026-08-18** `658ffb748f95` — 2 info
  - added the new optional request property `version`
  - added the optional property `version` to the response with the `201` status
- **2025-11-06** `5d2b35832e3f` — 1 warning
  - added the new `type` enum value to the `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterStandard]/rule` response property for the response status `400`
- **2025-10-02** `ecce2daf9de6` — 5 breaking
  - the response property `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterChoiceItem]/source` became nullable for the status `400`
  - the response property `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterDependentItem]/source` became nullable for the status `400`
  - the response property `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterMaximumLength]/source` became nullable for the status `400`
  - the response property `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterMinimumLength]/source` became nullable for the status `400`
  - …1 more

[Change history](https://skmtc.dev/kong/apis/konnect-api-beta/changes/v1/mesh/control-planes/post.md)

---

[API](https://skmtc.dev/kong/apis/konnect-api-beta.md) · [All operations](https://skmtc.dev/kong/apis/konnect-api-beta/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/kong/konnect-api-beta/revisions/658ffb748f95/schema)
