---
title: "Add a custom domain"
method: POST
path: "/domains"
tags: ["Domains"]
---

# Add a custom domain

`POST /domains`

## Request

- Base URL: `https://api.cavuno.com/v1`
- URL: `https://api.cavuno.com/v1/domains`
- Auth: HTTP bearer

Registers a custom domain and returns the DNS verification token and instructions.

## Request body

- CreateDomainBody
  - `domain` string, required: Hostname to bind to this board, for example jobs.acme.com. Labels may contain letters, numbers, and hyphens, and may not start or end with a hyphen. The API normalizes accepted hostnames to lowercase before writing.
  - `source` 'external'

## Response `201`

Successful response.

- Domain
  - `id` string, required
  - `object` 'domain', required
  - `domain` string, required
  - `status` string, required
  - `source` string, required
  - `mode` 'direct' | 'edge', required
  - `connectionShape` 'cname' | 'apexRedirect', nullable, required
  - `servedBy` 'external', nullable, required
  - `statusReason` string, nullable, required
  - `verificationToken` string, nullable, required
  - `verificationInstructions` DomainVerificationInstructions, required
    - `method` 'txt', required
    - `name` string, required
    - `expectedValue` string, nullable, required
  - `verifiedAt` string, nullable, required
  - `isPrimary` boolean, required
  - `createdAt` string, nullable, required

## Other responses

- `400`: The hostname is invalid.
- `409`: The hostname is already registered.

## Changes

- **2026-10-19** `c34152c38176`: 2 info
  - added the optional property `error/upgrade` to the response with the `400` status
  - added the optional property `error/upgrade` to the response with the `409` status

[Operation history](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/changes/domains/post.md)

---

[API](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api.md) · [All operations](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/revisions/d5974dabff14?raw)
