---
title: "Create custom domain"
method: POST
path: "/api/v1/projects/{project_id}/domains/custom"
tags: ["Projects", "Domains"]
---

# Create custom domain

`POST /api/v1/projects/{project_id}/domains/custom`

Create a new custom domain for a project (Enterprise only).

## Path parameters

- `project_id` string, uuid, required — The unique identifier of the project

## Request body

- CreateCustomDomainRequest — Request to create a new custom domain for a project. Attributes: hostname: The custom hostname to register (e.g., app.example.com).
  - `hostname` string, required

## Response `201`

Successful Response

- CustomDomainCard — Response card representing a custom domain. Attributes: custom_domain_id: Unique identifier for this custom domain. project_id: The project this domain is linked to. organization_id: The organization that owns the project. hostname: The custom hostname (e.g., app.example.com). status: Current status of the custom domain. is_active: Whether this domain is active and serving traffic. ownership_verification: TXT record details for domain ownership verification. ssl_verification: SSL certificate verification details. verification_errors: List of verification error messages, if any. created_at: When this domain was created. updated_at: When this domain was last updated.
  - `custom_domain_id` string, uuid, required
  - `project_id` string, uuid, required — The unique identifier of the project
  - `organization_id` string, required — The ID of an organization in Rebolt.
  - `cloudflare_custom_hostname_id` string, nullable, required
  - `hostname` string, required
  - `status` 'provisioning' | 'pending' | 'pending_validation' | 'pending_issuance' | 'pending_deployment' | 'active' | 'pending_deletion' | 'moved' | 'deleted' | 'blocked', required — Status of a custom domain. PROVISIONING is an internal status indicating the domain slot is reserved but Cloudflare registration is in progress. All other statuses map to Cloudflare's custom hostname status values.
  - `is_active` boolean, required
  - `ownership_verification` DomainOwnershipVerification, required — TXT record verification details for domain ownership. This contains the information needed for the customer to prove they own the domain by adding a TXT record.
    - `txt_name` string, required
    - `txt_value` string, required
  - `ssl_verification` DomainSSLVerification, required — SSL certificate verification details. Contains information for DCV (Domain Control Validation) to issue an SSL certificate for the custom domain.
    - `http_url` string, nullable
    - `http_body` string, nullable
    - `txt_name` string, nullable
    - `txt_value` string, nullable
  - `verification_errors` string[], nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/rebolt/apis/fastapi.md) · [All operations](https://skmtc.dev/rebolt/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/rebolt/fastapi/revisions/ee5884f323f3/schema)
