Skip to main content
Custom domains allow you to host your Featul feedback portal on your own domain (e.g., feedback.acme.com) instead of the default subdomain (acme.featul.com).
Custom domains are available on Starter and Professional plans.

Domain Setup Process

1

Enable custom domain

First, enable the custom domain feature for your workspace:
await client.workspace.updateCustomDomain.$post({
  slug: 'acme',
  enabled: true,
  customDomain: 'feedback.acme.com'
})
If you don’t specify a domain, Featul will suggest feedback.yourdomain.com based on your workspace domain.
2

Create domain configuration

Generate DNS records for verification:
const result = await client.workspace.createDomain.$post({
  slug: 'acme',
  domain: 'https://feedback.acme.com'
})
This returns the required DNS records:
{
  "ok": true,
  "host": "feedback.acme.com",
  "records": {
    "cname": {
      "name": "feedback",
      "value": "origin.featul.com"
    },
    "txt": {
      "name": "_acme-challenge.feedback.acme.com",
      "value": "unique-verification-token"
    }
  }
}
3

Configure DNS records

Add both records to your DNS provider:CNAME Record
  • Type: CNAME
  • Name: feedback (or your chosen subdomain)
  • Value: origin.featul.com
  • TTL: 3600 (or automatic)
TXT Record (for verification)
  • Type: TXT
  • Name: _acme-challenge.feedback.acme.com
  • Value: The verification token provided
  • TTL: 3600 (or automatic)
4

Verify DNS records

After adding the DNS records, verify them:
const verification = await client.workspace.verifyDomain.$post({
  slug: 'acme',
  checkDns: true
})
The response indicates verification status:
{
  "ok": true,
  "cnameValid": true,
  "txtValid": true,
  "status": "verified"
}

DNS Record Requirements

CNAME Record

The CNAME record routes traffic from your custom domain to Featul’s infrastructure:
  • Subdomain: The label before your base domain (e.g., feedback)
  • Target: origin.featul.com (default, configurable via CUSTOM_DOMAIN_CNAME_TARGET env var)
  • Purpose: Routes requests to Featul servers

TXT Record

The TXT record verifies domain ownership:
  • Name: _acme-challenge.{your-custom-domain}
  • Value: Unique verification token (cryptographically random UUID)
  • Purpose: Proves you control the domain
DNS propagation can take 5-60 minutes. If verification fails, wait and try again.

Domain Status States

Your custom domain can have three status states:
  • pending: DNS records not yet verified
  • verified: Both CNAME and TXT records validated successfully
  • error: Verification failed (check DNS records)

Checking Domain Information

Retrieve current domain configuration:
const info = await client.workspace.domainInfo.$get({
  slug: 'acme'
})
Response includes:
{
  "domain": {
    "id": "clx...",
    "host": "feedback.acme.com",
    "cnameName": "feedback",
    "cnameTarget": "origin.featul.com",
    "txtName": "_acme-challenge.feedback.acme.com",
    "txtValue": "verification-token",
    "status": "verified"
  },
  "plan": "starter",
  "defaultDomain": "https://acme.com"
}

Removing a Custom Domain

1

Delete domain configuration

Remove the custom domain from your workspace:
await client.workspace.deleteDomain.$post({
  slug: 'acme'
})
2

Automatic cleanup

Featul automatically:
  • Removes the domain from Vercel project configuration
  • Clears the customDomain field in workspace settings
  • Deletes DNS verification records from the database
3

Update DNS (optional)

You can remove the DNS records from your provider, though they won’t affect your site if removed from Featul.

Domain Limitations

Each workspace can only have one custom domain configured at a time. Delete the existing domain before adding a new one.

Top-Level Domain Validation

Featul validates that your domain has a resolvable top-level domain (TLD) before accepting it. Invalid or non-existent TLDs are rejected.

Unique Domain Constraint

The workspaceDomain.host field has a unique constraint - each domain can only be used by one workspace.

Troubleshooting

Verification Fails

  1. Check DNS propagation: Use tools like dig or nslookup to verify records:
    dig feedback.acme.com CNAME
    dig _acme-challenge.feedback.acme.com TXT
    
  2. Verify record values: Ensure CNAME points to origin.featul.com exactly
  3. Wait for propagation: DNS changes can take up to 48 hours in rare cases
  4. Check TTL settings: Lower TTL values (300-3600) allow faster updates

Domain Already in Use

If you receive a conflict error, the domain may be:
  • Already configured for another workspace
  • Partially configured from a previous attempt
Contact support to release the domain.

SSL/TLS Certificates

Featul automatically provisions SSL/TLS certificates for verified custom domains through Vercel’s infrastructure. HTTPS is enforced for all custom domains.
After verification succeeds, allow 10-15 minutes for SSL certificate provisioning.

Permissions Required

Custom domain operations require:
  • Workspace owner role, OR
  • Admin role with canManageWorkspace permission
  • Starter or Professional plan subscription

Build docs developers (and LLMs) love