Platform subdomain
Each website gets one hostname of the form<website-slug>.cactal.app at creation. A prompt-created website starts with a temporary address; its first automatic naming step aligns the hostname with the generated website slug. Cactal uses the readable slug when it is globally available and adds a short random suffix, such as <website-slug>-k7m4p2.cactal.app, when needed for uniqueness. After that initial step, the assigned hostname stays stable if the website name or slug is renamed. It is active immediately, requires no DNS work, and serves the published version once you publish.
GET /v1/websites/{websiteId}/domains lists all of a website’s domains, platform subdomain included.
Choosing a different address
POST /v1/websites/{websiteId}/domains/platform/rename moves the website to a label you pick:
.cactal.app: 1 to 40 characters, lowercase letters, digits, and inner hyphens. A handful of labels are reserved by Cactal. If another website already holds the label, the request fails with 409, so pick another and retry.
The response carries previousHostname alongside the new record, so you can tell exactly what was released. Custom domains are untouched by a rename, and a primary custom domain stays the site’s canonical address.
Preview hosts
Prefixes on the platform label address other versions of the site:
The draft host is excluded from search: every response carries
X-Robots-Tag: noindex, nofollow, and its robots.txt disallows all crawling. Draft URLs are shareable with anyone, but they are not access-controlled — treat draft content as public. See Preview drafts and versions.
Custom domains
A custom domain connects your own hostname —www.acme.com or the apex acme.com — to a website. Domains can only be attached while custom domains are enabled for the website, an owner-only dashboard setting (Site settings, Domains). Enabling is the billing moment: it adds the site to the plan, and the owner confirms the charge in the enable dialog first. After that, adding or removing domains never changes billing, and additional domains on the same website cost nothing extra. Attempts to add a domain while enablement is off return 403 with blocked_reason: custom_domains_disabled. The lifecycle is create, set DNS, verify, go active.
1
Create the domain
pending_dns, including the exact dnsRecords to create.2
Create the DNS records
Each entry in
dnsRecords has a type, name, value, and purpose. There are always two purposes:3
Verify
POST /v1/websites/{websiteId}/domains/{domainId}/verify re-checks immediately and returns the updated domain. Cactal also re-checks automatically: every 60 seconds for the first 2 hours, every 5 minutes until 24 hours, then every 15 minutes.4
Active
Once DNS resolves and the edge finishes SSL issuance, the status becomes
active and the domain serves the published site over HTTPS. Certificates are provisioned and renewed by the platform — you never handle them.An unverified domain expires: if it has not reached
active within 7 days of creation, the claim is removed and you must add the domain again. Claims are also exclusive — a hostname already claimed by any website returns 409 This custom domain is already claimed.Domain statuses
Primary domain
Oneactive custom domain can be primary — the canonical hostname. The first custom domain to activate is promoted automatically; change it with POST /v1/websites/{websiteId}/domains/{domainId}/primary. Setting a non-active domain primary returns 409 Only active custom domains can be primary.
While a primary exists, every other hostname for the website — the platform subdomain and any non-primary custom domains — answers with an HTTP 308 redirect to the primary, preserving path and query. Removing the primary promotes the oldest remaining active custom domain, if any.
DELETE /v1/websites/{websiteId}/domains/{domainId} removes a custom domain. Removing a domain, even the final one, never changes the website’s charge; only disabling custom domains does, which disconnects every domain and credits unused time on the next invoice. Keep your DNS records in place until the removal completes, then delete them at your DNS provider.
Moving a website to the trash disables custom domains automatically, so its charge stops and each hostname becomes claimable by another website. Restoring the website returns it with custom domains disabled: an owner re-enables them, then you add and verify domains again, with the new DNS records the fresh claim returns. The platform subdomain is never removed. See Websites.
Constraints
Next steps
Connect a custom domain
Registrar-level DNS walkthrough with troubleshooting.
Publishing
Publish the website your domains point at.