---
title: "Create Guide Domain"
method: POST
path: "/api/v1/content/domains"
tags: ["Content Management"]
---

# Create Guide Domain

`POST /api/v1/content/domains`

Claim a domain and assign what it serves — atomically.

One transaction. The previous flow created a group with no host, then
updated it, then set membership: three mutations where the second or third
could fail after the first succeeded, leaving a hostless group that no
domain-keyed surface can render.

## Request body

- DomainCreate — Create a domain and assign what it serves, in one call.
  - `address` string, required
  - `property_ids` string[], required
  - `group_name` string, nullable

## Response `201`

Successful Response

- DomainRow — One domain, everything the Domains surface needs, in one read.
  - `id` string, uuid, required
  - `hostname` string, required
  - `kind` 'CNAME_SINGLE' | 'CNAME_GROUP' | 'WORKER', required — How a hostname reaches us, and therefore what it can serve. Named for the SHAPE of the address, not the vendor mechanism — the operator never sees "CNAME" or "Worker", and the two questions that determine this (own host or folder? one guide or several?) are the ones the UI asks.
  - `path_prefix` string, nullable, required
  - `address` string, required
  - `guides` DomainGuideRef[], required
    - `property_id` string, uuid, required
    - `name` string, required
    - `guide_slug` string, nullable, required
    - `url` string, required
  - `state` 'needs_verification' | 'needs_dns' | 'pointing_elsewhere' | 'securing' | 'ready' | 'live' | 'action_needed' | 'check_unavailable', required
  - `message` string, required
  - `action` string, nullable
  - `expected_record` string, nullable
  - `observed_target` string, nullable
  - `tls_status` string, nullable
  - `ownership_record` string, nullable
  - `ownership_token` string, nullable
  - `verified` boolean

## Other responses

- `404` — Guide not found
- `409` — That domain is already in use
- `422` — Invalid address, or no guide selected
- `503` — Our CNAME target is not live, so a domain of its own cannot be set up yet

---

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