---
title: "Create Custom Domain"
method: POST
path: "/v2/cloud-gateways/custom-domains"
tags: ["Custom Domains"]
---

# Create Custom Domain

`POST /v2/cloud-gateways/custom-domains`

Registers a custom domain for a control plane. After creation, Konnect provisions a TLS
certificate and configures SNI routing, transitioning the domain through
`initializing → ready`. To complete setup, configure two CNAME records at your DNS
registrar: one pointing your domain to the Konnect gateway hostname, and one pointing
`_acme-challenge.<your-domain>` to the ACME challenge hostname provided by Konnect.
Use the online-status endpoint to verify both records are correctly configured.

## Request body

- CreateCustomDomainRequest — Request schema for creating a custom domain in the global API.
  - `control_plane_id` string, uuid, required — ID of the Konnect control plane. Can be retrieved from the Control Planes API or the Konnect UI.
  - `control_plane_geo` 'us' | 'eu' | 'au' | 'me' | 'in' | 'sg', required — Geographic region of the control plane. Supported values: - `us` — United States - `eu` — Europe - `au` — Australia - `me` — Middle East - `in` — India - `sg` — Singapore
  - `domain` string, required — Domain name of the custom domain.
  - `kind` 'dedicated.v0' | 'serverless.v1' — **Pre-release Feature** This feature is currently in beta and is subject to change. Kind of the custom domain based on Cloud Gateway deployment.

## Response `201`

Response format for creating a custom domain for a control-plane in the global API.

- CustomDomain — Object containing information about a custom domain for a control-plane.
  - `id` string, uuid, required
  - `control_plane_id` string, uuid, required — ID of the Konnect control plane. Can be retrieved from the Control Planes API or the Konnect UI.
  - `control_plane_geo` 'us' | 'eu' | 'au' | 'me' | 'in' | 'sg', required — Geographic region of the control plane. Supported values: - `us` — United States - `eu` — Europe - `au` — Australia - `me` — Middle East - `in` — India - `sg` — Singapore
  - `domain` string, required — Domain name of the custom domain.
  - `certificate_id` string, uuid, nullable — Certificate ID for the certificate representing this domain and stored on data-planes for this control-plane. Can be retrieved via the control-planes API for this custom domain's control-plane.
  - `sni_id` string, uuid, nullable — Server Name Indication ID for this domain and stored on data-planes for this control-plane. Can be retrieved via the control-planes API for this custom domain's control-plane.
  - `state` 'created' | 'initializing' | 'ready' | 'terminating' | 'terminated' | 'error', required — The current state of the custom domain. Possible values: - `created` — The domain has been registered but TLS provisioning has not yet started. - `initializing` — Konnect is provisioning the TLS certificate and configuring SNI routing. - `ready` — The domain is fully provisioned and serving traffic. - `terminating` — The domain is being deleted and its TLS certificate is being removed. - `terminated` — The domain has been fully deleted and is no longer available. - `error` — Provisioning failed; check `state_metadata` for details.
  - `state_metadata` object, required — Metadata describing the backing state of the custom domain and why it may be in an erroneous state.
    - `reported_status` string — Reported status of the custom domain from backing infrastructure.
    - `reason` string — Reason why the custom domain may be in an erroneous state, reported from backing infrastructure.
  - `entity_version` integer, required — Monotonically-increasing version count of the custom domain, to indicate the order of updates to the custom domain.
  - `created_at` string, date-time, required — An RFC-3339 timestamp representation of custom domain creation date.
  - `updated_at` string, date-time, required — An RFC-3339 timestamp representation of custom domain update date.
  - `kind` 'dedicated.v0' | 'serverless.v1' — **Pre-release Feature** This feature is currently in beta and is subject to change. Kind of the custom domain based on Cloud Gateway deployment.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `409` — Conflict

## Changes

- **2026-03-27** `aad4daa45eee` — 2 info
  - added the new optional request property `kind`
  - added the optional property `kind` to the response with the `201` status
- **2025-10-29** `19e869275e28` — 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-09-16** `f03059016622` — 1 warning, 1 info
  - added the new `sg` enum value to the `control_plane_geo` response property for the response status `201`
  - added the new `sg` enum value to the request property `control_plane_geo`
- **2025-08-22** `96118a9cd7f4` — 11 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`
  - …7 more
- …earlier changes not shown

[Full history](https://skmtc.dev/kong/apis/konnect-api/changes/v2/cloud-gateways/custom-domains/post.md)

---

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