Skip to content

Domains

Serve a project on a domain of its own.


How It Works

A project can answer on its own domain as well as its manifestx.ai address. Manifest doesn't register or sell domains.

  1. Add the domain. The answer lists the DNS record to create.
  2. The domain's owner adds that record where the domain's DNS is managed, usually the registrar.
  3. Manifest issues the HTTPS certificate. Check the status until it reads active.

Add a Domain

Attach a hostname to a project and get the DNS records to add.

curl -X POST https://api.manifestx.dev/v1/projects/proj_…/domains \
  -H "Authorization: Bearer $MANIFEST_ACCOUNT_KEY" \
  -H "Idempotency-Key: domain-site_8231-docs" \
  -H "Content-Type: application/json" \
  -d '{ "hostname": "docs.acme.com" }'
Field Type Required Notes
hostname string yes Such as docs.acme.com. No scheme or path.
env string no The environment it serves: production (default) or staging.
validation string no http (default) or txt. See Moving a Live Domain.

A new domain answers 201 Created:

{
  "domain": {
    "hostname": "docs.acme.com",
    "requested": "docs.acme.com",
    "env": "production",
    "validation": "http",
    "status": "pending",
    "certificate_status": "pending_validation"
  },
  "records": [
    { "purpose": "Point the domain to the site", "type": "CNAME", "name": "docs", "value": "cname.manifestx.ai" }
  ],
  "root_redirect": null,
  "request_id": "…"
}

Each item in records is one DNS record to create. Put type in the record type, name in the Name or Host field, and value in the value or target. These are the same records the Manifest connector gives.

Sending the same hostname again updates it in place, for example to switch validation, and answers 200. A project can have up to 25 custom domains, and a hostname can belong to only one project.

Root Domains

A root domain such as acme.com is served at www.acme.com, shown in domain.hostname. Most DNS providers can't point a root domain with a CNAME. root_redirect then describes the forwarding to set up at the registrar, so acme.com goes to https://www.acme.com.

Moving a Live Domain

For a domain already in use elsewhere, send "validation": "txt". records then starts with a TXT record.

  1. Add only the TXT record. The certificate is issued while the old site keeps serving.
  2. Once the status shows the certificate active, add the CNAME. Traffic moves with HTTPS on both sides.

Check the Status

See whether the domain is live, and which records are still needed.

curl https://api.manifestx.dev/v1/projects/proj_…/domains/docs.acme.com \
  -H "Authorization: Bearer $MANIFEST_ACCOUNT_KEY"
{
  "domain": {
    "hostname": "docs.acme.com",
    "env": "production",
    "status": "pending",
    "hostname_status": "pending",
    "certificate_status": "pending_validation",
    "certificate_validation": { "method": "http", "expected_records": [], "errors": [] }
  },
  "records": [
    { "purpose": "Point the domain to the site", "type": "CNAME", "name": "docs", "value": "cname.manifestx.ai" }
  ],
  "request_id": "…"
}
status Meaning
pending Waiting for the DNS record or the certificate. Usually a few minutes after the record is added.
active Verified, with its certificate, and serving the project.
error Validation failed or timed out, or the domain was removed at the provider. Check the records and add the domain again.

Poll about once a minute while status is pending. records repeats what to add, so you can show it again. With txt validation, the TXT record is listed until the certificate is issued.

hostname_status and certificate_status are the underlying states. certificate_validation lists what's still expected until the certificate is active.


Remove a Domain

Detach a domain from the project.

curl -X DELETE https://api.manifestx.dev/v1/projects/proj_…/domains/docs.acme.com \
  -H "Authorization: Bearer $MANIFEST_ACCOUNT_KEY"
{ "removed": "docs.acme.com", "request_id": "…" }

The project stops answering on that domain at once, and the domain is free to add elsewhere. The CNAME can then be deleted at the DNS provider.


Errors

Domain errors, such as hostname_taken and domain_cap_reached, are in Errors, with what to do.