Skip to main content
Every published website serves from an automatic platform subdomain for free. A site counts toward your plan when an organization owner enables custom domains for it; sites on Cactal domains are unlimited and free. A website with custom domains enabled counts once toward your plan and can hold up to 10 of them, with platform-managed SSL.

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:
The label is the part before .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 old hostname is released the moment the rename succeeds. There is no redirect and no grace period: links to <old-label>.cactal.app stop working, the draft and version preview hosts move with it, and another website can claim the label. Connect a custom domain before sharing a site widely if you want an address you control.
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

The response is the domain in status 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:
Copy the ownership record exactly. The routing record is the direct setup, but you may instead proxy the hostname through a CDN or reverse proxy that forwards requests to the Cactal edge. Verification confirms that HTTPS traffic reaches the matching Cactal domain, so a proxied DNS answer does not block activation.
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

One active 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.