Client portal
Custom domain setup
How the portal subdomain, domain verification, and SSL flow work in the app.
The client portal supports both a branded subdomain and custom domains.
Routes involved
GET /api/client-portal/config?companyId=...GET /api/tenants/domains?companyId=...POST /api/tenants/domainsDELETE /api/tenants/domainsPOST /api/tenants/domains/verifyGET /api/tenants/subdomainPOST /api/tenants/subdomain/check
What the docs should say
- The company settings page owns the branding and tenant domain records.
- The client portal page reads the active portal config and the current domain list.
- Verification should happen after DNS changes propagate.
Practical setup
- Pick the branded host you want customers to see.
- Create the DNS record the app expects.
- Wait for propagation.
- Verify the domain in the app.
- Confirm the portal opens over HTTPS on the final host.
Troubleshooting
- If verification fails, confirm the DNS record target matches what the platform expects.
- If the domain resolves but HTTPS fails, wait for certificate issuance to finish.
- If the portal redirects to the wrong host, check the canonical host and tenant config together.
Document the rollback path as well. Domain changes are high-risk and support needs a clear undo path.