Docs / Custom domains

Custom domains

Point your hostname at aft.page after claim. The first one is free. CNAME to cname.aft.page; your default URL stays.

Add your domain

Your first custom domain is free — no approval. Claim the site → project Domains → add the hostname and CNAME it to cname.aft.page. Need more than one? Request it from the same tab; approved accounts get up to 2 hostnames per site.

DNS

Add the hostname in the Domains tab, then at your DNS host:

CNAME  app.example.com  →  cname.aft.page

A new domain starts in pending. Your default URL keeps working the whole time — private sign-in still uses that hostname for cookies / sessions, so don't remove it.

HTTPS

Certificates issue after DNS is live and aft.page has verified the hostname with aft. Status moves pendingactive on the same Domains tab; a failure moves it to error with a message explaining why. This step depends on DNS propagation, which is outside aft.page's control and can take anywhere from a few minutes to a few hours depending on your registrar.

Apex

Bare example.com needs ALIAS / ANAME / CNAME flattening to cname.aft.page (plain CNAME at apex is not valid DNS). Prefer a subdomain (app. / www.) when unsure — it avoids the flattening step entirely.

API

# list domains on a site
curl https://api.aft.page/v1/sites/{slug}/domains -H "Cookie: …"

# add one
curl -X POST https://api.aft.page/v1/sites/{slug}/domains \
  -H "Content-Type: application/json" -H "Cookie: …" \
  -d '{"hostname":"app.example.com"}'

# re-check status (same as clicking Refresh)
curl -X POST https://api.aft.page/v1/sites/{slug}/domains/app.example.com \
  -H "Cookie: …"

# remove
curl -X DELETE https://api.aft.page/v1/sites/{slug}/domains/app.example.com \
  -H "Cookie: …"

A domain response looks like { "hostname", "status": "pending" | "active" | "error", "sslStatus", "error" }. error is null until something needs your attention.

Troubleshooting

Status stuck on pending — first confirm the CNAME is actually live (dig CNAME app.example.com) and give DNS time to propagate. If it's been live a while, hit Refresh on the Domains tab (or the re-check API call above) to force aft.page to re-check status instead of waiting for the next automatic check.

Seeing "Custom domains are not fully enabled on aft.page yet"? That's a message from our side, not a problem with your DNS — your CNAME is correct, but aft.page custom domains setup isn't finished issuing certificates yet. Nothing to fix on your end; the domain will move to active once that's turned on.

Hostname already taken — a hostname can only be attached to one site at a time; remove it from the other site first (or it's a typo for a domain you don't control).

Next: Capabilities — declare what a Worker or Next app needs before it deploys.